diff --git a/config.xml b/config.xml index e368c04..9d0247a 100644 --- a/config.xml +++ b/config.xml @@ -1,6 +1,6 @@ - - WordRotator + + WordRotator - Test A word-game @@ -21,6 +21,7 @@ + diff --git a/package.json b/package.json index 5d4bc43..011fc40 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "run browser": "cordova run browser", "prepare browser": "cordova prepare browser", "run android": "cordova run android --device", - "release android": "cordova build android --release", + "release android": "cordova build android --release --packageType=bundle", "appium": "appium", "appium-doctor": "appium-doctor", "test browser": "wdio tests/wdio.config.browser.js", @@ -107,4 +107,4 @@ "android >= 4.4", "ios >= 7" ] -} \ No newline at end of file +} diff --git a/src/client/html/sites/level.html b/src/client/html/sites/level.html index 68c0aea..afa23cb 100644 --- a/src/client/html/sites/level.html +++ b/src/client/html/sites/level.html @@ -30,7 +30,7 @@ -
+
@@ -51,4 +51,4 @@
-
\ No newline at end of file +
diff --git a/src/client/index.html b/src/client/index.html index 3134a46..9d06d78 100644 --- a/src/client/index.html +++ b/src/client/index.html @@ -12,7 +12,7 @@ content="default-src 'self' data: gap: cdvfile: * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' * data: cdvfile: content:; - script-src 'self' data: 'unsafe-eval'" ;> + script-src 'self' data: 'unsafe-eval'"> diff --git a/src/client/js/Sites/LevelSite.ts b/src/client/js/Sites/LevelSite.ts index c81058a..2ed42b1 100644 --- a/src/client/js/Sites/LevelSite.ts +++ b/src/client/js/Sites/LevelSite.ts @@ -133,7 +133,7 @@ export class LevelSite extends MenuSite { let scaleHelper = new ScaleHelper(); this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2); - this.wonTextScaler = await scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5); + this.wonTextScaler = await scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5); this.wonText = wonText; this.wonText.style.fontSize = "0"; @@ -216,6 +216,8 @@ export class LevelSite extends MenuSite { this.showLoadingSymbol(); try { let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES); + // let levelData = await LevelData.findById(34); + // this.level = null; if (Helper.isNull(levelData)) { this.startEndSite(); @@ -375,6 +377,10 @@ export class LevelSite extends MenuSite { this.continueButtonScaler(); this.levelScaler(); + // Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => { + // this.levelScaler(); + // }); + Matomo.push(["trackEvent", "LevelSite", "LevelWon", "Coins", parseInt(Helper.nonNull(await NativeStoragePromise.getItem("coins"), "0"))]); let leafs = level.getLeafSegments(); diff --git a/src/client/sass/_animations.scss b/src/client/sass/_animations.scss index 63ba424..bc29d86 100644 --- a/src/client/sass/_animations.scss +++ b/src/client/sass/_animations.scss @@ -12,10 +12,13 @@ } .jump-animation { - animation-name: jump-animation; - animation-duration: 0.4s; - animation-fill-mode: none; - animation-timing-function: linear; + //> .leaf-element { + animation-name: jump-animation; + animation-duration: 0.4s; + animation-fill-mode: none; + animation-timing-function: linear; + animation-delay: inherit; + //} } $deg: 10deg; @@ -42,4 +45,4 @@ $deg: 10deg; /* When the animation is finished, start again */ animation-iteration-count: infinite; -} \ No newline at end of file +} diff --git a/src/client/sass/_themeBlue.scss b/src/client/sass/_themeBlue.scss index f9356e2..022b927 100644 --- a/src/client/sass/_themeBlue.scss +++ b/src/client/sass/_themeBlue.scss @@ -13,6 +13,9 @@ $accentColor: #d3e7eb; $textColor: white; $svgColor: black; +$secondaryBackgroundColor: rgba(66, 112, 129, 1); +$secondaryBackgroundColor: rgba(66, 112, 129, 0.95); + // Blau Invers //$primaryColor: #4d575a; //$secondaryColor: #427081; @@ -49,7 +52,16 @@ $svgColor: black; //$svgColor: white; body.theme-blue{ - background: $primaryColor; + background: repeating-linear-gradient( + 300deg, + $primaryColor, + $primaryColor 9%, + $secondaryBackgroundColor 13.5%, + $secondaryBackgroundColor 21.5%, + $primaryColor 26%, + ); + + //background: $primaryColor; color: $textColor; label{ diff --git a/src/client/sass/wordRotator.scss b/src/client/sass/wordRotator.scss index 7ed930c..0019318 100644 --- a/src/client/sass/wordRotator.scss +++ b/src/client/sass/wordRotator.scss @@ -401,6 +401,28 @@ $coinTowerDimension: 28px; text-shadow: $text-shadow; } + + .segment:not(.segment-row):not(.segment-triangle):not(.rotating) { + @for $i from 1 through length($rotationDegrees) { + &.rotate-#{nth($rotationDegrees, $i)} { + //transform: rotate(#{nth($rotationDegrees, $i)}deg); + transform: none; + > .child-container { + > .segment { + //transform: rotate(#{360- nth($rotationDegrees, $i)}deg); + transform: none; + + @for $j from 1 through length($rotationDegrees) { + &.rotate-#{nth($rotationDegrees, $j)} { + transform: none; + } + } + } + } + } + } + } + } .text-right { diff --git a/src/server/public/bundle.js b/src/server/public/bundle.js index c28426f..3eab38d 100644 --- a/src/server/public/bundle.js +++ b/src/server/public/bundle.js @@ -81,7 +81,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 288); +/******/ return __webpack_require__(__webpack_require__.s = 289); /******/ }) /************************************************************************/ /******/ ([ @@ -550,7 +550,7 @@ var global = __webpack_require__(11); var core = __webpack_require__(26); var hide = __webpack_require__(52); var redefine = __webpack_require__(45); -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var PROTOTYPE = 'prototype'; var $export = function (type, name, source) { @@ -629,35 +629,35 @@ __exportStar(__webpack_require__(79), exports); __exportStar(__webpack_require__(146), exports); -__exportStar(__webpack_require__(496), exports); +__exportStar(__webpack_require__(497), exports); __exportStar(__webpack_require__(111), exports); -__exportStar(__webpack_require__(498), exports); +__exportStar(__webpack_require__(499), exports); __exportStar(__webpack_require__(258), exports); -__exportStar(__webpack_require__(499), exports); +__exportStar(__webpack_require__(500), exports); -__exportStar(__webpack_require__(501), exports); +__exportStar(__webpack_require__(502), exports); -__exportStar(__webpack_require__(503), exports); - -__exportStar(__webpack_require__(505), exports); - -__exportStar(__webpack_require__(200), exports); +__exportStar(__webpack_require__(504), exports); __exportStar(__webpack_require__(506), exports); +__exportStar(__webpack_require__(199), exports); + +__exportStar(__webpack_require__(507), exports); + __exportStar(__webpack_require__(80), exports); -__exportStar(__webpack_require__(98), exports); +__exportStar(__webpack_require__(99), exports); -__exportStar(__webpack_require__(508), exports); +__exportStar(__webpack_require__(509), exports); -__exportStar(__webpack_require__(160), exports); +__exportStar(__webpack_require__(161), exports); -__exportStar(__webpack_require__(201), exports); +__exportStar(__webpack_require__(200), exports); __exportStar(__webpack_require__(260), exports); @@ -671,61 +671,63 @@ __exportStar(__webpack_require__(252), exports); __exportStar(__webpack_require__(263), exports); -__exportStar(__webpack_require__(511), exports); +__exportStar(__webpack_require__(512), exports); -__exportStar(__webpack_require__(199), exports); +__exportStar(__webpack_require__(198), exports); __exportStar(__webpack_require__(254), exports); -__exportStar(__webpack_require__(68), exports); - -__exportStar(__webpack_require__(513), exports); +__exportStar(__webpack_require__(59), exports); __exportStar(__webpack_require__(514), exports); __exportStar(__webpack_require__(515), exports); +__exportStar(__webpack_require__(516), exports); + __exportStar(__webpack_require__(84), exports); __exportStar(__webpack_require__(265), exports); -__exportStar(__webpack_require__(516), exports); - -__exportStar(__webpack_require__(161), exports); - -__exportStar(__webpack_require__(255), exports); - -__exportStar(__webpack_require__(198), exports); - -__exportStar(__webpack_require__(15), exports); - -__exportStar(__webpack_require__(55), exports); - __exportStar(__webpack_require__(517), exports); -__exportStar(__webpack_require__(42), exports); - __exportStar(__webpack_require__(518), exports); __exportStar(__webpack_require__(266), exports); -__exportStar(__webpack_require__(208), exports); +__exportStar(__webpack_require__(255), exports); -__exportStar(__webpack_require__(257), exports); +__exportStar(__webpack_require__(197), exports); + +__exportStar(__webpack_require__(15), exports); + +__exportStar(__webpack_require__(56), exports); + +__exportStar(__webpack_require__(520), exports); + +__exportStar(__webpack_require__(42), exports); + +__exportStar(__webpack_require__(521), exports); __exportStar(__webpack_require__(267), exports); -__exportStar(__webpack_require__(17), exports); +__exportStar(__webpack_require__(207), exports); -__exportStar(__webpack_require__(101), exports); +__exportStar(__webpack_require__(257), exports); + +__exportStar(__webpack_require__(268), exports); + +__exportStar(__webpack_require__(18), exports); + +__exportStar(__webpack_require__(85), exports); __exportStar(__webpack_require__(259), exports); -__exportStar(__webpack_require__(32), exports); +__exportStar(__webpack_require__(30), exports); -__exportStar(__webpack_require__(58), exports); +__exportStar(__webpack_require__(54), exports); -__exportStar(__webpack_require__(268), exports); +__exportStar(__webpack_require__(269), exports); /***/ }), /* 5 */ @@ -737,9 +739,9 @@ __exportStar(__webpack_require__(268), exports); /* harmony import */ var _TableIndex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(38); /* harmony import */ var _TableForeignKey__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(48); /* harmony import */ var _util_TableUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(121); -/* harmony import */ var _TableUnique__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30); +/* harmony import */ var _TableUnique__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(31); /* harmony import */ var _TableCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43); -/* harmony import */ var _TableExclusion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(59); +/* harmony import */ var _TableExclusion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60); @@ -1264,7 +1266,7 @@ var OrmUtils = /** @class */ (function () { //# sourceMappingURL=OrmUtils.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), /* 7 */ @@ -1862,11 +1864,11 @@ var Writable = /** @class */ (function () { }()); if (typeof window !== "undefined") { - window.Buffer = __webpack_require__(97).Buffer; + window.Buffer = __webpack_require__(98).Buffer; } // NativeScript uses global, not window if (typeof global !== "undefined") { - global.Buffer = __webpack_require__(97).Buffer; + global.Buffer = __webpack_require__(98).Buffer; } //# sourceMappingURL=BrowserPlatformTools.js.map @@ -1973,7 +1975,7 @@ exports.Helper = void 0; * Eine Klasse mit häufig genutzten, nützlichen Funktionen */ -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var Helper = /*#__PURE__*/function () { function Helper() { @@ -2461,7 +2463,7 @@ __webpack_require__.d(__webpack_exports__, "a", function() { return /* binding * var tslib_es6 = __webpack_require__(0); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/DateUtils.js -var DateUtils = __webpack_require__(21); +var DateUtils = __webpack_require__(22); // EXTERNAL MODULE: ./node_modules/typeorm/browser/platform/BrowserDisabledDriversDummy.js var BrowserDisabledDriversDummy = __webpack_require__(1); @@ -2482,16 +2484,16 @@ var TableIndex = __webpack_require__(38); var TableUtils = __webpack_require__(121); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableUnique.js -var TableUnique = __webpack_require__(30); +var TableUnique = __webpack_require__(31); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableCheck.js var TableCheck = __webpack_require__(43); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js -var TableExclusion = __webpack_require__(59); +var TableExclusion = __webpack_require__(60); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/view/View.js -var View = __webpack_require__(56); +var View = __webpack_require__(57); // CONCATENATED MODULE: ./node_modules/typeorm/browser/schema-builder/RdbmsSchemaBuilder.js @@ -4235,7 +4237,7 @@ function foreignKeysMatch(tableForeignKey, metadataForeignKey) { var OrmUtils = __webpack_require__(6); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/ApplyValueTransformers.js -var ApplyValueTransformers = __webpack_require__(60); +var ApplyValueTransformers = __webpack_require__(61); // CONCATENATED MODULE: ./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js @@ -4780,6 +4782,34 @@ var AbstractSqliteDriver_AbstractSqliteDriver = /** @class */ (function () { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(__webpack_require__(476), exports); +__exportStar(__webpack_require__(477), exports); +__exportStar(__webpack_require__(7), exports); +__exportStar(__webpack_require__(192), exports); +__exportStar(__webpack_require__(478), exports); +__exportStar(__webpack_require__(489), exports); +__exportStar(__webpack_require__(490), exports); +__exportStar(__webpack_require__(491), exports); +__exportStar(__webpack_require__(251), exports); +//# sourceMappingURL=shared.js.map + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } @@ -4826,13 +4856,13 @@ Object.defineProperty(exports, "__esModule", { }); exports.SoundManager = void 0; -var AudioChain_1 = __webpack_require__(267); +var AudioChain_1 = __webpack_require__(268); var Helper_1 = __webpack_require__(7); var App_1 = __webpack_require__(33); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var SoundManager = /*#__PURE__*/function () { function SoundManager() { @@ -5108,11 +5138,11 @@ App_1.App.addInitialization(function (app) {// PauseSite.onPauseListeners.push(( // }); /***/ }), -/* 18 */ +/* 19 */ /***/ (function(module, exports, __webpack_require__) { var store = __webpack_require__(134)('wks'); -var uid = __webpack_require__(87); +var uid = __webpack_require__(88); var Symbol = __webpack_require__(11).Symbol; var USE_SYMBOL = typeof Symbol == 'function'; @@ -5125,7 +5155,7 @@ $exports.store = store; /***/ }), -/* 19 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5141,14 +5171,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); -__export(__webpack_require__(147)); +__export(__webpack_require__(148)); -__export(__webpack_require__(209)); +__export(__webpack_require__(208)); -__export(__webpack_require__(19)); +__export(__webpack_require__(20)); /***/ }), -/* 20 */ +/* 21 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -5340,7 +5370,7 @@ var DriverUtils = /** @class */ (function () { /***/ }), -/* 21 */ +/* 22 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -5539,40 +5569,12 @@ var DateUtils = /** @class */ (function () { //# sourceMappingURL=DateUtils.js.map -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(__webpack_require__(475), exports); -__exportStar(__webpack_require__(476), exports); -__exportStar(__webpack_require__(7), exports); -__exportStar(__webpack_require__(192), exports); -__exportStar(__webpack_require__(477), exports); -__exportStar(__webpack_require__(488), exports); -__exportStar(__webpack_require__(489), exports); -__exportStar(__webpack_require__(490), exports); -__exportStar(__webpack_require__(251), exports); -//# sourceMappingURL=shared.js.map - /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.15 ToLength -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var min = Math.min; module.exports = function (it) { return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 @@ -5853,556 +5855,6 @@ exports.f = __webpack_require__(28) ? Object.defineProperty : function definePro /***/ }), /* 30 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableUnique; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); - -/** - * Database's table unique constraint stored in this class. - */ -var TableUnique = /** @class */ (function () { - // ------------------------------------------------------------------------- - // Constructor - // ------------------------------------------------------------------------- - function TableUnique(options) { - /** - * Columns that contains this constraint. - */ - this.columnNames = []; - this.name = options.name; - this.columnNames = options.columnNames; - } - // ------------------------------------------------------------------------- - // Public Methods - // ------------------------------------------------------------------------- - /** - * Creates a new copy of this constraint with exactly same properties. - */ - TableUnique.prototype.clone = function () { - return new TableUnique({ - name: this.name, - columnNames: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.columnNames)) - }); - }; - // ------------------------------------------------------------------------- - // Static Methods - // ------------------------------------------------------------------------- - /** - * Creates unique from the unique metadata object. - */ - TableUnique.create = function (uniqueMetadata) { - return new TableUnique({ - name: uniqueMetadata.name, - columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; }) - }); - }; - return TableUnique; -}()); - - -//# sourceMappingURL=TableUnique.js.map - - -/***/ }), -/* 31 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ColumnMetadata; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); -/* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); -/* harmony import */ var _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1); -/* harmony import */ var _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); -/* harmony import */ var _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(60); - - - - - -/** - * This metadata contains all information about entity's column. - */ -var ColumnMetadata = /** @class */ (function () { - // --------------------------------------------------------------------- - // Constructor - // --------------------------------------------------------------------- - function ColumnMetadata(options) { - /** - * Type's length in the database. - */ - this.length = ""; - /** - * Indicates if this column is a primary key. - */ - this.isPrimary = false; - /** - * Indicates if this column is generated (auto increment or generated other way). - */ - this.isGenerated = false; - /** - * Indicates if column can contain nulls or not. - */ - this.isNullable = false; - /** - * Indicates if column is selected by query builder or not. - */ - this.isSelect = true; - /** - * Indicates if column is inserted by default or not. - */ - this.isInsert = true; - /** - * Indicates if column allows updates or not. - */ - this.isUpdate = true; - /** - * Puts ZEROFILL attribute on to numeric column. Works only for MySQL. - * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column - */ - this.zerofill = false; - /** - * Puts UNSIGNED attribute on to numeric column. Works only for MySQL. - */ - this.unsigned = false; - /** - * Indicates if this column is an array. - */ - this.isArray = false; - /** - * Indicates if column is virtual. Virtual columns are not mapped to the entity. - */ - this.isVirtual = false; - /** - * Indicates if column is discriminator. Discriminator columns are not mapped to the entity. - */ - this.isDiscriminator = false; - /** - * Indicates if column is tree-level column. Tree-level columns are used in closure entities. - */ - this.isTreeLevel = false; - /** - * Indicates if this column contains an entity creation date. - */ - this.isCreateDate = false; - /** - * Indicates if this column contains an entity update date. - */ - this.isUpdateDate = false; - /** - * Indicates if this column contains an entity delete date. - */ - this.isDeleteDate = false; - /** - * Indicates if this column contains an entity version. - */ - this.isVersion = false; - /** - * Indicates if this column contains an object id. - */ - this.isObjectId = false; - /** - * Indicates if this column is nested set's left column. - * Used only in tree entities with nested-set type. - */ - this.isNestedSetLeft = false; - /** - * Indicates if this column is nested set's right column. - * Used only in tree entities with nested-set type. - */ - this.isNestedSetRight = false; - /** - * Indicates if this column is materialized path's path column. - * Used only in tree entities with materialized path type. - */ - this.isMaterializedPath = false; - this.entityMetadata = options.entityMetadata; - this.embeddedMetadata = options.embeddedMetadata; - this.referencedColumn = options.referencedColumn; - if (options.args.target) - this.target = options.args.target; - if (options.args.propertyName) - this.propertyName = options.args.propertyName; - if (options.args.options.name) - this.givenDatabaseName = options.args.options.name; - if (options.args.options.type) - this.type = options.args.options.type; - if (options.args.options.length) - this.length = options.args.options.length ? options.args.options.length.toString() : ""; - if (options.args.options.width) - this.width = options.args.options.width; - if (options.args.options.charset) - this.charset = options.args.options.charset; - if (options.args.options.collation) - this.collation = options.args.options.collation; - if (options.args.options.primary) - this.isPrimary = options.args.options.primary; - if (options.args.options.default === null) // to make sure default: null is the same as nullable: true - this.isNullable = true; - if (options.args.options.nullable !== undefined) - this.isNullable = options.args.options.nullable; - if (options.args.options.select !== undefined) - this.isSelect = options.args.options.select; - if (options.args.options.insert !== undefined) - this.isInsert = options.args.options.insert; - if (options.args.options.update !== undefined) - this.isUpdate = options.args.options.update; - if (options.args.options.readonly !== undefined) - this.isUpdate = !options.args.options.readonly; - if (options.args.options.comment) - this.comment = options.args.options.comment; - if (options.args.options.default !== undefined) - this.default = options.args.options.default; - if (options.args.options.onUpdate) - this.onUpdate = options.args.options.onUpdate; - if (options.args.options.scale !== null && options.args.options.scale !== undefined) - this.scale = options.args.options.scale; - if (options.args.options.zerofill) { - this.zerofill = options.args.options.zerofill; - this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column - } - if (options.args.options.unsigned) - this.unsigned = options.args.options.unsigned; - if (options.args.options.precision !== undefined) - this.precision = options.args.options.precision; - if (options.args.options.enum) { - if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) { - this.enum = Object.keys(options.args.options.enum) - .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them - .map(function (key) { return options.args.options.enum[key]; }); - } - else { - this.enum = options.args.options.enum; - } - } - if (options.args.options.enumName) { - this.enumName = options.args.options.enumName; - } - if (options.args.options.asExpression) { - this.asExpression = options.args.options.asExpression; - this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : "VIRTUAL"; - } - if (options.args.options.hstoreType) - this.hstoreType = options.args.options.hstoreType; - if (options.args.options.array) - this.isArray = options.args.options.array; - if (options.args.mode) { - this.isVirtual = options.args.mode === "virtual"; - this.isTreeLevel = options.args.mode === "treeLevel"; - this.isCreateDate = options.args.mode === "createDate"; - this.isUpdateDate = options.args.mode === "updateDate"; - this.isDeleteDate = options.args.mode === "deleteDate"; - this.isVersion = options.args.mode === "version"; - this.isObjectId = options.args.mode === "objectId"; - } - if (options.args.options.transformer) - this.transformer = options.args.options.transformer; - if (options.args.options.spatialFeatureType) - this.spatialFeatureType = options.args.options.spatialFeatureType; - if (options.args.options.srid !== undefined) - this.srid = options.args.options.srid; - if (this.isTreeLevel) - this.type = options.connection.driver.mappedDataTypes.treeLevel; - if (this.isCreateDate) { - if (!this.type) - this.type = options.connection.driver.mappedDataTypes.createDate; - if (!this.default) - this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; }; - if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision) - this.precision = options.connection.driver.mappedDataTypes.createDatePrecision; - } - if (this.isUpdateDate) { - if (!this.type) - this.type = options.connection.driver.mappedDataTypes.updateDate; - if (!this.default) - this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; }; - if (!this.onUpdate) - this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault; - if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision) - this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision; - } - if (this.isDeleteDate) { - if (!this.type) - this.type = options.connection.driver.mappedDataTypes.deleteDate; - if (!this.isNullable) - this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable; - if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision) - this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision; - } - if (this.isVersion) - this.type = options.connection.driver.mappedDataTypes.version; - if (options.closureType) - this.closureType = options.closureType; - if (options.nestedSetLeft) - this.isNestedSetLeft = options.nestedSetLeft; - if (options.nestedSetRight) - this.isNestedSetRight = options.nestedSetRight; - if (options.materializedPath) - this.isMaterializedPath = options.materializedPath; - } - // --------------------------------------------------------------------- - // Public Methods - // --------------------------------------------------------------------- - /** - * Creates entity id map from the given entity ids array. - */ - ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) { - var _a; - var _this = this; - if (useDatabaseName === void 0) { useDatabaseName = false; } - // extract column value from embeds of entity if column is in embedded - if (this.embeddedMetadata) { - // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds - // we need to get value of "id" column from the post real entity object and return it in a - // { data: { information: { counters: { id: ... } } } } format - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); - // now need to access post[data][information][counters] to get column value from the counters - // and on each step we need to create complex literal object, e.g. first { data }, - // then { data: { information } }, then { data: { information: { counters } } }, - // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } - // this recursive function helps doing that - var extractEmbeddedColumnValue_1 = function (propertyNames, map) { - var propertyName = propertyNames.shift(); - if (propertyName) { - map[propertyName] = {}; - extractEmbeddedColumnValue_1(propertyNames, map[propertyName]); - return map; - } - // this is bugfix for #720 when increment number is bigint we need to make sure its a string - if ((_this.generationStrategy === "increment" || _this.generationStrategy === "rowid") && _this.type === "bigint" && value !== null) - value = String(value); - map[useDatabaseName ? _this.databaseName : _this.propertyName] = value; - return map; - }; - return extractEmbeddedColumnValue_1(propertyNames, {}); - } - else { // no embeds - no problems. Simply return column property name and its value of the entity - // this is bugfix for #720 when increment number is bigint we need to make sure its a string - if ((this.generationStrategy === "increment" || this.generationStrategy === "rowid") && this.type === "bigint" && value !== null) - value = String(value); - return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a; - } - }; - /** - * Extracts column value and returns its column name with this value in a literal object. - * If column is in embedded (or recursive embedded) it returns complex literal object. - * - * Examples what this method can return depend if this column is in embeds. - * { id: 1 } or { title: "hello" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } } - */ - ColumnMetadata.prototype.getEntityValueMap = function (entity, options) { - var _a, _b; - var _this = this; - var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will. - // extract column value from embeds of entity if column is in embedded - if (this.embeddedMetadata) { - // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds - // we need to get value of "id" column from the post real entity object and return it in a - // { data: { information: { counters: { id: ... } } } } format - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); - // now need to access post[data][information][counters] to get column value from the counters - // and on each step we need to create complex literal object, e.g. first { data }, - // then { data: { information } }, then { data: { information: { counters } } }, - // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } - // this recursive function helps doing that - var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) { - var propertyName = propertyNames.shift(); - if (value === undefined) - return map; - if (propertyName) { - var submap = {}; - extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap); - if (Object.keys(submap).length > 0) { - map[propertyName] = submap; - } - return map; - } - if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null)) - map[_this.propertyName] = value[_this.propertyName]; - return map; - }; - var map = {}; - extractEmbeddedColumnValue_2(propertyNames, entity, map); - return Object.keys(map).length > 0 ? map : undefined; - } - else { // no embeds - no problems. Simply return column property name and its value of the entity - if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) { - var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) { - var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]); - if (value === undefined) - return map; - return _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__[/* OrmUtils */ "a"].mergeDeep(map, value); - }, {}); - if (Object.keys(map).length > 0) - return _a = {}, _a[this.propertyName] = map, _a; - return undefined; - } - else { - if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null)) - return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b; - return undefined; - } - } - }; - /** - * Extracts column value from the given entity. - * If column is in embedded (or recursive embedded) it extracts its value from there. - */ - ColumnMetadata.prototype.getEntityValue = function (entity, transform) { - if (transform === void 0) { transform = false; } - if (entity === undefined || entity === null) - return undefined; - // extract column value from embeddeds of entity if column is in embedded - var value = undefined; - if (this.embeddedMetadata) { - // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds - // we need to get value of "id" column from the post real entity object - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); - // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters - // this recursive function takes array of generated property names and gets the post[data][information][counters] embed - var extractEmbeddedColumnValue_3 = function (propertyNames, value) { - var propertyName = propertyNames.shift(); - return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value; - }; - // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName] - var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity); - if (embeddedObject) { - if (this.relationMetadata && this.referencedColumn) { - var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject); - if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { - value = this.referencedColumn.getEntityValue(relatedEntity); - } - else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { - value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); - } - else { - value = embeddedObject[this.propertyName]; - } - } - else if (this.referencedColumn) { - value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); - } - else { - value = embeddedObject[this.propertyName]; - } - } - } - else { // no embeds - no problems. Simply return column name by property name of the entity - if (this.relationMetadata && this.referencedColumn) { - var relatedEntity = this.relationMetadata.getEntityValue(entity); - if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(relatedEntity instanceof Function)) { - value = this.referencedColumn.getEntityValue(relatedEntity); - } - else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(entity[this.propertyName] instanceof Function)) { - value = this.referencedColumn.getEntityValue(entity[this.propertyName]); - } - else { - value = entity[this.propertyName]; - } - } - else if (this.referencedColumn) { - value = this.referencedColumn.getEntityValue(entity[this.propertyName]); - } - else { - value = entity[this.propertyName]; - } - } - if (transform && this.transformer) - value = _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__[/* ApplyValueTransformers */ "a"].transformTo(this.transformer, value); - return value; - }; - /** - * Sets given entity's column value. - * Using of this method helps to set entity relation's value of the lazy and non-lazy relations. - */ - ColumnMetadata.prototype.setEntityValue = function (entity, value) { - var _this = this; - if (this.embeddedMetadata) { - // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] - var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) { - // if (!object[embeddedMetadata.propertyName]) - // object[embeddedMetadata.propertyName] = embeddedMetadata.create(); - var embeddedMetadata = embeddedMetadatas.shift(); - if (embeddedMetadata) { - if (!map[embeddedMetadata.propertyName]) - map[embeddedMetadata.propertyName] = embeddedMetadata.create(); - extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]); - return map; - } - map[_this.propertyName] = value; - return map; - }; - return extractEmbeddedColumnValue_4(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.embeddedMetadataTree)), entity); - } - else { - // we write a deep object in this entity only if the column is virtual - // because if its not virtual it means the user defined a real column for this relation - // also we don't do it if column is inside a junction table - if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) { - if (!(this.propertyName in entity)) { - entity[this.propertyName] = {}; - } - entity[this.propertyName][this.referencedColumn.propertyName] = value; - } - else { - entity[this.propertyName] = value; - } - } - }; - // --------------------------------------------------------------------- - // Builder Methods - // --------------------------------------------------------------------- - ColumnMetadata.prototype.build = function (connection) { - this.propertyPath = this.buildPropertyPath(); - this.propertyAliasName = this.propertyPath.replace(".", "_"); - this.databaseName = this.buildDatabaseName(connection); - this.databasePath = this.buildDatabasePath(); - this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []); - return this; - }; - ColumnMetadata.prototype.buildPropertyPath = function () { - var path = ""; - if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) - path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; - path += this.propertyName; - // we add reference column to property path only if this column is virtual - // because if its not virtual it means user defined a real column for this relation - // also we don't do it if column is inside a junction table - if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) - path += "." + this.referencedColumn.propertyName; - return path; - }; - ColumnMetadata.prototype.buildDatabasePath = function () { - var path = ""; - if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) - path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; - path += this.databaseName; - // we add reference column to property path only if this column is virtual - // because if its not virtual it means user defined a real column for this relation - // also we don't do it if column is inside a junction table - if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName) - path += "." + this.referencedColumn.databaseName; - return path; - }; - ColumnMetadata.prototype.buildDatabaseName = function (connection) { - var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : []; - if (connection.driver instanceof _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__[/* MongoDriver */ "e"]) // we don't need to include embedded name for the mongodb column names - propertyNames = []; - return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames); - }; - return ColumnMetadata; -}()); - - -//# sourceMappingURL=ColumnMetadata.js.map - - -/***/ }), -/* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6902,6 +6354,556 @@ Translator._translations = {}; Translator.logMissingTranslations = true; Translator.instance = null; +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableUnique; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); + +/** + * Database's table unique constraint stored in this class. + */ +var TableUnique = /** @class */ (function () { + // ------------------------------------------------------------------------- + // Constructor + // ------------------------------------------------------------------------- + function TableUnique(options) { + /** + * Columns that contains this constraint. + */ + this.columnNames = []; + this.name = options.name; + this.columnNames = options.columnNames; + } + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + /** + * Creates a new copy of this constraint with exactly same properties. + */ + TableUnique.prototype.clone = function () { + return new TableUnique({ + name: this.name, + columnNames: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.columnNames)) + }); + }; + // ------------------------------------------------------------------------- + // Static Methods + // ------------------------------------------------------------------------- + /** + * Creates unique from the unique metadata object. + */ + TableUnique.create = function (uniqueMetadata) { + return new TableUnique({ + name: uniqueMetadata.name, + columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; }) + }); + }; + return TableUnique; +}()); + + +//# sourceMappingURL=TableUnique.js.map + + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ColumnMetadata; }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); +/* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1); +/* harmony import */ var _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); +/* harmony import */ var _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(61); + + + + + +/** + * This metadata contains all information about entity's column. + */ +var ColumnMetadata = /** @class */ (function () { + // --------------------------------------------------------------------- + // Constructor + // --------------------------------------------------------------------- + function ColumnMetadata(options) { + /** + * Type's length in the database. + */ + this.length = ""; + /** + * Indicates if this column is a primary key. + */ + this.isPrimary = false; + /** + * Indicates if this column is generated (auto increment or generated other way). + */ + this.isGenerated = false; + /** + * Indicates if column can contain nulls or not. + */ + this.isNullable = false; + /** + * Indicates if column is selected by query builder or not. + */ + this.isSelect = true; + /** + * Indicates if column is inserted by default or not. + */ + this.isInsert = true; + /** + * Indicates if column allows updates or not. + */ + this.isUpdate = true; + /** + * Puts ZEROFILL attribute on to numeric column. Works only for MySQL. + * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column + */ + this.zerofill = false; + /** + * Puts UNSIGNED attribute on to numeric column. Works only for MySQL. + */ + this.unsigned = false; + /** + * Indicates if this column is an array. + */ + this.isArray = false; + /** + * Indicates if column is virtual. Virtual columns are not mapped to the entity. + */ + this.isVirtual = false; + /** + * Indicates if column is discriminator. Discriminator columns are not mapped to the entity. + */ + this.isDiscriminator = false; + /** + * Indicates if column is tree-level column. Tree-level columns are used in closure entities. + */ + this.isTreeLevel = false; + /** + * Indicates if this column contains an entity creation date. + */ + this.isCreateDate = false; + /** + * Indicates if this column contains an entity update date. + */ + this.isUpdateDate = false; + /** + * Indicates if this column contains an entity delete date. + */ + this.isDeleteDate = false; + /** + * Indicates if this column contains an entity version. + */ + this.isVersion = false; + /** + * Indicates if this column contains an object id. + */ + this.isObjectId = false; + /** + * Indicates if this column is nested set's left column. + * Used only in tree entities with nested-set type. + */ + this.isNestedSetLeft = false; + /** + * Indicates if this column is nested set's right column. + * Used only in tree entities with nested-set type. + */ + this.isNestedSetRight = false; + /** + * Indicates if this column is materialized path's path column. + * Used only in tree entities with materialized path type. + */ + this.isMaterializedPath = false; + this.entityMetadata = options.entityMetadata; + this.embeddedMetadata = options.embeddedMetadata; + this.referencedColumn = options.referencedColumn; + if (options.args.target) + this.target = options.args.target; + if (options.args.propertyName) + this.propertyName = options.args.propertyName; + if (options.args.options.name) + this.givenDatabaseName = options.args.options.name; + if (options.args.options.type) + this.type = options.args.options.type; + if (options.args.options.length) + this.length = options.args.options.length ? options.args.options.length.toString() : ""; + if (options.args.options.width) + this.width = options.args.options.width; + if (options.args.options.charset) + this.charset = options.args.options.charset; + if (options.args.options.collation) + this.collation = options.args.options.collation; + if (options.args.options.primary) + this.isPrimary = options.args.options.primary; + if (options.args.options.default === null) // to make sure default: null is the same as nullable: true + this.isNullable = true; + if (options.args.options.nullable !== undefined) + this.isNullable = options.args.options.nullable; + if (options.args.options.select !== undefined) + this.isSelect = options.args.options.select; + if (options.args.options.insert !== undefined) + this.isInsert = options.args.options.insert; + if (options.args.options.update !== undefined) + this.isUpdate = options.args.options.update; + if (options.args.options.readonly !== undefined) + this.isUpdate = !options.args.options.readonly; + if (options.args.options.comment) + this.comment = options.args.options.comment; + if (options.args.options.default !== undefined) + this.default = options.args.options.default; + if (options.args.options.onUpdate) + this.onUpdate = options.args.options.onUpdate; + if (options.args.options.scale !== null && options.args.options.scale !== undefined) + this.scale = options.args.options.scale; + if (options.args.options.zerofill) { + this.zerofill = options.args.options.zerofill; + this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column + } + if (options.args.options.unsigned) + this.unsigned = options.args.options.unsigned; + if (options.args.options.precision !== undefined) + this.precision = options.args.options.precision; + if (options.args.options.enum) { + if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) { + this.enum = Object.keys(options.args.options.enum) + .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them + .map(function (key) { return options.args.options.enum[key]; }); + } + else { + this.enum = options.args.options.enum; + } + } + if (options.args.options.enumName) { + this.enumName = options.args.options.enumName; + } + if (options.args.options.asExpression) { + this.asExpression = options.args.options.asExpression; + this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : "VIRTUAL"; + } + if (options.args.options.hstoreType) + this.hstoreType = options.args.options.hstoreType; + if (options.args.options.array) + this.isArray = options.args.options.array; + if (options.args.mode) { + this.isVirtual = options.args.mode === "virtual"; + this.isTreeLevel = options.args.mode === "treeLevel"; + this.isCreateDate = options.args.mode === "createDate"; + this.isUpdateDate = options.args.mode === "updateDate"; + this.isDeleteDate = options.args.mode === "deleteDate"; + this.isVersion = options.args.mode === "version"; + this.isObjectId = options.args.mode === "objectId"; + } + if (options.args.options.transformer) + this.transformer = options.args.options.transformer; + if (options.args.options.spatialFeatureType) + this.spatialFeatureType = options.args.options.spatialFeatureType; + if (options.args.options.srid !== undefined) + this.srid = options.args.options.srid; + if (this.isTreeLevel) + this.type = options.connection.driver.mappedDataTypes.treeLevel; + if (this.isCreateDate) { + if (!this.type) + this.type = options.connection.driver.mappedDataTypes.createDate; + if (!this.default) + this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; }; + if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision) + this.precision = options.connection.driver.mappedDataTypes.createDatePrecision; + } + if (this.isUpdateDate) { + if (!this.type) + this.type = options.connection.driver.mappedDataTypes.updateDate; + if (!this.default) + this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; }; + if (!this.onUpdate) + this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault; + if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision) + this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision; + } + if (this.isDeleteDate) { + if (!this.type) + this.type = options.connection.driver.mappedDataTypes.deleteDate; + if (!this.isNullable) + this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable; + if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision) + this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision; + } + if (this.isVersion) + this.type = options.connection.driver.mappedDataTypes.version; + if (options.closureType) + this.closureType = options.closureType; + if (options.nestedSetLeft) + this.isNestedSetLeft = options.nestedSetLeft; + if (options.nestedSetRight) + this.isNestedSetRight = options.nestedSetRight; + if (options.materializedPath) + this.isMaterializedPath = options.materializedPath; + } + // --------------------------------------------------------------------- + // Public Methods + // --------------------------------------------------------------------- + /** + * Creates entity id map from the given entity ids array. + */ + ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) { + var _a; + var _this = this; + if (useDatabaseName === void 0) { useDatabaseName = false; } + // extract column value from embeds of entity if column is in embedded + if (this.embeddedMetadata) { + // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds + // we need to get value of "id" column from the post real entity object and return it in a + // { data: { information: { counters: { id: ... } } } } format + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); + // now need to access post[data][information][counters] to get column value from the counters + // and on each step we need to create complex literal object, e.g. first { data }, + // then { data: { information } }, then { data: { information: { counters } } }, + // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } + // this recursive function helps doing that + var extractEmbeddedColumnValue_1 = function (propertyNames, map) { + var propertyName = propertyNames.shift(); + if (propertyName) { + map[propertyName] = {}; + extractEmbeddedColumnValue_1(propertyNames, map[propertyName]); + return map; + } + // this is bugfix for #720 when increment number is bigint we need to make sure its a string + if ((_this.generationStrategy === "increment" || _this.generationStrategy === "rowid") && _this.type === "bigint" && value !== null) + value = String(value); + map[useDatabaseName ? _this.databaseName : _this.propertyName] = value; + return map; + }; + return extractEmbeddedColumnValue_1(propertyNames, {}); + } + else { // no embeds - no problems. Simply return column property name and its value of the entity + // this is bugfix for #720 when increment number is bigint we need to make sure its a string + if ((this.generationStrategy === "increment" || this.generationStrategy === "rowid") && this.type === "bigint" && value !== null) + value = String(value); + return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a; + } + }; + /** + * Extracts column value and returns its column name with this value in a literal object. + * If column is in embedded (or recursive embedded) it returns complex literal object. + * + * Examples what this method can return depend if this column is in embeds. + * { id: 1 } or { title: "hello" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } } + */ + ColumnMetadata.prototype.getEntityValueMap = function (entity, options) { + var _a, _b; + var _this = this; + var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will. + // extract column value from embeds of entity if column is in embedded + if (this.embeddedMetadata) { + // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds + // we need to get value of "id" column from the post real entity object and return it in a + // { data: { information: { counters: { id: ... } } } } format + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); + // now need to access post[data][information][counters] to get column value from the counters + // and on each step we need to create complex literal object, e.g. first { data }, + // then { data: { information } }, then { data: { information: { counters } } }, + // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } } + // this recursive function helps doing that + var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) { + var propertyName = propertyNames.shift(); + if (value === undefined) + return map; + if (propertyName) { + var submap = {}; + extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap); + if (Object.keys(submap).length > 0) { + map[propertyName] = submap; + } + return map; + } + if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null)) + map[_this.propertyName] = value[_this.propertyName]; + return map; + }; + var map = {}; + extractEmbeddedColumnValue_2(propertyNames, entity, map); + return Object.keys(map).length > 0 ? map : undefined; + } + else { // no embeds - no problems. Simply return column property name and its value of the entity + if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) { + var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) { + var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]); + if (value === undefined) + return map; + return _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__[/* OrmUtils */ "a"].mergeDeep(map, value); + }, {}); + if (Object.keys(map).length > 0) + return _a = {}, _a[this.propertyName] = map, _a; + return undefined; + } + else { + if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null)) + return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b; + return undefined; + } + } + }; + /** + * Extracts column value from the given entity. + * If column is in embedded (or recursive embedded) it extracts its value from there. + */ + ColumnMetadata.prototype.getEntityValue = function (entity, transform) { + if (transform === void 0) { transform = false; } + if (entity === undefined || entity === null) + return undefined; + // extract column value from embeddeds of entity if column is in embedded + var value = undefined; + if (this.embeddedMetadata) { + // example: post[data][information][counters].id where "data", "information" and "counters" are embeddeds + // we need to get value of "id" column from the post real entity object + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var propertyNames = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.parentPropertyNames)); + // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters + // this recursive function takes array of generated property names and gets the post[data][information][counters] embed + var extractEmbeddedColumnValue_3 = function (propertyNames, value) { + var propertyName = propertyNames.shift(); + return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value; + }; + // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName] + var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity); + if (embeddedObject) { + if (this.relationMetadata && this.referencedColumn) { + var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject); + if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { + value = this.referencedColumn.getEntityValue(relatedEntity); + } + else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"])) { + value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); + } + else { + value = embeddedObject[this.propertyName]; + } + } + else if (this.referencedColumn) { + value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]); + } + else { + value = embeddedObject[this.propertyName]; + } + } + } + else { // no embeds - no problems. Simply return column name by property name of the entity + if (this.relationMetadata && this.referencedColumn) { + var relatedEntity = this.relationMetadata.getEntityValue(entity); + if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(relatedEntity instanceof Function)) { + value = this.referencedColumn.getEntityValue(relatedEntity); + } + else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof _find_options_FindOperator__WEBPACK_IMPORTED_MODULE_3__[/* FindOperator */ "a"]) && !(entity[this.propertyName] instanceof Function)) { + value = this.referencedColumn.getEntityValue(entity[this.propertyName]); + } + else { + value = entity[this.propertyName]; + } + } + else if (this.referencedColumn) { + value = this.referencedColumn.getEntityValue(entity[this.propertyName]); + } + else { + value = entity[this.propertyName]; + } + } + if (transform && this.transformer) + value = _util_ApplyValueTransformers__WEBPACK_IMPORTED_MODULE_4__[/* ApplyValueTransformers */ "a"].transformTo(this.transformer, value); + return value; + }; + /** + * Sets given entity's column value. + * Using of this method helps to set entity relation's value of the lazy and non-lazy relations. + */ + ColumnMetadata.prototype.setEntityValue = function (entity, value) { + var _this = this; + if (this.embeddedMetadata) { + // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters] + var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) { + // if (!object[embeddedMetadata.propertyName]) + // object[embeddedMetadata.propertyName] = embeddedMetadata.create(); + var embeddedMetadata = embeddedMetadatas.shift(); + if (embeddedMetadata) { + if (!map[embeddedMetadata.propertyName]) + map[embeddedMetadata.propertyName] = embeddedMetadata.create(); + extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]); + return map; + } + map[_this.propertyName] = value; + return map; + }; + return extractEmbeddedColumnValue_4(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __spreadArray */ "f"])([], Object(tslib__WEBPACK_IMPORTED_MODULE_0__[/* __read */ "e"])(this.embeddedMetadata.embeddedMetadataTree)), entity); + } + else { + // we write a deep object in this entity only if the column is virtual + // because if its not virtual it means the user defined a real column for this relation + // also we don't do it if column is inside a junction table + if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) { + if (!(this.propertyName in entity)) { + entity[this.propertyName] = {}; + } + entity[this.propertyName][this.referencedColumn.propertyName] = value; + } + else { + entity[this.propertyName] = value; + } + } + }; + // --------------------------------------------------------------------- + // Builder Methods + // --------------------------------------------------------------------- + ColumnMetadata.prototype.build = function (connection) { + this.propertyPath = this.buildPropertyPath(); + this.propertyAliasName = this.propertyPath.replace(".", "_"); + this.databaseName = this.buildDatabaseName(connection); + this.databasePath = this.buildDatabasePath(); + this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []); + return this; + }; + ColumnMetadata.prototype.buildPropertyPath = function () { + var path = ""; + if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) + path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; + path += this.propertyName; + // we add reference column to property path only if this column is virtual + // because if its not virtual it means user defined a real column for this relation + // also we don't do it if column is inside a junction table + if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) + path += "." + this.referencedColumn.propertyName; + return path; + }; + ColumnMetadata.prototype.buildDatabasePath = function () { + var path = ""; + if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length) + path = this.embeddedMetadata.parentPropertyNames.join(".") + "."; + path += this.databaseName; + // we add reference column to property path only if this column is virtual + // because if its not virtual it means user defined a real column for this relation + // also we don't do it if column is inside a junction table + if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName) + path += "." + this.referencedColumn.databaseName; + return path; + }; + ColumnMetadata.prototype.buildDatabaseName = function (connection) { + var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : []; + if (connection.driver instanceof _driver_mongodb_MongoDriver__WEBPACK_IMPORTED_MODULE_2__[/* MongoDriver */ "e"]) // we don't need to include embedded name for the mongodb column names + propertyNames = []; + return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames); + }; + return ColumnMetadata; +}()); + + +//# sourceMappingURL=ColumnMetadata.js.map + + /***/ }), /* 33 */ /***/ (function(module, exports, __webpack_require__) { @@ -7220,7 +7222,7 @@ var QueryRunnerAlreadyReleasedError = /** @class */ (function (_super) { /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return EntityMetadata; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _driver_postgres_PostgresDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); -/* harmony import */ var _error_CannotCreateEntityIdMapError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(151); +/* harmony import */ var _error_CannotCreateEntityIdMapError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(152); /* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6); /* harmony import */ var _util_StringUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(49); @@ -8301,7 +8303,7 @@ var QueryExpressionMap_QueryExpressionMap = /** @class */ (function () { //# sourceMappingURL=QueryExpressionMap.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/Brackets.js -var Brackets = __webpack_require__(154); +var Brackets = __webpack_require__(155); // EXTERNAL MODULE: ./node_modules/typeorm/browser/metadata/EntityMetadata.js var EntityMetadata = __webpack_require__(35); @@ -8319,7 +8321,7 @@ var browser = __webpack_require__(47); var FindOperator = __webpack_require__(9); // EXTERNAL MODULE: ./node_modules/typeorm/browser/find-options/operator/In.js -var In = __webpack_require__(155); +var In = __webpack_require__(156); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/EntityColumnNotFound.js var EntityColumnNotFound = __webpack_require__(114); @@ -8472,7 +8474,7 @@ var QueryBuilder_QueryBuilder = /** @class */ (function () { this.expressionMap.setMainAlias(mainAlias); } // loading it dynamically because of circular issue - var RelationQueryBuilderCls = __webpack_require__(207).RelationQueryBuilder; + var RelationQueryBuilderCls = __webpack_require__(206).RelationQueryBuilder; if (this instanceof RelationQueryBuilderCls) return this; return new RelationQueryBuilderCls(this); @@ -9189,7 +9191,7 @@ var QueryBuilder_QueryBuilder = /** @class */ (function () { /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SqljsDriver; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16); -/* harmony import */ var _SqljsQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(283); +/* harmony import */ var _SqljsQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(284); /* harmony import */ var _error_DriverPackageNotInstalledError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71); /* harmony import */ var _error_DriverOptionNotSetError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37); /* harmony import */ var _platform_PlatformTools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(10); @@ -9513,7 +9515,7 @@ var SqljsDriver = /** @class */ (function (_super) { //# sourceMappingURL=SqljsDriver.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), /* 42 */ @@ -10057,8 +10059,8 @@ var TransactionNotStartedError = /** @class */ (function (_super) { var global = __webpack_require__(11); var hide = __webpack_require__(52); var has = __webpack_require__(51); -var SRC = __webpack_require__(87)('src'); -var $toString = __webpack_require__(293); +var SRC = __webpack_require__(88)('src'); +var $toString = __webpack_require__(294); var TO_STRING = 'toString'; var TPL = ('' + $toString).split(TO_STRING); @@ -10309,10 +10311,10 @@ __webpack_require__.d(__webpack_exports__, "createQueryBuilder", function() { re var tslib_es6 = __webpack_require__(0); // EXTERNAL MODULE: ./node_modules/reflect-metadata/Reflect.js -var reflect_metadata_Reflect = __webpack_require__(478); +var reflect_metadata_Reflect = __webpack_require__(479); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/RandomGenerator.js -var RandomGenerator = __webpack_require__(61); +var RandomGenerator = __webpack_require__(62); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/StringUtils.js var StringUtils = __webpack_require__(49); @@ -13301,13 +13303,13 @@ var SubjectTopoligicalSorter_SubjectTopoligicalSorter = /** @class */ (function //# sourceMappingURL=SubjectTopoligicalSorter.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/DateUtils.js -var DateUtils = __webpack_require__(21); +var DateUtils = __webpack_require__(22); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/OrmUtils.js var OrmUtils = __webpack_require__(6); // EXTERNAL MODULE: ./node_modules/typeorm/browser/util/ApplyValueTransformers.js -var ApplyValueTransformers = __webpack_require__(60); +var ApplyValueTransformers = __webpack_require__(61); // CONCATENATED MODULE: ./node_modules/typeorm/browser/persistence/SubjectChangedColumnsComputer.js @@ -16749,7 +16751,7 @@ var QueryFailedError = __webpack_require__(39); var AbstractSqliteQueryRunner = __webpack_require__(73); // EXTERNAL MODULE: ./node_modules/typeorm/browser/subscriber/Broadcaster.js -var Broadcaster = __webpack_require__(54); +var Broadcaster = __webpack_require__(55); // CONCATENATED MODULE: ./node_modules/typeorm/browser/driver/cordova/CordovaQueryRunner.js @@ -17138,7 +17140,7 @@ var ReactNativeDriver_ReactNativeDriver = /** @class */ (function (_super) { //# sourceMappingURL=ReactNativeDriver.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/nativescript/NativescriptDriver.js -var NativescriptDriver = __webpack_require__(284); +var NativescriptDriver = __webpack_require__(285); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/TransactionAlreadyStartedError.js var TransactionAlreadyStartedError = __webpack_require__(70); @@ -17451,7 +17453,7 @@ var TableCheck = __webpack_require__(43); var TableColumn = __webpack_require__(25); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js -var TableExclusion = __webpack_require__(59); +var TableExclusion = __webpack_require__(60); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableForeignKey.js var TableForeignKey = __webpack_require__(48); @@ -17460,10 +17462,10 @@ var TableForeignKey = __webpack_require__(48); var TableIndex = __webpack_require__(38); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/table/TableUnique.js -var TableUnique = __webpack_require__(30); +var TableUnique = __webpack_require__(31); // EXTERNAL MODULE: ./node_modules/typeorm/browser/schema-builder/view/View.js -var View = __webpack_require__(56); +var View = __webpack_require__(57); // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/Query.js var Query = __webpack_require__(2); @@ -20917,7 +20919,7 @@ function getFromContainer(someClass) { //# sourceMappingURL=container.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/metadata/ColumnMetadata.js -var ColumnMetadata = __webpack_require__(31); +var ColumnMetadata = __webpack_require__(32); // CONCATENATED MODULE: ./node_modules/typeorm/browser/metadata/IndexMetadata.js /** @@ -25085,7 +25087,7 @@ var RelationIdLoader_RelationIdLoader = /** @class */ (function () { //# sourceMappingURL=RelationIdLoader.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/DriverUtils.js -var DriverUtils = __webpack_require__(20); +var DriverUtils = __webpack_require__(21); // CONCATENATED MODULE: ./node_modules/typeorm/browser/connection/Connection.js @@ -25875,7 +25877,7 @@ var CannotReflectMethodParameterTypeError_CannotReflectMethodParameterTypeError //# sourceMappingURL=CannotReflectMethodParameterTypeError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js -var LockNotSupportedOnGivenDriverError = __webpack_require__(85); +var LockNotSupportedOnGivenDriverError = __webpack_require__(86); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/ConnectionIsNotSetError.js @@ -25898,7 +25900,7 @@ var ConnectionIsNotSetError_ConnectionIsNotSetError = /** @class */ (function (_ //# sourceMappingURL=ConnectionIsNotSetError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/CannotCreateEntityIdMapError.js -var CannotCreateEntityIdMapError = __webpack_require__(151); +var CannotCreateEntityIdMapError = __webpack_require__(152); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/MetadataAlreadyExistsError.js @@ -25922,7 +25924,7 @@ var MetadataAlreadyExistsError_MetadataAlreadyExistsError = /** @class */ (funct //# sourceMappingURL=MetadataAlreadyExistsError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/UpdateValuesMissingError.js -var UpdateValuesMissingError = __webpack_require__(100); +var UpdateValuesMissingError = __webpack_require__(101); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js var OptimisticLockVersionMismatchError = __webpack_require__(130); @@ -25949,7 +25951,7 @@ var PrimaryColumnCannotBeNullableError_PrimaryColumnCannotBeNullableError = /** //# sourceMappingURL=PrimaryColumnCannotBeNullableError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/MissingDeleteDateColumnError.js -var MissingDeleteDateColumnError = __webpack_require__(158); +var MissingDeleteDateColumnError = __webpack_require__(159); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/NoConnectionForRepositoryError.js @@ -26047,10 +26049,10 @@ var CannotGetEntityManagerNotConnectedError_CannotGetEntityManagerNotConnectedEr //# sourceMappingURL=CannotGetEntityManagerNotConnectedError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js -var NoVersionOrUpdateDateColumnError = __webpack_require__(153); +var NoVersionOrUpdateDateColumnError = __webpack_require__(154); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/InsertValuesMissingError.js -var InsertValuesMissingError = __webpack_require__(156); +var InsertValuesMissingError = __webpack_require__(157); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OptimisticLockCanNotBeUsedError.js var OptimisticLockCanNotBeUsedError = __webpack_require__(102); @@ -26098,7 +26100,7 @@ var NamingStrategyNotFoundError_NamingStrategyNotFoundError = /** @class */ (fun //# sourceMappingURL=NamingStrategyNotFoundError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js -var PessimisticLockTransactionRequiredError = __webpack_require__(152); +var PessimisticLockTransactionRequiredError = __webpack_require__(153); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/MissingJoinTableError.js @@ -26234,7 +26236,7 @@ var ColumnTypeUndefinedError_ColumnTypeUndefinedError = /** @class */ (function //# sourceMappingURL=ColumnTypeUndefinedError.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js -var OffsetWithoutLimitNotSupportedError = __webpack_require__(159); +var OffsetWithoutLimitNotSupportedError = __webpack_require__(160); // CONCATENATED MODULE: ./node_modules/typeorm/browser/error/index.js @@ -27528,7 +27530,7 @@ function Equal(value) { //# sourceMappingURL=Equal.js.map // EXTERNAL MODULE: ./node_modules/typeorm/browser/find-options/operator/In.js -var In = __webpack_require__(155); +var In = __webpack_require__(156); // CONCATENATED MODULE: ./node_modules/typeorm/browser/find-options/operator/IsNull.js @@ -27960,10 +27962,10 @@ var InsertQueryBuilder = __webpack_require__(194); var UpdateQueryBuilder = __webpack_require__(195); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/RelationQueryBuilder.js + 2 modules -var RelationQueryBuilder = __webpack_require__(207); +var RelationQueryBuilder = __webpack_require__(206); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/Brackets.js -var Brackets = __webpack_require__(154); +var Brackets = __webpack_require__(155); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/result/InsertResult.js var InsertResult = __webpack_require__(131); @@ -27972,7 +27974,7 @@ var InsertResult = __webpack_require__(131); var UpdateResult = __webpack_require__(115); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/result/DeleteResult.js -var DeleteResult = __webpack_require__(157); +var DeleteResult = __webpack_require__(158); // CONCATENATED MODULE: ./node_modules/typeorm/browser/index.js @@ -28358,7 +28360,7 @@ var TableForeignKey = /** @class */ (function () { /* unused harmony export abbreviate */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return shorten; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hash; }); -/* harmony import */ var sha_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(282); +/* harmony import */ var sha_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(283); /* harmony import */ var sha_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sha_js__WEBPACK_IMPORTED_MODULE_0__); /** @@ -28517,7 +28519,7 @@ module.exports = function (it, key) { /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(29); -var createDesc = __webpack_require__(86); +var createDesc = __webpack_require__(87); module.exports = __webpack_require__(28) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { @@ -28540,6 +28542,217 @@ module.exports = function (it) { /***/ }), /* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ViewInflater = void 0; + +var client_1 = __webpack_require__(147); + +var shared_1 = __webpack_require__(17); + +var DataManager_1 = __webpack_require__(59); +/** + * Singleton-Klasse genutzt zum laden von Views + */ + + +var ViewInflater = /*#__PURE__*/function () { + function ViewInflater() { + _classCallCheck(this, ViewInflater); + + this.loadingPromises = {}; + } + /** + * Statische Funktion, um die Singleton-Instanz zu holen + * + * @returns {ViewInflater} + */ + + + _createClass(ViewInflater, [{ + key: "load", + value: + /** + * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views + * + * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann + * + * @param viewUrl + * @param parentUrls + * @returns {*} + */ + function load(viewUrl, parentUrls) { + var _this = this; + + //Kopiere Elemente, damit originale parentURLS nicht verändert werden + parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, [])); //Detektiert eine Schleife in den Views + + if (parentUrls.indexOf(viewUrl) !== -1) { + //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View + return Promise.reject("views are in a circuit! cannot resolve view for url " + parentUrls[0] + "! url " + viewUrl + " is in stack before!"); + } + + parentUrls.push(viewUrl); //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden + + if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) { + return this.loadingPromises[viewUrl].then(function (view) { + return view.cloneNode(true); + }); + } + + var t; + var resultPromise = Promise.resolve(t); + + if (viewUrl instanceof Element) { + resultPromise = Promise.resolve(viewUrl); + } else { + resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(function (htmlText) { + var doc = new DOMParser().parseFromString(htmlText, "text/html"); //Parsing hat nicht geklappt, also per innerHTML + + if (shared_1.Helper.isNull(doc)) { + doc = document.implementation.createHTMLDocument(''); + doc.body.innerHTML = htmlText; + } //Wrappe Elemente mit einem Span + + + var spanElem = document.createElement("span"); + spanElem.classList.add("injected-span"); + return ViewInflater.moveChildren(doc.body, spanElem); + }); + } + + this.loadingPromises[viewUrl] = resultPromise.then(function (parentElement) { + var promises = []; + var childViews = parentElement.querySelectorAll("[data-view]"); //lade Kinder-Views + + childViews.forEach(function (childView) { + promises.push(ViewInflater.getInstance().load(childView.dataset["view"], parentUrls).then(function (element) { + childView.replaceWith(element); + ViewInflater.replaceWithChildren(element); + })); + }); + return Promise.all(promises).then(function () { + return parentElement; + }); + }).catch(function (e) { + console.error(e); + _this.loadingPromises[viewUrl] = null; + throw e; + }); + return this.loadingPromises[viewUrl].then(function (view) { + return view.cloneNode(true); + }); + } + /** + * Statische Funktion, um Elemente aus einem String zu kreieren + * + * @param string + * @returns {NodeListOf} + */ + + }], [{ + key: "getInstance", + value: function getInstance() { + if (shared_1.Helper.isNull(ViewInflater.instance)) { + ViewInflater.instance = new ViewInflater(); + } + + return ViewInflater.instance; + } + }, { + key: "inflateElementsFromString", + value: function inflateElementsFromString(string) { + var template = document.createElement('template'); + template.innerHTML = string; + return template.content.childNodes; + } + /** + * Kreiert ein Ladesymbol. Evtl entfernen + * + * @returns {HTMLDivElement} + */ + + }, { + key: "createLoadingSymbol", + value: function createLoadingSymbol(loaderClass) { + var svgNS = "http://www.w3.org/2000/svg"; + var loader = document.createElement("div"); + loader.classList.add('loader'); //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt + + if (loaderClass) { + loader.classList.add(loaderClass); + } + + var svg = document.createElementNS(svgNS, "svg"); + svg.setAttribute('viewBox', "0 0 32 32"); + svg.setAttribute("width", "32"); + svg.setAttribute("height", "32"); + var circle = document.createElementNS(svgNS, "circle"); + circle.setAttribute("class", "spinner"); + circle.setAttribute("cx", "16"); + circle.setAttribute("cy", "16"); + circle.setAttribute("r", "14"); + circle.setAttribute("fill", "none"); + svg.appendChild(circle); + loader.appendChild(svg); // let loader = document.createElement("div"); + // loader.appendChild(document.createTextNode("LOADING...")); + + return loader; + } + /** + * Moves the child-Nodes from one element to another + * @param from + * @param to + * @returns {*} + */ + + }, { + key: "moveChildren", + value: function moveChildren(from, to) { + return client_1.ViewHelper.moveChildren(from, to); + } + /** + * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen) + * @param element + */ + + }, { + key: "replaceWithChildren", + value: function replaceWithChildren(element) { + var children = []; //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt + + element.childNodes.forEach(function (child) { + children.push(child); + }); + var parent = element.parentElement; + children.forEach(function (child) { + element.removeChild(child); + parent.insertBefore(child, element); + }); + element.remove(); + } + }]); + + return ViewInflater; +}(); + +exports.ViewInflater = ViewInflater; +ViewInflater.instance = null; + +/***/ }), +/* 55 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -28983,7 +29196,7 @@ var Broadcaster = /** @class */ (function () { /***/ }), -/* 55 */ +/* 56 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -29032,7 +29245,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.Matomo = void 0; -var js_helper_1 = __webpack_require__(22); +var js_helper_1 = __webpack_require__(17); var NativeStoragePromise_1 = __webpack_require__(42); @@ -29277,7 +29490,7 @@ Matomo.currentUrl = null; Matomo.isTrackingPromise = null; /***/ }), -/* 56 */ +/* 57 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -29331,7 +29544,7 @@ var View = /** @class */ (function () { /***/ }), -/* 57 */ +/* 58 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -29346,585 +29559,8 @@ module.exports = function (method, arg) { }; -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.ViewInflater = void 0; - -var client_1 = __webpack_require__(197); - -var shared_1 = __webpack_require__(22); - -var DataManager_1 = __webpack_require__(68); -/** - * Singleton-Klasse genutzt zum laden von Views - */ - - -var ViewInflater = /*#__PURE__*/function () { - function ViewInflater() { - _classCallCheck(this, ViewInflater); - - this.loadingPromises = {}; - } - /** - * Statische Funktion, um die Singleton-Instanz zu holen - * - * @returns {ViewInflater} - */ - - - _createClass(ViewInflater, [{ - key: "load", - value: - /** - * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views - * - * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann - * - * @param viewUrl - * @param parentUrls - * @returns {*} - */ - function load(viewUrl, parentUrls) { - var _this = this; - - //Kopiere Elemente, damit originale parentURLS nicht verändert werden - parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, [])); //Detektiert eine Schleife in den Views - - if (parentUrls.indexOf(viewUrl) !== -1) { - //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View - return Promise.reject("views are in a circuit! cannot resolve view for url " + parentUrls[0] + "! url " + viewUrl + " is in stack before!"); - } - - parentUrls.push(viewUrl); //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden - - if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) { - return this.loadingPromises[viewUrl].then(function (view) { - return view.cloneNode(true); - }); - } - - var t; - var resultPromise = Promise.resolve(t); - - if (viewUrl instanceof Element) { - resultPromise = Promise.resolve(viewUrl); - } else { - resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(function (htmlText) { - var doc = new DOMParser().parseFromString(htmlText, "text/html"); //Parsing hat nicht geklappt, also per innerHTML - - if (shared_1.Helper.isNull(doc)) { - doc = document.implementation.createHTMLDocument(''); - doc.body.innerHTML = htmlText; - } //Wrappe Elemente mit einem Span - - - var spanElem = document.createElement("span"); - spanElem.classList.add("injected-span"); - return ViewInflater.moveChildren(doc.body, spanElem); - }); - } - - this.loadingPromises[viewUrl] = resultPromise.then(function (parentElement) { - var promises = []; - var childViews = parentElement.querySelectorAll("[data-view]"); //lade Kinder-Views - - childViews.forEach(function (childView) { - promises.push(ViewInflater.getInstance().load(childView.dataset["view"], parentUrls).then(function (element) { - childView.replaceWith(element); - ViewInflater.replaceWithChildren(element); - })); - }); - return Promise.all(promises).then(function () { - return parentElement; - }); - }).catch(function (e) { - console.error(e); - _this.loadingPromises[viewUrl] = null; - throw e; - }); - return this.loadingPromises[viewUrl].then(function (view) { - return view.cloneNode(true); - }); - } - /** - * Statische Funktion, um Elemente aus einem String zu kreieren - * - * @param string - * @returns {NodeListOf} - */ - - }], [{ - key: "getInstance", - value: function getInstance() { - if (shared_1.Helper.isNull(ViewInflater.instance)) { - ViewInflater.instance = new ViewInflater(); - } - - return ViewInflater.instance; - } - }, { - key: "inflateElementsFromString", - value: function inflateElementsFromString(string) { - var template = document.createElement('template'); - template.innerHTML = string; - return template.content.childNodes; - } - /** - * Kreiert ein Ladesymbol. Evtl entfernen - * - * @returns {HTMLDivElement} - */ - - }, { - key: "createLoadingSymbol", - value: function createLoadingSymbol(loaderClass) { - var svgNS = "http://www.w3.org/2000/svg"; - var loader = document.createElement("div"); - loader.classList.add('loader'); //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt - - if (loaderClass) { - loader.classList.add(loaderClass); - } - - var svg = document.createElementNS(svgNS, "svg"); - svg.setAttribute('viewBox', "0 0 32 32"); - svg.setAttribute("width", "32"); - svg.setAttribute("height", "32"); - var circle = document.createElementNS(svgNS, "circle"); - circle.setAttribute("class", "spinner"); - circle.setAttribute("cx", "16"); - circle.setAttribute("cy", "16"); - circle.setAttribute("r", "14"); - circle.setAttribute("fill", "none"); - svg.appendChild(circle); - loader.appendChild(svg); // let loader = document.createElement("div"); - // loader.appendChild(document.createTextNode("LOADING...")); - - return loader; - } - /** - * Moves the child-Nodes from one element to another - * @param from - * @param to - * @returns {*} - */ - - }, { - key: "moveChildren", - value: function moveChildren(from, to) { - return client_1.ViewHelper.moveChildren(from, to); - } - /** - * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen) - * @param element - */ - - }, { - key: "replaceWithChildren", - value: function replaceWithChildren(element) { - var children = []; //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt - - element.childNodes.forEach(function (child) { - children.push(child); - }); - var parent = element.parentElement; - children.forEach(function (child) { - element.removeChild(child); - parent.insertBefore(child, element); - }); - element.remove(); - } - }]); - - return ViewInflater; -}(); - -exports.ViewInflater = ViewInflater; -ViewInflater.instance = null; - /***/ }), /* 59 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableExclusion; }); -/** - * Database's table exclusion constraint stored in this class. - */ -var TableExclusion = /** @class */ (function () { - // ------------------------------------------------------------------------- - // Constructor - // ------------------------------------------------------------------------- - function TableExclusion(options) { - this.name = options.name; - this.expression = options.expression; - } - // ------------------------------------------------------------------------- - // Public Methods - // ------------------------------------------------------------------------- - /** - * Creates a new copy of this constraint with exactly same properties. - */ - TableExclusion.prototype.clone = function () { - return new TableExclusion({ - name: this.name, - expression: this.expression, - }); - }; - // ------------------------------------------------------------------------- - // Static Methods - // ------------------------------------------------------------------------- - /** - * Creates exclusions from the exclusion metadata object. - */ - TableExclusion.create = function (exclusionMetadata) { - return new TableExclusion({ - name: exclusionMetadata.name, - expression: exclusionMetadata.expression - }); - }; - return TableExclusion; -}()); - - -//# sourceMappingURL=TableExclusion.js.map - - -/***/ }), -/* 60 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ApplyValueTransformers; }); -var ApplyValueTransformers = /** @class */ (function () { - function ApplyValueTransformers() { - } - ApplyValueTransformers.transformFrom = function (transformer, databaseValue) { - if (Array.isArray(transformer)) { - var reverseTransformers = transformer.slice().reverse(); - return reverseTransformers.reduce(function (transformedValue, _transformer) { - return _transformer.from(transformedValue); - }, databaseValue); - } - return transformer.from(databaseValue); - }; - ApplyValueTransformers.transformTo = function (transformer, entityValue) { - if (Array.isArray(transformer)) { - return transformer.reduce(function (transformedValue, _transformer) { - return _transformer.to(transformedValue); - }, entityValue); - } - return transformer.to(entityValue); - }; - return ApplyValueTransformers; -}()); - - -//# sourceMappingURL=ApplyValueTransformers.js.map - - -/***/ }), -/* 61 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RandomGenerator; }); -var RandomGenerator = /** @class */ (function () { - function RandomGenerator() { - } - /** - * discuss at: http://locutus.io/php/sha1/ - * original by: Webtoolkit.info (http://www.webtoolkit.info/) - * improved by: Michael White (http://getsprink.com) - * improved by: Kevin van Zonneveld (http://kvz.io) - * input by: Brett Zamir (http://brett-zamir.me) - * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then - * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly - * note 1: in a steaming fashion for faster and more efficient hashing - * example 1: sha1('Kevin van Zonneveld') - * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897' - */ - RandomGenerator.sha1 = function (str) { - var _rotLeft = function (n, s) { - var t4 = (n << s) | (n >>> (32 - s)); - return t4; - }; - var _cvtHex = function (val) { - var str = ""; - var i; - var v; - for (i = 7; i >= 0; i--) { - v = (val >>> (i * 4)) & 0x0f; - str += v.toString(16); - } - return str; - }; - var blockstart; - var i, j; - var W = new Array(80); - var H0 = 0x67452301; - var H1 = 0xEFCDAB89; - var H2 = 0x98BADCFE; - var H3 = 0x10325476; - var H4 = 0xC3D2E1F0; - var A, B, C, D, E; - var temp; - // utf8_encode - str = /*unescape*/ (encodeURIComponent(str)); - var strLen = str.length; - var wordArray = []; - for (i = 0; i < strLen - 3; i += 4) { - j = str.charCodeAt(i) << 24 | - str.charCodeAt(i + 1) << 16 | - str.charCodeAt(i + 2) << 8 | - str.charCodeAt(i + 3); - wordArray.push(j); - } - switch (strLen % 4) { - case 0: - i = 0x080000000; - break; - case 1: - i = str.charCodeAt(strLen - 1) << 24 | 0x0800000; - break; - case 2: - i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000; - break; - case 3: - i = str.charCodeAt(strLen - 3) << 24 | - str.charCodeAt(strLen - 2) << 16 | - str.charCodeAt(strLen - 1) << - 8 | 0x80; - break; - } - wordArray.push(i); - while ((wordArray.length % 16) !== 14) { - wordArray.push(0); - } - wordArray.push(strLen >>> 29); - wordArray.push((strLen << 3) & 0x0ffffffff); - for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) { - for (i = 0; i < 16; i++) { - W[i] = wordArray[blockstart + i]; - } - for (i = 16; i <= 79; i++) { - W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - } - A = H0; - B = H1; - C = H2; - D = H3; - E = H4; - for (i = 0; i <= 19; i++) { - temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - for (i = 20; i <= 39; i++) { - temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - for (i = 40; i <= 59; i++) { - temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - for (i = 60; i <= 79; i++) { - temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; - E = D; - D = C; - C = _rotLeft(B, 30); - B = A; - A = temp; - } - H0 = (H0 + A) & 0x0ffffffff; - H1 = (H1 + B) & 0x0ffffffff; - H2 = (H2 + C) & 0x0ffffffff; - H3 = (H3 + D) & 0x0ffffffff; - H4 = (H4 + E) & 0x0ffffffff; - } - temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4); - return temp.toLowerCase(); - }; - /** - * RFC4122 compliant UUID v4 generator. - */ - RandomGenerator.uuid4 = function () { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); - }; - return RandomGenerator; -}()); - - -//# sourceMappingURL=RandomGenerator.js.map - - -/***/ }), -/* 62 */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(63); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 63 */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), -/* 64 */ -/***/ (function(module, exports) { - -// 7.1.4 ToInteger -var ceil = Math.ceil; -var floor = Math.floor; -module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; - - -/***/ }), -/* 65 */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(123); -var createDesc = __webpack_require__(86); -var toIObject = __webpack_require__(53); -var toPrimitive = __webpack_require__(82); -var has = __webpack_require__(51); -var IE8_DOM_DEFINE = __webpack_require__(213); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(28) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - -// most Object methods by ES6 should accept primitives -var $export = __webpack_require__(3); -var core = __webpack_require__(26); -var fails = __webpack_require__(12); -module.exports = function (KEY, exec) { - var fn = (core.Object || {})[KEY] || Object[KEY]; - var exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); -}; - - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - -// 0 -> Array#forEach -// 1 -> Array#map -// 2 -> Array#filter -// 3 -> Array#some -// 4 -> Array#every -// 5 -> Array#find -// 6 -> Array#findIndex -var ctx = __webpack_require__(62); -var IObject = __webpack_require__(122); -var toObject = __webpack_require__(36); -var toLength = __webpack_require__(23); -var asc = __webpack_require__(229); -module.exports = function (TYPE, $create) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = $create || asc; - return function ($this, callbackfn, that) { - var O = toObject($this); - var self = IObject(O); - var f = ctx(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var val, res; - for (;length > index; index++) if (NO_HOLES || index in self) { - val = self[index]; - res = f(val, index, O); - if (TYPE) { - if (IS_MAP) result[index] = res; // map - else if (res) switch (TYPE) { - case 3: return true; // some - case 5: return val; // find - case 6: return index; // findIndex - case 2: result.push(val); // filter - } else if (IS_EVERY) return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; -}; - - -/***/ }), -/* 68 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -30316,6 +29952,372 @@ DataManager._additionalHeaders = {}; DataManager._basePath = ""; DataManager._assetBasePath = ""; +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TableExclusion; }); +/** + * Database's table exclusion constraint stored in this class. + */ +var TableExclusion = /** @class */ (function () { + // ------------------------------------------------------------------------- + // Constructor + // ------------------------------------------------------------------------- + function TableExclusion(options) { + this.name = options.name; + this.expression = options.expression; + } + // ------------------------------------------------------------------------- + // Public Methods + // ------------------------------------------------------------------------- + /** + * Creates a new copy of this constraint with exactly same properties. + */ + TableExclusion.prototype.clone = function () { + return new TableExclusion({ + name: this.name, + expression: this.expression, + }); + }; + // ------------------------------------------------------------------------- + // Static Methods + // ------------------------------------------------------------------------- + /** + * Creates exclusions from the exclusion metadata object. + */ + TableExclusion.create = function (exclusionMetadata) { + return new TableExclusion({ + name: exclusionMetadata.name, + expression: exclusionMetadata.expression + }); + }; + return TableExclusion; +}()); + + +//# sourceMappingURL=TableExclusion.js.map + + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ApplyValueTransformers; }); +var ApplyValueTransformers = /** @class */ (function () { + function ApplyValueTransformers() { + } + ApplyValueTransformers.transformFrom = function (transformer, databaseValue) { + if (Array.isArray(transformer)) { + var reverseTransformers = transformer.slice().reverse(); + return reverseTransformers.reduce(function (transformedValue, _transformer) { + return _transformer.from(transformedValue); + }, databaseValue); + } + return transformer.from(databaseValue); + }; + ApplyValueTransformers.transformTo = function (transformer, entityValue) { + if (Array.isArray(transformer)) { + return transformer.reduce(function (transformedValue, _transformer) { + return _transformer.to(transformedValue); + }, entityValue); + } + return transformer.to(entityValue); + }; + return ApplyValueTransformers; +}()); + + +//# sourceMappingURL=ApplyValueTransformers.js.map + + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RandomGenerator; }); +var RandomGenerator = /** @class */ (function () { + function RandomGenerator() { + } + /** + * discuss at: http://locutus.io/php/sha1/ + * original by: Webtoolkit.info (http://www.webtoolkit.info/) + * improved by: Michael White (http://getsprink.com) + * improved by: Kevin van Zonneveld (http://kvz.io) + * input by: Brett Zamir (http://brett-zamir.me) + * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then + * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly + * note 1: in a steaming fashion for faster and more efficient hashing + * example 1: sha1('Kevin van Zonneveld') + * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897' + */ + RandomGenerator.sha1 = function (str) { + var _rotLeft = function (n, s) { + var t4 = (n << s) | (n >>> (32 - s)); + return t4; + }; + var _cvtHex = function (val) { + var str = ""; + var i; + var v; + for (i = 7; i >= 0; i--) { + v = (val >>> (i * 4)) & 0x0f; + str += v.toString(16); + } + return str; + }; + var blockstart; + var i, j; + var W = new Array(80); + var H0 = 0x67452301; + var H1 = 0xEFCDAB89; + var H2 = 0x98BADCFE; + var H3 = 0x10325476; + var H4 = 0xC3D2E1F0; + var A, B, C, D, E; + var temp; + // utf8_encode + str = /*unescape*/ (encodeURIComponent(str)); + var strLen = str.length; + var wordArray = []; + for (i = 0; i < strLen - 3; i += 4) { + j = str.charCodeAt(i) << 24 | + str.charCodeAt(i + 1) << 16 | + str.charCodeAt(i + 2) << 8 | + str.charCodeAt(i + 3); + wordArray.push(j); + } + switch (strLen % 4) { + case 0: + i = 0x080000000; + break; + case 1: + i = str.charCodeAt(strLen - 1) << 24 | 0x0800000; + break; + case 2: + i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000; + break; + case 3: + i = str.charCodeAt(strLen - 3) << 24 | + str.charCodeAt(strLen - 2) << 16 | + str.charCodeAt(strLen - 1) << + 8 | 0x80; + break; + } + wordArray.push(i); + while ((wordArray.length % 16) !== 14) { + wordArray.push(0); + } + wordArray.push(strLen >>> 29); + wordArray.push((strLen << 3) & 0x0ffffffff); + for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) { + for (i = 0; i < 16; i++) { + W[i] = wordArray[blockstart + i]; + } + for (i = 16; i <= 79; i++) { + W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + } + A = H0; + B = H1; + C = H2; + D = H3; + E = H4; + for (i = 0; i <= 19; i++) { + temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + for (i = 20; i <= 39; i++) { + temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + for (i = 40; i <= 59; i++) { + temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + for (i = 60; i <= 79; i++) { + temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; + E = D; + D = C; + C = _rotLeft(B, 30); + B = A; + A = temp; + } + H0 = (H0 + A) & 0x0ffffffff; + H1 = (H1 + B) & 0x0ffffffff; + H2 = (H2 + C) & 0x0ffffffff; + H3 = (H3 + D) & 0x0ffffffff; + H4 = (H4 + E) & 0x0ffffffff; + } + temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4); + return temp.toLowerCase(); + }; + /** + * RFC4122 compliant UUID v4 generator. + */ + RandomGenerator.uuid4 = function () { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + }; + return RandomGenerator; +}()); + + +//# sourceMappingURL=RandomGenerator.js.map + + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(64); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 64 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; + + +/***/ }), +/* 65 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +var pIE = __webpack_require__(123); +var createDesc = __webpack_require__(87); +var toIObject = __webpack_require__(53); +var toPrimitive = __webpack_require__(82); +var has = __webpack_require__(51); +var IE8_DOM_DEFINE = __webpack_require__(213); +var gOPD = Object.getOwnPropertyDescriptor; + +exports.f = __webpack_require__(28) ? gOPD : function getOwnPropertyDescriptor(O, P) { + O = toIObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return gOPD(O, P); + } catch (e) { /* empty */ } + if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); +}; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +// most Object methods by ES6 should accept primitives +var $export = __webpack_require__(3); +var core = __webpack_require__(26); +var fails = __webpack_require__(12); +module.exports = function (KEY, exec) { + var fn = (core.Object || {})[KEY] || Object[KEY]; + var exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); +}; + + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = __webpack_require__(63); +var IObject = __webpack_require__(122); +var toObject = __webpack_require__(36); +var toLength = __webpack_require__(23); +var asc = __webpack_require__(229); +module.exports = function (TYPE, $create) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + var create = $create || asc; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IObject(O); + var f = ctx(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var val, res; + for (;length > index; index++) if (NO_HOLES || index in self) { + val = self[index]; + res = f(val, index, O); + if (TYPE) { + if (IS_MAP) result[index] = res; // map + else if (res) switch (TYPE) { + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; + + /***/ }), /* 69 */ /***/ (function(module, exports, __webpack_require__) { @@ -30386,11 +30388,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.MenuSite = void 0; -var TemplateSite_1 = __webpack_require__(199); +var TemplateSite_1 = __webpack_require__(198); -var defaultMenuTemplate = __webpack_require__(510); +var defaultMenuTemplate = __webpack_require__(511); -var NavbarFragment_1 = __webpack_require__(160); +var NavbarFragment_1 = __webpack_require__(161); var Context_1 = __webpack_require__(111); @@ -30635,14 +30637,14 @@ var ReturningStatementNotSupportedError = /** @class */ (function (_super) { /* harmony import */ var _error_TransactionAlreadyStartedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70); /* harmony import */ var _error_TransactionNotStartedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44); /* harmony import */ var _schema_builder_table_TableColumn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25); -/* harmony import */ var _metadata_ColumnMetadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(31); +/* harmony import */ var _metadata_ColumnMetadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(32); /* harmony import */ var _schema_builder_table_Table__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); /* harmony import */ var _schema_builder_table_TableIndex__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(38); /* harmony import */ var _schema_builder_table_TableForeignKey__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(48); -/* harmony import */ var _schema_builder_view_View__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(56); +/* harmony import */ var _schema_builder_view_View__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(57); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(8); /* harmony import */ var _Query__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(2); -/* harmony import */ var _schema_builder_table_TableUnique__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(30); +/* harmony import */ var _schema_builder_table_TableUnique__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(31); /* harmony import */ var _query_runner_BaseQueryRunner__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(163); /* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(6); /* harmony import */ var _schema_builder_table_TableCheck__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(43); @@ -32458,34 +32460,34 @@ module.exports = function (it) { "use strict"; if (__webpack_require__(28)) { - var LIBRARY = __webpack_require__(88); + var LIBRARY = __webpack_require__(89); var global = __webpack_require__(11); var fails = __webpack_require__(12); var $export = __webpack_require__(3); var $typed = __webpack_require__(145); var $buffer = __webpack_require__(188); - var ctx = __webpack_require__(62); + var ctx = __webpack_require__(63); var anInstance = __webpack_require__(107); - var propertyDesc = __webpack_require__(86); + var propertyDesc = __webpack_require__(87); var hide = __webpack_require__(52); var redefineAll = __webpack_require__(108); - var toInteger = __webpack_require__(64); + var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); var toIndex = __webpack_require__(240); - var toAbsoluteIndex = __webpack_require__(90); + var toAbsoluteIndex = __webpack_require__(91); var toPrimitive = __webpack_require__(82); var has = __webpack_require__(51); var classof = __webpack_require__(124); var isObject = __webpack_require__(14); var toObject = __webpack_require__(36); var isArrayIter = __webpack_require__(180); - var create = __webpack_require__(91); - var getPrototypeOf = __webpack_require__(93); - var gOPN = __webpack_require__(92).f; + var create = __webpack_require__(92); + var getPrototypeOf = __webpack_require__(94); + var gOPN = __webpack_require__(93).f; var getIterFn = __webpack_require__(182); - var uid = __webpack_require__(87); - var wks = __webpack_require__(18); - var createArrayMethod = __webpack_require__(67); + var uid = __webpack_require__(88); + var wks = __webpack_require__(19); + var createArrayMethod = __webpack_require__(68); var createArrayIncludes = __webpack_require__(135); var speciesConstructor = __webpack_require__(125); var ArrayIterators = __webpack_require__(184); @@ -32495,7 +32497,7 @@ if (__webpack_require__(28)) { var arrayFill = __webpack_require__(183); var arrayCopyWithin = __webpack_require__(231); var $DP = __webpack_require__(29); - var $GOPD = __webpack_require__(65); + var $GOPD = __webpack_require__(66); var dP = $DP.f; var gOPD = $GOPD.f; var RangeError = global.RangeError; @@ -33008,9 +33010,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.EasySyncBaseModel = void 0; -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var EasySyncBaseModel = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(EasySyncBaseModel, _cordova_sites_databa); @@ -34011,7 +34013,7 @@ function localstorage() { } } -module.exports = __webpack_require__(486)(exports); +module.exports = __webpack_require__(487)(exports); const {formatters} = module.exports; @@ -34051,7 +34053,7 @@ module.exports = function (it, S) { /* 83 */ /***/ (function(module, exports, __webpack_require__) { -var META = __webpack_require__(87)('meta'); +var META = __webpack_require__(88)('meta'); var isObject = __webpack_require__(14); var has = __webpack_require__(51); var setDesc = __webpack_require__(29).f; @@ -34158,9 +34160,9 @@ exports.Dialog = void 0; var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var Dialog = /*#__PURE__*/function () { function Dialog(content, title) { @@ -34436,6 +34438,152 @@ exports.Dialog = Dialog; /***/ }), /* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Toast = void 0; + +var Helper_1 = __webpack_require__(15); + +var ToastManager_1 = __webpack_require__(259); + +var Toast = /*#__PURE__*/function () { + function Toast(message, duration, shouldTranslateOrTranslationArgs) { + _classCallCheck(this, Toast); + + this._message = message; + this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION); + this._shouldTranslate = shouldTranslateOrTranslationArgs !== false; + this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []); + this._id = Toast.LAST_ID++; + this._toastElement = null; + } + + _createClass(Toast, [{ + key: "getId", + value: function getId() { + return this._id; + } + }, { + key: "getMessage", + value: function getMessage() { + return this._message; + } + }, { + key: "getDuration", + value: function getDuration() { + return this._duration; + } + }, { + key: "isShouldTranslate", + value: function isShouldTranslate() { + return this._shouldTranslate; + } + }, { + key: "getTranslationArgs", + value: function getTranslationArgs() { + return this._translationArgs; + } + }, { + key: "setToastElement", + value: function setToastElement(element) { + this._toastElement = element; + } + }, { + key: "getToastElement", + value: function getToastElement() { + return this._toastElement; + } + }, { + key: "show", + value: function show() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + return _context.abrupt("return", ToastManager_1.ToastManager.getInstance().showToast(this)); + + case 1: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + } + }, { + key: "hide", + value: function hide() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + return _context2.abrupt("return", ToastManager_1.ToastManager.getInstance().hideToast(this)); + + case 1: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + } + }]); + + return Toast; +}(); + +exports.Toast = Toast; +Toast.LAST_ID = 0; +Toast.DEFAULT_DURATION = 2500; + +/***/ }), +/* 86 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -34462,7 +34610,7 @@ var LockNotSupportedOnGivenDriverError = /** @class */ (function (_super) { /***/ }), -/* 86 */ +/* 87 */ /***/ (function(module, exports) { module.exports = function (bitmap, value) { @@ -34476,7 +34624,7 @@ module.exports = function (bitmap, value) { /***/ }), -/* 87 */ +/* 88 */ /***/ (function(module, exports) { var id = 0; @@ -34487,14 +34635,14 @@ module.exports = function (key) { /***/ }), -/* 88 */ +/* 89 */ /***/ (function(module, exports) { module.exports = false; /***/ }), -/* 89 */ +/* 90 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.14 / 15.2.3.14 Object.keys(O) @@ -34507,10 +34655,10 @@ module.exports = Object.keys || function keys(O) { /***/ }), -/* 90 */ +/* 91 */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var max = Math.max; var min = Math.min; module.exports = function (index, length) { @@ -34520,7 +34668,7 @@ module.exports = function (index, length) { /***/ }), -/* 91 */ +/* 92 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) @@ -34567,7 +34715,7 @@ module.exports = Object.create || function create(O, Properties) { /***/ }), -/* 92 */ +/* 93 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) @@ -34580,7 +34728,7 @@ exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { /***/ }), -/* 93 */ +/* 94 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) @@ -34599,11 +34747,11 @@ module.exports = Object.getPrototypeOf || function (O) { /***/ }), -/* 94 */ +/* 95 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.31 Array.prototype[@@unscopables] -var UNSCOPABLES = __webpack_require__(18)('unscopables'); +var UNSCOPABLES = __webpack_require__(19)('unscopables'); var ArrayProto = Array.prototype; if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(52)(ArrayProto, UNSCOPABLES, {}); module.exports = function (key) { @@ -34612,7 +34760,7 @@ module.exports = function (key) { /***/ }), -/* 95 */ +/* 96 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(14); @@ -34623,11 +34771,11 @@ module.exports = function (it, TYPE) { /***/ }), -/* 96 */ +/* 97 */ /***/ (function(module, exports, __webpack_require__) { /* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(97) +var buffer = __webpack_require__(98) var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers @@ -34691,7 +34839,7 @@ SafeBuffer.allocUnsafeSlow = function (size) { /***/ }), -/* 97 */ +/* 98 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34705,9 +34853,9 @@ SafeBuffer.allocUnsafeSlow = function (size) { -var base64 = __webpack_require__(480) -var ieee754 = __webpack_require__(481) -var isArray = __webpack_require__(482) +var base64 = __webpack_require__(481) +var ieee754 = __webpack_require__(482) +var isArray = __webpack_require__(483) exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer @@ -36488,7 +36636,7 @@ function isnan (val) { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(193))) /***/ }), -/* 98 */ +/* 99 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -36600,7 +36748,7 @@ var OpenSubmenuAction = /*#__PURE__*/function (_MenuAction_1$MenuAct) { exports.OpenSubmenuAction = OpenSubmenuAction; /***/ }), -/* 99 */ +/* 100 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -37306,7 +37454,7 @@ UserManager.ACCESS_CLASS_PREFIX = "access-"; UserManager.OFFLINE_ACCESSES = ["offline"]; /***/ }), -/* 100 */ +/* 101 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -37332,152 +37480,6 @@ var UpdateValuesMissingError = /** @class */ (function (_super) { //# sourceMappingURL=UpdateValuesMissingError.js.map -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Toast = void 0; - -var Helper_1 = __webpack_require__(15); - -var ToastManager_1 = __webpack_require__(259); - -var Toast = /*#__PURE__*/function () { - function Toast(message, duration, shouldTranslateOrTranslationArgs) { - _classCallCheck(this, Toast); - - this._message = message; - this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION); - this._shouldTranslate = shouldTranslateOrTranslationArgs !== false; - this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []); - this._id = Toast.LAST_ID++; - this._toastElement = null; - } - - _createClass(Toast, [{ - key: "getId", - value: function getId() { - return this._id; - } - }, { - key: "getMessage", - value: function getMessage() { - return this._message; - } - }, { - key: "getDuration", - value: function getDuration() { - return this._duration; - } - }, { - key: "isShouldTranslate", - value: function isShouldTranslate() { - return this._shouldTranslate; - } - }, { - key: "getTranslationArgs", - value: function getTranslationArgs() { - return this._translationArgs; - } - }, { - key: "setToastElement", - value: function setToastElement(element) { - this._toastElement = element; - } - }, { - key: "getToastElement", - value: function getToastElement() { - return this._toastElement; - } - }, { - key: "show", - value: function show() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", ToastManager_1.ToastManager.getInstance().showToast(this)); - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - } - }, { - key: "hide", - value: function hide() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", ToastManager_1.ToastManager.getInstance().hideToast(this)); - - case 1: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - } - }]); - - return Toast; -}(); - -exports.Toast = Toast; -Toast.LAST_ID = 0; -Toast.DEFAULT_DURATION = 2500; - /***/ }), /* 102 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -37511,7 +37513,7 @@ var OptimisticLockCanNotBeUsedError = /** @class */ (function (_super) { var def = __webpack_require__(29).f; var has = __webpack_require__(51); -var TAG = __webpack_require__(18)('toStringTag'); +var TAG = __webpack_require__(19)('toStringTag'); module.exports = function (it, tag, stat) { if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); @@ -37570,7 +37572,7 @@ module.exports = {}; var global = __webpack_require__(11); var dP = __webpack_require__(29); var DESCRIPTORS = __webpack_require__(28); -var SPECIES = __webpack_require__(18)('species'); +var SPECIES = __webpack_require__(19)('species'); module.exports = function (KEY) { var C = global[KEY]; @@ -37640,7 +37642,7 @@ if (typeof Object.create === 'function') { /* 110 */ /***/ (function(module, exports, __webpack_require__) { -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer // prototype class for hash functions function Hash (blockSize, finalSize) { @@ -37775,7 +37777,7 @@ exports.Context = void 0; var Helper_1 = __webpack_require__(15); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); /** * Basis-Klasse für Seiten und Fragmente */ @@ -38295,9 +38297,9 @@ exports.User = void 0; var shared_1 = __webpack_require__(127); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var Role_1 = __webpack_require__(204); +var Role_1 = __webpack_require__(203); var User = /*#__PURE__*/function (_shared_1$EasySyncBas) { _inherits(User, _shared_1$EasySyncBas); @@ -38546,13 +38548,13 @@ var tslib_es6 = __webpack_require__(0); var BrowserDisabledDriversDummy = __webpack_require__(1); // EXTERNAL MODULE: ./node_modules/typeorm/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js -var RawSqlResultsToEntityTransformer = __webpack_require__(286); +var RawSqlResultsToEntityTransformer = __webpack_require__(287); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js -var PessimisticLockTransactionRequiredError = __webpack_require__(152); +var PessimisticLockTransactionRequiredError = __webpack_require__(153); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js -var NoVersionOrUpdateDateColumnError = __webpack_require__(153); +var NoVersionOrUpdateDateColumnError = __webpack_require__(154); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js var OptimisticLockVersionMismatchError = __webpack_require__(130); @@ -38570,7 +38572,7 @@ var RelationIdAttribute = __webpack_require__(118); var RelationCountAttribute = __webpack_require__(119); // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/DriverUtils.js -var DriverUtils = __webpack_require__(20); +var DriverUtils = __webpack_require__(21); // CONCATENATED MODULE: ./node_modules/typeorm/browser/query-builder/relation-id/RelationIdLoader.js @@ -39022,13 +39024,13 @@ var RelationCountMetadataToAttributeTransformer_RelationCountMetadataToAttribute var QueryBuilder = __webpack_require__(40); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js -var LockNotSupportedOnGivenDriverError = __webpack_require__(85); +var LockNotSupportedOnGivenDriverError = __webpack_require__(86); // EXTERNAL MODULE: ./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js + 1 modules var AbstractSqliteDriver = __webpack_require__(16); // EXTERNAL MODULE: ./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js -var OffsetWithoutLimitNotSupportedError = __webpack_require__(159); +var OffsetWithoutLimitNotSupportedError = __webpack_require__(160); // EXTERNAL MODULE: ./node_modules/typeorm/browser/subscriber/BroadcasterResult.js var BroadcasterResult = __webpack_require__(8); @@ -41224,7 +41226,7 @@ exports.f = {}.propertyIsEnumerable; // getting tag from 19.1.3.6 Object.prototype.toString() var cof = __webpack_require__(75); -var TAG = __webpack_require__(18)('toStringTag'); +var TAG = __webpack_require__(19)('toStringTag'); // ES3 wrong here var ARG = cof(function () { return arguments; }()) == 'Arguments'; @@ -41253,8 +41255,8 @@ module.exports = function (it) { // 7.3.20 SpeciesConstructor(O, defaultConstructor) var anObject = __webpack_require__(13); -var aFunction = __webpack_require__(63); -var SPECIES = __webpack_require__(18)('species'); +var aFunction = __webpack_require__(64); +var SPECIES = __webpack_require__(19)('species'); module.exports = function (O, D) { var C = anObject(O).constructor; var S; @@ -41332,15 +41334,15 @@ Object.defineProperty(exports, "__esModule", { }); exports.UserSite = void 0; -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var client_1 = __webpack_require__(4); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var LoginSite_1 = __webpack_require__(148); +var LoginSite_1 = __webpack_require__(149); -var NotAllowedSite_1 = __webpack_require__(272); +var NotAllowedSite_1 = __webpack_require__(273); var UserSite = /*#__PURE__*/function (_client_1$DelegateSit) { _inherits(UserSite, _client_1$DelegateSit); @@ -41583,9 +41585,9 @@ Object.defineProperty(exports, "__esModule", { __exportStar(__webpack_require__(78), exports); -__exportStar(__webpack_require__(202), exports); +__exportStar(__webpack_require__(201), exports); -__exportStar(__webpack_require__(203), exports); +__exportStar(__webpack_require__(202), exports); /***/ }), /* 128 */ @@ -41659,19 +41661,19 @@ exports.EasySyncClientDb = void 0; var client_1 = __webpack_require__(4); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var ClientModel_1 = __webpack_require__(276); +var ClientModel_1 = __webpack_require__(277); var EasySyncBaseModel_1 = __webpack_require__(78); -var EasySyncPartialModel_1 = __webpack_require__(202); +var EasySyncPartialModel_1 = __webpack_require__(201); -var ClientPartialModel_1 = __webpack_require__(277); +var ClientPartialModel_1 = __webpack_require__(278); -var FileMedium_1 = __webpack_require__(203); +var FileMedium_1 = __webpack_require__(202); -var ClientFileMedium_1 = __webpack_require__(150); +var ClientFileMedium_1 = __webpack_require__(151); var EasySyncClientDb = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(EasySyncClientDb, _cordova_sites_databa); @@ -41768,7 +41770,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.LastSyncDates = void 0; -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var LastSyncDates = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(LastSyncDates, _cordova_sites_databa); @@ -41920,29 +41922,29 @@ Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(__webpack_require__(150), exports); - -__exportStar(__webpack_require__(276), exports); +__exportStar(__webpack_require__(151), exports); __exportStar(__webpack_require__(277), exports); +__exportStar(__webpack_require__(278), exports); + __exportStar(__webpack_require__(128), exports); -__exportStar(__webpack_require__(206), exports); - -__exportStar(__webpack_require__(274), exports); +__exportStar(__webpack_require__(205), exports); __exportStar(__webpack_require__(275), exports); +__exportStar(__webpack_require__(276), exports); + __exportStar(__webpack_require__(129), exports); -__exportStar(__webpack_require__(210), exports); +__exportStar(__webpack_require__(209), exports); -__exportStar(__webpack_require__(530), exports); +__exportStar(__webpack_require__(533), exports); -__exportStar(__webpack_require__(531), exports); +__exportStar(__webpack_require__(534), exports); -__exportStar(__webpack_require__(532), exports); +__exportStar(__webpack_require__(535), exports); /***/ }), /* 133 */ @@ -41976,27 +41978,27 @@ Object.defineProperty(exports, "__esModule", { __exportStar(__webpack_require__(126), exports); -__exportStar(__webpack_require__(273), exports); +__exportStar(__webpack_require__(274), exports); -__exportStar(__webpack_require__(205), exports); +__exportStar(__webpack_require__(204), exports); -__exportStar(__webpack_require__(149), exports); +__exportStar(__webpack_require__(150), exports); -__exportStar(__webpack_require__(529), exports); +__exportStar(__webpack_require__(532), exports); -__exportStar(__webpack_require__(533), exports); - -__exportStar(__webpack_require__(271), exports); - -__exportStar(__webpack_require__(148), exports); +__exportStar(__webpack_require__(536), exports); __exportStar(__webpack_require__(272), exports); -__exportStar(__webpack_require__(535), exports); +__exportStar(__webpack_require__(149), exports); -__exportStar(__webpack_require__(99), exports); +__exportStar(__webpack_require__(273), exports); -__exportStar(__webpack_require__(269), exports); +__exportStar(__webpack_require__(538), exports); + +__exportStar(__webpack_require__(100), exports); + +__exportStar(__webpack_require__(270), exports); /***/ }), /* 134 */ @@ -42011,7 +42013,7 @@ var store = global[SHARED] || (global[SHARED] = {}); return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: core.version, - mode: __webpack_require__(88) ? 'pure' : 'global', + mode: __webpack_require__(89) ? 'pure' : 'global', copyright: '© 2020 Denis Pushkarev (zloirock.ru)' }); @@ -42024,7 +42026,7 @@ var store = global[SHARED] || (global[SHARED] = {}); // true -> Array#includes var toIObject = __webpack_require__(53); var toLength = __webpack_require__(23); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); module.exports = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIObject($this); @@ -42067,7 +42069,7 @@ module.exports = Array.isArray || function isArray(arg) { /* 138 */ /***/ (function(module, exports, __webpack_require__) { -var ITERATOR = __webpack_require__(18)('iterator'); +var ITERATOR = __webpack_require__(19)('iterator'); var SAFE_CLOSING = false; try { @@ -42150,7 +42152,7 @@ var redefine = __webpack_require__(45); var hide = __webpack_require__(52); var fails = __webpack_require__(12); var defined = __webpack_require__(76); -var wks = __webpack_require__(18); +var wks = __webpack_require__(19); var regexpExec = __webpack_require__(185); var SPECIES = wks('species'); @@ -42246,7 +42248,7 @@ module.exports = function (KEY, length, exec) { /* 142 */ /***/ (function(module, exports, __webpack_require__) { -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var call = __webpack_require__(228); var isArrayIter = __webpack_require__(180); var anObject = __webpack_require__(13); @@ -42381,7 +42383,7 @@ module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { var global = __webpack_require__(11); var hide = __webpack_require__(52); -var uid = __webpack_require__(87); +var uid = __webpack_require__(88); var TYPED = uid('typed_array'); var VIEW = uid('view'); var ABV = !!(global.ArrayBuffer && global.DataView); @@ -42483,11 +42485,11 @@ var Context_1 = __webpack_require__(111); var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); -var EventManager_1 = __webpack_require__(198); +var EventManager_1 = __webpack_require__(197); /** * Basisklasse für eine Seite */ @@ -42978,6 +42980,30 @@ AbstractSite.EVENT = { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(__webpack_require__(492), exports); +__exportStar(__webpack_require__(253), exports); +__exportStar(__webpack_require__(493), exports); +__exportStar(__webpack_require__(494), exports); +__exportStar(__webpack_require__(27), exports); +//# sourceMappingURL=client.js.map + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -43610,7 +43636,7 @@ BaseDatabase.TYPES = { }; /***/ }), -/* 148 */ +/* 149 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43683,15 +43709,15 @@ var UserSite_1 = __webpack_require__(126); var client_1 = __webpack_require__(4); -var view = __webpack_require__(525); +var view = __webpack_require__(528); -var StartUserSiteMenuAction_1 = __webpack_require__(205); +var StartUserSiteMenuAction_1 = __webpack_require__(204); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var UserMenuAction_1 = __webpack_require__(149); +var UserMenuAction_1 = __webpack_require__(150); -var ForgotPasswordSite_1 = __webpack_require__(271); +var ForgotPasswordSite_1 = __webpack_require__(272); var LoginSite = /*#__PURE__*/function (_client_1$MenuSite) { _inherits(LoginSite, _client_1$MenuSite); @@ -43840,7 +43866,7 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 149 */ +/* 150 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43879,7 +43905,7 @@ exports.UserMenuAction = void 0; var client_1 = __webpack_require__(4); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); var Helper_1 = __webpack_require__(7); @@ -43926,7 +43952,7 @@ var UserMenuAction = /*#__PURE__*/function (_client_1$MenuAction) { exports.UserMenuAction = UserMenuAction; /***/ }), -/* 150 */ +/* 151 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43997,11 +44023,11 @@ exports.ClientFileMedium = void 0; var EasySyncBaseModel_1 = __webpack_require__(78); -var FileTransferPromise_1 = __webpack_require__(274); +var FileTransferPromise_1 = __webpack_require__(275); var Helper_1 = __webpack_require__(7); -var FilePromise_1 = __webpack_require__(206); +var FilePromise_1 = __webpack_require__(205); var ClientFileMedium = /*#__PURE__*/function (_EasySyncBaseModel_1$) { _inherits(ClientFileMedium, _EasySyncBaseModel_1$); @@ -44165,7 +44191,7 @@ var ClientFileMedium = /*#__PURE__*/function (_EasySyncBaseModel_1$) { exports.ClientFileMedium = ClientFileMedium; /***/ }), -/* 151 */ +/* 152 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44197,7 +44223,7 @@ var CannotCreateEntityIdMapError = /** @class */ (function (_super) { /***/ }), -/* 152 */ +/* 153 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44224,7 +44250,7 @@ var PessimisticLockTransactionRequiredError = /** @class */ (function (_super) { /***/ }), -/* 153 */ +/* 154 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44251,7 +44277,7 @@ var NoVersionOrUpdateDateColumnError = /** @class */ (function (_super) { /***/ }), -/* 154 */ +/* 155 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44275,7 +44301,7 @@ var Brackets = /** @class */ (function () { /***/ }), -/* 155 */ +/* 156 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44294,7 +44320,7 @@ function In(value) { /***/ }), -/* 156 */ +/* 157 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44321,7 +44347,7 @@ var InsertValuesMissingError = /** @class */ (function (_super) { /***/ }), -/* 157 */ +/* 158 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44340,7 +44366,7 @@ var DeleteResult = /** @class */ (function () { /***/ }), -/* 158 */ +/* 159 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44366,7 +44392,7 @@ var MissingDeleteDateColumnError = /** @class */ (function (_super) { /***/ }), -/* 159 */ +/* 160 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -44393,7 +44419,7 @@ var OffsetWithoutLimitNotSupportedError = /** @class */ (function (_super) { /***/ }), -/* 160 */ +/* 161 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -44464,7 +44490,7 @@ exports.NavbarFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var defaultViewNavbar = __webpack_require__(509); +var defaultViewNavbar = __webpack_require__(510); var MenuAction_1 = __webpack_require__(80); @@ -44472,13 +44498,13 @@ var Helper_1 = __webpack_require__(15); var Context_1 = __webpack_require__(111); -var Menu_1 = __webpack_require__(200); +var Menu_1 = __webpack_require__(199); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); var DropdownRenderer_1 = __webpack_require__(260); -var AccordionRenderer_1 = __webpack_require__(201); +var AccordionRenderer_1 = __webpack_require__(200); var ColorIndicator_1 = __webpack_require__(256); @@ -45050,598 +45076,6 @@ NavbarFragment.onLogoClickListener = function () { NavbarFragment.title = "MeinBerufBau"; NavbarFragment.defaultActions = []; -/***/ }), -/* 161 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - -function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P ? value : new P(function (resolve) { - resolve(value); - }); - } - - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Form = void 0; - -var DataManager_1 = __webpack_require__(68); - -var Helper_1 = __webpack_require__(15); - -var Translator_1 = __webpack_require__(32); - -var Toast_1 = __webpack_require__(101); - -var Form = /*#__PURE__*/function () { - function Form(formElem, urlOrCallback, method) { - var _this = this; - - _classCallCheck(this, Form); - - this._formElem = formElem; - this._method = Helper_1.Helper.nonNull(method, formElem["method"], "POST"); - this._elementChangeListener = null; - this._validators = []; - this._isBusy = false; - - if (typeof urlOrCallback === "string") { - this._submitHandler = function (values) { - if (_this._method.toLowerCase() === "get") { - return DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)); - } else {//TODO, wenn Serververbindung kommt - // return (DataManager.send(urlOrCallback, values)); - } - }; - } else { - this._submitHandler = urlOrCallback; - } - - this._editors = []; - this._submitCallback = null; - - this.errorCallback = function (errors) { - return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this.setErrors(errors); - - case 2: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - }; - - formElem.addEventListener("submit", function (e) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - e.preventDefault(); - _context2.next = 3; - return self.doSubmit(e); - - case 3: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - }); - var self = this; - - _toConsumableArray(formElem.elements).forEach(function (element) { - element.addEventListener("change", function () { - if (this.value.trim() !== "") { - this.classList.add("notEmpty"); - } else { - this.classList.remove("notEmpty"); - } - - this.setCustomValidity(""); - - if (Helper_1.Helper.isNotNull(self._elementChangeListener)) { - self._elementChangeListener(element, this); - } - - this.setCustomValidity(""); - - if (element.accept && element.accept.indexOf("image") !== -1) { - if (element.files && element.files[0]) { - var reader = new FileReader(); - - reader.onload = function (e) { - var previewElem = formElem.querySelector("." + element.name + "-preview"); - - if (previewElem) { - previewElem.src = e.target["result"]; - } - }; - - reader.readAsDataURL(element.files[0]); - } else { - formElem.querySelector("." + element.name + "-preview").src = ""; - } - } - }); - element.addEventListener("keydown", function () { - this.setCustomValidity(""); - }); - }); - } - - _createClass(Form, [{ - key: "addValidator", - value: function addValidator(validatorCallback) { - this._validators.push(validatorCallback); - } - }, { - key: "onError", - value: function onError(errorHandler) { - this.errorCallback = errorHandler; - } - }, { - key: "addEditor", - value: function addEditor(e) { - this._editors.push(e); - } - }, { - key: "doSubmit", - value: function doSubmit(e) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { - var res; - return regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - if (this._isBusy) { - _context3.next = 5; - break; - } - - _context3.next = 3; - return this.submit(); - - case 3: - res = _context3.sent; - return _context3.abrupt("return", res); - - case 5: - return _context3.abrupt("return", false); - - case 6: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - })); - } - }, { - key: "setValues", - value: function setValues(valuePromise) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { - var values, k, options, val, option, previewImage; - return regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - this.setIsBusy(true); - _context4.next = 3; - return Promise.resolve(valuePromise); - - case 3: - values = _context4.sent; - this.setIsBusy(false); - - for (k in values) { - if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) { - if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + "Options"])) { - options = this._formElem.elements[k].options; - - for (val in values[k + "Options"]) { - option = document.createElement("option"); - option.value = val; - option.innerText = values[k + "Options"][val]; - options.add(option); - } - } - - if (this._formElem.elements[k].type && (this._formElem.elements[k].type === "checkbox" || this._formElem.elements[k].type === "radio")) { - this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k]; - } else if (this._formElem.elements[k].type && this._formElem.elements[k].type === "file") { - if (this._formElem.elements[k + "-hidden"]) { - this._formElem.elements[k + "-hidden"].value = values[k]; - } - - if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf("image") !== -1) { - previewImage = this._formElem.querySelector("." + k + "-preview"); - - if (previewImage) { - previewImage.src = values[k]; - } - } - } else { - this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]); - - if (this._formElem.elements[k].classList) { - if (Helper_1.Helper.isNotNull(values[k]) && ("" + values[k]).trim() !== "") { - this._formElem.elements[k].classList.add("notEmpty"); - } else { - this._formElem.elements[k].classList.remove("notEmpty"); - } - } - } - } - } - - return _context4.abrupt("return", this); - - case 7: - case "end": - return _context4.stop(); - } - } - }, _callee4, this); - })); - } - }, { - key: "getValues", - value: function getValues(filesToBase64) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { - var valuesFormData, values; - return regeneratorRuntime.wrap(function _callee5$(_context5) { - while (1) { - switch (_context5.prev = _context5.next) { - case 0: - valuesFormData = new FormData(this._formElem); - values = Array.from(valuesFormData["entries"]()).reduce(function (memo, pair) { - return Object.assign(Object.assign({}, memo), _defineProperty({}, pair[0], pair[1])); - }, {}); - - if (!Helper_1.Helper.nonNull(filesToBase64, true)) { - _context5.next = 6; - break; - } - - _context5.next = 5; - return Form.filesToBase64(values); - - case 5: - values = _context5.sent; - - case 6: - return _context5.abrupt("return", values); - - case 7: - case "end": - return _context5.stop(); - } - } - }, _callee5, this); - })); - } - }, { - key: "setElementChangeListener", - value: function setElementChangeListener(listener) { - this._elementChangeListener = listener; - } - }, { - key: "clearErrors", - value: function clearErrors() { - var _this2 = this; - - Object.keys(this._formElem.elements).forEach(function (elemKey) { - _this2._formElem.elements[elemKey].setCustomValidity(""); - }); - } - }, { - key: "setErrors", - value: function setErrors(errors) { - var hasElem = false; - var firstError = null; // let notCatchedErrors = []; - - for (var k in errors) { - if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== "hidden" && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) { - this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], "form-default-error"))); - - hasElem = true; - } else { - new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], "form-default-error")).show(); - } // if (Helper.isNull(firstError)) { - // firstError = ; - // } - - } // if (!hasElem && Helper.isNotNull(firstError)) { - // for (let k in this._formElem.elements) { - // if (this._formElem.elements[k].type !== "hidden") { - // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError)); - // hasElem = true; - // break; - // } - // } - // } - - - if (hasElem) { - "reportValidity" in this._formElem && this._formElem.reportValidity(); - } - } - }, { - key: "setIsBusy", - value: function setIsBusy(isBusy) { - this._isBusy = isBusy; - - if (this._isBusy) { - this._formElem.classList.add("sending"); - } else { - this._formElem.classList.remove("sending"); - } - } - }, { - key: "submit", - value: function submit() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { - var res; - return regeneratorRuntime.wrap(function _callee6$(_context6) { - while (1) { - switch (_context6.prev = _context6.next) { - case 0: - this._editors.forEach(function (e) { - return e.updateSourceElement(); - }); - - this.setIsBusy(true); - _context6.next = 4; - return this.validate(); - - case 4: - if (!_context6.sent) { - _context6.next = 24; - break; - } - - res = false; - _context6.prev = 6; - _context6.t0 = this; - _context6.next = 10; - return this.getValues(); - - case 10: - _context6.t1 = _context6.sent; - _context6.t2 = this; - _context6.next = 14; - return _context6.t0._submitHandler.call(_context6.t0, _context6.t1, _context6.t2); - - case 14: - res = _context6.sent; - _context6.next = 20; - break; - - case 17: - _context6.prev = 17; - _context6.t3 = _context6["catch"](6); - console.error(_context6.t3); - - case 20: - _context6.prev = 20; - this.setIsBusy(false); - return _context6.finish(20); - - case 23: - return _context6.abrupt("return", res); - - case 24: - this.setIsBusy(false); - return _context6.abrupt("return", false); - - case 26: - case "end": - return _context6.stop(); - } - } - }, _callee6, this, [[6, 17, 20, 23]]); - })); - } - }, { - key: "validate", - value: function validate() { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { - var _this3 = this; - - var values, res, hasErrors, errors; - return regeneratorRuntime.wrap(function _callee8$(_context8) { - while (1) { - switch (_context8.prev = _context8.next) { - case 0: - if (!("reportValidity" in this._formElem && !this._formElem.reportValidity())) { - _context8.next = 2; - break; - } - - return _context8.abrupt("return", false); - - case 2: - _context8.next = 4; - return this.getValues(); - - case 4: - values = _context8.sent; - _context8.next = 7; - return Helper_1.Helper.asyncForEach(this._validators, function (validator) { - return __awaiter(_this3, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee7() { - return regeneratorRuntime.wrap(function _callee7$(_context7) { - while (1) { - switch (_context7.prev = _context7.next) { - case 0: - return _context7.abrupt("return", validator(values, this)); - - case 1: - case "end": - return _context7.stop(); - } - } - }, _callee7, this); - })); - }, true); - - case 7: - res = _context8.sent; - hasErrors = false; - errors = {}; - res.forEach(function (value) { - if (value !== true) { - hasErrors = true; - - if (_typeof(value) === "object") { - for (var k in value) { - errors[k] = value[k]; - } - } - } - }); - - if (!hasErrors) { - _context8.next = 15; - break; - } - - _context8.next = 14; - return this.setErrors(errors); - - case 14: - return _context8.abrupt("return", false); - - case 15: - return _context8.abrupt("return", true); - - case 16: - case "end": - return _context8.stop(); - } - } - }, _callee8, this); - })); - } - }, { - key: "onSubmit", - value: function onSubmit(callback) { - this._submitCallback = callback; - } - }, { - key: "getFormElement", - value: function getFormElement() { - return this._formElem; - } - }], [{ - key: "filesToBase64", - value: function filesToBase64(values) { - return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee9() { - var filePromises; - return regeneratorRuntime.wrap(function _callee9$(_context9) { - while (1) { - switch (_context9.prev = _context9.next) { - case 0: - filePromises = []; - Object.keys(values).forEach(function (key) { - if (values[key] instanceof Blob) { - filePromises.push(new Promise(function (resolve, reject) { - var reader = new FileReader(); - - reader.onload = function () { - return resolve(reader.result); - }; - - reader.onerror = function (error) { - return reject(error); - }; - - reader.readAsDataURL(values[key]); - }).then(function (base64) { - return values[key] = base64; - })); - } - }); - _context9.next = 4; - return Promise.all(filePromises); - - case 4: - return _context9.abrupt("return", values); - - case 5: - case "end": - return _context9.stop(); - } - } - }, _callee9); - })); - } - }]); - - return Form; -}(); - -exports.Form = Form; - /***/ }), /* 162 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -46365,7 +45799,7 @@ module.exports = function (it) { /* 165 */ /***/ (function(module, exports, __webpack_require__) { -exports.f = __webpack_require__(18); +exports.f = __webpack_require__(19); /***/ }), @@ -46373,7 +45807,7 @@ exports.f = __webpack_require__(18); /***/ (function(module, exports, __webpack_require__) { var shared = __webpack_require__(134)('keys'); -var uid = __webpack_require__(87); +var uid = __webpack_require__(88); module.exports = function (key) { return shared[key] || (shared[key] = uid(key)); }; @@ -46413,7 +45847,7 @@ module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line function (test, buggy, set) { try { - set = __webpack_require__(62)(Function.call, __webpack_require__(65).f(Object.prototype, '__proto__').set, 2); + set = __webpack_require__(63)(Function.call, __webpack_require__(66).f(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch (e) { buggy = true; } @@ -46457,7 +45891,7 @@ module.exports = function (that, target, C) { "use strict"; -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var defined = __webpack_require__(76); module.exports = function repeat(count) { @@ -46501,7 +45935,7 @@ module.exports = (!$expm1 /* 175 */ /***/ (function(module, exports, __webpack_require__) { -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var defined = __webpack_require__(76); // true -> String#at // false -> String#codePointAt @@ -46526,15 +45960,15 @@ module.exports = function (TO_STRING) { "use strict"; -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var $export = __webpack_require__(3); var redefine = __webpack_require__(45); var hide = __webpack_require__(52); var Iterators = __webpack_require__(105); var $iterCreate = __webpack_require__(227); var setToStringTag = __webpack_require__(103); -var getPrototypeOf = __webpack_require__(93); -var ITERATOR = __webpack_require__(18)('iterator'); +var getPrototypeOf = __webpack_require__(94); +var ITERATOR = __webpack_require__(19)('iterator'); var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` var FF_ITERATOR = '@@iterator'; var KEYS = 'keys'; @@ -46617,7 +46051,7 @@ module.exports = function (that, searchString, NAME) { // 7.2.8 IsRegExp(argument) var isObject = __webpack_require__(14); var cof = __webpack_require__(75); -var MATCH = __webpack_require__(18)('match'); +var MATCH = __webpack_require__(19)('match'); module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); @@ -46628,7 +46062,7 @@ module.exports = function (it) { /* 179 */ /***/ (function(module, exports, __webpack_require__) { -var MATCH = __webpack_require__(18)('match'); +var MATCH = __webpack_require__(19)('match'); module.exports = function (KEY) { var re = /./; try { @@ -46648,7 +46082,7 @@ module.exports = function (KEY) { // check on default Array iterator var Iterators = __webpack_require__(105); -var ITERATOR = __webpack_require__(18)('iterator'); +var ITERATOR = __webpack_require__(19)('iterator'); var ArrayProto = Array.prototype; module.exports = function (it) { @@ -46663,7 +46097,7 @@ module.exports = function (it) { "use strict"; var $defineProperty = __webpack_require__(29); -var createDesc = __webpack_require__(86); +var createDesc = __webpack_require__(87); module.exports = function (object, index, value) { if (index in object) $defineProperty.f(object, index, createDesc(0, value)); @@ -46676,7 +46110,7 @@ module.exports = function (object, index, value) { /***/ (function(module, exports, __webpack_require__) { var classof = __webpack_require__(124); -var ITERATOR = __webpack_require__(18)('iterator'); +var ITERATOR = __webpack_require__(19)('iterator'); var Iterators = __webpack_require__(105); module.exports = __webpack_require__(26).getIteratorMethod = function (it) { if (it != undefined) return it[ITERATOR] @@ -46693,7 +46127,7 @@ module.exports = __webpack_require__(26).getIteratorMethod = function (it) { // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) var toObject = __webpack_require__(36); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); module.exports = function fill(value /* , start = 0, end = @length */) { var O = toObject(this); @@ -46713,7 +46147,7 @@ module.exports = function fill(value /* , start = 0, end = @length */) { "use strict"; -var addToUnscopables = __webpack_require__(94); +var addToUnscopables = __webpack_require__(95); var step = __webpack_require__(232); var Iterators = __webpack_require__(105); var toIObject = __webpack_require__(53); @@ -46832,7 +46266,7 @@ module.exports = function (S, index, unicode) { /* 187 */ /***/ (function(module, exports, __webpack_require__) { -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var invoke = __webpack_require__(221); var html = __webpack_require__(168); var cel = __webpack_require__(164); @@ -46926,16 +46360,16 @@ module.exports = { var global = __webpack_require__(11); var DESCRIPTORS = __webpack_require__(28); -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var $typed = __webpack_require__(145); var hide = __webpack_require__(52); var redefineAll = __webpack_require__(108); var fails = __webpack_require__(12); var anInstance = __webpack_require__(107); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); var toIndex = __webpack_require__(240); -var gOPN = __webpack_require__(92).f; +var gOPN = __webpack_require__(93).f; var dP = __webpack_require__(29).f; var arrayFill = __webpack_require__(183); var setToStringTag = __webpack_require__(103); @@ -47436,10 +46870,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _driver_cockroachdb_CockroachDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); /* harmony import */ var _QueryBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(40); -/* harmony import */ var _util_RandomGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(61); +/* harmony import */ var _util_RandomGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62); /* harmony import */ var _result_InsertResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(131); /* harmony import */ var _error_ReturningStatementNotSupportedError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(72); -/* harmony import */ var _error_InsertValuesMissingError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(156); +/* harmony import */ var _error_InsertValuesMissingError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(157); /* harmony import */ var _ReturningResultsEntityUpdator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(120); /* harmony import */ var _driver_sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(16); /* harmony import */ var _driver_sqljs_SqljsDriver__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(41); @@ -48054,7 +47488,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(8); /* harmony import */ var _driver_sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(16); /* harmony import */ var _error_LimitOnUpdateNotSupportedError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(116); -/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(100); +/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(101); /* harmony import */ var _error_EntityColumnNotFound__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(114); @@ -48591,7 +48025,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _driver_cockroachdb_CockroachDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); /* harmony import */ var _QueryBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(40); -/* harmony import */ var _result_DeleteResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(157); +/* harmony import */ var _result_DeleteResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(158); /* harmony import */ var _error_ReturningStatementNotSupportedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(72); /* harmony import */ var _driver_sqljs_SqljsDriver__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(8); @@ -48855,23 +48289,47 @@ var DeleteQueryBuilder = /** @class */ (function (_super) { "use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(__webpack_require__(491), exports); -__exportStar(__webpack_require__(253), exports); -__exportStar(__webpack_require__(492), exports); -__exportStar(__webpack_require__(493), exports); -__exportStar(__webpack_require__(27), exports); -//# sourceMappingURL=client.js.map + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } + +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } + +function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } + +function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } + +function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } + +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } + +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.EventManager = void 0; + +var cs_event_manager_1 = __webpack_require__(495); + +var EventManager = /*#__PURE__*/function (_cs_event_manager_1$E) { + _inherits(EventManager, _cs_event_manager_1$E); + + var _super = _createSuper(EventManager); + + function EventManager() { + _classCallCheck(this, EventManager); + + return _super.apply(this, arguments); + } + + return EventManager; +}(cs_event_manager_1.EventManager); + +exports.EventManager = EventManager; /***/ }), /* 198 */ @@ -48880,54 +48338,6 @@ __exportStar(__webpack_require__(27), exports); "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.EventManager = void 0; - -var cs_event_manager_1 = __webpack_require__(494); - -var EventManager = /*#__PURE__*/function (_cs_event_manager_1$E) { - _inherits(EventManager, _cs_event_manager_1$E); - - var _super = _createSuper(EventManager); - - function EventManager() { - _classCallCheck(this, EventManager); - - return _super.apply(this, arguments); - } - - return EventManager; -}(cs_event_manager_1.EventManager); - -exports.EventManager = EventManager; - -/***/ }), -/* 199 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -48951,7 +48361,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.TemplateSite = void 0; -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var MasterSite_1 = __webpack_require__(258); /** @@ -48996,7 +48406,7 @@ var TemplateSite = /*#__PURE__*/function (_MasterSite_1$MasterS) { exports.TemplateSite = TemplateSite; /***/ }), -/* 200 */ +/* 199 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49017,7 +48427,7 @@ var Helper_1 = __webpack_require__(15); var MenuAction_1 = __webpack_require__(80); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); /** * Klasse für ein Menü, was im Prinzip nichts anderes als eine Collection für MenuActions ist * Ein Menü hat einen oder mehrere Renderer, die für die Anzeige zuständig sind @@ -49288,7 +48698,7 @@ var Menu = /*#__PURE__*/function () { exports.Menu = Menu; /***/ }), -/* 201 */ +/* 200 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49337,13 +48747,13 @@ Object.defineProperty(exports, "__esModule", { }); exports.AccordionRenderer = void 0; -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); var MenuRenderer_1 = __webpack_require__(261); var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); /** * Leitet von DropdownRenderer ab, da Funktionalität fast gleich ist */ @@ -49512,7 +48922,7 @@ var AccordionRenderer = /*#__PURE__*/function (_MenuRenderer_1$MenuR) { exports.AccordionRenderer = AccordionRenderer; /***/ }), -/* 202 */ +/* 201 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49589,7 +48999,7 @@ var Helper_1 = __webpack_require__(7); var XSSHelper_1 = __webpack_require__(251); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var typeorm = _typeorm; // if (typeorm.default) { // typeorm = typeorm.default; @@ -49894,7 +49304,7 @@ exports.EasySyncPartialModel = EasySyncPartialModel; EasySyncPartialModel.CAN_BE_SYNCED = true; /***/ }), -/* 203 */ +/* 202 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -49933,7 +49343,7 @@ exports.FileMedium = void 0; var EasySyncBaseModel_1 = __webpack_require__(78); -var BaseDatabase_1 = __webpack_require__(147); +var BaseDatabase_1 = __webpack_require__(148); var Helper_1 = __webpack_require__(7); @@ -50008,7 +49418,7 @@ FileMedium.SCHEMA_NAME = "FileMedium"; BaseDatabase_1.BaseDatabase.addModel(FileMedium); /***/ }), -/* 204 */ +/* 203 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50047,9 +49457,9 @@ exports.Role = void 0; var shared_1 = __webpack_require__(127); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); -var Access_1 = __webpack_require__(270); +var Access_1 = __webpack_require__(271); var Role = /*#__PURE__*/function (_shared_1$EasySyncBas) { _inherits(Role, _shared_1$EasySyncBas); @@ -50140,7 +49550,7 @@ Role.CAN_BE_SYNCED = false; cordova_sites_database_1.BaseDatabase.addModel(Role); /***/ }), -/* 205 */ +/* 204 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50169,7 +49579,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.StartUserSiteMenuAction = void 0; -var UserMenuAction_1 = __webpack_require__(149); +var UserMenuAction_1 = __webpack_require__(150); var client_1 = __webpack_require__(4); @@ -50198,7 +49608,7 @@ var StartUserSiteMenuAction = /*#__PURE__*/function (_UserMenuAction_1$Use) { exports.StartUserSiteMenuAction = StartUserSiteMenuAction; /***/ }), -/* 206 */ +/* 205 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50249,7 +49659,7 @@ exports.FilePromise = void 0; var Helper_1 = __webpack_require__(7); -var FileWriterPromise_1 = __webpack_require__(275); +var FileWriterPromise_1 = __webpack_require__(276); var FilePromise = /*#__PURE__*/function () { function FilePromise(fileEntry) { @@ -50318,7 +49728,7 @@ var FilePromise = /*#__PURE__*/function () { exports.FilePromise = FilePromise; /***/ }), -/* 207 */ +/* 206 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -50780,7 +50190,7 @@ var RelationQueryBuilder_RelationQueryBuilder = /** @class */ (function (_super) /***/ }), -/* 208 */ +/* 207 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50797,7 +50207,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.ShareManager = void 0; -var ShareDialog_1 = __webpack_require__(266); +var ShareDialog_1 = __webpack_require__(267); var ShareManager = /*#__PURE__*/function () { function ShareManager() { @@ -50831,7 +50241,7 @@ var ShareManager = /*#__PURE__*/function () { exports.ShareManager = ShareManager; /***/ }), -/* 209 */ +/* 208 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50879,7 +50289,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var BaseDatabase_1 = __webpack_require__(147); +var BaseDatabase_1 = __webpack_require__(148); var BaseModel = /*#__PURE__*/function () { function BaseModel() { @@ -51185,7 +50595,7 @@ BaseModel.RELATION = { }; /***/ }), -/* 210 */ +/* 209 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -51238,7 +50648,7 @@ var LastSyncDates_1 = __webpack_require__(129); var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var EasySyncClientDb_1 = __webpack_require__(128); @@ -51246,11 +50656,11 @@ var typeorm = __webpack_require__(47); var EasySyncBaseModel_1 = __webpack_require__(78); -var ClientFileMedium_1 = __webpack_require__(150); +var ClientFileMedium_1 = __webpack_require__(151); -var FileMedium_1 = __webpack_require__(203); +var FileMedium_1 = __webpack_require__(202); -var BaseDatabase_1 = __webpack_require__(147); +var BaseDatabase_1 = __webpack_require__(148); var SyncJob = /*#__PURE__*/function () { function SyncJob() { @@ -52021,6 +51431,598 @@ var SyncJob = /*#__PURE__*/function () { exports.SyncJob = SyncJob; SyncJob.SYNC_PATH_PREFIX = "sync"; +/***/ }), +/* 210 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Form = void 0; + +var DataManager_1 = __webpack_require__(59); + +var Helper_1 = __webpack_require__(15); + +var Translator_1 = __webpack_require__(30); + +var Toast_1 = __webpack_require__(85); + +var Form = /*#__PURE__*/function () { + function Form(formElem, urlOrCallback, method) { + var _this = this; + + _classCallCheck(this, Form); + + this._formElem = formElem; + this._method = Helper_1.Helper.nonNull(method, formElem["method"], "POST"); + this._elementChangeListener = null; + this._validators = []; + this._isBusy = false; + + if (typeof urlOrCallback === "string") { + this._submitHandler = function (values) { + if (_this._method.toLowerCase() === "get") { + return DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)); + } else {//TODO, wenn Serververbindung kommt + // return (DataManager.send(urlOrCallback, values)); + } + }; + } else { + this._submitHandler = urlOrCallback; + } + + this._editors = []; + this._submitCallback = null; + + this.errorCallback = function (errors) { + return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.setErrors(errors); + + case 2: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + }; + + formElem.addEventListener("submit", function (e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + _context2.next = 3; + return self.doSubmit(e); + + case 3: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + }); + var self = this; + + _toConsumableArray(formElem.elements).forEach(function (element) { + element.addEventListener("change", function () { + if (this.value.trim() !== "") { + this.classList.add("notEmpty"); + } else { + this.classList.remove("notEmpty"); + } + + this.setCustomValidity(""); + + if (Helper_1.Helper.isNotNull(self._elementChangeListener)) { + self._elementChangeListener(element, this); + } + + this.setCustomValidity(""); + + if (element.accept && element.accept.indexOf("image") !== -1) { + if (element.files && element.files[0]) { + var reader = new FileReader(); + + reader.onload = function (e) { + var previewElem = formElem.querySelector("." + element.name + "-preview"); + + if (previewElem) { + previewElem.src = e.target["result"]; + } + }; + + reader.readAsDataURL(element.files[0]); + } else { + formElem.querySelector("." + element.name + "-preview").src = ""; + } + } + }); + element.addEventListener("keydown", function () { + this.setCustomValidity(""); + }); + }); + } + + _createClass(Form, [{ + key: "addValidator", + value: function addValidator(validatorCallback) { + this._validators.push(validatorCallback); + } + }, { + key: "onError", + value: function onError(errorHandler) { + this.errorCallback = errorHandler; + } + }, { + key: "addEditor", + value: function addEditor(e) { + this._editors.push(e); + } + }, { + key: "doSubmit", + value: function doSubmit(e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + var res; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + if (this._isBusy) { + _context3.next = 5; + break; + } + + _context3.next = 3; + return this.submit(); + + case 3: + res = _context3.sent; + return _context3.abrupt("return", res); + + case 5: + return _context3.abrupt("return", false); + + case 6: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + } + }, { + key: "setValues", + value: function setValues(valuePromise) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + var values, k, options, val, option, previewImage; + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + this.setIsBusy(true); + _context4.next = 3; + return Promise.resolve(valuePromise); + + case 3: + values = _context4.sent; + this.setIsBusy(false); + + for (k in values) { + if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) { + if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + "Options"])) { + options = this._formElem.elements[k].options; + + for (val in values[k + "Options"]) { + option = document.createElement("option"); + option.value = val; + option.innerText = values[k + "Options"][val]; + options.add(option); + } + } + + if (this._formElem.elements[k].type && (this._formElem.elements[k].type === "checkbox" || this._formElem.elements[k].type === "radio")) { + this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k]; + } else if (this._formElem.elements[k].type && this._formElem.elements[k].type === "file") { + if (this._formElem.elements[k + "-hidden"]) { + this._formElem.elements[k + "-hidden"].value = values[k]; + } + + if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf("image") !== -1) { + previewImage = this._formElem.querySelector("." + k + "-preview"); + + if (previewImage) { + previewImage.src = values[k]; + } + } + } else { + this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]); + + if (this._formElem.elements[k].classList) { + if (Helper_1.Helper.isNotNull(values[k]) && ("" + values[k]).trim() !== "") { + this._formElem.elements[k].classList.add("notEmpty"); + } else { + this._formElem.elements[k].classList.remove("notEmpty"); + } + } + } + } + } + + return _context4.abrupt("return", this); + + case 7: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + } + }, { + key: "getValues", + value: function getValues(filesToBase64) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { + var valuesFormData, values; + return regeneratorRuntime.wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + valuesFormData = new FormData(this._formElem); + values = Array.from(valuesFormData["entries"]()).reduce(function (memo, pair) { + return Object.assign(Object.assign({}, memo), _defineProperty({}, pair[0], pair[1])); + }, {}); + + if (!Helper_1.Helper.nonNull(filesToBase64, true)) { + _context5.next = 6; + break; + } + + _context5.next = 5; + return Form.filesToBase64(values); + + case 5: + values = _context5.sent; + + case 6: + return _context5.abrupt("return", values); + + case 7: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + } + }, { + key: "setElementChangeListener", + value: function setElementChangeListener(listener) { + this._elementChangeListener = listener; + } + }, { + key: "clearErrors", + value: function clearErrors() { + var _this2 = this; + + Object.keys(this._formElem.elements).forEach(function (elemKey) { + _this2._formElem.elements[elemKey].setCustomValidity(""); + }); + } + }, { + key: "setErrors", + value: function setErrors(errors) { + var hasElem = false; + var firstError = null; // let notCatchedErrors = []; + + for (var k in errors) { + if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== "hidden" && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) { + this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], "form-default-error"))); + + hasElem = true; + } else { + new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], "form-default-error")).show(); + } // if (Helper.isNull(firstError)) { + // firstError = ; + // } + + } // if (!hasElem && Helper.isNotNull(firstError)) { + // for (let k in this._formElem.elements) { + // if (this._formElem.elements[k].type !== "hidden") { + // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError)); + // hasElem = true; + // break; + // } + // } + // } + + + if (hasElem) { + "reportValidity" in this._formElem && this._formElem.reportValidity(); + } + } + }, { + key: "setIsBusy", + value: function setIsBusy(isBusy) { + this._isBusy = isBusy; + + if (this._isBusy) { + this._formElem.classList.add("sending"); + } else { + this._formElem.classList.remove("sending"); + } + } + }, { + key: "submit", + value: function submit() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { + var res; + return regeneratorRuntime.wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + this._editors.forEach(function (e) { + return e.updateSourceElement(); + }); + + this.setIsBusy(true); + _context6.next = 4; + return this.validate(); + + case 4: + if (!_context6.sent) { + _context6.next = 24; + break; + } + + res = false; + _context6.prev = 6; + _context6.t0 = this; + _context6.next = 10; + return this.getValues(); + + case 10: + _context6.t1 = _context6.sent; + _context6.t2 = this; + _context6.next = 14; + return _context6.t0._submitHandler.call(_context6.t0, _context6.t1, _context6.t2); + + case 14: + res = _context6.sent; + _context6.next = 20; + break; + + case 17: + _context6.prev = 17; + _context6.t3 = _context6["catch"](6); + console.error(_context6.t3); + + case 20: + _context6.prev = 20; + this.setIsBusy(false); + return _context6.finish(20); + + case 23: + return _context6.abrupt("return", res); + + case 24: + this.setIsBusy(false); + return _context6.abrupt("return", false); + + case 26: + case "end": + return _context6.stop(); + } + } + }, _callee6, this, [[6, 17, 20, 23]]); + })); + } + }, { + key: "validate", + value: function validate() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { + var _this3 = this; + + var values, res, hasErrors, errors; + return regeneratorRuntime.wrap(function _callee8$(_context8) { + while (1) { + switch (_context8.prev = _context8.next) { + case 0: + if (!("reportValidity" in this._formElem && !this._formElem.reportValidity())) { + _context8.next = 2; + break; + } + + return _context8.abrupt("return", false); + + case 2: + _context8.next = 4; + return this.getValues(); + + case 4: + values = _context8.sent; + _context8.next = 7; + return Helper_1.Helper.asyncForEach(this._validators, function (validator) { + return __awaiter(_this3, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee7() { + return regeneratorRuntime.wrap(function _callee7$(_context7) { + while (1) { + switch (_context7.prev = _context7.next) { + case 0: + return _context7.abrupt("return", validator(values, this)); + + case 1: + case "end": + return _context7.stop(); + } + } + }, _callee7, this); + })); + }, true); + + case 7: + res = _context8.sent; + hasErrors = false; + errors = {}; + res.forEach(function (value) { + if (value !== true) { + hasErrors = true; + + if (_typeof(value) === "object") { + for (var k in value) { + errors[k] = value[k]; + } + } + } + }); + + if (!hasErrors) { + _context8.next = 15; + break; + } + + _context8.next = 14; + return this.setErrors(errors); + + case 14: + return _context8.abrupt("return", false); + + case 15: + return _context8.abrupt("return", true); + + case 16: + case "end": + return _context8.stop(); + } + } + }, _callee8, this); + })); + } + }, { + key: "onSubmit", + value: function onSubmit(callback) { + this._submitCallback = callback; + } + }, { + key: "getFormElement", + value: function getFormElement() { + return this._formElem; + } + }], [{ + key: "filesToBase64", + value: function filesToBase64(values) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee9() { + var filePromises; + return regeneratorRuntime.wrap(function _callee9$(_context9) { + while (1) { + switch (_context9.prev = _context9.next) { + case 0: + filePromises = []; + Object.keys(values).forEach(function (key) { + if (values[key] instanceof Blob) { + filePromises.push(new Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function () { + return resolve(reader.result); + }; + + reader.onerror = function (error) { + return reject(error); + }; + + reader.readAsDataURL(values[key]); + }).then(function (base64) { + return values[key] = base64; + })); + } + }); + _context9.next = 4; + return Promise.all(filePromises); + + case 4: + return _context9.abrupt("return", values); + + case 5: + case "end": + return _context9.stop(); + } + } + }, _callee9); + })); + } + }]); + + return Form; +}(); + +exports.Form = Form; + /***/ }), /* 211 */ /***/ (function(module, exports, __webpack_require__) { @@ -52197,7 +52199,7 @@ exports.SetupUserManagement1000000001000 = void 0; var typeorm_1 = __webpack_require__(47); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var SetupUserManagement1000000001000 = /*#__PURE__*/function () { function SetupUserManagement1000000001000() { @@ -52678,7 +52680,7 @@ module.exports = !__webpack_require__(28) && !__webpack_require__(12)(function ( var global = __webpack_require__(11); var core = __webpack_require__(26); -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var wksExt = __webpack_require__(165); var defineProperty = __webpack_require__(29).f; module.exports = function (name) { @@ -52716,7 +52718,7 @@ module.exports = function (object, names) { var dP = __webpack_require__(29); var anObject = __webpack_require__(13); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); module.exports = __webpack_require__(28) ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); @@ -52735,7 +52737,7 @@ module.exports = __webpack_require__(28) ? Object.defineProperties : function de // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window var toIObject = __webpack_require__(53); -var gOPN = __webpack_require__(92).f; +var gOPN = __webpack_require__(93).f; var toString = {}.toString; var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames @@ -52762,7 +52764,7 @@ module.exports.f = function getOwnPropertyNames(it) { // 19.1.2.1 Object.assign(target, source, ...) var DESCRIPTORS = __webpack_require__(28); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var gOPS = __webpack_require__(136); var pIE = __webpack_require__(123); var toObject = __webpack_require__(36); @@ -52816,7 +52818,7 @@ module.exports = Object.is || function is(x, y) { "use strict"; -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var isObject = __webpack_require__(14); var invoke = __webpack_require__(221); var arraySlice = [].slice; @@ -52932,13 +52934,13 @@ module.exports = Math.log1p || function log1p(x) { "use strict"; -var create = __webpack_require__(91); -var descriptor = __webpack_require__(86); +var create = __webpack_require__(92); +var descriptor = __webpack_require__(87); var setToStringTag = __webpack_require__(103); var IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -__webpack_require__(52)(IteratorPrototype, __webpack_require__(18)('iterator'), function () { return this; }); +__webpack_require__(52)(IteratorPrototype, __webpack_require__(19)('iterator'), function () { return this; }); module.exports = function (Constructor, NAME, next) { Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); @@ -52969,7 +52971,7 @@ module.exports = function (iterator, fn, value, entries) { /***/ (function(module, exports, __webpack_require__) { // 9.4.2.3 ArraySpeciesCreate(originalArray, length) -var speciesConstructor = __webpack_require__(383); +var speciesConstructor = __webpack_require__(384); module.exports = function (original, length) { return new (speciesConstructor(original))(length); @@ -52980,7 +52982,7 @@ module.exports = function (original, length) { /* 230 */ /***/ (function(module, exports, __webpack_require__) { -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var toObject = __webpack_require__(36); var IObject = __webpack_require__(122); var toLength = __webpack_require__(23); @@ -53018,7 +53020,7 @@ module.exports = function (that, callbackfn, aLen, memo, isRight) { // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) var toObject = __webpack_require__(36); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { @@ -53085,20 +53087,20 @@ if (__webpack_require__(28) && /./g.flags != 'g') __webpack_require__(29).f(RegE "use strict"; -var LIBRARY = __webpack_require__(88); +var LIBRARY = __webpack_require__(89); var global = __webpack_require__(11); -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var classof = __webpack_require__(124); var $export = __webpack_require__(3); var isObject = __webpack_require__(14); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var anInstance = __webpack_require__(107); var forOf = __webpack_require__(142); var speciesConstructor = __webpack_require__(125); var task = __webpack_require__(187).set; -var microtask = __webpack_require__(403)(); +var microtask = __webpack_require__(404)(); var newPromiseCapabilityModule = __webpack_require__(236); -var perform = __webpack_require__(404); +var perform = __webpack_require__(405); var userAgent = __webpack_require__(143); var promiseResolve = __webpack_require__(237); var PROMISE = 'Promise'; @@ -53116,7 +53118,7 @@ var USE_NATIVE = !!function () { try { // correct subclassing with @@species support var promise = $Promise.resolve(1); - var FakePromise = (promise.constructor = {})[__webpack_require__(18)('species')] = function (exec) { + var FakePromise = (promise.constructor = {})[__webpack_require__(19)('species')] = function (exec) { exec(empty, empty); }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test @@ -53379,7 +53381,7 @@ $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(138)(functio "use strict"; // 25.4.1.5 NewPromiseCapability(C) -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); function PromiseCapability(C) { var resolve, reject; @@ -53422,9 +53424,9 @@ module.exports = function (C, x) { "use strict"; var dP = __webpack_require__(29).f; -var create = __webpack_require__(91); +var create = __webpack_require__(92); var redefineAll = __webpack_require__(108); -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var anInstance = __webpack_require__(107); var forOf = __webpack_require__(142); var $iterDefine = __webpack_require__(176); @@ -53432,7 +53434,7 @@ var step = __webpack_require__(232); var setSpecies = __webpack_require__(106); var DESCRIPTORS = __webpack_require__(28); var fastKey = __webpack_require__(83).fastKey; -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var SIZE = DESCRIPTORS ? '_s' : 'size'; var getEntry = function (that, key) { @@ -53578,9 +53580,9 @@ var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); var anInstance = __webpack_require__(107); var forOf = __webpack_require__(142); -var createArrayMethod = __webpack_require__(67); +var createArrayMethod = __webpack_require__(68); var $has = __webpack_require__(51); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var arrayFind = createArrayMethod(5); var arrayFindIndex = createArrayMethod(6); var id = 0; @@ -53663,7 +53665,7 @@ module.exports = { /***/ (function(module, exports, __webpack_require__) { // https://tc39.github.io/ecma262/#sec-toindex -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); module.exports = function (it) { if (it === undefined) return 0; @@ -53679,7 +53681,7 @@ module.exports = function (it) { /***/ (function(module, exports, __webpack_require__) { // all object keys, includes non-enumerable and symbols -var gOPN = __webpack_require__(92); +var gOPN = __webpack_require__(93); var gOPS = __webpack_require__(136); var anObject = __webpack_require__(13); var Reflect = __webpack_require__(11).Reflect; @@ -53717,7 +53719,7 @@ module.exports = function (that, maxLength, fillString, left) { /***/ (function(module, exports, __webpack_require__) { var DESCRIPTORS = __webpack_require__(28); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var toIObject = __webpack_require__(53); var isEnum = __webpack_require__(123).f; module.exports = function (isEntries) { @@ -53778,7 +53780,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.Translator = void 0; -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); /** * Singleton-Klasse zum Übersetzen von Text-Inhalten */ @@ -54184,7 +54186,7 @@ process.umask = function() { return 0; }; var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, @@ -54317,7 +54319,7 @@ module.exports = Sha256 var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, @@ -54594,8 +54596,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _subscriber_BroadcasterResult__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8); /* harmony import */ var _driver_sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(16); /* harmony import */ var _error_LimitOnUpdateNotSupportedError__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(116); -/* harmony import */ var _error_MissingDeleteDateColumnError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(158); -/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(100); +/* harmony import */ var _error_MissingDeleteDateColumnError__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(159); +/* harmony import */ var _error_UpdateValuesMissingError__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(101); /* harmony import */ var _entity_schema_EntitySchema__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(74); @@ -55085,17 +55087,17 @@ var Helper_1 = __webpack_require__(15); var AbstractSite_1 = __webpack_require__(146); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var Context_1 = __webpack_require__(111); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var HistoryManager_1 = __webpack_require__(255); -var EventManager_1 = __webpack_require__(198); +var EventManager_1 = __webpack_require__(197); /** * Manager-Klasse für die Seiten */ @@ -56678,7 +56680,7 @@ exports.ToastManager = void 0; var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var ToastManager = /*#__PURE__*/function () { function ToastManager() { @@ -56837,9 +56839,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.DropdownRenderer = void 0; -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); -var AccordionRenderer_1 = __webpack_require__(201); +var AccordionRenderer_1 = __webpack_require__(200); var Submenu_1 = __webpack_require__(262); /** @@ -56954,7 +56956,7 @@ exports.MenuRenderer = void 0; var Helper_1 = __webpack_require__(15); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); /** * Rendert ein Menü */ @@ -57138,11 +57140,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.Submenu = void 0; -var Menu_1 = __webpack_require__(200); +var Menu_1 = __webpack_require__(199); var Helper_1 = __webpack_require__(15); -var OpenSubmenuAction_1 = __webpack_require__(98); +var OpenSubmenuAction_1 = __webpack_require__(99); /** * Submenü, ein untermenü */ @@ -57546,7 +57548,7 @@ exports.ElemChooseDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var view = __webpack_require__(264); @@ -57599,6 +57601,351 @@ exports.ElemChooseDialog = ElemChooseDialog; "use strict"; +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ImageSelectionElement = void 0; + +var ViewInflater_1 = __webpack_require__(54); + +var shared_1 = __webpack_require__(17); + +var client_1 = __webpack_require__(147); + +var defaultView = __webpack_require__(519); + +var ImageSelectionElement = /*#__PURE__*/function () { + function ImageSelectionElement(name, view) { + var _this = this; + + _classCallCheck(this, ImageSelectionElement); + + this.images = {}; + this.name = name; + this.viewLoadedPromise = ViewInflater_1.ViewInflater.getInstance().load(shared_1.Helper.nonNull(view, defaultView)).then(function (v) { + return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + this.view = v; + _context.next = 3; + return this.prepareView(); + + case 3: + this.showSelection(); + return _context.abrupt("return", v); + + case 5: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + }); + } + + _createClass(ImageSelectionElement, [{ + key: "prepareView", + value: function prepareView() { + var _this2 = this; + + this.imageContainerTemplate = this.view.querySelector(".image-selection-image-container"); + this.imageContainerTemplate.remove(); + this.categoryTemplate = this.view.querySelector(".image-selection-category"); + this.categoryTemplate.remove(); + this.imageSelectionContainer = this.view.querySelector(".image-selection-category-container"); + this.imageSelectionPreviewContainer = this.view.querySelector(".image-selection-preview"); + this.inputElement = this.view.querySelector(".image-selection-value"); + this.inputElement.name = this.name; + var imageSelection = this.view.querySelector(".image-selection"); + imageSelection.addEventListener("dragenter", function (e) { + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.add("highlight"); + }); + imageSelection.addEventListener("dragover", function (e) { + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.add("highlight"); + }); + imageSelection.addEventListener("dragleave", function (e) { + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.remove("highlight"); + }); + imageSelection.addEventListener("drop", function (e) { + return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + var file, imageValue, base64; + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + e.stopPropagation(); + imageSelection.classList.remove("highlight"); + + if (!(e instanceof DragEvent)) { + _context2.next = 15; + break; + } + + file = null; + + if (e.dataTransfer.items && e.dataTransfer.items.length >= 1) { + if (e.dataTransfer.items[0].kind === "file") { + file = e.dataTransfer.items[0].getAsFile(); + } + } else if (e.dataTransfer.files && e.dataTransfer.files.length >= 1) { + file = e.dataTransfer.files[0]; + } + + if (!(!file || !file.type.startsWith("image/"))) { + _context2.next = 8; + break; + } + + return _context2.abrupt("return"); + + case 8: + imageValue = null; + _context2.next = 11; + return new Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function () { + resolve(reader.result); + }; + + reader.onerror = function (error) { + return reject(error); + }; + + reader.readAsDataURL(file); + }); + + case 11: + base64 = _context2.sent; + imageValue = { + src: base64, + name: file.name + }; + this.addImages({ + "Uploads": [imageValue] + }); + this.setValue(imageValue); + + case 15: + case "end": + return _context2.stop(); + } + } + }, _callee2, this); + })); + }); + } + }, { + key: "showSelection", + value: function showSelection() { + var _this3 = this; + + client_1.ViewHelper.removeAllChildren(this.imageSelectionContainer); + Object.keys(this.images).sort(function (a, b) { + if (a.toLowerCase() === "uploads") { + return -1; + } else if (b.toLowerCase() === "uploads") { + return 1; + } else { + return a.localeCompare(b); + } + }).forEach(function (category) { + var categoryElement = _this3.categoryTemplate.cloneNode(true); + + categoryElement.querySelector(".image-selection-category-name").innerText = category; + + _this3.images[category].forEach(function (image) { + var imageContainerElement = _this3.createImageElement(image); + + imageContainerElement.addEventListener("click", function () { + return _this3.setValue(image); + }); + categoryElement.appendChild(imageContainerElement); + }); + + _this3.imageSelectionContainer.appendChild(categoryElement); + }); + } + }, { + key: "createImageElement", + value: function createImageElement(image) { + var imageContainerElement = this.imageContainerTemplate.cloneNode(true); + imageContainerElement.querySelector(".image-selection-image").src = image.src; + + if (image.name) { + imageContainerElement.querySelector(".image-selection-image-name").innerText = image.name; + } + + return imageContainerElement; + } + }, { + key: "setImages", + value: function setImages(images) { + this.images = images; + + if (this.view) { + this.showSelection(); + } + } + }, { + key: "addImages", + value: function addImages(images) { + var _this4 = this; + + Object.keys(images).forEach(function (category) { + if (_this4.images[category]) { + var _this4$images$categor; + + var sources = _this4.images[category].map(function (i) { + return i.src; + }); + + var newImages = images[category].filter(function (i) { + return sources.indexOf(i.src) === -1; + }); + + (_this4$images$categor = _this4.images[category]).push.apply(_this4$images$categor, _toConsumableArray(newImages)); + } else { + _this4.images[category] = images[category]; + } + }); + + if (this.view) { + this.showSelection(); + } + } + }, { + key: "getView", + value: function getView() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + return _context3.abrupt("return", this.viewLoadedPromise); + + case 1: + case "end": + return _context3.stop(); + } + } + }, _callee3, this); + })); + } + }, { + key: "setValue", + value: function setValue(image) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.prev = 0; + + if (typeof image === "string") { + image = JSON.parse(image); + } + + _context4.next = 4; + return this.viewLoadedPromise; + + case 4: + client_1.ViewHelper.removeAllChildren(this.imageSelectionPreviewContainer); + + if (image.src) { + this.imageSelectionPreviewContainer.appendChild(this.createImageElement(image)); + } + + this.inputElement.value = JSON.stringify(image); + _context4.next = 11; + break; + + case 9: + _context4.prev = 9; + _context4.t0 = _context4["catch"](0); + + case 11: + case "end": + return _context4.stop(); + } + } + }, _callee4, this, [[0, 9]]); + })); + } + }]); + + return ImageSelectionElement; +}(); + +exports.ImageSelectionElement = ImageSelectionElement; + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -57624,9 +57971,9 @@ exports.ShareDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); -var view = __webpack_require__(519); +var view = __webpack_require__(522); var ShareDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { _inherits(ShareDialog, _Dialog_1$Dialog); @@ -57662,7 +58009,7 @@ var ShareDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ShareDialog = ShareDialog; /***/ }), -/* 267 */ +/* 268 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57855,7 +58202,7 @@ var AudioChain = /*#__PURE__*/function () { exports.AudioChain = AudioChain; /***/ }), -/* 268 */ +/* 269 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57867,11 +58214,11 @@ Object.defineProperty(exports, "__esModule", { var App_1 = __webpack_require__(33); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var deTranslations = __webpack_require__(520); +var deTranslations = __webpack_require__(523); -var enTranslations = __webpack_require__(521); +var enTranslations = __webpack_require__(524); App_1.App.addInitialization(function () { console.log("user trsnslation"); @@ -57882,7 +58229,7 @@ App_1.App.addInitialization(function () { }); /***/ }), -/* 269 */ +/* 270 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57894,11 +58241,11 @@ Object.defineProperty(exports, "__esModule", { var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(522); +var shared_1 = __webpack_require__(525); -var deTranslations = __webpack_require__(523); +var deTranslations = __webpack_require__(526); -var enTranslations = __webpack_require__(524); +var enTranslations = __webpack_require__(527); client_1.App.addInitialization(function () { shared_1.Translator.addDynamicTranslations({ @@ -57908,7 +58255,7 @@ client_1.App.addInitialization(function () { }); /***/ }), -/* 270 */ +/* 271 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57947,7 +58294,7 @@ exports.Access = void 0; var shared_1 = __webpack_require__(127); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var Access = /*#__PURE__*/function (_shared_1$EasySyncBas) { _inherits(Access, _shared_1$EasySyncBas); @@ -57989,7 +58336,7 @@ Access.CAN_BE_SYNCED = false; cordova_sites_database_1.BaseDatabase.addModel(Access); /***/ }), -/* 271 */ +/* 272 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58062,11 +58409,11 @@ var UserSite_1 = __webpack_require__(126); var client_1 = __webpack_require__(4); -var view = __webpack_require__(526); +var view = __webpack_require__(529); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var LoginSite_1 = __webpack_require__(148); +var LoginSite_1 = __webpack_require__(149); var ForgotPasswordSite = /*#__PURE__*/function (_client_1$MenuSite) { _inherits(ForgotPasswordSite, _client_1$MenuSite); @@ -58260,7 +58607,7 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 272 */ +/* 273 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58331,7 +58678,7 @@ exports.NotAllowedSite = void 0; var MenuSite_1 = __webpack_require__(69); -var view = __webpack_require__(527); +var view = __webpack_require__(530); var NotAllowedSite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { _inherits(NotAllowedSite, _MenuSite_1$MenuSite); @@ -58396,7 +58743,7 @@ var NotAllowedSite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { exports.NotAllowedSite = NotAllowedSite; /***/ }), -/* 273 */ +/* 274 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58463,15 +58810,15 @@ exports.SelectUserDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var ViewHelper_1 = __webpack_require__(27); var Helper_1 = __webpack_require__(7); -var view = __webpack_require__(528); +var view = __webpack_require__(531); var SelectUserDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { _inherits(SelectUserDialog, _Dialog_1$Dialog); @@ -58589,7 +58936,7 @@ var SelectUserDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.SelectUserDialog = SelectUserDialog; /***/ }), -/* 274 */ +/* 275 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58640,9 +58987,9 @@ exports.FileTransferPromise = void 0; var Helper_1 = __webpack_require__(7); -var FilePromise_1 = __webpack_require__(206); +var FilePromise_1 = __webpack_require__(205); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var FileTransferPromise = /*#__PURE__*/function () { function FileTransferPromise(downloadUrl, storagePath) { @@ -58707,7 +59054,7 @@ var FileTransferPromise = /*#__PURE__*/function () { exports.FileTransferPromise = FileTransferPromise; /***/ }), -/* 275 */ +/* 276 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58802,7 +59149,7 @@ var FileWriterPromise = /*#__PURE__*/function () { exports.FileWriterPromise = FileWriterPromise; /***/ }), -/* 276 */ +/* 277 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58871,11 +59218,11 @@ Object.defineProperty(exports, "__esModule", { }); exports.ClientModel = void 0; -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var ClientModel = /*#__PURE__*/function (_cordova_sites_databa) { _inherits(ClientModel, _cordova_sites_databa); @@ -59120,7 +59467,7 @@ ClientModel.SAVE_PATH = "/sync"; ClientModel.DELETE_PATH = "/sync/delete"; /***/ }), -/* 277 */ +/* 278 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59191,7 +59538,7 @@ exports.ClientPartialModel = void 0; var EasySyncBaseModel_1 = __webpack_require__(78); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var client_1 = __webpack_require__(4); @@ -59449,7 +59796,7 @@ var ClientPartialModel = /*#__PURE__*/function (_EasySyncBaseModel_1$) { exports.ClientPartialModel = ClientPartialModel; /***/ }), -/* 278 */ +/* 279 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59500,7 +59847,7 @@ AccessEasySyncModel.ACCESS_MODIFY = false; AccessEasySyncModel.CAN_BE_SYNCED = false; /***/ }), -/* 279 */ +/* 280 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -59508,19 +59855,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/help.png"); /***/ }), -/* 280 */ +/* 281 */ /***/ (function(module) { module.exports = JSON.parse("{\"won\":\"Gewonnen!\",\"continue\":\"Weiter\",\"help\":\"?\",\"not-enough-coins\":\"Du hast zu wenig Münzen!\",\"sync-error\":\"Es gab einen Fehler beim Aktualisieren der Level. Bitte stelle sicher, dass du eine aktive Internetverbindung hast und versuche es später erneut.\",\"game-ended\":\"Oh nein!
Es sieht so aus, als ob du schon alle Level gespielt hast...
Schau später noch einmal rein, evtl gibt es dann neue Level.\",\"play\":\"Spielen!\",\"tutorial-step-1\":\"Klicke auf ein Feld, um dieses rotieren zu lassen!\",\"tutorial-step-2\":\"Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.\",\"tutorial-step-3\":\"Die Hilfe löst ein Segment, kostet aber 25 Münzen. Probiere jetzt die Hilfe aus.\",\"tutorial-step-4\":\"Große Segmente drehst du, indem du diese ziehst.\",\"extra-coins-after-first-level\":\"Für das erste Level gibt es 50 extra Münzen!\",\"dark\":\"Dunkel\",\"theme\":\"Theme:\",\"sound\":\"Sound:\",\"music\":\"Musik:\",\"credits\":\"Credits\",\"privacy-policy\":\"Datenschutzbestimmungen\",\"impressum\":\"Impressum\",\"track\":\"Anonymisierte Nutzungsdaten senden:\",\">\":\">\",\"choose-theme-dialog-title\":\"Theme auswählen:\",\"install\":\"Installieren\",\"share-dialog\":\"Teilen:\",\"credits-text\":\"Ein großer Dank geht an Hanna, denn ohne sie sähe die App nicht so aus, wie sie aussieht. Danke für deine guten Vorschläge und Ratschläge für das Design!\",\"credits-coin-text\":\"Sound:
Der Münz-Sound ist von der Webseite {0}. Alle Rechte für diesen Münz-Sound gehören {0}.\",\"credits-music-text\":\"Musik:
Bright And Beautiful - GEMAfreie Musik von {0}
Licensed under Creative Commons: By Attribution 4.0 International (CC BY 4.0)
{1}
Angepasst (geschnitten) für diese App\",\"storage-info\":\"Fortschritt {0} dauerhaft gespeichert\",\"storage-permission-not-get\":\"Der Browser gibt nicht die Erlaubnis zur dauerhaften Speicherung...\",\"storage-permission-get\":\"Die Daten sind nun dauerhaft gespeichert\",\"persist-storage-dialog-title\":\"Daten dauerhaft speichern?\",\"persist-storage-dialog-message\":\"Der Fortschritt und die Level dieser WebApp sind nur temporär gespeichert. Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:

1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.

Damit die Daten dieser Webseite nicht gelöscht werden, erlaube bitte Benachrichtigungen. Alternativ kannst du die Seite auch als Lesezeichen speichern.\",\"notification-permission-denied\":\"Die Berechtigung für Benachrichtigungen wurde verwährt\",\"already-persisted-dialog-message\":\"Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:
1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.
Du erfüllst schon ein Kriterium und daher wird dein Fortschritt dauerhaft gespeichert (außer du löscht sie)\",\"already-persisted-dialog-title\":\"Daten werden dauerhaft gespeichert!\",\"persist-storage-dialog-message-firefox\":\"Damit dein Fortschritt dauerhaft gespeichert wird, musst du zulassen, dass Daten dauerhaft gespeichert werden.\",\"warning-data-not-persistent\":\"Achtung! Dein Fortschritt kann verloren gehen! Gehe die Einstellungen für mehr Infos.\",\"version-label\":\"Version:\",\"share-text\":\"Schau dir diese coole App an:\\n{0}\",\"share\":\"Teilen\",\"document-title\":\"WordRotator\",\"document-title-empty\":\"WordRotator\",\"contact\":\"Kontakt\",\"contact text\":\"Du möchtest Kontakt mit uns aufnehmen? Kein Problem, nutze einfach das Kontaktformular oder sende uns eine E-Mail an {0}.\\n Egal, ob du uns eine E-Mail sendest oder das Kontaktformular benutzt, akzeptierst du unsere Datenschutzbestimmung\",\"e-mail\":\"E-Mailadresse\",\"privacy policy accepted\":\" akzeptiert\",\"message\":\"Nachricht\",\"send\":\"Senden\",\"the message was sent\":\"Die Nachricht wurde gesendet.\",\"wr\":\"WR\",\"tutorial\":\"Spielregeln\",\"tutorial-1\":\"Klicke auf ein Feld, um dieses rotieren zu lassen! Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.\",\"tutorial-2\":\"Die Hilfe löst ein Segment, kostet aber 25 Münzen. Du erhältst 5 Münzen pro gewonnenes Level.\",\"tutorial-3\":\"Große Segmente drehst du, indem du diese ziehst.\",\"you solved the tutorial level!\":\"Du hast das Tutorial-Level gelöst!\"}"); /***/ }), -/* 281 */ +/* 282 */ /***/ (function(module) { module.exports = JSON.parse("{\"won\":\"Won!\",\"continue\":\"Continue\",\"help\":\"?\",\"not-enough-coins\":\"You have to few coins!\",\"sync-error\":\"Es gab einen Fehler beim Aktualisieren der Level. Bitte stelle sicher, dass du eine aktive Internetverbindung hast und versuche es später erneut.\",\"game-ended\":\"Oh nein!
Es sieht so aus, als ob du schon alle Level gespielt hast...
Schau später noch einmal rein, evtl gibt es dann neue Level.\",\"play\":\"Spielen!\",\"tutorial-step-1\":\"Klicke auf ein Feld, um dieses rotieren zu lassen!\",\"tutorial-step-2\":\"Um zu gewinnen, drehe die Segmente so, dass du zwei Wörter lesen kannst.\",\"tutorial-step-3\":\"Die Hilfe löst ein Segment, kostet aber 25 Münzen. Probiere jetzt die Hilfe aus.\",\"tutorial-step-4\":\"Große Segmente drehst du, indem du diese ziehst.\",\"extra-coins-after-first-level\":\"Für das erste Level gibt es 50 extra Münzen!\",\"dark\":\"Dunkel\",\"theme\":\"Theme:\",\"sound\":\"Sound:\",\"music\":\"Musik:\",\"credits\":\"Credits\",\"privacy-policy\":\"Datenschutzbestimmungen\",\"impressum\":\"Impressum\",\"track\":\"Anonymisierte Nutzungsdaten senden:\",\">\":\">\",\"choose-theme-dialog-title\":\"Theme auswählen:\",\"install\":\"Installieren\",\"share-dialog\":\"Teilen:\",\"credits-sister-text\":\"Ich danke meiner Lieblingsschwester, denn ohne Sie würde diese App nicht so aussehen, wie sie aussieht (wahrscheinlich eher schlechter :p)\",\"credits-coin-text\":\"Sound:
Der Münz-Sound ist von der Webseite
{0}. Alle Rechte für diesen Münz-Sound gehören {0}.\",\"credits-music-text\":\"Musik:
Bright And Beautiful - GEMAfreie Musik von {0}
Licensed under Creative Commons: By Attribution 4.0 International (CC BY 4.0)
{1}
Angepasst (geschnitten) für diese App\",\"storage-info\":\"Fortschritt {0} dauerhaft gespeichert\",\"storage-permission-not-get\":\"Der Browser gibt nicht die Erlaubnis zur dauerhaften Speicherung...\",\"storage-permission-get\":\"Die Daten sind nun dauerhaft gespeichert\",\"persist-storage-dialog-title\":\"Daten dauerhaft speichern?\",\"persist-storage-dialog-message\":\"Der Fortschritt und die Level dieser WebApp sind nur temporär gespeichert. Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:

1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.

Damit die Daten dieser Webseite nicht gelöscht werden, erlaube bitte Benachrichtigungen. Alternativ kannst du die Seite auch als Lesezeichen speichern.\",\"notification-permission-denied\":\"Die Berechtigung für Benachrichtigungen wurde verwährt\",\"already-persisted-dialog-message\":\"Damit die Daten dauerhaft gespeichert werden, muss eins von drei Kriterien erfüllt sein:
1) Die Seite muss als Lesezeichen gespeichert werden (und maximal 5 Lesezeichen ingsesamt).
2) Die Seite muss mit die meistbenutzte Seite sein.
3) Benachrichtigungen müssen erlaubt werden.
Du erfüllst schon ein Kriterium und daher wird dein Fortschritt dauerhaft gespeichert (außer du löscht sie)\",\"already-persisted-dialog-title\":\"Daten werden dauerhaft gespeichert!\",\"persist-storage-dialog-message-firefox\":\"Damit dein Fortschritt dauerhaft gespeichert wird, musst du zulassen, dass Daten dauerhaft gespeichert werden.\",\"warning-data-not-persistent\":\"Achtung! Dein Fortschritt kann verloren gehen! Gehe die Einstellungen für mehr Infos.\",\"version-label\":\"Version:\",\"share-text\":\"Schau dir diese coole App an: {0}\",\"share\":\"Teilen\",\"document-title\":\"WordRotator\",\"document-title-empty\":\"WordRotator\",\"contact\":\"Kontakt\",\"contact text\":\"Du möchtest Kontakt mit uns aufnehmen? Kein Problem, nutze einfach das Kontaktformular oder sende uns eine E-Mail an {0}.\\n Egal, ob du uns eine E-Mail sendest oder das Kontaktformular benutzt, akzeptierst du unsere Datenschutzbestimmung\",\"e-mail\":\"E-Mailadresse\",\"privacy policy accepted\":\" akzeptiert\",\"message\":\"Nachricht\",\"send\":\"Senden\",\"the message was sent\":\"Die Nachricht wurde gesendet.\"}"); /***/ }), -/* 282 */ +/* 283 */ /***/ (function(module, exports, __webpack_require__) { var exports = module.exports = function SHA (algorithm) { @@ -59532,16 +59879,16 @@ var exports = module.exports = function SHA (algorithm) { return new Algorithm() } -exports.sha = __webpack_require__(479) -exports.sha1 = __webpack_require__(483) -exports.sha224 = __webpack_require__(484) +exports.sha = __webpack_require__(480) +exports.sha1 = __webpack_require__(484) +exports.sha224 = __webpack_require__(485) exports.sha256 = __webpack_require__(248) -exports.sha384 = __webpack_require__(485) +exports.sha384 = __webpack_require__(486) exports.sha512 = __webpack_require__(249) /***/ }), -/* 283 */ +/* 284 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -59549,7 +59896,7 @@ exports.sha512 = __webpack_require__(249) /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _error_QueryRunnerAlreadyReleasedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34); /* harmony import */ var _sqlite_abstract_AbstractSqliteQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(73); -/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(54); +/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55); /* harmony import */ var _error_QueryFailedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(39); @@ -59644,14 +59991,14 @@ var SqljsQueryRunner = /** @class */ (function (_super) { /***/ }), -/* 284 */ +/* 285 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return NativescriptDriver; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _sqlite_abstract_AbstractSqliteDriver__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16); -/* harmony import */ var _NativescriptQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(285); +/* harmony import */ var _NativescriptQueryRunner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(286); /* harmony import */ var _error_DriverOptionNotSetError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(37); /* harmony import */ var _error_DriverPackageNotInstalledError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(71); @@ -59761,10 +60108,10 @@ var NativescriptDriver = /** @class */ (function (_super) { //# sourceMappingURL=NativescriptDriver.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), -/* 285 */ +/* 286 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -59773,7 +60120,7 @@ var NativescriptDriver = /** @class */ (function (_super) { /* harmony import */ var _error_QueryRunnerAlreadyReleasedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34); /* harmony import */ var _error_QueryFailedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39); /* harmony import */ var _sqlite_abstract_AbstractSqliteQueryRunner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(73); -/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(54); +/* harmony import */ var _subscriber_Broadcaster__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(55); @@ -59850,14 +60197,14 @@ var NativescriptQueryRunner = /** @class */ (function (_super) { /***/ }), -/* 286 */ +/* 287 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(Buffer) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RawSqlResultsToEntityTransformer; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); /* harmony import */ var _util_OrmUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); -/* harmony import */ var _driver_DriverUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20); +/* harmony import */ var _driver_DriverUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); @@ -60196,10 +60543,10 @@ var RawSqlResultsToEntityTransformer = /** @class */ (function () { //# sourceMappingURL=RawSqlResultsToEntityTransformer.js.map -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(97).Buffer)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(98).Buffer)) /***/ }), -/* 287 */ +/* 288 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60232,45 +60579,26 @@ __exportStar(__webpack_require__(211), exports); __exportStar(__webpack_require__(212), exports); -__exportStar(__webpack_require__(270), exports); +__exportStar(__webpack_require__(271), exports); -__exportStar(__webpack_require__(278), exports); +__exportStar(__webpack_require__(279), exports); -__exportStar(__webpack_require__(204), exports); +__exportStar(__webpack_require__(203), exports); __exportStar(__webpack_require__(112), exports); -__exportStar(__webpack_require__(537), exports); - -__exportStar(__webpack_require__(538), exports); - -/***/ }), -/* 288 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(289); -__webpack_require__(552); -module.exports = __webpack_require__(551); +__exportStar(__webpack_require__(540), exports); +__exportStar(__webpack_require__(541), exports); /***/ }), /* 289 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - - __webpack_require__(290); +__webpack_require__(555); +module.exports = __webpack_require__(554); -var _global = _interopRequireDefault(__webpack_require__(462)); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -if (_global["default"]._babelPolyfill && typeof console !== "undefined" && console.warn) { - console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended " + "and may have consequences if different versions of the polyfills are applied sequentially. " + "If you do need to load the polyfill more than once, use @babel/polyfill/noConflict " + "instead to bypass the warning."); -} - -_global["default"]._babelPolyfill = true; /***/ }), /* 290 */ @@ -60281,38 +60609,56 @@ _global["default"]._babelPolyfill = true; __webpack_require__(291); -__webpack_require__(434); +var _global = _interopRequireDefault(__webpack_require__(463)); -__webpack_require__(436); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -__webpack_require__(439); +if (_global["default"]._babelPolyfill && typeof console !== "undefined" && console.warn) { + console.warn("@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended " + "and may have consequences if different versions of the polyfills are applied sequentially. " + "If you do need to load the polyfill more than once, use @babel/polyfill/noConflict " + "instead to bypass the warning."); +} -__webpack_require__(441); - -__webpack_require__(443); - -__webpack_require__(445); - -__webpack_require__(447); - -__webpack_require__(449); - -__webpack_require__(451); - -__webpack_require__(453); - -__webpack_require__(455); - -__webpack_require__(457); - -__webpack_require__(461); +_global["default"]._babelPolyfill = true; /***/ }), /* 291 */ /***/ (function(module, exports, __webpack_require__) { +"use strict"; + + __webpack_require__(292); -__webpack_require__(295); + +__webpack_require__(435); + +__webpack_require__(437); + +__webpack_require__(440); + +__webpack_require__(442); + +__webpack_require__(444); + +__webpack_require__(446); + +__webpack_require__(448); + +__webpack_require__(450); + +__webpack_require__(452); + +__webpack_require__(454); + +__webpack_require__(456); + +__webpack_require__(458); + +__webpack_require__(462); + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(293); __webpack_require__(296); __webpack_require__(297); __webpack_require__(298); @@ -60354,7 +60700,7 @@ __webpack_require__(333); __webpack_require__(334); __webpack_require__(335); __webpack_require__(336); -__webpack_require__(338); +__webpack_require__(337); __webpack_require__(339); __webpack_require__(340); __webpack_require__(341); @@ -60388,16 +60734,16 @@ __webpack_require__(368); __webpack_require__(369); __webpack_require__(370); __webpack_require__(371); -__webpack_require__(373); +__webpack_require__(372); __webpack_require__(374); -__webpack_require__(376); +__webpack_require__(375); __webpack_require__(377); __webpack_require__(378); __webpack_require__(379); __webpack_require__(380); __webpack_require__(381); __webpack_require__(382); -__webpack_require__(384); +__webpack_require__(383); __webpack_require__(385); __webpack_require__(386); __webpack_require__(387); @@ -60410,17 +60756,17 @@ __webpack_require__(393); __webpack_require__(394); __webpack_require__(395); __webpack_require__(396); -__webpack_require__(184); __webpack_require__(397); -__webpack_require__(233); +__webpack_require__(184); __webpack_require__(398); -__webpack_require__(234); +__webpack_require__(233); __webpack_require__(399); +__webpack_require__(234); __webpack_require__(400); __webpack_require__(401); __webpack_require__(402); +__webpack_require__(403); __webpack_require__(235); -__webpack_require__(405); __webpack_require__(406); __webpack_require__(407); __webpack_require__(408); @@ -60449,11 +60795,12 @@ __webpack_require__(430); __webpack_require__(431); __webpack_require__(432); __webpack_require__(433); +__webpack_require__(434); module.exports = __webpack_require__(26); /***/ }), -/* 292 */ +/* 293 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60468,24 +60815,24 @@ var META = __webpack_require__(83).KEY; var $fails = __webpack_require__(12); var shared = __webpack_require__(134); var setToStringTag = __webpack_require__(103); -var uid = __webpack_require__(87); -var wks = __webpack_require__(18); +var uid = __webpack_require__(88); +var wks = __webpack_require__(19); var wksExt = __webpack_require__(165); var wksDefine = __webpack_require__(214); -var enumKeys = __webpack_require__(294); +var enumKeys = __webpack_require__(295); var isArray = __webpack_require__(137); var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); var toObject = __webpack_require__(36); var toIObject = __webpack_require__(53); var toPrimitive = __webpack_require__(82); -var createDesc = __webpack_require__(86); -var _create = __webpack_require__(91); +var createDesc = __webpack_require__(87); +var _create = __webpack_require__(92); var gOPNExt = __webpack_require__(217); -var $GOPD = __webpack_require__(65); +var $GOPD = __webpack_require__(66); var $GOPS = __webpack_require__(136); var $DP = __webpack_require__(29); -var $keys = __webpack_require__(89); +var $keys = __webpack_require__(90); var gOPD = $GOPD.f; var dP = $DP.f; var gOPN = gOPNExt.f; @@ -60608,11 +60955,11 @@ if (!USE_NATIVE) { $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; - __webpack_require__(92).f = gOPNExt.f = $getOwnPropertyNames; + __webpack_require__(93).f = gOPNExt.f = $getOwnPropertyNames; __webpack_require__(123).f = $propertyIsEnumerable; $GOPS.f = $getOwnPropertySymbols; - if (DESCRIPTORS && !__webpack_require__(88)) { + if (DESCRIPTORS && !__webpack_require__(89)) { redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); } @@ -60706,18 +61053,18 @@ setToStringTag(global.JSON, 'JSON', true); /***/ }), -/* 293 */ +/* 294 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(134)('native-function-to-string', Function.toString); /***/ }), -/* 294 */ +/* 295 */ /***/ (function(module, exports, __webpack_require__) { // all enumerable object keys, includes symbols -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var gOPS = __webpack_require__(136); var pIE = __webpack_require__(123); module.exports = function (it) { @@ -60734,16 +61081,16 @@ module.exports = function (it) { /***/ }), -/* 295 */ +/* 296 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) -$export($export.S, 'Object', { create: __webpack_require__(91) }); +$export($export.S, 'Object', { create: __webpack_require__(92) }); /***/ }), -/* 296 */ +/* 297 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -60752,7 +61099,7 @@ $export($export.S + $export.F * !__webpack_require__(28), 'Object', { defineProp /***/ }), -/* 297 */ +/* 298 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -60761,46 +61108,31 @@ $export($export.S + $export.F * !__webpack_require__(28), 'Object', { defineProp /***/ }), -/* 298 */ +/* 299 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) var toIObject = __webpack_require__(53); -var $getOwnPropertyDescriptor = __webpack_require__(65).f; +var $getOwnPropertyDescriptor = __webpack_require__(66).f; -__webpack_require__(66)('getOwnPropertyDescriptor', function () { +__webpack_require__(67)('getOwnPropertyDescriptor', function () { return function getOwnPropertyDescriptor(it, key) { return $getOwnPropertyDescriptor(toIObject(it), key); }; }); -/***/ }), -/* 299 */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.9 Object.getPrototypeOf(O) -var toObject = __webpack_require__(36); -var $getPrototypeOf = __webpack_require__(93); - -__webpack_require__(66)('getPrototypeOf', function () { - return function getPrototypeOf(it) { - return $getPrototypeOf(toObject(it)); - }; -}); - - /***/ }), /* 300 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.14 Object.keys(O) +// 19.1.2.9 Object.getPrototypeOf(O) var toObject = __webpack_require__(36); -var $keys = __webpack_require__(89); +var $getPrototypeOf = __webpack_require__(94); -__webpack_require__(66)('keys', function () { - return function keys(it) { - return $keys(toObject(it)); +__webpack_require__(67)('getPrototypeOf', function () { + return function getPrototypeOf(it) { + return $getPrototypeOf(toObject(it)); }; }); @@ -60809,9 +61141,14 @@ __webpack_require__(66)('keys', function () { /* 301 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.7 Object.getOwnPropertyNames(O) -__webpack_require__(66)('getOwnPropertyNames', function () { - return __webpack_require__(217).f; +// 19.1.2.14 Object.keys(O) +var toObject = __webpack_require__(36); +var $keys = __webpack_require__(90); + +__webpack_require__(67)('keys', function () { + return function keys(it) { + return $keys(toObject(it)); + }; }); @@ -60819,14 +61156,9 @@ __webpack_require__(66)('getOwnPropertyNames', function () { /* 302 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.5 Object.freeze(O) -var isObject = __webpack_require__(14); -var meta = __webpack_require__(83).onFreeze; - -__webpack_require__(66)('freeze', function ($freeze) { - return function freeze(it) { - return $freeze && isObject(it) ? $freeze(meta(it)) : it; - }; +// 19.1.2.7 Object.getOwnPropertyNames(O) +__webpack_require__(67)('getOwnPropertyNames', function () { + return __webpack_require__(217).f; }); @@ -60834,13 +61166,13 @@ __webpack_require__(66)('freeze', function ($freeze) { /* 303 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.17 Object.seal(O) +// 19.1.2.5 Object.freeze(O) var isObject = __webpack_require__(14); var meta = __webpack_require__(83).onFreeze; -__webpack_require__(66)('seal', function ($seal) { - return function seal(it) { - return $seal && isObject(it) ? $seal(meta(it)) : it; +__webpack_require__(67)('freeze', function ($freeze) { + return function freeze(it) { + return $freeze && isObject(it) ? $freeze(meta(it)) : it; }; }); @@ -60849,13 +61181,13 @@ __webpack_require__(66)('seal', function ($seal) { /* 304 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.15 Object.preventExtensions(O) +// 19.1.2.17 Object.seal(O) var isObject = __webpack_require__(14); var meta = __webpack_require__(83).onFreeze; -__webpack_require__(66)('preventExtensions', function ($preventExtensions) { - return function preventExtensions(it) { - return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; +__webpack_require__(67)('seal', function ($seal) { + return function seal(it) { + return $seal && isObject(it) ? $seal(meta(it)) : it; }; }); @@ -60864,12 +61196,13 @@ __webpack_require__(66)('preventExtensions', function ($preventExtensions) { /* 305 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.12 Object.isFrozen(O) +// 19.1.2.15 Object.preventExtensions(O) var isObject = __webpack_require__(14); +var meta = __webpack_require__(83).onFreeze; -__webpack_require__(66)('isFrozen', function ($isFrozen) { - return function isFrozen(it) { - return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; +__webpack_require__(67)('preventExtensions', function ($preventExtensions) { + return function preventExtensions(it) { + return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; }; }); @@ -60878,12 +61211,12 @@ __webpack_require__(66)('isFrozen', function ($isFrozen) { /* 306 */ /***/ (function(module, exports, __webpack_require__) { -// 19.1.2.13 Object.isSealed(O) +// 19.1.2.12 Object.isFrozen(O) var isObject = __webpack_require__(14); -__webpack_require__(66)('isSealed', function ($isSealed) { - return function isSealed(it) { - return isObject(it) ? $isSealed ? $isSealed(it) : false : true; +__webpack_require__(67)('isFrozen', function ($isFrozen) { + return function isFrozen(it) { + return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; }; }); @@ -60892,10 +61225,24 @@ __webpack_require__(66)('isSealed', function ($isSealed) { /* 307 */ /***/ (function(module, exports, __webpack_require__) { +// 19.1.2.13 Object.isSealed(O) +var isObject = __webpack_require__(14); + +__webpack_require__(67)('isSealed', function ($isSealed) { + return function isSealed(it) { + return isObject(it) ? $isSealed ? $isSealed(it) : false : true; + }; +}); + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + // 19.1.2.11 Object.isExtensible(O) var isObject = __webpack_require__(14); -__webpack_require__(66)('isExtensible', function ($isExtensible) { +__webpack_require__(67)('isExtensible', function ($isExtensible) { return function isExtensible(it) { return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; }; @@ -60903,7 +61250,7 @@ __webpack_require__(66)('isExtensible', function ($isExtensible) { /***/ }), -/* 308 */ +/* 309 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.1 Object.assign(target, source) @@ -60913,7 +61260,7 @@ $export($export.S + $export.F, 'Object', { assign: __webpack_require__(218) }); /***/ }), -/* 309 */ +/* 310 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.10 Object.is(value1, value2) @@ -60922,7 +61269,7 @@ $export($export.S, 'Object', { is: __webpack_require__(219) }); /***/ }), -/* 310 */ +/* 311 */ /***/ (function(module, exports, __webpack_require__) { // 19.1.3.19 Object.setPrototypeOf(O, proto) @@ -60931,7 +61278,7 @@ $export($export.S, 'Object', { setPrototypeOf: __webpack_require__(169).set }); /***/ }), -/* 311 */ +/* 312 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60939,7 +61286,7 @@ $export($export.S, 'Object', { setPrototypeOf: __webpack_require__(169).set }); // 19.1.3.6 Object.prototype.toString() var classof = __webpack_require__(124); var test = {}; -test[__webpack_require__(18)('toStringTag')] = 'z'; +test[__webpack_require__(19)('toStringTag')] = 'z'; if (test + '' != '[object z]') { __webpack_require__(45)(Object.prototype, 'toString', function toString() { return '[object ' + classof(this) + ']'; @@ -60948,7 +61295,7 @@ if (test + '' != '[object z]') { /***/ }), -/* 312 */ +/* 313 */ /***/ (function(module, exports, __webpack_require__) { // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) @@ -60958,7 +61305,7 @@ $export($export.P, 'Function', { bind: __webpack_require__(220) }); /***/ }), -/* 313 */ +/* 314 */ /***/ (function(module, exports, __webpack_require__) { var dP = __webpack_require__(29).f; @@ -60980,14 +61327,14 @@ NAME in FProto || __webpack_require__(28) && dP(FProto, NAME, { /***/ }), -/* 314 */ +/* 315 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var isObject = __webpack_require__(14); -var getPrototypeOf = __webpack_require__(93); -var HAS_INSTANCE = __webpack_require__(18)('hasInstance'); +var getPrototypeOf = __webpack_require__(94); +var HAS_INSTANCE = __webpack_require__(19)('hasInstance'); var FunctionProto = Function.prototype; // 19.2.3.6 Function.prototype[@@hasInstance](V) if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(29).f(FunctionProto, HAS_INSTANCE, { value: function (O) { @@ -61000,7 +61347,7 @@ if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(29).f(FunctionProto, H /***/ }), -/* 315 */ +/* 316 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61010,7 +61357,7 @@ $export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt } /***/ }), -/* 316 */ +/* 317 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61020,7 +61367,7 @@ $export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $pars /***/ }), -/* 317 */ +/* 318 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61031,8 +61378,8 @@ var cof = __webpack_require__(75); var inheritIfRequired = __webpack_require__(171); var toPrimitive = __webpack_require__(82); var fails = __webpack_require__(12); -var gOPN = __webpack_require__(92).f; -var gOPD = __webpack_require__(65).f; +var gOPN = __webpack_require__(93).f; +var gOPD = __webpack_require__(66).f; var dP = __webpack_require__(29).f; var $trim = __webpack_require__(104).trim; var NUMBER = 'Number'; @@ -61040,7 +61387,7 @@ var $Number = global[NUMBER]; var Base = $Number; var proto = $Number.prototype; // Opera ~12 has broken Object#toString -var BROKEN_COF = cof(__webpack_require__(91)(proto)) == NUMBER; +var BROKEN_COF = cof(__webpack_require__(92)(proto)) == NUMBER; var TRIM = 'trim' in String.prototype; // 7.1.3 ToNumber(argument) @@ -61096,13 +61443,13 @@ if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) { /***/ }), -/* 318 */ +/* 319 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(3); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var aNumberValue = __webpack_require__(224); var repeat = __webpack_require__(172); var $toFixed = 1.0.toFixed; @@ -61217,7 +61564,7 @@ $export($export.P + $export.F * (!!$toFixed && ( /***/ }), -/* 319 */ +/* 320 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61242,7 +61589,7 @@ $export($export.P + $export.F * ($fails(function () { /***/ }), -/* 320 */ +/* 321 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.1 Number.EPSILON @@ -61252,7 +61599,7 @@ $export($export.S, 'Number', { EPSILON: Math.pow(2, -52) }); /***/ }), -/* 321 */ +/* 322 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.2 Number.isFinite(number) @@ -61267,7 +61614,7 @@ $export($export.S, 'Number', { /***/ }), -/* 322 */ +/* 323 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.3 Number.isInteger(number) @@ -61277,7 +61624,7 @@ $export($export.S, 'Number', { isInteger: __webpack_require__(225) }); /***/ }), -/* 323 */ +/* 324 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.4 Number.isNaN(number) @@ -61292,7 +61639,7 @@ $export($export.S, 'Number', { /***/ }), -/* 324 */ +/* 325 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.5 Number.isSafeInteger(number) @@ -61308,7 +61655,7 @@ $export($export.S, 'Number', { /***/ }), -/* 325 */ +/* 326 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.6 Number.MAX_SAFE_INTEGER @@ -61318,7 +61665,7 @@ $export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff }); /***/ }), -/* 326 */ +/* 327 */ /***/ (function(module, exports, __webpack_require__) { // 20.1.2.10 Number.MIN_SAFE_INTEGER @@ -61328,7 +61675,7 @@ $export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff }); /***/ }), -/* 327 */ +/* 328 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61338,7 +61685,7 @@ $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { /***/ }), -/* 328 */ +/* 329 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61348,7 +61695,7 @@ $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { pars /***/ }), -/* 329 */ +/* 330 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.3 Math.acosh(x) @@ -61372,7 +61719,7 @@ $export($export.S + $export.F * !($acosh /***/ }), -/* 330 */ +/* 331 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.5 Math.asinh(x) @@ -61388,7 +61735,7 @@ $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: /***/ }), -/* 331 */ +/* 332 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.7 Math.atanh(x) @@ -61404,7 +61751,7 @@ $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { /***/ }), -/* 332 */ +/* 333 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.9 Math.cbrt(x) @@ -61419,7 +61766,7 @@ $export($export.S, 'Math', { /***/ }), -/* 333 */ +/* 334 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.11 Math.clz32(x) @@ -61433,7 +61780,7 @@ $export($export.S, 'Math', { /***/ }), -/* 334 */ +/* 335 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.12 Math.cosh(x) @@ -61448,7 +61795,7 @@ $export($export.S, 'Math', { /***/ }), -/* 335 */ +/* 336 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.14 Math.expm1(x) @@ -61459,17 +61806,17 @@ $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 /***/ }), -/* 336 */ +/* 337 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.16 Math.fround(x) var $export = __webpack_require__(3); -$export($export.S, 'Math', { fround: __webpack_require__(337) }); +$export($export.S, 'Math', { fround: __webpack_require__(338) }); /***/ }), -/* 337 */ +/* 338 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.16 Math.fround(x) @@ -61498,7 +61845,7 @@ module.exports = Math.fround || function fround(x) { /***/ }), -/* 338 */ +/* 339 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) @@ -61529,7 +61876,7 @@ $export($export.S, 'Math', { /***/ }), -/* 339 */ +/* 340 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.18 Math.imul(x, y) @@ -61552,7 +61899,7 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 340 */ +/* 341 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.21 Math.log10(x) @@ -61566,7 +61913,7 @@ $export($export.S, 'Math', { /***/ }), -/* 341 */ +/* 342 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.20 Math.log1p(x) @@ -61576,7 +61923,7 @@ $export($export.S, 'Math', { log1p: __webpack_require__(226) }); /***/ }), -/* 342 */ +/* 343 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.22 Math.log2(x) @@ -61590,7 +61937,7 @@ $export($export.S, 'Math', { /***/ }), -/* 343 */ +/* 344 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.28 Math.sign(x) @@ -61600,7 +61947,7 @@ $export($export.S, 'Math', { sign: __webpack_require__(173) }); /***/ }), -/* 344 */ +/* 345 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.30 Math.sinh(x) @@ -61621,7 +61968,7 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 345 */ +/* 346 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.33 Math.tanh(x) @@ -61639,7 +61986,7 @@ $export($export.S, 'Math', { /***/ }), -/* 346 */ +/* 347 */ /***/ (function(module, exports, __webpack_require__) { // 20.2.2.34 Math.trunc(x) @@ -61653,11 +62000,11 @@ $export($export.S, 'Math', { /***/ }), -/* 347 */ +/* 348 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var fromCharCode = String.fromCharCode; var $fromCodePoint = String.fromCodePoint; @@ -61682,7 +62029,7 @@ $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1) /***/ }), -/* 348 */ +/* 349 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61706,7 +62053,7 @@ $export($export.S, 'String', { /***/ }), -/* 349 */ +/* 350 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61720,7 +62067,7 @@ __webpack_require__(104)('trim', function ($trim) { /***/ }), -/* 350 */ +/* 351 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61744,7 +62091,7 @@ __webpack_require__(176)(String, 'String', function (iterated) { /***/ }), -/* 351 */ +/* 352 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61760,7 +62107,7 @@ $export($export.P, 'String', { /***/ }), -/* 352 */ +/* 353 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61787,7 +62134,7 @@ $export($export.P + $export.F * __webpack_require__(179)(ENDS_WITH), 'String', { /***/ }), -/* 353 */ +/* 354 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61806,7 +62153,7 @@ $export($export.P + $export.F * __webpack_require__(179)(INCLUDES), 'String', { /***/ }), -/* 354 */ +/* 355 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -61818,7 +62165,7 @@ $export($export.P, 'String', { /***/ }), -/* 355 */ +/* 356 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61843,7 +62190,7 @@ $export($export.P + $export.F * __webpack_require__(179)(STARTS_WITH), 'String', /***/ }), -/* 356 */ +/* 357 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61857,7 +62204,7 @@ __webpack_require__(46)('anchor', function (createHTML) { /***/ }), -/* 357 */ +/* 358 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61871,7 +62218,7 @@ __webpack_require__(46)('big', function (createHTML) { /***/ }), -/* 358 */ +/* 359 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61885,7 +62232,7 @@ __webpack_require__(46)('blink', function (createHTML) { /***/ }), -/* 359 */ +/* 360 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61899,7 +62246,7 @@ __webpack_require__(46)('bold', function (createHTML) { /***/ }), -/* 360 */ +/* 361 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61913,7 +62260,7 @@ __webpack_require__(46)('fixed', function (createHTML) { /***/ }), -/* 361 */ +/* 362 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61927,7 +62274,7 @@ __webpack_require__(46)('fontcolor', function (createHTML) { /***/ }), -/* 362 */ +/* 363 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61941,7 +62288,7 @@ __webpack_require__(46)('fontsize', function (createHTML) { /***/ }), -/* 363 */ +/* 364 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61955,7 +62302,7 @@ __webpack_require__(46)('italics', function (createHTML) { /***/ }), -/* 364 */ +/* 365 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61969,7 +62316,7 @@ __webpack_require__(46)('link', function (createHTML) { /***/ }), -/* 365 */ +/* 366 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61983,7 +62330,7 @@ __webpack_require__(46)('small', function (createHTML) { /***/ }), -/* 366 */ +/* 367 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61997,7 +62344,7 @@ __webpack_require__(46)('strike', function (createHTML) { /***/ }), -/* 367 */ +/* 368 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62011,7 +62358,7 @@ __webpack_require__(46)('sub', function (createHTML) { /***/ }), -/* 368 */ +/* 369 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62025,7 +62372,7 @@ __webpack_require__(46)('sup', function (createHTML) { /***/ }), -/* 369 */ +/* 370 */ /***/ (function(module, exports, __webpack_require__) { // 20.3.3.1 / 15.9.4.4 Date.now() @@ -62035,7 +62382,7 @@ $export($export.S, 'Date', { now: function () { return new Date().getTime(); } } /***/ }), -/* 370 */ +/* 371 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62058,12 +62405,12 @@ $export($export.P + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 371 */ +/* 372 */ /***/ (function(module, exports, __webpack_require__) { // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() var $export = __webpack_require__(3); -var toISOString = __webpack_require__(372); +var toISOString = __webpack_require__(373); // PhantomJS / old WebKit has a broken implementations $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', { @@ -62072,7 +62419,7 @@ $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'D /***/ }), -/* 372 */ +/* 373 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62105,7 +62452,7 @@ module.exports = (fails(function () { /***/ }), -/* 373 */ +/* 374 */ /***/ (function(module, exports, __webpack_require__) { var DateProto = Date.prototype; @@ -62123,17 +62470,17 @@ if (new Date(NaN) + '' != INVALID_DATE) { /***/ }), -/* 374 */ +/* 375 */ /***/ (function(module, exports, __webpack_require__) { -var TO_PRIMITIVE = __webpack_require__(18)('toPrimitive'); +var TO_PRIMITIVE = __webpack_require__(19)('toPrimitive'); var proto = Date.prototype; -if (!(TO_PRIMITIVE in proto)) __webpack_require__(52)(proto, TO_PRIMITIVE, __webpack_require__(375)); +if (!(TO_PRIMITIVE in proto)) __webpack_require__(52)(proto, TO_PRIMITIVE, __webpack_require__(376)); /***/ }), -/* 375 */ +/* 376 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62149,7 +62496,7 @@ module.exports = function (hint) { /***/ }), -/* 376 */ +/* 377 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.2.2 / 15.4.3.2 Array.isArray(arg) @@ -62159,12 +62506,12 @@ $export($export.S, 'Array', { isArray: __webpack_require__(137) }); /***/ }), -/* 377 */ +/* 378 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var ctx = __webpack_require__(62); +var ctx = __webpack_require__(63); var $export = __webpack_require__(3); var toObject = __webpack_require__(36); var call = __webpack_require__(228); @@ -62203,7 +62550,7 @@ $export($export.S + $export.F * !__webpack_require__(138)(function (iter) { Arra /***/ }), -/* 378 */ +/* 379 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62229,7 +62576,7 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 379 */ +/* 380 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62240,7 +62587,7 @@ var toIObject = __webpack_require__(53); var arrayJoin = [].join; // fallback for not array-like strings -$export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpack_require__(57)(arrayJoin)), 'Array', { +$export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpack_require__(58)(arrayJoin)), 'Array', { join: function join(separator) { return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator); } @@ -62248,7 +62595,7 @@ $export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpac /***/ }), -/* 380 */ +/* 381 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62256,7 +62603,7 @@ $export($export.P + $export.F * (__webpack_require__(122) != Object || !__webpac var $export = __webpack_require__(3); var html = __webpack_require__(168); var cof = __webpack_require__(75); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); var arraySlice = [].slice; @@ -62283,13 +62630,13 @@ $export($export.P + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 381 */ +/* 382 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(3); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var toObject = __webpack_require__(36); var fails = __webpack_require__(12); var $sort = [].sort; @@ -62302,7 +62649,7 @@ $export($export.P + $export.F * (fails(function () { // V8 bug test.sort(null); // Old WebKit -}) || !__webpack_require__(57)($sort)), 'Array', { +}) || !__webpack_require__(58)($sort)), 'Array', { // 22.1.3.25 Array.prototype.sort(comparefn) sort: function sort(comparefn) { return comparefn === undefined @@ -62313,14 +62660,14 @@ $export($export.P + $export.F * (fails(function () { /***/ }), -/* 382 */ +/* 383 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var $export = __webpack_require__(3); -var $forEach = __webpack_require__(67)(0); -var STRICT = __webpack_require__(57)([].forEach, true); +var $forEach = __webpack_require__(68)(0); +var STRICT = __webpack_require__(58)([].forEach, true); $export($export.P + $export.F * !STRICT, 'Array', { // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) @@ -62331,12 +62678,12 @@ $export($export.P + $export.F * !STRICT, 'Array', { /***/ }), -/* 383 */ +/* 384 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(14); var isArray = __webpack_require__(137); -var SPECIES = __webpack_require__(18)('species'); +var SPECIES = __webpack_require__(19)('species'); module.exports = function (original) { var C; @@ -62352,23 +62699,6 @@ module.exports = function (original) { }; -/***/ }), -/* 384 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $export = __webpack_require__(3); -var $map = __webpack_require__(67)(1); - -$export($export.P + $export.F * !__webpack_require__(57)([].map, true), 'Array', { - // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) - map: function map(callbackfn /* , thisArg */) { - return $map(this, callbackfn, arguments[1]); - } -}); - - /***/ }), /* 385 */ /***/ (function(module, exports, __webpack_require__) { @@ -62376,12 +62706,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].map, true), 'Array', "use strict"; var $export = __webpack_require__(3); -var $filter = __webpack_require__(67)(2); +var $map = __webpack_require__(68)(1); -$export($export.P + $export.F * !__webpack_require__(57)([].filter, true), 'Array', { - // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) - filter: function filter(callbackfn /* , thisArg */) { - return $filter(this, callbackfn, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].map, true), 'Array', { + // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments[1]); } }); @@ -62393,12 +62723,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].filter, true), 'Arra "use strict"; var $export = __webpack_require__(3); -var $some = __webpack_require__(67)(3); +var $filter = __webpack_require__(68)(2); -$export($export.P + $export.F * !__webpack_require__(57)([].some, true), 'Array', { - // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) - some: function some(callbackfn /* , thisArg */) { - return $some(this, callbackfn, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].filter, true), 'Array', { + // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments[1]); } }); @@ -62410,12 +62740,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].some, true), 'Array' "use strict"; var $export = __webpack_require__(3); -var $every = __webpack_require__(67)(4); +var $some = __webpack_require__(68)(3); -$export($export.P + $export.F * !__webpack_require__(57)([].every, true), 'Array', { - // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) - every: function every(callbackfn /* , thisArg */) { - return $every(this, callbackfn, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].some, true), 'Array', { + // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments[1]); } }); @@ -62427,12 +62757,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].every, true), 'Array "use strict"; var $export = __webpack_require__(3); -var $reduce = __webpack_require__(230); +var $every = __webpack_require__(68)(4); -$export($export.P + $export.F * !__webpack_require__(57)([].reduce, true), 'Array', { - // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) - reduce: function reduce(callbackfn /* , initialValue */) { - return $reduce(this, callbackfn, arguments.length, arguments[1], false); +$export($export.P + $export.F * !__webpack_require__(58)([].every, true), 'Array', { + // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments[1]); } }); @@ -62446,10 +62776,10 @@ $export($export.P + $export.F * !__webpack_require__(57)([].reduce, true), 'Arra var $export = __webpack_require__(3); var $reduce = __webpack_require__(230); -$export($export.P + $export.F * !__webpack_require__(57)([].reduceRight, true), 'Array', { - // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) - reduceRight: function reduceRight(callbackfn /* , initialValue */) { - return $reduce(this, callbackfn, arguments.length, arguments[1], true); +$export($export.P + $export.F * !__webpack_require__(58)([].reduce, true), 'Array', { + // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], false); } }); @@ -62461,17 +62791,12 @@ $export($export.P + $export.F * !__webpack_require__(57)([].reduceRight, true), "use strict"; var $export = __webpack_require__(3); -var $indexOf = __webpack_require__(135)(false); -var $native = [].indexOf; -var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; +var $reduce = __webpack_require__(230); -$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($native)), 'Array', { - // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) - indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { - return NEGATIVE_ZERO - // convert -0 to +0 - ? $native.apply(this, arguments) || 0 - : $indexOf(this, searchElement, arguments[1]); +$export($export.P + $export.F * !__webpack_require__(58)([].reduceRight, true), 'Array', { + // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) + reduceRight: function reduceRight(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], true); } }); @@ -62482,14 +62807,36 @@ $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($nati "use strict"; +var $export = __webpack_require__(3); +var $indexOf = __webpack_require__(135)(false); +var $native = [].indexOf; +var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; + +$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(58)($native)), 'Array', { + // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? $native.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments[1]); + } +}); + + +/***/ }), +/* 392 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + var $export = __webpack_require__(3); var toIObject = __webpack_require__(53); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var toLength = __webpack_require__(23); var $native = [].lastIndexOf; var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; -$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($native)), 'Array', { +$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(58)($native)), 'Array', { // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { // convert -0 to +0 @@ -62506,7 +62853,7 @@ $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(57)($nati /***/ }), -/* 392 */ +/* 393 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) @@ -62514,11 +62861,11 @@ var $export = __webpack_require__(3); $export($export.P, 'Array', { copyWithin: __webpack_require__(231) }); -__webpack_require__(94)('copyWithin'); +__webpack_require__(95)('copyWithin'); /***/ }), -/* 393 */ +/* 394 */ /***/ (function(module, exports, __webpack_require__) { // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) @@ -62526,18 +62873,18 @@ var $export = __webpack_require__(3); $export($export.P, 'Array', { fill: __webpack_require__(183) }); -__webpack_require__(94)('fill'); +__webpack_require__(95)('fill'); /***/ }), -/* 394 */ +/* 395 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) var $export = __webpack_require__(3); -var $find = __webpack_require__(67)(5); +var $find = __webpack_require__(68)(5); var KEY = 'find'; var forced = true; // Shouldn't skip holes @@ -62547,18 +62894,18 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(94)(KEY); +__webpack_require__(95)(KEY); /***/ }), -/* 395 */ +/* 396 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) var $export = __webpack_require__(3); -var $find = __webpack_require__(67)(6); +var $find = __webpack_require__(68)(6); var KEY = 'findIndex'; var forced = true; // Shouldn't skip holes @@ -62568,24 +62915,24 @@ $export($export.P + $export.F * forced, 'Array', { return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); -__webpack_require__(94)(KEY); - - -/***/ }), -/* 396 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(106)('Array'); +__webpack_require__(95)(KEY); /***/ }), /* 397 */ /***/ (function(module, exports, __webpack_require__) { +__webpack_require__(106)('Array'); + + +/***/ }), +/* 398 */ +/***/ (function(module, exports, __webpack_require__) { + var global = __webpack_require__(11); var inheritIfRequired = __webpack_require__(171); var dP = __webpack_require__(29).f; -var gOPN = __webpack_require__(92).f; +var gOPN = __webpack_require__(93).f; var isRegExp = __webpack_require__(178); var $flags = __webpack_require__(139); var $RegExp = global.RegExp; @@ -62597,7 +62944,7 @@ var re2 = /a/g; var CORRECT_NEW = new $RegExp(re1) !== re1; if (__webpack_require__(28) && (!CORRECT_NEW || __webpack_require__(12)(function () { - re2[__webpack_require__(18)('match')] = false; + re2[__webpack_require__(19)('match')] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; }))) { @@ -62628,7 +62975,7 @@ __webpack_require__(106)('RegExp'); /***/ }), -/* 398 */ +/* 399 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62660,7 +63007,7 @@ if (__webpack_require__(12)(function () { return $toString.call({ source: 'a', f /***/ }), -/* 399 */ +/* 400 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62707,7 +63054,7 @@ __webpack_require__(141)('match', 1, function (defined, MATCH, $match, maybeCall /***/ }), -/* 400 */ +/* 401 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62716,7 +63063,7 @@ __webpack_require__(141)('match', 1, function (defined, MATCH, $match, maybeCall var anObject = __webpack_require__(13); var toObject = __webpack_require__(36); var toLength = __webpack_require__(23); -var toInteger = __webpack_require__(64); +var toInteger = __webpack_require__(65); var advanceStringIndex = __webpack_require__(186); var regExpExec = __webpack_require__(140); var max = Math.max; @@ -62832,7 +63179,7 @@ __webpack_require__(141)('replace', 2, function (defined, REPLACE, $replace, may /***/ }), -/* 401 */ +/* 402 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62870,7 +63217,7 @@ __webpack_require__(141)('search', 1, function (defined, SEARCH, $search, maybeC /***/ }), -/* 402 */ +/* 403 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63011,7 +63358,7 @@ __webpack_require__(141)('split', 2, function (defined, SPLIT, $split, maybeCall /***/ }), -/* 403 */ +/* 404 */ /***/ (function(module, exports, __webpack_require__) { var global = __webpack_require__(11); @@ -63086,7 +63433,7 @@ module.exports = function () { /***/ }), -/* 404 */ +/* 405 */ /***/ (function(module, exports) { module.exports = function (exec) { @@ -63099,13 +63446,13 @@ module.exports = function (exec) { /***/ }), -/* 405 */ +/* 406 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var strong = __webpack_require__(238); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var MAP = 'Map'; // 23.1 Map Objects @@ -63125,13 +63472,13 @@ module.exports = __webpack_require__(144)(MAP, function (get) { /***/ }), -/* 406 */ +/* 407 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var strong = __webpack_require__(238); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var SET = 'Set'; // 23.2 Set Objects @@ -63146,20 +63493,20 @@ module.exports = __webpack_require__(144)(SET, function (get) { /***/ }), -/* 407 */ +/* 408 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var global = __webpack_require__(11); -var each = __webpack_require__(67)(0); +var each = __webpack_require__(68)(0); var redefine = __webpack_require__(45); var meta = __webpack_require__(83); var assign = __webpack_require__(218); var weak = __webpack_require__(239); var isObject = __webpack_require__(14); -var validate = __webpack_require__(95); -var NATIVE_WEAK_MAP = __webpack_require__(95); +var validate = __webpack_require__(96); +var NATIVE_WEAK_MAP = __webpack_require__(96); var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; var WEAK_MAP = 'WeakMap'; var getWeak = meta.getWeak; @@ -63213,13 +63560,13 @@ if (NATIVE_WEAK_MAP && IS_IE11) { /***/ }), -/* 408 */ +/* 409 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var weak = __webpack_require__(239); -var validate = __webpack_require__(95); +var validate = __webpack_require__(96); var WEAK_SET = 'WeakSet'; // 23.4 WeakSet Objects @@ -63234,7 +63581,7 @@ __webpack_require__(144)(WEAK_SET, function (get) { /***/ }), -/* 409 */ +/* 410 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63243,7 +63590,7 @@ var $export = __webpack_require__(3); var $typed = __webpack_require__(145); var buffer = __webpack_require__(188); var anObject = __webpack_require__(13); -var toAbsoluteIndex = __webpack_require__(90); +var toAbsoluteIndex = __webpack_require__(91); var toLength = __webpack_require__(23); var isObject = __webpack_require__(14); var ArrayBuffer = __webpack_require__(11).ArrayBuffer; @@ -63287,7 +63634,7 @@ __webpack_require__(106)(ARRAY_BUFFER); /***/ }), -/* 410 */ +/* 411 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -63297,7 +63644,7 @@ $export($export.G + $export.W + $export.F * !__webpack_require__(145).ABV, { /***/ }), -/* 411 */ +/* 412 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Int8', 1, function (init) { @@ -63308,7 +63655,7 @@ __webpack_require__(77)('Int8', 1, function (init) { /***/ }), -/* 412 */ +/* 413 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint8', 1, function (init) { @@ -63319,7 +63666,7 @@ __webpack_require__(77)('Uint8', 1, function (init) { /***/ }), -/* 413 */ +/* 414 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint8', 1, function (init) { @@ -63330,7 +63677,7 @@ __webpack_require__(77)('Uint8', 1, function (init) { /***/ }), -/* 414 */ +/* 415 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Int16', 2, function (init) { @@ -63341,7 +63688,7 @@ __webpack_require__(77)('Int16', 2, function (init) { /***/ }), -/* 415 */ +/* 416 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint16', 2, function (init) { @@ -63352,7 +63699,7 @@ __webpack_require__(77)('Uint16', 2, function (init) { /***/ }), -/* 416 */ +/* 417 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Int32', 4, function (init) { @@ -63363,7 +63710,7 @@ __webpack_require__(77)('Int32', 4, function (init) { /***/ }), -/* 417 */ +/* 418 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Uint32', 4, function (init) { @@ -63374,7 +63721,7 @@ __webpack_require__(77)('Uint32', 4, function (init) { /***/ }), -/* 418 */ +/* 419 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Float32', 4, function (init) { @@ -63385,7 +63732,7 @@ __webpack_require__(77)('Float32', 4, function (init) { /***/ }), -/* 419 */ +/* 420 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(77)('Float64', 8, function (init) { @@ -63396,12 +63743,12 @@ __webpack_require__(77)('Float64', 8, function (init) { /***/ }), -/* 420 */ +/* 421 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.1 Reflect.apply(target, thisArgument, argumentsList) var $export = __webpack_require__(3); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var anObject = __webpack_require__(13); var rApply = (__webpack_require__(11).Reflect || {}).apply; var fApply = Function.apply; @@ -63418,13 +63765,13 @@ $export($export.S + $export.F * !__webpack_require__(12)(function () { /***/ }), -/* 421 */ +/* 422 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) var $export = __webpack_require__(3); -var create = __webpack_require__(91); -var aFunction = __webpack_require__(63); +var create = __webpack_require__(92); +var aFunction = __webpack_require__(64); var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); var fails = __webpack_require__(12); @@ -63471,7 +63818,7 @@ $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { /***/ }), -/* 422 */ +/* 423 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) @@ -63500,12 +63847,12 @@ $export($export.S + $export.F * __webpack_require__(12)(function () { /***/ }), -/* 423 */ +/* 424 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.4 Reflect.deleteProperty(target, propertyKey) var $export = __webpack_require__(3); -var gOPD = __webpack_require__(65).f; +var gOPD = __webpack_require__(66).f; var anObject = __webpack_require__(13); $export($export.S, 'Reflect', { @@ -63517,7 +63864,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 424 */ +/* 425 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63550,12 +63897,12 @@ $export($export.S, 'Reflect', { /***/ }), -/* 425 */ +/* 426 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.6 Reflect.get(target, propertyKey [, receiver]) -var gOPD = __webpack_require__(65); -var getPrototypeOf = __webpack_require__(93); +var gOPD = __webpack_require__(66); +var getPrototypeOf = __webpack_require__(94); var has = __webpack_require__(51); var $export = __webpack_require__(3); var isObject = __webpack_require__(14); @@ -63577,11 +63924,11 @@ $export($export.S, 'Reflect', { get: get }); /***/ }), -/* 426 */ +/* 427 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) -var gOPD = __webpack_require__(65); +var gOPD = __webpack_require__(66); var $export = __webpack_require__(3); var anObject = __webpack_require__(13); @@ -63593,12 +63940,12 @@ $export($export.S, 'Reflect', { /***/ }), -/* 427 */ +/* 428 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.8 Reflect.getPrototypeOf(target) var $export = __webpack_require__(3); -var getProto = __webpack_require__(93); +var getProto = __webpack_require__(94); var anObject = __webpack_require__(13); $export($export.S, 'Reflect', { @@ -63609,7 +63956,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 428 */ +/* 429 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.9 Reflect.has(target, propertyKey) @@ -63623,7 +63970,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 429 */ +/* 430 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.10 Reflect.isExtensible(target) @@ -63640,7 +63987,7 @@ $export($export.S, 'Reflect', { /***/ }), -/* 430 */ +/* 431 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.11 Reflect.ownKeys(target) @@ -63650,7 +63997,7 @@ $export($export.S, 'Reflect', { ownKeys: __webpack_require__(241) }); /***/ }), -/* 431 */ +/* 432 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.12 Reflect.preventExtensions(target) @@ -63672,16 +64019,16 @@ $export($export.S, 'Reflect', { /***/ }), -/* 432 */ +/* 433 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) var dP = __webpack_require__(29); -var gOPD = __webpack_require__(65); -var getPrototypeOf = __webpack_require__(93); +var gOPD = __webpack_require__(66); +var getPrototypeOf = __webpack_require__(94); var has = __webpack_require__(51); var $export = __webpack_require__(3); -var createDesc = __webpack_require__(86); +var createDesc = __webpack_require__(87); var anObject = __webpack_require__(13); var isObject = __webpack_require__(14); @@ -63711,7 +64058,7 @@ $export($export.S, 'Reflect', { set: set }); /***/ }), -/* 433 */ +/* 434 */ /***/ (function(module, exports, __webpack_require__) { // 26.1.14 Reflect.setPrototypeOf(target, proto) @@ -63732,15 +64079,15 @@ if (setProto) $export($export.S, 'Reflect', { /***/ }), -/* 434 */ +/* 435 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(435); +__webpack_require__(436); module.exports = __webpack_require__(26).Array.includes; /***/ }), -/* 435 */ +/* 436 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63755,29 +64102,29 @@ $export($export.P, 'Array', { } }); -__webpack_require__(94)('includes'); - - -/***/ }), -/* 436 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(437); -module.exports = __webpack_require__(26).Array.flatMap; +__webpack_require__(95)('includes'); /***/ }), /* 437 */ /***/ (function(module, exports, __webpack_require__) { +__webpack_require__(438); +module.exports = __webpack_require__(26).Array.flatMap; + + +/***/ }), +/* 438 */ +/***/ (function(module, exports, __webpack_require__) { + "use strict"; // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap var $export = __webpack_require__(3); -var flattenIntoArray = __webpack_require__(438); +var flattenIntoArray = __webpack_require__(439); var toObject = __webpack_require__(36); var toLength = __webpack_require__(23); -var aFunction = __webpack_require__(63); +var aFunction = __webpack_require__(64); var arraySpeciesCreate = __webpack_require__(229); $export($export.P, 'Array', { @@ -63792,11 +64139,11 @@ $export($export.P, 'Array', { } }); -__webpack_require__(94)('flatMap'); +__webpack_require__(95)('flatMap'); /***/ }), -/* 438 */ +/* 439 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63805,8 +64152,8 @@ __webpack_require__(94)('flatMap'); var isArray = __webpack_require__(137); var isObject = __webpack_require__(14); var toLength = __webpack_require__(23); -var ctx = __webpack_require__(62); -var IS_CONCAT_SPREADABLE = __webpack_require__(18)('isConcatSpreadable'); +var ctx = __webpack_require__(63); +var IS_CONCAT_SPREADABLE = __webpack_require__(19)('isConcatSpreadable'); function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) { var targetIndex = start; @@ -63842,15 +64189,15 @@ module.exports = flattenIntoArray; /***/ }), -/* 439 */ +/* 440 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(440); +__webpack_require__(441); module.exports = __webpack_require__(26).String.padStart; /***/ }), -/* 440 */ +/* 441 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63871,15 +64218,15 @@ $export($export.P + $export.F * WEBKIT_BUG, 'String', { /***/ }), -/* 441 */ +/* 442 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(442); +__webpack_require__(443); module.exports = __webpack_require__(26).String.padEnd; /***/ }), -/* 442 */ +/* 443 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63900,15 +64247,15 @@ $export($export.P + $export.F * WEBKIT_BUG, 'String', { /***/ }), -/* 443 */ +/* 444 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(444); +__webpack_require__(445); module.exports = __webpack_require__(26).String.trimLeft; /***/ }), -/* 444 */ +/* 445 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63922,15 +64269,15 @@ __webpack_require__(104)('trimLeft', function ($trim) { /***/ }), -/* 445 */ +/* 446 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(446); +__webpack_require__(447); module.exports = __webpack_require__(26).String.trimRight; /***/ }), -/* 446 */ +/* 447 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63943,38 +64290,38 @@ __webpack_require__(104)('trimRight', function ($trim) { }, 'trimEnd'); -/***/ }), -/* 447 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(448); -module.exports = __webpack_require__(165).f('asyncIterator'); - - /***/ }), /* 448 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(214)('asyncIterator'); +__webpack_require__(449); +module.exports = __webpack_require__(165).f('asyncIterator'); /***/ }), /* 449 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(450); -module.exports = __webpack_require__(26).Object.getOwnPropertyDescriptors; +__webpack_require__(214)('asyncIterator'); /***/ }), /* 450 */ /***/ (function(module, exports, __webpack_require__) { +__webpack_require__(451); +module.exports = __webpack_require__(26).Object.getOwnPropertyDescriptors; + + +/***/ }), +/* 451 */ +/***/ (function(module, exports, __webpack_require__) { + // https://github.com/tc39/proposal-object-getownpropertydescriptors var $export = __webpack_require__(3); var ownKeys = __webpack_require__(241); var toIObject = __webpack_require__(53); -var gOPD = __webpack_require__(65); +var gOPD = __webpack_require__(66); var createProperty = __webpack_require__(181); $export($export.S, 'Object', { @@ -63995,15 +64342,15 @@ $export($export.S, 'Object', { /***/ }), -/* 451 */ +/* 452 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(452); +__webpack_require__(453); module.exports = __webpack_require__(26).Object.values; /***/ }), -/* 452 */ +/* 453 */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-values-entries @@ -64018,15 +64365,15 @@ $export($export.S, 'Object', { /***/ }), -/* 453 */ +/* 454 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(454); +__webpack_require__(455); module.exports = __webpack_require__(26).Object.entries; /***/ }), -/* 454 */ +/* 455 */ /***/ (function(module, exports, __webpack_require__) { // https://github.com/tc39/proposal-object-values-entries @@ -64041,18 +64388,18 @@ $export($export.S, 'Object', { /***/ }), -/* 455 */ +/* 456 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; __webpack_require__(235); -__webpack_require__(456); +__webpack_require__(457); module.exports = __webpack_require__(26).Promise['finally']; /***/ }), -/* 456 */ +/* 457 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64079,17 +64426,17 @@ $export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { /***/ }), -/* 457 */ +/* 458 */ /***/ (function(module, exports, __webpack_require__) { -__webpack_require__(458); __webpack_require__(459); __webpack_require__(460); +__webpack_require__(461); module.exports = __webpack_require__(26); /***/ }), -/* 458 */ +/* 459 */ /***/ (function(module, exports, __webpack_require__) { // ie9- setTimeout & setInterval additional parameters fix @@ -64115,7 +64462,7 @@ $export($export.G + $export.B + $export.F * MSIE, { /***/ }), -/* 459 */ +/* 460 */ /***/ (function(module, exports, __webpack_require__) { var $export = __webpack_require__(3); @@ -64127,16 +64474,16 @@ $export($export.G + $export.B, { /***/ }), -/* 460 */ +/* 461 */ /***/ (function(module, exports, __webpack_require__) { var $iterators = __webpack_require__(184); -var getKeys = __webpack_require__(89); +var getKeys = __webpack_require__(90); var redefine = __webpack_require__(45); var global = __webpack_require__(11); var hide = __webpack_require__(52); var Iterators = __webpack_require__(105); -var wks = __webpack_require__(18); +var wks = __webpack_require__(19); var ITERATOR = wks('iterator'); var TO_STRING_TAG = wks('toStringTag'); var ArrayValues = Iterators.Array; @@ -64191,7 +64538,7 @@ for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++ /***/ }), -/* 461 */ +/* 462 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -64944,33 +65291,33 @@ try { } -/***/ }), -/* 462 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(463); -module.exports = __webpack_require__(244).global; - - /***/ }), /* 463 */ /***/ (function(module, exports, __webpack_require__) { -// https://github.com/tc39/proposal-global -var $export = __webpack_require__(464); - -$export($export.G, { global: __webpack_require__(189) }); +__webpack_require__(464); +module.exports = __webpack_require__(244).global; /***/ }), /* 464 */ /***/ (function(module, exports, __webpack_require__) { +// https://github.com/tc39/proposal-global +var $export = __webpack_require__(465); + +$export($export.G, { global: __webpack_require__(189) }); + + +/***/ }), +/* 465 */ +/***/ (function(module, exports, __webpack_require__) { + var global = __webpack_require__(189); var core = __webpack_require__(244); -var ctx = __webpack_require__(465); -var hide = __webpack_require__(467); -var has = __webpack_require__(474); +var ctx = __webpack_require__(466); +var hide = __webpack_require__(468); +var has = __webpack_require__(475); var PROTOTYPE = 'prototype'; var $export = function (type, name, source) { @@ -65031,11 +65378,11 @@ module.exports = $export; /***/ }), -/* 465 */ +/* 466 */ /***/ (function(module, exports, __webpack_require__) { // optional / simple context binding -var aFunction = __webpack_require__(466); +var aFunction = __webpack_require__(467); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; @@ -65057,7 +65404,7 @@ module.exports = function (fn, that, length) { /***/ }), -/* 466 */ +/* 467 */ /***/ (function(module, exports) { module.exports = function (it) { @@ -65067,11 +65414,11 @@ module.exports = function (it) { /***/ }), -/* 467 */ +/* 468 */ /***/ (function(module, exports, __webpack_require__) { -var dP = __webpack_require__(468); -var createDesc = __webpack_require__(473); +var dP = __webpack_require__(469); +var createDesc = __webpack_require__(474); module.exports = __webpack_require__(191) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { @@ -65081,12 +65428,12 @@ module.exports = __webpack_require__(191) ? function (object, key, value) { /***/ }), -/* 468 */ +/* 469 */ /***/ (function(module, exports, __webpack_require__) { -var anObject = __webpack_require__(469); -var IE8_DOM_DEFINE = __webpack_require__(470); -var toPrimitive = __webpack_require__(472); +var anObject = __webpack_require__(470); +var IE8_DOM_DEFINE = __webpack_require__(471); +var toPrimitive = __webpack_require__(473); var dP = Object.defineProperty; exports.f = __webpack_require__(191) ? Object.defineProperty : function defineProperty(O, P, Attributes) { @@ -65103,7 +65450,7 @@ exports.f = __webpack_require__(191) ? Object.defineProperty : function definePr /***/ }), -/* 469 */ +/* 470 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(190); @@ -65114,16 +65461,16 @@ module.exports = function (it) { /***/ }), -/* 470 */ +/* 471 */ /***/ (function(module, exports, __webpack_require__) { module.exports = !__webpack_require__(191) && !__webpack_require__(245)(function () { - return Object.defineProperty(__webpack_require__(471)('div'), 'a', { get: function () { return 7; } }).a != 7; + return Object.defineProperty(__webpack_require__(472)('div'), 'a', { get: function () { return 7; } }).a != 7; }); /***/ }), -/* 471 */ +/* 472 */ /***/ (function(module, exports, __webpack_require__) { var isObject = __webpack_require__(190); @@ -65136,7 +65483,7 @@ module.exports = function (it) { /***/ }), -/* 472 */ +/* 473 */ /***/ (function(module, exports, __webpack_require__) { // 7.1.1 ToPrimitive(input [, PreferredType]) @@ -65154,7 +65501,7 @@ module.exports = function (it, S) { /***/ }), -/* 473 */ +/* 474 */ /***/ (function(module, exports) { module.exports = function (bitmap, value) { @@ -65168,7 +65515,7 @@ module.exports = function (bitmap, value) { /***/ }), -/* 474 */ +/* 475 */ /***/ (function(module, exports) { var hasOwnProperty = {}.hasOwnProperty; @@ -65178,7 +65525,7 @@ module.exports = function (it, key) { /***/ }), -/* 475 */ +/* 476 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65206,7 +65553,7 @@ exports.Counter = Counter; //# sourceMappingURL=Counter.js.map /***/ }), -/* 476 */ +/* 477 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65295,7 +65642,7 @@ exports.DateHelper = DateHelper; //# sourceMappingURL=DateHelper.js.map /***/ }), -/* 477 */ +/* 478 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65513,7 +65860,7 @@ MigrationHelper.TYPES = { //# sourceMappingURL=MigrationHelper.js.map /***/ }), -/* 478 */ +/* 479 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process, global) {/*! ***************************************************************************** @@ -66651,7 +66998,7 @@ var Reflect; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(247), __webpack_require__(193))) /***/ }), -/* 479 */ +/* 480 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -66664,7 +67011,7 @@ var Reflect; var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 @@ -66751,7 +67098,7 @@ module.exports = Sha /***/ }), -/* 480 */ +/* 481 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66908,7 +67255,7 @@ function fromByteArray (uint8) { /***/ }), -/* 481 */ +/* 482 */ /***/ (function(module, exports) { /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ @@ -66999,7 +67346,7 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { /***/ }), -/* 482 */ +/* 483 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -67010,7 +67357,7 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 483 */ +/* 484 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -67024,7 +67371,7 @@ module.exports = Array.isArray || function (arr) { var inherits = __webpack_require__(109) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 @@ -67115,7 +67462,7 @@ module.exports = Sha1 /***/ }), -/* 484 */ +/* 485 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -67129,7 +67476,7 @@ module.exports = Sha1 var inherits = __webpack_require__(109) var Sha256 = __webpack_require__(248) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var W = new Array(64) @@ -67174,13 +67521,13 @@ module.exports = Sha224 /***/ }), -/* 485 */ +/* 486 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(109) var SHA512 = __webpack_require__(249) var Hash = __webpack_require__(110) -var Buffer = __webpack_require__(96).Buffer +var Buffer = __webpack_require__(97).Buffer var W = new Array(160) @@ -67237,7 +67584,7 @@ module.exports = Sha384 /***/ }), -/* 486 */ +/* 487 */ /***/ (function(module, exports, __webpack_require__) { @@ -67253,7 +67600,7 @@ function setup(env) { createDebug.disable = disable; createDebug.enable = enable; createDebug.enabled = enabled; - createDebug.humanize = __webpack_require__(487); + createDebug.humanize = __webpack_require__(488); createDebug.destroy = destroy; Object.keys(env).forEach(key => { @@ -67504,7 +67851,7 @@ module.exports = setup; /***/ }), -/* 487 */ +/* 488 */ /***/ (function(module, exports) { /** @@ -67672,7 +68019,7 @@ function plural(ms, msAbs, n, name) { /***/ }), -/* 488 */ +/* 489 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67793,7 +68140,7 @@ exports.Prioritized = Prioritized; //# sourceMappingURL=Prioritized.js.map /***/ }), -/* 489 */ +/* 490 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67829,7 +68176,7 @@ exports.PromiseWithHandlers = PromiseWithHandlers; //# sourceMappingURL=PromiseWithHandlers.js.map /***/ }), -/* 490 */ +/* 491 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67868,7 +68215,7 @@ exports.Random = Random; //# sourceMappingURL=Random.js.map /***/ }), -/* 491 */ +/* 492 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67947,7 +68294,7 @@ exports.DragHelper = DragHelper; //# sourceMappingURL=DragHelper.js.map /***/ }), -/* 492 */ +/* 493 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68024,7 +68371,7 @@ exports.HotkeyManager = HotkeyManager; //# sourceMappingURL=HotkeyManager.js.map /***/ }), -/* 493 */ +/* 494 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68163,7 +68510,7 @@ exports.InputSelect = InputSelect; //# sourceMappingURL=InputSelect.js.map /***/ }), -/* 494 */ +/* 495 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68172,11 +68519,11 @@ function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); -__export(__webpack_require__(495)); +__export(__webpack_require__(496)); /***/ }), -/* 495 */ +/* 496 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68191,7 +68538,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", { value: true }); -const js_helper_1 = __webpack_require__(22); +const js_helper_1 = __webpack_require__(17); class EventManager { constructor() { this._listeners = {}; @@ -68242,7 +68589,7 @@ EventManager._instance = null; /***/ }), -/* 496 */ +/* 497 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68271,9 +68618,9 @@ Object.defineProperty(exports, "__esModule", { }); exports.ContainerSite = void 0; -var TemplateSite_1 = __webpack_require__(199); +var TemplateSite_1 = __webpack_require__(198); -var containerTemplate = __webpack_require__(497); +var containerTemplate = __webpack_require__(498); /** * Seite, welche das Container-Template benutzt */ @@ -68302,13 +68649,13 @@ var ContainerSite = /*#__PURE__*/function (_TemplateSite_1$Templ) { exports.ContainerSite = ContainerSite; /***/ }), -/* 497 */ +/* 498 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/container.html"; /***/ }), -/* 498 */ +/* 499 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68541,7 +68888,7 @@ var DelegateSite = /*#__PURE__*/function (_AbstractSite_1$Abstr) { exports.DelegateSite = DelegateSite; /***/ }), -/* 499 */ +/* 500 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68612,19 +68959,19 @@ exports.AbstractWindowFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var Helper_1 = __webpack_require__(7); var ViewHelper_1 = __webpack_require__(27); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var NativeStoragePromise_1 = __webpack_require__(42); -var Toast_1 = __webpack_require__(101); +var Toast_1 = __webpack_require__(85); -var template = __webpack_require__(500); +var template = __webpack_require__(501); var AbstractWindowFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(AbstractWindowFragment, _AbstractFragment_1$A); @@ -69455,13 +69802,13 @@ var AbstractWindowFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { exports.AbstractWindowFragment = AbstractWindowFragment; /***/ }), -/* 500 */ +/* 501 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/abstractWindowTemplate.html"; /***/ }), -/* 501 */ +/* 502 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69532,11 +69879,11 @@ exports.AlphabeticListFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var client_1 = __webpack_require__(197); +var client_1 = __webpack_require__(147); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); -var defaultView = __webpack_require__(502); +var defaultView = __webpack_require__(503); var AlphabeticListFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(AlphabeticListFragment, _AbstractFragment_1$A); @@ -69695,13 +70042,13 @@ var AlphabeticListFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { exports.AlphabeticListFragment = AlphabeticListFragment; /***/ }), -/* 502 */ +/* 503 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/alphabeticListFragment.html"; /***/ }), -/* 503 */ +/* 504 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69772,13 +70119,13 @@ exports.TabFragment = void 0; var AbstractFragment_1 = __webpack_require__(79); -var defaultTabView = __webpack_require__(504); +var defaultTabView = __webpack_require__(505); var Helper_1 = __webpack_require__(15); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var client_1 = __webpack_require__(197); +var client_1 = __webpack_require__(147); var TabFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(TabFragment, _AbstractFragment_1$A); @@ -69913,13 +70260,13 @@ var TabFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { exports.TabFragment = TabFragment; /***/ }), -/* 504 */ +/* 505 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/tabFragment.html"; /***/ }), -/* 505 */ +/* 506 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69930,7 +70277,7 @@ Object.defineProperty(exports, "__esModule", { }); /***/ }), -/* 506 */ +/* 507 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69967,9 +70314,9 @@ var MenuAction_1 = __webpack_require__(80); var Dialog_1 = __webpack_require__(84); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); -var errorIcon = __webpack_require__(507); +var errorIcon = __webpack_require__(508); var ErrorAction = /*#__PURE__*/function (_MenuAction_1$MenuAct) { _inherits(ErrorAction, _MenuAction_1$MenuAct); @@ -70036,7 +70383,7 @@ ErrorAction._instance = null; ErrorAction._errors = []; /***/ }), -/* 507 */ +/* 508 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -70044,7 +70391,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/errorIcon.png"); /***/ }), -/* 508 */ +/* 509 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70106,19 +70453,19 @@ App_1.App.addInitialization(function (app) { }); /***/ }), -/* 509 */ +/* 510 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/navbar.html"; /***/ }), -/* 510 */ +/* 511 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/menuSite.html"; /***/ }), -/* 511 */ +/* 512 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70193,7 +70540,7 @@ var SwipeChildFragment_1 = __webpack_require__(263); var Helper_1 = __webpack_require__(15); -var view = __webpack_require__(512); +var view = __webpack_require__(513); var SwipeFragment = /*#__PURE__*/function (_AbstractFragment_1$A) { _inherits(SwipeFragment, _AbstractFragment_1$A); @@ -70388,13 +70735,13 @@ SwipeFragment.MAX_Y = 80; SwipeFragment.MIN_X = 150; /***/ }), -/* 512 */ +/* 513 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/swipeFragment.html"; /***/ }), -/* 513 */ +/* 514 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70448,7 +70795,7 @@ var ButtonChooseDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ButtonChooseDialog = ButtonChooseDialog; /***/ }), -/* 514 */ +/* 515 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70479,11 +70826,11 @@ exports.ChooseDialog = void 0; var Dialog_1 = __webpack_require__(84); -var ViewInflater_1 = __webpack_require__(58); +var ViewInflater_1 = __webpack_require__(54); var view = __webpack_require__(264); -var Translator_1 = __webpack_require__(32); +var Translator_1 = __webpack_require__(30); var Helper_1 = __webpack_require__(7); @@ -70540,7 +70887,7 @@ var ChooseDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ChooseDialog = ChooseDialog; /***/ }), -/* 515 */ +/* 516 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70676,7 +71023,7 @@ var ConfirmDialog = /*#__PURE__*/function (_Dialog_1$Dialog) { exports.ConfirmDialog = ConfirmDialog; /***/ }), -/* 516 */ +/* 517 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70730,7 +71077,728 @@ var ImgChooseDialog = /*#__PURE__*/function (_ElemChooseDialog_1$E) { exports.ImgChooseDialog = ImgChooseDialog; /***/ }), -/* 517 */ +/* 518 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Form = void 0; + +var DataManager_1 = __webpack_require__(59); + +var Helper_1 = __webpack_require__(15); + +var Translator_1 = __webpack_require__(30); + +var Toast_1 = __webpack_require__(85); + +var ImageSelectionElement_1 = __webpack_require__(266); + +var js_helper_1 = __webpack_require__(17); + +var Form = /*#__PURE__*/function () { + function Form(formElem, urlOrCallback, method, imageSelectionSelector) { + var _this = this; + + _classCallCheck(this, Form); + + this.imageSelectionElementReady = new js_helper_1.PromiseWithHandlers(); + this.imageSelectionElements = {}; + this.formElem = formElem; + this._method = Helper_1.Helper.nonNull(method, formElem["method"], "POST"); + this._elementChangeListener = null; + this._validators = []; + this._isBusy = false; + + if (imageSelectionSelector === undefined) { + imageSelectionSelector = "input.image-selection"; + } + + if (typeof urlOrCallback === "string") { + this._submitHandler = function (values) { + if (_this._method.toLowerCase() === "get") { + return DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)); + } else {//TODO, wenn Serververbindung kommt + // return (DataManager.send(urlOrCallback, values)); + } + }; + } else { + this._submitHandler = urlOrCallback; + } + + this._editors = []; + this._submitCallback = null; + + this.errorCallback = function (errors) { + return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return this.setErrors(errors); + + case 2: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + }; + + formElem.addEventListener("submit", function (e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + e.preventDefault(); + _context2.next = 3; + return self.doSubmit(e); + + case 3: + case "end": + return _context2.stop(); + } + } + }, _callee2); + })); + }); + this.prepareForImageSelection(imageSelectionSelector).then(function (r) { + return _this.imageSelectionElementReady.resolve(r); + }); + var self = this; + + _toConsumableArray(formElem.elements).forEach(function (element) { + element.addEventListener("change", function () { + if (this.value.trim() !== "") { + this.classList.add("notEmpty"); + } else { + this.classList.remove("notEmpty"); + } + + this.setCustomValidity(""); + + if (Helper_1.Helper.isNotNull(self._elementChangeListener)) { + self._elementChangeListener(element, this); + } + + this.setCustomValidity(""); + + if (element.accept && element.accept.indexOf("image") !== -1) { + if (element.files && element.files[0]) { + var reader = new FileReader(); + + reader.onload = function (e) { + var previewElem = formElem.querySelector("." + element.name + "-preview"); + + if (previewElem) { + previewElem.src = e.target["result"]; + } + }; + + reader.readAsDataURL(element.files[0]); + } else { + formElem.querySelector("." + element.name + "-preview").src = ""; + } + } + }); + element.addEventListener("keydown", function () { + this.setCustomValidity(""); + }); + }); + } + + _createClass(Form, [{ + key: "prepareForImageSelection", + value: function prepareForImageSelection(imageSelectionSelector) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() { + var _this2 = this; + + return regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) { + switch (_context4.prev = _context4.next) { + case 0: + _context4.next = 2; + return Helper_1.Helper.asyncForEach(this.formElem.querySelectorAll(imageSelectionSelector), function (imgElement) { + return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { + var name, value, imgSelectionElement; + return regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) { + switch (_context3.prev = _context3.next) { + case 0: + name = ""; + value = ""; + + if (imgElement instanceof HTMLInputElement) { + name = imgElement.name; + value = imgElement.value; + } + + if (Helper_1.Helper.isNull(name) || name === "") { + name = imgElement.dataset["name"]; + } + + if (Helper_1.Helper.isNull(value) || value === "") { + value = imgElement.dataset["value"]; + } + + imgSelectionElement = new ImageSelectionElement_1.ImageSelectionElement(name); + + if (!(value && value.trim() !== "")) { + _context3.next = 15; + break; + } + + _context3.prev = 7; + _context3.next = 10; + return imgSelectionElement.setValue(JSON.parse(value)); + + case 10: + _context3.next = 15; + break; + + case 12: + _context3.prev = 12; + _context3.t0 = _context3["catch"](7); + console.warn(_context3.t0); + + case 15: + this.imageSelectionElements[name] = imgSelectionElement; + _context3.t1 = imgElement; + _context3.next = 19; + return imgSelectionElement.getView(); + + case 19: + _context3.t2 = _context3.sent; + + _context3.t1.replaceWith.call(_context3.t1, _context3.t2); + + case 21: + case "end": + return _context3.stop(); + } + } + }, _callee3, this, [[7, 12]]); + })); + }, true); + + case 2: + case "end": + return _context4.stop(); + } + } + }, _callee4, this); + })); + } + }, { + key: "setImagesForImageSelectionElement", + value: function setImagesForImageSelectionElement(name, images) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { + return regeneratorRuntime.wrap(function _callee5$(_context5) { + while (1) { + switch (_context5.prev = _context5.next) { + case 0: + _context5.next = 2; + return this.imageSelectionElementReady; + + case 2: + if (this.imageSelectionElements[name]) { + this.imageSelectionElements[name].setImages(images); + } + + case 3: + case "end": + return _context5.stop(); + } + } + }, _callee5, this); + })); + } + }, { + key: "addValidator", + value: function addValidator(validatorCallback) { + this._validators.push(validatorCallback); + } + }, { + key: "onError", + value: function onError(errorHandler) { + this.errorCallback = errorHandler; + } + }, { + key: "addEditor", + value: function addEditor(e) { + this._editors.push(e); + } + }, { + key: "doSubmit", + value: function doSubmit(e) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { + var res; + return regeneratorRuntime.wrap(function _callee6$(_context6) { + while (1) { + switch (_context6.prev = _context6.next) { + case 0: + if (this._isBusy) { + _context6.next = 5; + break; + } + + _context6.next = 3; + return this.submit(); + + case 3: + res = _context6.sent; + return _context6.abrupt("return", res); + + case 5: + return _context6.abrupt("return", false); + + case 6: + case "end": + return _context6.stop(); + } + } + }, _callee6, this); + })); + } + }, { + key: "setValues", + value: function setValues(valuePromise) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee7() { + var values, k, options, val, option, previewImage; + return regeneratorRuntime.wrap(function _callee7$(_context7) { + while (1) { + switch (_context7.prev = _context7.next) { + case 0: + this.setIsBusy(true); + _context7.next = 3; + return Promise.resolve(valuePromise); + + case 3: + values = _context7.sent; + this.setIsBusy(false); + + for (k in values) { + if (Helper_1.Helper.isNotNull(this.formElem.elements[k])) { + if (Helper_1.Helper.isNotNull(this.formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + "Options"])) { + options = this.formElem.elements[k].options; + + for (val in values[k + "Options"]) { + option = document.createElement("option"); + option.value = val; + option.innerText = values[k + "Options"][val]; + options.add(option); + } + } + + if (this.formElem.elements[k].type && (this.formElem.elements[k].type === "checkbox" || this.formElem.elements[k].type === "radio")) { + this.formElem.elements[k].checked = this.formElem.elements[k].value == values[k]; + } else if (this.formElem.elements[k].type && this.formElem.elements[k].type === "file") { + if (this.formElem.elements[k + "-hidden"]) { + this.formElem.elements[k + "-hidden"].value = values[k]; + } + + if (this.formElem.elements[k].accept && this.formElem.elements[k].accept.indexOf("image") !== -1) { + previewImage = this.formElem.querySelector("." + k + "-preview"); + + if (previewImage) { + previewImage.src = values[k]; + } + } + } else { + this.formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]); + + if (this.formElem.elements[k].classList) { + if (Helper_1.Helper.isNotNull(values[k]) && ("" + values[k]).trim() !== "") { + this.formElem.elements[k].classList.add("notEmpty"); + } else { + this.formElem.elements[k].classList.remove("notEmpty"); + } + } + } + } + + if (Helper_1.Helper.isNotNull(this.imageSelectionElements[k])) { + console.log("setImg", k, values[k]); + this.imageSelectionElements[k].setValue(values[k]); + } + } + + return _context7.abrupt("return", this); + + case 7: + case "end": + return _context7.stop(); + } + } + }, _callee7, this); + })); + } + }, { + key: "getValues", + value: function getValues(filesToBase64) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { + var valuesFormData, values; + return regeneratorRuntime.wrap(function _callee8$(_context8) { + while (1) { + switch (_context8.prev = _context8.next) { + case 0: + valuesFormData = new FormData(this.formElem); + values = Array.from(valuesFormData["entries"]()).reduce(function (memo, pair) { + return Object.assign(Object.assign({}, memo), _defineProperty({}, pair[0], pair[1])); + }, {}); + + if (!Helper_1.Helper.nonNull(filesToBase64, true)) { + _context8.next = 6; + break; + } + + _context8.next = 5; + return Form.filesToBase64(values); + + case 5: + values = _context8.sent; + + case 6: + return _context8.abrupt("return", values); + + case 7: + case "end": + return _context8.stop(); + } + } + }, _callee8, this); + })); + } + }, { + key: "setElementChangeListener", + value: function setElementChangeListener(listener) { + this._elementChangeListener = listener; + } + }, { + key: "clearErrors", + value: function clearErrors() { + var _this3 = this; + + Object.keys(this.formElem.elements).forEach(function (elemKey) { + _this3.formElem.elements[elemKey].setCustomValidity(""); + }); + } + }, { + key: "setErrors", + value: function setErrors(errors) { + var hasElem = false; + var firstError = null; // let notCatchedErrors = []; + + for (var k in errors) { + if (Helper_1.Helper.isNotNull(this.formElem.elements[k]) && this.formElem.elements[k].type !== "hidden" && Helper_1.Helper.isNull(this.formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this.formElem.elements[k].disabled) || !this.formElem.elements[k].disabled)) { + this.formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], "form-default-error"))); + hasElem = true; + } else { + new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], "form-default-error")).show(); + } // if (Helper.isNull(firstError)) { + // firstError = ; + // } + + } // if (!hasElem && Helper.isNotNull(firstError)) { + // for (let k in this._formElem.elements) { + // if (this._formElem.elements[k].type !== "hidden") { + // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError)); + // hasElem = true; + // break; + // } + // } + // } + + + if (hasElem) { + "reportValidity" in this.formElem && this.formElem.reportValidity(); + } + } + }, { + key: "setIsBusy", + value: function setIsBusy(isBusy) { + this._isBusy = isBusy; + + if (this._isBusy) { + this.formElem.classList.add("sending"); + } else { + this.formElem.classList.remove("sending"); + } + } + }, { + key: "submit", + value: function submit() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee9() { + var res; + return regeneratorRuntime.wrap(function _callee9$(_context9) { + while (1) { + switch (_context9.prev = _context9.next) { + case 0: + this._editors.forEach(function (e) { + return e.updateSourceElement(); + }); + + this.setIsBusy(true); + _context9.next = 4; + return this.validate(); + + case 4: + if (!_context9.sent) { + _context9.next = 24; + break; + } + + res = false; + _context9.prev = 6; + _context9.t0 = this; + _context9.next = 10; + return this.getValues(); + + case 10: + _context9.t1 = _context9.sent; + _context9.t2 = this; + _context9.next = 14; + return _context9.t0._submitHandler.call(_context9.t0, _context9.t1, _context9.t2); + + case 14: + res = _context9.sent; + _context9.next = 20; + break; + + case 17: + _context9.prev = 17; + _context9.t3 = _context9["catch"](6); + console.error(_context9.t3); + + case 20: + _context9.prev = 20; + this.setIsBusy(false); + return _context9.finish(20); + + case 23: + return _context9.abrupt("return", res); + + case 24: + this.setIsBusy(false); + return _context9.abrupt("return", false); + + case 26: + case "end": + return _context9.stop(); + } + } + }, _callee9, this, [[6, 17, 20, 23]]); + })); + } + }, { + key: "validate", + value: function validate() { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee11() { + var _this4 = this; + + var values, res, hasErrors, errors; + return regeneratorRuntime.wrap(function _callee11$(_context11) { + while (1) { + switch (_context11.prev = _context11.next) { + case 0: + if (!("reportValidity" in this.formElem && !this.formElem.reportValidity())) { + _context11.next = 2; + break; + } + + return _context11.abrupt("return", false); + + case 2: + _context11.next = 4; + return this.getValues(); + + case 4: + values = _context11.sent; + _context11.next = 7; + return Helper_1.Helper.asyncForEach(this._validators, function (validator) { + return __awaiter(_this4, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee10() { + return regeneratorRuntime.wrap(function _callee10$(_context10) { + while (1) { + switch (_context10.prev = _context10.next) { + case 0: + return _context10.abrupt("return", validator(values, this)); + + case 1: + case "end": + return _context10.stop(); + } + } + }, _callee10, this); + })); + }, true); + + case 7: + res = _context11.sent; + hasErrors = false; + errors = {}; + res.forEach(function (value) { + if (value !== true) { + hasErrors = true; + + if (_typeof(value) === "object") { + for (var k in value) { + errors[k] = value[k]; + } + } + } + }); + + if (!hasErrors) { + _context11.next = 15; + break; + } + + _context11.next = 14; + return this.setErrors(errors); + + case 14: + return _context11.abrupt("return", false); + + case 15: + return _context11.abrupt("return", true); + + case 16: + case "end": + return _context11.stop(); + } + } + }, _callee11, this); + })); + } + }, { + key: "onSubmit", + value: function onSubmit(callback) { + this._submitCallback = callback; + } + }, { + key: "getFormElement", + value: function getFormElement() { + return this.formElem; + } + }], [{ + key: "filesToBase64", + value: function filesToBase64(values) { + return __awaiter(this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee12() { + var filePromises; + return regeneratorRuntime.wrap(function _callee12$(_context12) { + while (1) { + switch (_context12.prev = _context12.next) { + case 0: + filePromises = []; + Object.keys(values).forEach(function (key) { + if (values[key] instanceof Blob) { + filePromises.push(new Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function () { + return resolve(reader.result); + }; + + reader.onerror = function (error) { + return reject(error); + }; + + reader.readAsDataURL(values[key]); + }).then(function (base64) { + return values[key] = base64; + })); + } + }); + _context12.next = 4; + return Promise.all(filePromises); + + case 4: + return _context12.abrupt("return", values); + + case 5: + case "end": + return _context12.stop(); + } + } + }, _callee12); + })); + } + }]); + + return Form; +}(); + +exports.Form = Form; + +/***/ }), +/* 519 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__.p + "html/imageSelectionElement.html"; + +/***/ }), +/* 520 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70779,7 +71847,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.ScaleHelper = void 0; -var js_helper_1 = __webpack_require__(22); +var js_helper_1 = __webpack_require__(17); var ScaleHelper = /*#__PURE__*/function () { function ScaleHelper() { @@ -70956,7 +72024,7 @@ var ScaleHelper = /*#__PURE__*/function () { exports.ScaleHelper = ScaleHelper; /***/ }), -/* 518 */ +/* 521 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71162,25 +72230,25 @@ var PromiseHelper = /*#__PURE__*/function () { exports.PromiseHelper = PromiseHelper; /***/ }), -/* 519 */ +/* 522 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/shareDialog.html"; /***/ }), -/* 520 */ +/* 523 */ /***/ (function(module) { module.exports = JSON.parse("{\"Sunday\":\"Sonntag\",\"Monday\":\"Montag\",\"Tuesday\":\"Dienstag\",\"Wednesday\":\"Mittwoch\",\"Thursday\":\"Donnerstag\",\"Friday\":\"Freitag\",\"Saturday\":\"Samstag\",\"January\":\"Januar\",\"February\":\"Februar\",\"March\":\"März\",\"April\":\"April\",\"May\":\"Mai\",\"June\":\"Juni\",\"July\":\"Juli\",\"August\":\"August\",\"September\":\"September\",\"October\":\"Oktober\",\"November\":\"November\",\"December\":\"Dezember\",\"Sun\":\"So\",\"Mon\":\"Mo\",\"Tue\":\"Di\",\"Wed\":\"Mi\",\"Thu\":\"Do\",\"Fri\":\"Fr\",\"Sat\":\"Sa\",\"Jan\":\"Jan\",\"Feb\":\"Feb\",\"Mar\":\"Mär\",\"Apr\":\"Apr\",\"Jun\":\"Jun\",\"Jul\":\"Jul\",\"Aug\":\"Aug\",\"Sep\":\"Sep\",\"Oct\":\"Okt\",\"Nov\":\"Nov\",\"Dec\":\"Dez\",\"cannot open popups\":\"Bitte erlaube Popups, um die Funktion nutzen zu können.\"}"); /***/ }), -/* 521 */ +/* 524 */ /***/ (function(module) { module.exports = JSON.parse("{\"Sunday\":\"Sunday\",\"Monday\":\"Monday\",\"Tuesday\":\"Tuesday\",\"Wednesday\":\"Wednesday\",\"Thursday\":\"Thursday\",\"Friday\":\"Friday\",\"Saturday\":\"Saturday\",\"January\":\"January\",\"February\":\"February\",\"March\":\"March\",\"April\":\"April\",\"May\":\"May\",\"June\":\"June\",\"July\":\"July\",\"August\":\"August\",\"September\":\"September\",\"October\":\"October\",\"November\":\"November\",\"December\":\"December\",\"Sun\":\"Sun\",\"Mon\":\"Mon\",\"Tue\":\"Tue\",\"Wed\":\"Wed\",\"Thu\":\"Thu\",\"Fri\":\"Fri\",\"Sat\":\"Sat\",\"Jan\":\"Jan\",\"Feb\":\"Feb\",\"Mar\":\"Mar\",\"Apr\":\"Apr\",\"Jun\":\"Jun\",\"Jul\":\"Jul\",\"Aug\":\"Aug\",\"Sep\":\"Sep\",\"Oct\":\"Oct\",\"Nov\":\"Nov\",\"Dec\":\"Dec\",\"cannot open popups\":\"Please allow popups to use this function.\"}"); /***/ }), -/* 522 */ +/* 525 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71212,43 +72280,43 @@ Object.defineProperty(exports, "__esModule", { __exportStar(__webpack_require__(246), exports); /***/ }), -/* 523 */ +/* 526 */ /***/ (function(module) { module.exports = JSON.parse("{\"login\":\"Login\",\"logout\":\"Logout\",\"email\":\"E-Mail\",\"password\":\"Passwort\",\"email or password is wrong\":\"Die E-Mail oder das Passwort stimmt nicht!\",\"stay logged in\":\"Angemeldet bleiben\",\"goodbye\":\"Auf Wiedersehen\",\"welcome back\":\"Willkommen zurück\",\"registration successful\":\"Registrierung erfolgreich\",\"registration\":\"Anmelden\",\"I have read and accepted the terms and conditions.\":\"Ich habe die AGB gelesen und akzeptiert.\",\"retype password\":\"Passwort wiederholen\",\"the passwords do not match.\":\"Die Passwörter stimmen nicht überein.\",\"username\":\"Username\",\"email is already in use.\":\"Die E-Mail wird bereits verwendet.\",\"username is already in use.\":\"Der Username ist bereits vergeben.\",\"wrong email or password\":\"Falsche E-Mail oder falsches Passwort\",\"wrong rights\":\"Keine Berechtigung!\",\"passwort vergessen?\":\"Passwort vergessen?\",\"password forgotten\":\"Passwort vergessen\",\"request new password\":\"Neues Passwort setzen\",\"email is not in our database\":\"Die E-Mail ist nicht registriert!\",\"forgot-password-mail sent\":\"Es wurde eine E-Mail an die angegebene Adresse gesendet.\",\"password resetted\":\"Das Passwort wurde erfolgreich zurückgesetzt.\",\"token is not valid\":\"Der Link ist nicht mehr gültig.\",\"reset password\":\"Passwort zurücksetzen\",\"repeat password\":\"Passwort wiederholen\",\"token not valid\":\"Der Link ist nicht mehr gültig\",\"Not allowed\":\"Nicht erlaubt\",\"You don't have the rights to do this!\":\"Du hast nicht die Berechtigung, um das zu tun!\",\"If you are not logged in, please log in and try again.\":\"Wenn du noch nicht eingeloggt bist, logge dich ein und versuche es erneut.\"}"); /***/ }), -/* 524 */ +/* 527 */ /***/ (function(module) { module.exports = JSON.parse("{\"login\":\"Login\",\"logout\":\"Logout\",\"email\":\"E-Mail\",\"password\":\"Password\",\"email or password is wrong\":\"The e-mail or password is incorrect!\",\"stay logged in\":\"Stay logged in\",\"goodbye\":\"Goodbye\",\"welcome back\":\"Welcome back\",\"registration successful\":\"Registration successful\",\"registration\":\"Registration\",\"I have read and accepted the terms and conditions.\":\"I have read and accepted the terms and conditions.\",\"retype password\":\"Retype Password\",\"the passwords do not match.\":\"The passwords do not match.\",\"username\":\"Username\",\"email is already in use.\":\"This e-mail is already in use.\",\"username is already in use.\":\"This Username is already taken.\",\"wrong email or password\":\"Wrong E-Mail or Password!\",\"wrong rights\":\"Wrong Rights!\",\"passwort vergessen?\":\"password forgotten?\",\"password forgotten\":\"Password Forgotten\",\"request new password\":\"Request New Password\",\"email is not in our database\":\"The given E-Mailaddress is not registered!\",\"forgot-password-mail sent\":\"We sent you an E-Mail with instructions\",\"password resetted\":\"The password was successfully changed.\",\"token is not valid\":\"The given link is no longer valid.\",\"reset password\":\"Reset Password\",\"repeat password\":\"Repeat Password\",\"token not valid\":\"The link is not valid any more\",\"Not allowed\":\"Not allowed\",\"You don't have the rights to do this!\":\"You don't have the rights to do this!\",\"If you are not logged in, please log in and try again.\":\"If you are not logged in, please log in and try again.\"}"); /***/ }), -/* 525 */ +/* 528 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/loginSite.html"; /***/ }), -/* 526 */ +/* 529 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/forgotPasswordSite.html"; /***/ }), -/* 527 */ +/* 530 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/notAllowedSite.html"; /***/ }), -/* 528 */ +/* 531 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/selectUserDialog.html"; /***/ }), -/* 529 */ +/* 532 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71329,9 +72397,9 @@ var client_1 = __webpack_require__(132); var client_2 = __webpack_require__(4); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); -var Role_1 = __webpack_require__(204); +var Role_1 = __webpack_require__(203); var User_1 = __webpack_require__(112); @@ -71732,7 +72800,7 @@ OfflineUserManager.DEFAULT_ROLES = []; OfflineUserManager._lastId = null; /***/ }), -/* 530 */ +/* 533 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71785,17 +72853,17 @@ var LastSyncDates_1 = __webpack_require__(129); var client_1 = __webpack_require__(4); -var shared_1 = __webpack_require__(22); +var shared_1 = __webpack_require__(17); var EasySyncClientDb_1 = __webpack_require__(128); var typeorm = __webpack_require__(47); -var EasySyncPartialModel_1 = __webpack_require__(202); +var EasySyncPartialModel_1 = __webpack_require__(201); var EasySyncBaseModel_1 = __webpack_require__(78); -var ClientFileMedium_1 = __webpack_require__(150); +var ClientFileMedium_1 = __webpack_require__(151); var SyncJob_old = /*#__PURE__*/function () { function SyncJob_old() { @@ -72379,7 +73447,7 @@ exports.SyncJob_old = SyncJob_old; SyncJob_old.SYNC_PATH_PREFIX = "sync"; /***/ }), -/* 531 */ +/* 534 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72450,9 +73518,9 @@ exports.ModifyEntitySite = void 0; var MenuSite_1 = __webpack_require__(69); -var Form_1 = __webpack_require__(161); +var Form_1 = __webpack_require__(210); -var js_helper_1 = __webpack_require__(22); +var js_helper_1 = __webpack_require__(17); var EasySyncBaseModel_1 = __webpack_require__(78); @@ -72822,7 +73890,7 @@ var ModifyEntitySite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { exports.ModifyEntitySite = ModifyEntitySite; /***/ }), -/* 532 */ +/* 535 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -72873,7 +73941,7 @@ exports.SetupEasySync1000000000500 = void 0; var typeorm_1 = __webpack_require__(47); -var cordova_sites_database_1 = __webpack_require__(19); +var cordova_sites_database_1 = __webpack_require__(20); var SetupEasySync1000000000500 = /*#__PURE__*/function () { function SetupEasySync1000000000500() { @@ -72960,7 +74028,7 @@ var SetupEasySync1000000000500 = /*#__PURE__*/function () { exports.SetupEasySync1000000000500 = SetupEasySync1000000000500; /***/ }), -/* 533 */ +/* 536 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73035,19 +74103,19 @@ var UserSite_1 = __webpack_require__(126); var Helper_1 = __webpack_require__(7); -var DataManager_1 = __webpack_require__(68); +var DataManager_1 = __webpack_require__(59); var client_1 = __webpack_require__(4); var ViewHelper_1 = __webpack_require__(27); -var UserMenuAction_1 = __webpack_require__(149); +var UserMenuAction_1 = __webpack_require__(150); -var LoginSite_1 = __webpack_require__(148); +var LoginSite_1 = __webpack_require__(149); -var SelectUserDialog_1 = __webpack_require__(273); +var SelectUserDialog_1 = __webpack_require__(274); -var view = __webpack_require__(534); +var view = __webpack_require__(537); var ChangeUserSite = /*#__PURE__*/function (_MenuSite_1$MenuSite) { _inherits(ChangeUserSite, _MenuSite_1$MenuSite); @@ -73307,13 +74375,13 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 534 */ +/* 537 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/changeUserSite.html"; /***/ }), -/* 535 */ +/* 538 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73384,13 +74452,13 @@ exports.RegistrationSite = void 0; var client_1 = __webpack_require__(4); -var view = __webpack_require__(536); +var view = __webpack_require__(539); var UserSite_1 = __webpack_require__(126); -var StartUserSiteMenuAction_1 = __webpack_require__(205); +var StartUserSiteMenuAction_1 = __webpack_require__(204); -var UserManager_1 = __webpack_require__(99); +var UserManager_1 = __webpack_require__(100); var User_1 = __webpack_require__(112); @@ -73513,13 +74581,13 @@ client_1.App.addInitialization(function (app) { }); /***/ }), -/* 536 */ +/* 539 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/registrationSite.html"; /***/ }), -/* 537 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73556,7 +74624,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.UserSyncModel = void 0; -var AccessEasySyncModel_1 = __webpack_require__(278); +var AccessEasySyncModel_1 = __webpack_require__(279); var User_1 = __webpack_require__(112); @@ -73596,7 +74664,7 @@ exports.UserSyncModel = UserSyncModel; UserSyncModel.NEED_USER = false; /***/ }), -/* 538 */ +/* 541 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -73673,7 +74741,7 @@ exports.UserSyncPartialModel = UserSyncPartialModel; UserSyncPartialModel.NEED_USER = false; /***/ }), -/* 539 */ +/* 542 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73681,19 +74749,19 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/settings.png"); /***/ }), -/* 540 */ +/* 543 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/menu.html"; /***/ }), -/* 541 */ +/* 544 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/level.html"; /***/ }), -/* 542 */ +/* 545 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73701,55 +74769,55 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ("img/single_coin_fall_on_concrete_.mp3"); /***/ }), -/* 543 */ +/* 546 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/end.html"; /***/ }), -/* 544 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/settingsSite.html"; /***/ }), -/* 545 */ +/* 548 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/tutorialSite.html"; /***/ }), -/* 546 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/settings.html"; /***/ }), -/* 547 */ +/* 550 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/credits.html"; /***/ }), -/* 548 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/privacyPolicy.html"; /***/ }), -/* 549 */ +/* 552 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/impressum.html"; /***/ }), -/* 550 */ +/* 553 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "html/contactSite.html"; /***/ }), -/* 551 */ +/* 554 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73757,7 +74825,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = (__webpack_require__.p + "index.css"); /***/ }), -/* 552 */ +/* 555 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -73765,25 +74833,25 @@ __webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./src/client/translations/de.json -var de = __webpack_require__(280); +var de = __webpack_require__(281); // EXTERNAL MODULE: ./src/client/translations/en.json -var en = __webpack_require__(281); +var en = __webpack_require__(282); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client.js var client = __webpack_require__(4); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/client/js/translationInit.js -var translationInit = __webpack_require__(269); +var translationInit = __webpack_require__(270); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/translationInit.js -var js_translationInit = __webpack_require__(268); +var js_translationInit = __webpack_require__(269); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/client.js var dist_client = __webpack_require__(133); // EXTERNAL MODULE: ./node_modules/cordova-sites-database/dist/cordova-sites-database.js -var cordova_sites_database = __webpack_require__(19); +var cordova_sites_database = __webpack_require__(20); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/shared/migrations/DeleteUserManagement.js var DeleteUserManagement = __webpack_require__(211); @@ -73792,10 +74860,10 @@ var DeleteUserManagement = __webpack_require__(211); var SetupUserManagement = __webpack_require__(212); // EXTERNAL MODULE: ./node_modules/js-helper/dist/shared.js -var shared = __webpack_require__(22); +var shared = __webpack_require__(17); // EXTERNAL MODULE: ./node_modules/cordova-sites-user-management/dist/shared.js -var dist_shared = __webpack_require__(287); +var dist_shared = __webpack_require__(288); // CONCATENATED MODULE: ./src/shared/model/LevelData.ts function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } @@ -76121,7 +77189,7 @@ function EndSite_isNativeReflectConstruct() { if (typeof Reflect === "undefined" function EndSite_getPrototypeOf(o) { EndSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return EndSite_getPrototypeOf(o); } -var view = __webpack_require__(543); +var view = __webpack_require__(546); var EndSite = /*#__PURE__*/function (_MenuSite) { @@ -76138,7 +77206,7 @@ var EndSite = /*#__PURE__*/function (_MenuSite) { return EndSite; }(client["MenuSite"]); // EXTERNAL MODULE: ./node_modules/cordova-sites-database/dist/BaseModel.js -var BaseModel = __webpack_require__(209); +var BaseModel = __webpack_require__(208); // CONCATENATED MODULE: ./src/client/js/model/LevelPlayed.ts function LevelPlayed_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LevelPlayed_typeof = function _typeof(obj) { return typeof obj; }; } else { LevelPlayed_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LevelPlayed_typeof(obj); } @@ -76330,7 +77398,7 @@ var LevelPlayed_LevelPlayed = /*#__PURE__*/function (_BaseModel) { }(BaseModel["BaseModel"]); cordova_sites_database["BaseDatabase"].addModel(LevelPlayed_LevelPlayed); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Sound/SoundManager.js -var SoundManager = __webpack_require__(17); +var SoundManager = __webpack_require__(18); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Context/MenuSite.js var MenuSite = __webpack_require__(69); @@ -76394,11 +77462,11 @@ var LevelSite_awaiter = undefined && undefined.__awaiter || function (thisArg, _ }); }; -var helpIcon = __webpack_require__(279).default; +var helpIcon = __webpack_require__(280).default; -var LevelSite_view = __webpack_require__(541); +var LevelSite_view = __webpack_require__(544); -var coinSound = __webpack_require__(542).default; +var coinSound = __webpack_require__(545).default; @@ -76598,7 +77666,7 @@ var LevelSite_LevelSite = /*#__PURE__*/function (_MenuSite) { case 22: this.continueButtonScaler = _context3.sent; _context3.next = 25; - return scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5); + return scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5); case 25: this.wonTextScaler = _context3.sent; @@ -77042,7 +78110,10 @@ var LevelSite_LevelSite = /*#__PURE__*/function (_MenuSite) { _this9.continueButtonScaler(); - _this9.levelScaler(); + _this9.levelScaler(); // Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => { + // this.levelScaler(); + // }); + _context10.t0 = client["Matomo"]; _context10.t1 = parseInt; @@ -77499,16 +78570,16 @@ var MainMenuLevel = /*#__PURE__*/function (_FourWordsLevel) { return MainMenuLevel; }(FourWordsLevel_FourWordsLevel); // EXTERNAL MODULE: ./node_modules/cordova-sites-easy-sync/dist/client/SyncJob.js -var SyncJob = __webpack_require__(210); +var SyncJob = __webpack_require__(209); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/ShareManager/ShareManager.js -var ShareManager = __webpack_require__(208); +var ShareManager = __webpack_require__(207); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Translator.js -var Translator = __webpack_require__(32); +var Translator = __webpack_require__(30); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Legacy/Matomo.js -var Matomo = __webpack_require__(55); +var Matomo = __webpack_require__(56); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Context/Menu/MenuAction/MenuAction.js var MenuAction = __webpack_require__(80); @@ -77583,7 +78654,7 @@ var TutorialSite_awaiter = undefined && undefined.__awaiter || function (thisArg -var TutorialSite_view = __webpack_require__(545); +var TutorialSite_view = __webpack_require__(548); var TutorialSite_TutorialSite = /*#__PURE__*/function (_MenuSite) { TutorialSite_inherits(TutorialSite, _MenuSite); @@ -77844,7 +78915,7 @@ function CreditsSite_isNativeReflectConstruct() { if (typeof Reflect === "undefi function CreditsSite_getPrototypeOf(o) { CreditsSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return CreditsSite_getPrototypeOf(o); } -var CreditsSite_view = __webpack_require__(547); +var CreditsSite_view = __webpack_require__(550); @@ -77923,7 +78994,7 @@ var PrivacyPolicySite_awaiter = undefined && undefined.__awaiter || function (th }); }; -var PrivacyPolicySite_view = __webpack_require__(548); +var PrivacyPolicySite_view = __webpack_require__(551); @@ -78036,7 +79107,7 @@ function ImpressumSite_isNativeReflectConstruct() { if (typeof Reflect === "unde function ImpressumSite_getPrototypeOf(o) { ImpressumSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ImpressumSite_getPrototypeOf(o); } -var ImpressumSite_view = __webpack_require__(549); +var ImpressumSite_view = __webpack_require__(552); @@ -78066,13 +79137,13 @@ var AbstractFragment = __webpack_require__(79); var LastSyncDates = __webpack_require__(129); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Form.js -var Form = __webpack_require__(161); +var Form = __webpack_require__(210); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/DataManager.js -var DataManager = __webpack_require__(68); +var DataManager = __webpack_require__(59); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Toast/Toast.js -var Toast = __webpack_require__(101); +var Toast = __webpack_require__(85); // CONCATENATED MODULE: ./src/client/js/Sites/ContactSite.ts function ContactSite_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ContactSite_typeof = function _typeof(obj) { return typeof obj; }; } else { ContactSite_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ContactSite_typeof(obj); } @@ -78133,7 +79204,7 @@ var ContactSite_awaiter = undefined && undefined.__awaiter || function (thisArg, }); }; -var ContactSite_view = __webpack_require__(550); +var ContactSite_view = __webpack_require__(553); @@ -78263,7 +79334,7 @@ var WordRotatorSettingFragment_awaiter = undefined && undefined.__awaiter || fun -var WordRotatorSettingFragment_view = __webpack_require__(546); +var WordRotatorSettingFragment_view = __webpack_require__(549); @@ -78488,7 +79559,7 @@ function SettingsSite_isNativeReflectConstruct() { if (typeof Reflect === "undef function SettingsSite_getPrototypeOf(o) { SettingsSite_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SettingsSite_getPrototypeOf(o); } -var SettingsSite_view = __webpack_require__(544); +var SettingsSite_view = __webpack_require__(547); @@ -78574,9 +79645,9 @@ var MainMenuSite_awaiter = undefined && undefined.__awaiter || function (thisArg }); }; -var settingsIcon = __webpack_require__(539).default; +var settingsIcon = __webpack_require__(542).default; -var MainMenuSite_view = __webpack_require__(540); +var MainMenuSite_view = __webpack_require__(543); @@ -79039,7 +80110,7 @@ var ClientSetup_ClientSetup1000000002001 = /*#__PURE__*/function () { var EasySyncClientDb = __webpack_require__(128); // EXTERNAL MODULE: ./node_modules/cordova-sites/dist/client/js/Context/Menu/NavbarFragment.js -var NavbarFragment = __webpack_require__(160); +var NavbarFragment = __webpack_require__(161); // CONCATENATED MODULE: ./src/client/sound/brightAndBeautifull__.mp3 /* harmony default export */ var brightAndBeautifull_ = ("img/brightAndBeautifull__.mp3"); diff --git a/src/server/public/bundle.js.map b/src/server/public/bundle.js.map index 3e8e5ec..592b635 100644 --- a/src/server/public/bundle.js.map +++ b/src/server/public/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/typeorm/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDisabledDriversDummy.js","webpack:///./node_modules/typeorm/browser/driver/Query.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///../src/client.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/Table.js","webpack:///./node_modules/typeorm/browser/util/OrmUtils.js","webpack:///./node_modules/js-helper/dist/shared/Helper.js","webpack:///./node_modules/typeorm/browser/subscriber/BroadcasterResult.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperator.js","webpack:///./node_modules/typeorm/browser/platform/BrowserPlatformTools.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///../../../../src/client/js/Legacy/Helper.ts","webpack:///./node_modules/typeorm/browser/schema-builder/RdbmsSchemaBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js","webpack:///../../../../src/client/js/Sound/SoundManager.ts","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///../src/cordova-sites-database.ts","webpack:///./node_modules/typeorm/browser/driver/DriverUtils.js","webpack:///./node_modules/typeorm/browser/util/DateUtils.js","webpack:///./node_modules/js-helper/dist/shared.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/typeorm/browser/util/ObjectUtils.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableColumn.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/js-helper/dist/client/ViewHelper.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableUnique.js","webpack:///./node_modules/typeorm/browser/metadata/ColumnMetadata.js","webpack:///../../../src/client/js/Translator.ts","webpack:///../../../src/client/js/App.ts","webpack:///./node_modules/typeorm/browser/error/QueryRunnerAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/metadata/EntityMetadata.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/typeorm/browser/error/DriverOptionNotSetError.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableIndex.js","webpack:///./node_modules/typeorm/browser/error/QueryFailedError.js","webpack:///./node_modules/typeorm/browser/query-builder/Alias.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryExpressionMap.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsDriver.js","webpack:///../../../src/client/js/NativeStoragePromise.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableCheck.js","webpack:///./node_modules/typeorm/browser/error/TransactionNotStartedError.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/typeorm/browser/naming-strategy/DefaultNamingStrategy.js","webpack:///./node_modules/typeorm/browser/error/CannotExecuteNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/CannotConnectAlreadyConnectedError.js","webpack:///./node_modules/typeorm/browser/error/EntityMetadataNotFoundError.js","webpack:///./node_modules/typeorm/browser/migration/Migration.js","webpack:///./node_modules/typeorm/browser/driver/sqlserver/MssqlParameter.js","webpack:///./node_modules/typeorm/browser/migration/MigrationExecutor.js","webpack:///./node_modules/typeorm/browser/error/MissingPrimaryColumnError.js","webpack:///./node_modules/typeorm/browser/error/CircularRelationsError.js","webpack:///./node_modules/typeorm/browser/util/DepGraph.js","webpack:///./node_modules/typeorm/browser/error/DataTypeNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionOptionError.js","webpack:///./node_modules/typeorm/browser/error/InitializedRelationError.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataValidator.js","webpack:///./node_modules/typeorm/browser/error/QueryRunnerProviderAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/error/NoNeedToReleaseEntityManagerError.js","webpack:///./node_modules/typeorm/browser/repository/Repository.js","webpack:///./node_modules/typeorm/browser/repository/TreeRepository.js","webpack:///./node_modules/typeorm/browser/error/FindRelationsNotFoundError.js","webpack:///./node_modules/typeorm/browser/find-options/FindOptionsUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryDoesNotHaveEntityError.js","webpack:///./node_modules/typeorm/browser/repository/AbstractRepository.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryCannotInheritRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotTreeError.js","webpack:///./node_modules/typeorm/browser/repository/RepositoryFactory.js","webpack:///./node_modules/typeorm/browser/error/TreeRepositoryNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/MustBeEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectTopoligicalSorter.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectChangedColumnsComputer.js","webpack:///./node_modules/typeorm/browser/error/SubjectWithoutIdentifierError.js","webpack:///./node_modules/typeorm/browser/error/SubjectRemovedAndUpdatedError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/NestedSetSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotAttachTreeChildrenEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/ClosureSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/tree/MaterializedPathSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotDetermineEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/Subject.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/ManyToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectDatabaseEntityLoader.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/CascadesSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/EntityPersistExecutor.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/SqljsEntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManagerFactory.js","webpack:///./node_modules/typeorm/browser/error/MissingDriverError.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaDriver.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeDriver.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoDriver.js","webpack:///./node_modules/typeorm/browser/driver/postgres/PostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js","webpack:///./node_modules/typeorm/browser/driver/DriverFactory.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDirectoryExportedClassesLoader.js","webpack:///./node_modules/typeorm/browser/container.js","webpack:///./node_modules/typeorm/browser/metadata/IndexMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/EmbeddedMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationIdMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationCountMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/types/EventListenerTypes.js","webpack:///./node_modules/typeorm/browser/metadata-builder/MetadataUtils.js","webpack:///./node_modules/typeorm/browser/metadata/ForeignKeyMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/JunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/UniqueMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/RelationJoinColumnBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/EntityListenerMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/CheckMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/ExclusionMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-args/MetadataArgsStorage.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchemaTransformer.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/logger/SimpleConsoleLogger.js","webpack:///./node_modules/typeorm/browser/logger/AdvancedConsoleLogger.js","webpack:///./node_modules/typeorm/browser/platform/BrowserFileLoggerDummy.js","webpack:///./node_modules/typeorm/browser/logger/DebugLogger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerFactory.js","webpack:///./node_modules/typeorm/browser/cache/RedisQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/DbQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/QueryResultCacheFactory.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/connection/Connection.js","webpack:///./node_modules/typeorm/browser/error/ConnectionNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/AlreadyHasActiveConnectionError.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionManager.js","webpack:///./node_modules/typeorm/browser/platform/BrowserConnectionOptionsReaderDummy.js","webpack:///./node_modules/typeorm/browser/common/EntityTarget.js","webpack:///./node_modules/typeorm/browser/common/ObjectType.js","webpack:///./node_modules/typeorm/browser/common/ObjectLiteral.js","webpack:///./node_modules/typeorm/browser/common/DeepPartial.js","webpack:///./node_modules/typeorm/browser/error/CannotReflectMethodParameterTypeError.js","webpack:///./node_modules/typeorm/browser/error/ConnectionIsNotSetError.js","webpack:///./node_modules/typeorm/browser/error/MetadataAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/PrimaryColumnCannotBeNullableError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionForRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinColumnError.js","webpack:///./node_modules/typeorm/browser/error/CannotGetEntityManagerNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/MetadataWithSuchNameAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/NamingStrategyNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinTableError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/PersistedEntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/ColumnTypeUndefinedError.js","webpack:///./node_modules/typeorm/browser/error/index.js","webpack:///./node_modules/typeorm/browser/decorator/columns/Column.js","webpack:///./node_modules/typeorm/browser/decorator/columns/CreateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/DeleteDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryGeneratedColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/UpdateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/VersionColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ViewColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ObjectIdColumn.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterLoad.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/EventSubscriber.js","webpack:///./node_modules/typeorm/browser/decorator/options/ColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/IndexOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinTableOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/RelationOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/EntityOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/ValueTransformer.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinColumn.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinTable.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationCount.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationId.js","webpack:///./node_modules/typeorm/browser/decorator/entity/Entity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/ChildEntity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/TableInheritance.js","webpack:///./node_modules/typeorm/browser/decorator/entity-view/ViewEntity.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/Transaction.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionManager.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionRepository.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeLevelColumn.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeParent.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeChildren.js","webpack:///./node_modules/typeorm/browser/decorator/tree/Tree.js","webpack:///./node_modules/typeorm/browser/decorator/Index.js","webpack:///./node_modules/typeorm/browser/decorator/Unique.js","webpack:///./node_modules/typeorm/browser/decorator/Check.js","webpack:///./node_modules/typeorm/browser/decorator/Exclusion.js","webpack:///./node_modules/typeorm/browser/decorator/Generated.js","webpack:///./node_modules/typeorm/browser/decorator/EntityRepository.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Any.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Between.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Equal.js","webpack:///./node_modules/typeorm/browser/find-options/operator/IsNull.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/ILike.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Like.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Not.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Raw.js","webpack:///./node_modules/typeorm/browser/find-options/FindConditions.js","webpack:///./node_modules/typeorm/browser/find-options/FindManyOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOneOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperatorType.js","webpack:///./node_modules/typeorm/browser/find-options/JoinOptions.js","webpack:///./node_modules/typeorm/browser/find-options/OrderByCondition.js","webpack:///./node_modules/typeorm/browser/logger/Logger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerOptions.js","webpack:///./node_modules/typeorm/browser/repository/BaseEntity.js","webpack:///./node_modules/typeorm/browser/repository/RemoveOptions.js","webpack:///./node_modules/typeorm/browser/repository/SaveOptions.js","webpack:///./node_modules/typeorm/browser/driver/mongodb/typings.js","webpack:///./node_modules/typeorm/browser/driver/types/DatabaseType.js","webpack:///./node_modules/typeorm/browser/driver/types/ReplicationMode.js","webpack:///./node_modules/typeorm/browser/index.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableForeignKey.js","webpack:///./node_modules/typeorm/browser/util/StringUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilderUtils.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/typeorm/browser/subscriber/Broadcaster.js","webpack:///../../../../src/client/js/Legacy/Matomo.ts","webpack:///./node_modules/typeorm/browser/schema-builder/view/View.js","webpack:///./node_modules/core-js/modules/_strict-method.js","webpack:///../../../src/client/js/ViewInflater.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js","webpack:///./node_modules/typeorm/browser/util/ApplyValueTransformers.js","webpack:///./node_modules/typeorm/browser/util/RandomGenerator.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///../../../src/client/js/DataManager.ts","webpack:///../../../../src/client/js/Context/MenuSite.ts","webpack:///./node_modules/typeorm/browser/error/TransactionAlreadyStartedError.js","webpack:///./node_modules/typeorm/browser/error/DriverPackageNotInstalledError.js","webpack:///./node_modules/typeorm/browser/error/ReturningStatementNotSupportedError.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchema.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_typed-array.js","webpack:///../../src/shared/EasySyncBaseModel.ts","webpack:///../../../../src/client/js/Context/AbstractFragment.ts","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/MenuAction.ts","webpack:///./node_modules/typeorm/node_modules/debug/src/browser.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///../../../../src/client/js/Dialog/Dialog.ts","webpack:///./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/OpenSubmenuAction.ts","webpack:///../../../src/client/js/UserManager.ts","webpack:///./node_modules/typeorm/browser/error/UpdateValuesMissingError.js","webpack:///../../../../src/client/js/Toast/Toast.ts","webpack:///./node_modules/typeorm/browser/error/OptimisticLockCanNotBeUsedError.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///../../../../src/client/js/Context/Context.ts","webpack:///../../../../src/shared/v1/model/User.ts","webpack:///./node_modules/typeorm/browser/error/EntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/EntityColumnNotFound.js","webpack:///./node_modules/typeorm/browser/query-builder/result/UpdateResult.js","webpack:///./node_modules/typeorm/browser/error/LimitOnUpdateNotSupportedError.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/SelectQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/ReturningResultsEntityUpdator.js","webpack:///./node_modules/typeorm/browser/schema-builder/util/TableUtils.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///../../../../src/client/js/Context/UserSite.ts","webpack:///../src/shared.ts","webpack:///../../src/client/EasySyncClientDb.ts","webpack:///../../src/client/LastSyncDates.ts","webpack:///./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/InsertResult.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_typed.js","webpack:///../../../../src/client/js/Context/AbstractSite.ts","webpack:///../src/BaseDatabase.ts","webpack:///../../../../src/client/js/Site/LoginSite.ts","webpack:///../../../../src/client/js/MenuAction/UserMenuAction.ts","webpack:///../../src/client/ClientFileMedium.ts","webpack:///./node_modules/typeorm/browser/error/CannotCreateEntityIdMapError.js","webpack:///./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js","webpack:///./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js","webpack:///./node_modules/typeorm/browser/query-builder/Brackets.js","webpack:///./node_modules/typeorm/browser/find-options/operator/In.js","webpack:///./node_modules/typeorm/browser/error/InsertValuesMissingError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/DeleteResult.js","webpack:///./node_modules/typeorm/browser/error/MissingDeleteDateColumnError.js","webpack:///./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js","webpack:///../../../../../src/client/js/Context/Menu/NavbarFragment.ts","webpack:///../../../src/client/js/Form.ts","webpack:///./node_modules/typeorm/browser/query-builder/JoinAttribute.js","webpack:///./node_modules/typeorm/browser/driver/SqlInMemory.js","webpack:///./node_modules/typeorm/browser/query-runner/BaseQueryRunner.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/js-helper/dist/shared/JsonHelper.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/typeorm/browser/query-builder/InsertQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/UpdateQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/DeleteQueryBuilder.js","webpack:///./node_modules/js-helper/dist/client.js","webpack:///../../../../../src/client/js/Legacy/EventManager/EventManager.ts","webpack:///../../../../src/client/js/Context/TemplateSite.ts","webpack:///../../../../../src/client/js/Context/Menu/Menu.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/AccordionRenderer.ts","webpack:///../../src/shared/EasySyncPartialModel.ts","webpack:///../../src/shared/FileMedium.ts","webpack:///../../../../src/shared/v1/model/Role.ts","webpack:///../../../../src/client/js/MenuAction/StartUserSiteMenuAction.ts","webpack:///../../../src/client/FileWriter/FilePromise.ts","webpack:///./node_modules/typeorm/browser/query-builder/RelationUpdater.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationRemover.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationQueryBuilder.js","webpack:///../../../../src/client/js/ShareManager/ShareManager.ts","webpack:///../src/BaseModel.ts","webpack:///../../src/client/SyncJob.ts","webpack:///../../../src/shared/migrations/DeleteUserManagement.ts","webpack:///../../../src/shared/migrations/SetupUserManagement.ts","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_bind.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///../../src/shared/Translator.ts","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/typeorm/browser/query-builder/SoftDeleteQueryBuilder.js","webpack:///./node_modules/js-helper/dist/shared/XSSHelper.js","webpack:///../../../../src/client/js/Context/SiteManager.ts","webpack:///./node_modules/js-helper/dist/client/Dragger/DraggedElement.js","webpack:///../../../../src/client/js/DataManager/NotOnlineError.ts","webpack:///../../../src/client/js/HistoryManager.ts","webpack:///../../../../src/client/js/ColorIndicator/ColorIndicator.ts","webpack:///../../../src/client/js/Singleton.ts","webpack:///../../../../../src/client/js/Context/Delegate/MasterSite.ts","webpack:///../../../../src/client/js/Toast/ToastManager.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/DropdownRenderer.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/MenuRenderer.ts","webpack:///../../../../../src/client/js/Context/Menu/Submenu.ts","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeChildFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Dialog/chooseDialog.html","webpack:///../../../../src/client/js/Dialog/ElemChooseDialog.ts","webpack:///../../../../src/client/js/ShareManager/ShareDialog.ts","webpack:///../../../../src/client/js/Sound/AudioChain.ts","webpack:///../../../src/client/js/translationInit.ts","webpack:///../../../../src/shared/v1/model/Access.ts","webpack:///../../../../src/client/js/Site/ForgotPasswordSite.ts","webpack:///../../../../src/client/js/Site/NotAllowedSite.ts","webpack:///../../../../src/client/js/Dialog/SelectUserDialog.ts","webpack:///../../../src/client/FileWriter/FileTransferPromise.ts","webpack:///../../../src/client/FileWriter/FileWriterPromise.ts","webpack:///../../src/client/ClientModel.ts","webpack:///../../src/client/ClientPartialModel.ts","webpack:///../../../../src/shared/v1/model/AccessEasySyncModel.ts","webpack:///./src/client/img/help.png","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptDriver.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptQueryRunner.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js","webpack:///./node_modules/@babel/polyfill/lib/index.js","webpack:///./node_modules/@babel/polyfill/lib/noConflict.js","webpack:///./node_modules/core-js/es6/index.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/fn/array/includes.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/fn/array/flat-map.js","webpack:///./node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/core-js/fn/string/pad-start.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/fn/string/pad-end.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/fn/string/trim-start.js","webpack:///./node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/core-js/fn/string/trim-end.js","webpack:///./node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/core-js/fn/symbol/async-iterator.js","webpack:///./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/fn/object/values.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/fn/object/entries.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/fn/promise/finally.js","webpack:///./node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/web/index.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/library/fn/global.js","webpack:///./node_modules/core-js/library/modules/es7.global.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/js-helper/dist/shared/Counter.js","webpack:///./node_modules/js-helper/dist/shared/DateHelper.js","webpack:///./node_modules/js-helper/dist/shared/MigrationHelper.js","webpack:///./node_modules/reflect-metadata/Reflect.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/typeorm/node_modules/debug/src/common.js","webpack:///./node_modules/typeorm/node_modules/ms/index.js","webpack:///./node_modules/js-helper/dist/shared/Prioritized.js","webpack:///./node_modules/js-helper/dist/shared/PromiseWithHandlers.js","webpack:///./node_modules/js-helper/dist/shared/Random.js","webpack:///./node_modules/js-helper/dist/client/Dragger/DragHelper.js","webpack:///./node_modules/js-helper/dist/client/HotkeyManager.js","webpack:///./node_modules/js-helper/dist/client/InputSelect.js","webpack:///./node_modules/cs-event-manager/dist/shared.js","webpack:///./node_modules/cs-event-manager/dist/shared/EventManager.js","webpack:///../../../../src/client/js/Context/ContainerSite.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/container.html","webpack:///../../../../../src/client/js/Context/Delegate/DelegateSite.ts","webpack:///../../../../../src/client/js/Context/Fragment/AbstractWindowFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/abstractWindowTemplate.html","webpack:///../../../../../src/client/js/Context/Fragment/AlphabeticListFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/alphabeticListFragment.html","webpack:///../../../../../src/client/js/Context/Fragment/TabFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/tabFragment.html","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/ErrorAction.ts","webpack:///./node_modules/cordova-sites/dist/client/img/errorIcon.png","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/StartSiteMenuAction.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/navbar.html","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/menuSite.html","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/swipeFragment.html","webpack:///../../../../src/client/js/Dialog/ButtonChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ConfirmDialog.ts","webpack:///../../../../src/client/js/Dialog/ImgChooseDialog.ts","webpack:///../../../../src/client/js/Legacy/ScaleHelper.ts","webpack:///../../../src/client/js/PromiseHelper.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Dialog/shareDialog.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/loginSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/forgotPasswordSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/notAllowedSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/dialog/selectUserDialog.html","webpack:///../../../src/client/js/OfflineUserManager.ts","webpack:///../../src/client/SyncJob_old.ts","webpack:///../../../src/client/editEntitySite/ModifyEntitySite.ts","webpack:///../../../src/client/migration/SetupEasySync.ts","webpack:///../../../../src/client/js/Site/ChangeUserSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/changeUserSite.html","webpack:///../../../../src/client/js/Site/RegistrationSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/registrationSite.html","webpack:///../../../../src/shared/v1/model/UserSyncModel.ts","webpack:///../../../../src/shared/v1/model/UserSyncPartialModel.ts","webpack:///./src/client/img/settings.png","webpack:///./src/client/html/sites/menu.html","webpack:///./src/client/html/sites/level.html","webpack:///./src/client/sound/single_coin_fall_on_concrete_.mp3","webpack:///./src/client/html/sites/end.html","webpack:///./src/client/html/sites/settingsSite.html","webpack:///./src/client/html/sites/tutorialSite.html","webpack:///./src/client/html/fragment/settings.html","webpack:///./src/client/html/sites/credits.html","webpack:///./src/client/html/sites/privacyPolicy.html","webpack:///./src/client/html/sites/impressum.html","webpack:///./src/client/html/sites/contactSite.html","webpack:///./src/client/sass/index.scss","webpack:///./src/shared/model/LevelData.ts","webpack:///./src/shared/model/migration/shared/Setup.ts","webpack:///./src/client/js/wordrotator/Segment/TemplateContainer.js","webpack:///./src/client/js/wordrotator/Segment/Segment.js","webpack:///./src/client/js/wordrotator/Segment/LeafSegment.js","webpack:///./src/client/js/wordrotator/Segment/ParentSegment.js","webpack:///./src/client/js/wordrotator/Level/Level.js","webpack:///./src/client/js/wordrotator/Segment/RowSegment.js","webpack:///./src/client/js/wordrotator/Level/RowLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleLevel.js","webpack:///./src/client/js/wordrotator/Level/RowLevel8.js","webpack:///./src/client/js/wordrotator/Level/RowLevel10.js","webpack:///./src/client/js/wordrotator/Segment/TriangleSegment.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel8.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel12.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel8.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel12.js","webpack:///./src/client/js/wordrotator/Segment/ColumnSegment.js","webpack:///./src/client/js/wordrotator/Level/BigSegmentsLevels.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_0.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_1.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_2.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_1_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_2.js","webpack:///./src/client/js/wordrotator/Level/LevelHelper.ts","webpack:///./src/client/js/Sites/EndSite.ts","webpack:///./src/client/js/model/LevelPlayed.ts","webpack:///./src/client/js/Sites/LevelSite.ts","webpack:///./src/client/js/wordrotator/Level/MainMenuLevel.js","webpack:///./src/client/js/Sites/TutorialSite.ts","webpack:///./src/client/js/Sites/CreditsSite.ts","webpack:///./src/client/js/Sites/PrivacyPolicySite.ts","webpack:///./src/client/js/Sites/ImpressumSite.ts","webpack:///./src/client/js/Sites/ContactSite.ts","webpack:///./src/client/js/Fragment/WordRotatorSettingFragment.ts","webpack:///./src/client/js/Sites/SettingsSite.ts","webpack:///./src/client/js/Sites/MainMenuSite.ts","webpack:///./src/client/js/model/migration/ClientSetup.ts","webpack:///./src/client/sound/brightAndBeautifull__.mp3","webpack:///./src/client/js/script.js"],"names":["TemplateContainer","leafTemplate","parentTemplate","rowTemplate","triangleTemplate","columnTemplate","cloneNode","Segment","element","rotation","parent","rotations","otherSegment","getLevel","Promise","resolve","locks","lockedArray","LeafSegment","leaf","Helper","isNotNull","setLeaf","ViewHelper","removeAllChildren","querySelector","appendChild","document","createTextNode","ParentSegment","children","class","rotatable","userRotationDelta","lastUserRotation","touchendListener","e","now","Date","getTime","target","position","changedTouches","length","elementFromPoint","pageX","pageY","x","y","targetTouches","contains","mouseDownTarget","stopPropagation","preventDefault","segmentClicked","rotate","clickPosition","mouseupListener","_updateElement","getHasWon","firstElem","secondElem","firstPosition","secondPosition","timeout","clickTolerance","rotationDirection","isNull","Math","abs","firstIndex","secondIndex","rotationIndexes","i","canRotate","currentRotation","_updateRotationClass","classList","add","delayPromise","setTimeout","then","remove","checkHasWon","sameAs","isNaN","splice","n","applyRotations","applyLocks","push","getCurrentRotations","locked","getCurrentLocked","checkChildren","nonNull","isSolved","addChild","child","setParent","layer","_getLayer","childContainer","removeEventListener","addEventListener","getElement","createElement","window","initListener","Level","templateContainer","rootSegment","words","startRotations","levelData","hasWon","id","saveAsCurrentAfterCheckWon","wonResolver","giveUpResolver","_shakeLeafs","_shakeLeafsTimeout","_lastRotation","wonPromise","reject","segmentClickedListener","NativeStoragePromise","setItem","JSON","stringify","replace","toUpperCase","self","saveAsCurrentLevel","shouldSave","_getRotatableSegmentsFrom","segment","clearTimeout","shakeLeafs","Random","getIntRandom","listener","_getLeafSegmentsFrom","leafs","getLeafSegments","index","apply","word","leafSegmentTemplate","leafSegments","charAt","RowSegment","onclick","RowLevel","container","wordLength","leafsWordOne","_createLeafsForWord","copyLeafTemplate","leafsWordTwo","copyRowTemplate","copyParentTemplate","setRootSegment","SimpleLevel","RowLevel8","RowLevel10","TriangleSegment","SixWordsRowLevel","leafsWords","parents","triangle","copyTriangleTemplate","rowSegment","SixWordsRowLevel8","SixWordsRowLevel12","FourWordsLevel","FourWordsLevel8","FourWordsLevel12","ColumnSegment","BigSegmentsLevels","bigSegmentPositions","parentSegment","indexOf","copyColumnTemplate","SimpleFourWordsLevel","bigSegmentPosition","SimpleFourWordsLevel10_0","SimpleFourWordsLevel10_1","SimpleFourWordsLevel10_2","SimpleFourWordsLevel10_3","TwoSegmentFourWordsLevel10_0_3","TwoSegmentFourWordsLevel10_1_3","TwoSegmentFourWordsLevel10_0_2","MainMenuLevel","Object","LoginSite","ADD_LOGIN_ACTION","RegistrationSite","ADD_REGISTRATION_ACTION","App","addInitialization","Translator","init","translations","translationGerman","translationEn","fallbackLanguage","markUntranslatedTranslations","NavbarFragment","title","soundManager","SoundManager","getInstance","CHANNELS","MUSIC","music","getItem","audio","loop","volume","muted","play","catch","console","error","UserManager","getMe","addLoginChangeCallback","isLoggedIn","DataManager","_basePath","__HOST_ADDRESS__","onlineCallback","isOnline","Toast","show","assign","BaseDatabase","CONNECTION_OPTIONS","logging","synchronize","migrationsRun","migrations","DeleteUserManagement1000000000000","SetupEasySync1000000000500","SetupUserManagement1000000001000","Setup1000000002000","ClientSetup1000000002001","app","start","MainMenuSite","sql","EasySyncClientDb","rawQuery","res","log","ready","device","platform","navigator","serviceWorker","register"],"mappings":"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AgD,gBAAgB,EAAE,KAAK;AACjJ;;AAEO;AACP;AACA;AACA,2GAA2G,sFAAsF,aAAa,EAAE;AAChN,sBAAsB,8BAA8B,gDAAgD,uDAAuD,EAAE,EAAE,GAAG;AAClK,4CAA4C,sCAAsC,UAAU,oBAAoB,EAAE,EAAE,UAAU;AAC9H;;AAEO;AACP,gCAAgC,uCAAuC,aAAa,EAAE,EAAE,OAAO,kBAAkB;AACjH;AACA;;AAEA;AACA,yCAAyC,6BAA6B;AACtE,CAAC;AACD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,4CAA4C;AAC5C;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrJA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;ACZA,aAAa,mBAAO,CAAC,EAAW;AAChC,WAAW,mBAAO,CAAC,EAAS;AAC5B,WAAW,mBAAO,CAAC,EAAS;AAC5B,eAAe,mBAAO,CAAC,EAAa;AACpC,UAAU,mBAAO,CAAC,EAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA,gD;;;;;;;ACpDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACU;AACJ;AACJ;AACF;AACQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,qEAAqE,YAAY,8DAAU,QAAQ,EAAE;AACrG;AACA,kFAAkF,YAAY,wEAAe,aAAa,EAAE;AAC5H;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,mEAAmE,YAAY,8DAAU,QAAQ,EAAE;AACnG;AACA,+EAA+E,YAAY,sEAAc,YAAY,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB,EAAE;AACrF,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,uBAAuB,EAAE;AAClF,6DAA6D,2BAA2B,EAAE;AAC1F,qEAAqE,2BAA2B,EAAE;AAClG,6DAA6D,2BAA2B,EAAE;AAC1F,2DAA2D,2BAA2B,EAAE;AACxF,mEAAmE,2BAA2B,EAAE;AAChG;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,+BAA+B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,wDAAwD,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2CAA2C,EAAE;AAC5G;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,yCAAyC,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,iDAAiD,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAmD,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD,wDAAwD,uCAAuC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC,EAAE;AACzG;AACA,0EAA0E,iGAAiG,EAAE;AAC7K;AACA;AACA;AACA;AACA,oDAAoD,6BAA6B,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mCAAmC,EAAE;AACzG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAe,EAAE;AAC5D,wCAAwC,QAAQ,mEAAU,0CAA0C,EAAE;AACtG;AACA,0CAA0C,mCAAmC,EAAE;AAC/E,uCAAuC,QAAQ,8DAAU,eAAe,EAAE;AAC1E,mEAAmE,QAAQ,gEAAW,gBAAgB,EAAE;AACxG,gEAAgE,QAAQ,8DAAU,eAAe,EAAE;AACnG,4EAA4E,QAAQ,sEAAc,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;;AC5QA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qDAAqD,gCAAgC,EAAE;AACvF,qDAAqD,gCAAgC,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB,EAAE;AACjF;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,uDAAuD,EAAE;AAC3H;AACA;AACA,kEAAkE,oEAAoE,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,0CAA0C,mEAAa,WAAW,4DAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,yCAAyC,OAAO;AAChD,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;;;;;;;ACpPa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,GAAc;AAC3C;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,gBAAgB;AAChD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,mBAAmB;AACnB,iBAAiB;AACjB,iBAAiB;AACjB,mBAAmB;AACnB,mBAAmB;AACnB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA,4CAA4C,IAAI,EAAE;AAClD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,4DAA4D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,kC;;;;;;;AC/RA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;;;;;;AClBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACuB;;AAExB;;;;;;;;AC5GA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gIAAgI,4BAA4B;AAC5J;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI,KAAK;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;AACA;AACA;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;;AAEA;;;;;;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e,OAAlE;AACH;;;WAED,iCAA4B;AACxB,UAAI,QAAQ,GAAG,IAAf;AACA,UAAI,QAAQ,GAAG,IAAf;AAEA,UAAI,OAAO,GAAG,IAAI,OAAJ,CAAY,UAAC,OAAD,EAAU,MAAV,EAAoB;AAC1C,gBAAQ,GAAG,OAAX;AACA,gBAAQ,GAAG,MAAX;AACH,OAHa,CAAd;AAIA,aAAO,CAAC,SAAD,CAAP,GAAqB,QAArB;AACA,aAAO,CAAC,QAAD,CAAP,GAAoB,QAApB;AAEA,aAAO,OAAP;AACH;;;;;;AAvXL,wB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLyD;AACe;AAClC;AACY;AACQ;AACV;AACD;AACoB;AACT;AACR;AACF;AACQ;AACrB;AACiD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uGAAuG,EAAE;AACxL,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,sHAAsH,8DAA8D,EAAE;AACtL;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,0LAA0L,0BAA0B,EAAE;AACtN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA,wGAAwG,uCAAuC,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,mEAAmE,EAAE;AAC5K;AACA;AACA,yCAAyC;AACzC,wEAAwE,QAAQ,sCAAS;AACzF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,mGAAmG,+CAA+C,EAAE;AACpJ,yCAAyC;AACzC;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2IAA2I,iDAAiD,EAAE;AAC9L,yCAAyC;AACzC;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2GAA2G,uDAAuD,EAAE;AACpK,yCAAyC;AACzC;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,gDAAgD,sBAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,qGAAqG,yDAAyD,EAAE;AAChK,yCAAyC;AACzC;AACA;AACA,wKAAwK,oBAAoB,EAAE;AAC9L;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+FAA+F,yDAAyD,EAAE;AAC1J,yCAAyC;AACzC;AACA;AACA;AACA,uGAAuG,YAAY,kCAAW,SAAS,EAAE;AACzI;AACA;AACA,mJAAmJ,4BAA4B,EAAE;AACjL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA,4GAA4G,yBAAyB,EAAE;AACvI,sGAAsG,yBAAyB,EAAE;AACjI;AACA;AACA,uDAAuD,kCAAW,CAAC,gCAAU;AAC7E,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA,oFAAoF,kDAAW,yCAAyC,0DAAmB;AAC3J;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,uGAAuG,mDAAmD,EAAE;AAC5J,wEAAwE,gCAAU;AAClF,qEAAqE,kCAAW;AAChF;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,iLAAiL,4BAA4B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,mDAAmD,+CAA+C,EAAE,wCAAwC,EAAE;AAC5N,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,0IAA0I,iCAAiC,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,kDAAkD,+CAA+C,EAAE,EAAE,EAAE;AACrL,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+EAA+E,yFAAyF,iDAAiD,EAAE,EAAE,EAAE;AAC/N,4EAA4E,QAAQ,kCAAW,wBAAwB,EAAE;AACzH;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,kFAAkF,0DAA0D,uDAAuD,EAAE,EAAE,EAAE;AACzM,+EAA+E,QAAQ,wCAAc,2BAA2B,EAAE;AAClI;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA,oGAAoG,mDAAmD,EAAE;AACzJ,yCAAyC;AACzC;AACA;AACA,mGAAmG,QAAQ,0CAAe,4BAA4B,EAAE;AACxJ,2IAA2I,iBAAiB,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA;AACA,yFAAyF,0DAA0D,EAAE;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uFAAuF,uDAAuD,EAAE;AAChJ;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yCAAyC,qCAAQ;AACjD;AACA;AACA;AACA;AACA,iLAAiL,wBAAwB,EAAE;AAC3M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,gFAAgF,qFAAqF,EAAE;AACvK;AACA;AACA,kLAAkL,mBAAmB,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,iFAAiF,uFAAuF,EAAE;AAC1K;AACA;AACA,8LAA8L,oBAAoB,EAAE;AACpN;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ,gCAAU,mEAAmE,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8EAA8E,sBAAK;AACnF;AACA;AACA;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,gEAAgE;AACpJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,8DAA8D;AAClJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;;AAEA;;;;;;;;;ACvsD+C;AACE;AAC4B;AAC9B;AAC4B;AAC3E;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,uEAAuE,+BAA+B,EAAE;AACxG,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wDAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qEAAqE,8CAA8C,EAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,4DAA4D,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,mBAAmB,4BAAQ;AAC3B,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,+CAA+C,EAAE;AAC/G;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrhBA;;AACA;;AACA;;AACA;;IAEa,Y;AAmBT;AAAA;;AAAA;;AACI,SAAK,QAAL,GAAgB,EAAhB;;AACA,QAAI,kBAAkB,MAAtB,EAA8B;AAC1B,WAAK,OAAL,GAAe,IAAI,YAAJ,EAAf;AACH,KAFD,MAEO,IAAI,wBAAwB,MAA5B,EAAoC;AACvC;AACA,WAAK,OAAL,GAAe,IAAI,kBAAJ,EAAf;AACH,KAHM,MAGA;AACH,YAAM,IAAI,KAAJ,CAAU,yBAAV,CAAN;AACH;;AACD,SAAK,OAAL,CAAa,aAAb,GAA6B;AACzB,aAAO,CAAC,GAAR,CAAY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AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sEAAI,mBAAmB,yBAAyB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;ACrLA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA,mCAAmC,qCAAqC,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;;;AC9La;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,GAAkB;AACvC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,CAAiB;AACtC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,GAA0B;AAC/C,aAAa,mBAAO,CAAC,GAAsB;AAC3C,aAAa,mBAAO,CAAC,GAA8B;AACnD,aAAa,mBAAO,CAAC,GAAiB;AACtC,aAAa,mBAAO,CAAC,GAAoB;AACzC,kC;;;;;;ACrBA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;ACLA;AAAA;AAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,iCAAiC,8DAAQ,0CAA0C,mBAAmB;AACtG;AACA;AACA,iDAAiD,8DAAQ,sDAAsD,UAAU;AACzH;AACA;AACA;AACA;AACA,+BAA+B,QAAQ,gBAAgB;AACvD;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC9CA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;AC7GA,6BAA6B;AAC7B,uCAAuC;;;;;;;;ACD1B;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACnDA;AACA,kBAAkB,mBAAO,CAAC,EAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;ACHD,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,EAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;;ACfA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,4BAA4B,EAAE;AACrG,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACF;AACgB;AACA;AACY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB,EAAE;AAClE,yCAAyC,uCAAuC,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,QAAQ,KAAK,iBAAiB,GAAG,YAAY,UAAU,EAAE,GAAG,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE;AACrH;AACA;AACA;AACA;AACA,gCAAgC,0DAA0D;AAC1F;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC,iBAAiB,IAAI;AACrB;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,+EAAY;AACnH;AACA;AACA,wKAAwK,+EAAY;AACpL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,mGAAmG,+EAAY;AAC/G;AACA;AACA,4IAA4I,+EAAY;AACxJ;AACA;AACA;AACA;AACA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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mFAAmF,EAAE;AACjJ;AACA;AACA;AACA;AACA,wDAAwD,yFAAyF,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wGAA4B;AAClD;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB,qCAAqC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,kBAAkB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+CAA+C,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0GAA0G,EAAE;AAC/J;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA,uCAAuC,iCAAiC;AACxE;AACA;AACA;AACA,wCAAwC,mEAAa,KAAK,4DAAM;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,QAAQ,+DAAQ,qCAAqC,EAAE;AACrH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+DAAQ;AAC3E,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yEAAO,+BAA+B,mCAAmC;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,iDAAiD,EAAE;AAC9H,qEAAqE,yBAAyB,EAAE;AAChG;AACA,8EAA8E,mEAAmE,EAAE;AACnJ;AACA;AACA,yEAAyE,8CAA8C,EAAE;AACzH;AACA;AACA;AACA,8BAA8B,6BAA6B;AAC3D;AACA,qBAAqB,0CAA0C,gBAAgB,sBAAsB;AACrG;AACA,QAAQ,0BAA0B,8BAA8B;AAChE;AACA;AACA;AACA,gDAAgD,QAAQ,+DAAQ,4DAA4D,EAAE;AAC9H,oDAAoD,QAAQ,+DAAQ,gEAAgE,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oFAAY,wCAAwC,sFAAc,wCAAwC,uFAAe,wCAAwC,iFAAS;AACzO;AACA;AACA,iEAAiE,sFAAc;AAC/E,kEAAkE,uFAAe;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,sFAAc;AAClF;AACA;AACA,CAAC;AACyB;;AAE1B;;;;;;;ACpjBA;AACA,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;;;;;;;;ACJA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;;;ACjBA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,4BAA4B,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;;AC3DA;AAAA;AAAA;AAA4C;AACM;AAClD;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,eAAe,8DAAQ,CAAC,8DAAQ,GAAG,iBAAiB,uEAAuE;AAC9I;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;;;;;;;;;;;;;;ACrBkD;AAClD;AACA;AACA,IAAI,WAAK;AACT;AACA,QAAQ,kCAAW,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACgB;;AAEjB;;;;;;;;;;;;ACrCyC;AACT;AACgB;AACwB;AACS;AACjF;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iCAAiC,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA,6HAA6H;AAC7H;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,eAAe,EAAE;AAC3E;AACA;AACA,+CAA+C,6BAA6B,WAAK,SAAS,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,sCAAa,gCAAgC,EAAE;AACjI,wFAAwF,YAAY,kDAAmB,oBAAoB,EAAE;AAC7I,iGAAiG,YAAY,wDAAsB,uBAAuB,EAAE;AAC5J,uDAAuD,SAAS,qCAAQ,GAAG,UAAU,EAAE;AACvF,0DAA0D,SAAS,qCAAQ,GAAG,WAAW,EAAE;AAC3F,uCAAuC;AACvC,6DAA6D,gBAAgB,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;AChTgF;AACtB;AACpB;AACsB;AACF;AACS;AACK;AACF;AACT;AAC1B;AACyB;AACX;AACoB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qCAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,uBAAY;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAO,CAAC,GAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wDAAwD,iDAAiD,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAA0C,EAAE;AAClG,mDAAmD,yCAAyC,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kCAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8BAA8B,qBAAqB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA,qDAAqD,qCAAQ,CAAC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM,iDAAiD,UAAU;AAC9L;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,iCAAiC,EAAE;AACnC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B,qCAAQ,6CAA6C,UAAU;AACzF;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM;AAChE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,sCAAsC,sDAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC,mDAAY;AAC9C;AACA;AACA,2EAA2E;AAC3E;AACA,iBAAiB;AACjB;AACA,kCAAkC,sDAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uCAAuC,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,uDAAuD,wBAAE,+BAA+B,kDAAkD,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,6DAA6D,gCAAgC,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,4BAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA,sCAAsC,oDAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,4HAA4H,oCAAoC,EAAE;AAClK;AACA;AACA;AACA,+DAA+D,oCAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gCAAgC,qBAAqB,EAAE;AAChF,qBAAqB,gCAAgC,qBAAqB,EAAE;AAC5E,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,2DAA2D,0BAA0B,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qDAAc,sBAAsB,sDAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,oCAAY;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACr1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACqB;AACzB;AACsC;AACd;AACjB;AACd;AAC/C;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0EAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,4BAA4B,6EAAa;AACzC,uCAAuC,6EAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6EAAa;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA;AACA;AACA,6CAA6C,6EAAa;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6EAAa;AACrC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,6EAAa;AACzB;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACC;;AAEvB;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClB8C;AACY;AACY;AAChB;AACtD;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wCAAS,+BAA+B,wCAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,4BAA4B,0CAAe;AAC3C;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACzIkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;ACjBkC;AACM;AACxC;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvByD;AACH;AACd;AAC8B;AACF;AACR;AAC5D;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qCAAQ,4DAA4D,yBAAyB;AAChJ;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,gBAAgB;AAC/D;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA,2EAA2E,eAAe;AAC1F;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,QAAQ,sCAAS;AAChF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,0DAA0D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA,oFAAoF,2DAA2D;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,kEAAkE;AACtJ;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA,uCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC,SAAS;AACT;AACA;AACA,gDAAgD,kCAAkC,EAAE;AACpF;AACA;AACA,kEAAkE,uBAAuB,EAAE;AAC3F,mGAAmG,sDAAsD,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kBAAkB,EAAE,wBAAwB,yCAAyC,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,sDAAsD,cAAc,4DAA4D,kEAAkE;AAClM,iDAAiD,cAAc,uDAAuD,6DAA6D;AACnL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,0DAA0D,cAAc,4DAA4D,kEAAkE;AACtM,qDAAqD,cAAc,uDAAuD,6DAA6D;AACvL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACnpBkC;AAClC;AACA;AACA,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;ACjOkC;AAClC,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChBkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrB+E;AACN;AAC7B;AACmC;AACnB;AACU;AACZ;AACiB;AACE;AACO;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gEAAgE,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAyB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,8DAA8D,EAAE;AACxI,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC,kDAAW;AAC3C;AACA;AACA;AACA,8BAA8B,mDAAyB;AACvD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8BAA8B,kDAAW,sBAAsB,0DAAmB;AAClF,oFAAoF,mEAAmE,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAW;AACzC,uFAAuF,0BAA0B,EAAE;AACnH;AACA,0BAA0B,+CAAuB;AACjD;AACA,8BAA8B,sDAAe;AAC7C,kFAAkF,uBAAuB,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAwB;AACtD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,yBAAyB;AAC9I;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA,6CAA6C,6BAA6B,EAAE;AAC5E;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACvNkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,mEAAiC;AACrC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnB8C;AAC9C;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,mDAAmD,0CAAa,0CAA0C,mCAAM;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;ACnN0D;AAChB;AAC4C;AACtF;AACA;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,oFAAoF,wCAAwC,EAAE;AAC9H;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAsD;AAClG,8CAA8C,uDAAuD;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sDAAsD;AAC7F;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4EAA4E,gDAAgD,EAAE;AAC9H,6EAA6E,uBAAuB,EAAE;AACtG,mEAAmE,8EAA8E,EAAE;AACnJ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,qBAAU;AACc;;AAE1B;;;ACpRkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA,sFAAsF,+BAA+B,EAAE,gCAAgC;AACvJ;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACrBiF;AACnC;AAC9C;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0EAA0E,iBAAiB,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iCAAiC,EAAE;AAChF,0CAA0C,uCAAuC,EAAE;AACnF,6CAA6C,wDAAwD,EAAE;AACvG;AACA;AACA,4EAA4E,wDAAwD,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sCAAO;AACvC;AACA;AACA;AACA;AACA;AACA,2EAA2E,2CAA2C,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4CAA4C,EAAE;AAC3H;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACtFuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAkD,EAAE;AAC/G,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,2DAA2D,uEAAuE,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,4CAA4C,EAAE;AACpG;AACA,yBAAyB;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,8CAA8C,EAAE;AAC1G;AACA,yCAAyC,mCAAM;AAC/C;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,6DAA6D,EAAE;AAC9H,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACiD;;AAElD;;;ACtIkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;AClByG;AACvD;AACqC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6EAAsC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC9FkC;AAClC;AACA;AACA;AACA,IAAI,yFAA4C;AAChD,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuD;;AAExD;;;AClBkC;AACM;AACxC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChCkC;AACM;AACxC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/BkD;AACR;AACkB;AACR;AACpD;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAAc;AAC/C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kDAAW;AAChE,iCAAiC,sDAAe;AAChD;AACA;AACA,iCAAiC,qBAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AClDkC;AAClC,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;ACdkC;AAClC;AACA;AACA;AACA,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACjB8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,0CAAa,KAAK,mCAAM,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,mDAAmD,EAAE;AACjI,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,WAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;;;;;;;ACpK8C;AACF;AAC4B;AACxE;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA;AACA,0DAA0D,gDAAgD;AAC1G,kEAAkE,8CAA8C;AAChH,gCAAgC,4BAAQ;AACxC;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA,0CAA0C,wDAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,4BAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mEAAmE,EAAE;AACzI;AACA;AACA;AACA,0EAA0E,wCAAwC,EAAE;AACpH,4BAA4B;AAC5B;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACnLkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;AClB+C;AACA;AAC/C;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,mDAAmD,0DAA0D;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrFkC;AAClC;AACA;AACA;AACA,IAAI,uEAAmC;AACvC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;ACjBsE;AACgC;AACtG;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0DAA0D;AAC/G;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA,uGAAuG,wDAAwD,EAAE;AACjK;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,0CAA0C,uEAAmC;AAC7E;AACA;AACA;AACA,yBAAyB;AACzB,wGAAwG,0CAAa,CAAC,0CAAa,KAAK,mCAAM,wBAAwB,mCAAM;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/G+C;AAC/C;AACA;AACA;AACA,IAAI,+DAA+B;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,4CAA4C,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AC/DiE;AACb;AACkB;AACU;AACO;AACA;AACjB;AACV;AACQ;AACP;AACc;AACJ;AACkB;AAC7C;AAC5C;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,gFAAgF,4BAA4B,EAAE;AAC9G,6EAA6E,4BAA4B,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,8BAA8B,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA,8FAA8F,kCAAkC,EAAE;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAA6B;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,2DAA6B;AACzC,0EAA0E,+BAA+B,EAAE;AAC3G,0EAA0E,8BAA8B,EAAE;AAC1G,0EAA0E,8BAA8B,EAAE;AAC1G,8EAA8E,kCAAkC,EAAE;AAClH,2EAA2E,gCAAgC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,2GAA2G,EAAE;AACzK;AACA,4DAA4D,+KAA+K,EAAE;AAC7O;AACA,4DAA4D,mIAAmI,EAAE;AACjM;AACA,gEAAgE,+KAA+K,EAAE;AACjP;AACA,6DAA6D,+KAA+K,EAAE;AAC9O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,0GAA0G,EAAE;AACxK;AACA,4DAA4D,8KAA8K,EAAE;AAC5O;AACA,4DAA4D,kIAAkI,EAAE;AAChM;AACA,gEAAgE,8KAA8K,EAAE;AAChP;AACA,6DAA6D,8KAA8K,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,kDAAW;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,iGAAiG,mDAAY;AAC7G;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG,mDAAY;AAC/G,mGAAmG,gDAAS;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,4EAA4E,uDAAgB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,mDAAmD,wCAAW;AAC9D;AACA;AACA,2HAA2H;AAC3H;AACA,iFAAiF,iDAAwB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,iFAAiF,6CAAsB;AACvG;AACA;AACA;AACA;AACA;AACA,iFAAiF,+DAA+B;AAChH;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,gFAAgF,qCAAQ;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA,iDAAiD,0BAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,yGAAyG,QAAQ,sCAAS;AAC1H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2DAA6B;AACvE;AACA,yBAAyB;AACzB,0DAA0D,uDAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,6GAA6G,QAAQ,sCAAS;AAC9H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0GAA0G,QAAQ,sCAAS;AAC3H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,6CAA6C,uDAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uIAAuI,wBAAwB,EAAE;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC0B;;AAE3B;;;AC7zBkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACjB8C;AACF;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ,2DAA2D;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kDAAkD;AACtG;AACA,sBAAsB;AACtB;AACA,oDAAoD,6CAA6C;AACjG;AACA;AACA,YAAY,4BAAQ;AACpB;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;;AAEnB;;;;;;AC9OqC;AACU;AACgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,6DAA6D;AAC1J;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6BAA6B,GAAG,sBAAsB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAO;AACtD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,wCAAc;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAO;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AClKqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,eAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yFAAyF,6DAA6D;AACtJ;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B,GAAG,sBAAsB;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+EAA+E,4BAAQ;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAO;AAClD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnJqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAO;AACjD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B,GAAG,sBAAsB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA,mGAAmG;AACnG,qGAAqG;AACrG;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb,SAAS;AACT;AACA;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;AC7MgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,QAAQ,sCAAS;AAC7G;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,uEAAuE,0CAAa,KAAK,mCAAM,gFAAgF,8BAA8B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA,iEAAiE,qCAAQ,sDAAsD,uBAAuB;AACtJ;AACA;AACA;AACA;AACA,uDAAuD,QAAQ,gBAAgB;AAC/E;AACA;AACA;AACA;AACA,qDAAqD,0BAA0B;AAC/E;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,wDAAwD,EAAE;AAChH;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsC;;AAEvC;;;AChK+B;AACM;AACrC;AACA;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;ACnFyD;AACM;AACX;AAC6B;AAC7C;AACgD;AACoB;AAClB;AACV;AACM;AACtC;AAC5C;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,mCAAiB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,4BAAQ;AAClH,mGAAmG,QAAQ,sCAAS;AACpH;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAA0B;AACxF,kEAAkE,eAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,6CAAsB;AAC/F;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,qEAAqE,uDAA2B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,+CAAuB;AAC3E,oDAAoD,mEAAiC;AACrF,oDAAoD,iDAAwB;AAC5E;AACA;AACA;AACA;AACA,4DAA4D,iDAAwB;AACpF;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,sEAAsE,+BAAe;AACrF;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA,kGAAkG,yCAAyC,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qCAAQ;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;;;;ACvMyD;AACU;AACwC;AACZ;AACjC;AACR;AACc;AAC+C;AACU;AACtC;AACvB;AACM;AAC+C;AACzD;AACe;AACF;AACL;AACuB;AACd;AAC3B;AAClD;AACA;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC;AACnF;AACA;AACA;AACA;AACA,YAAY,kCAAW,2BAA2B,gBAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,+CAA+C,0FAA0F,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qEAAqE,6EAAsC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,0DAA0D,iCAAgB;AAC1E,gBAAgB,iCAAgB;AAChC,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA,kEAAkE,iCAAgB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,kCAAkC,qCAAQ,CAAC,qCAAQ,GAAG,oBAAoB,KAAK,UAAU;AACzF;AACA,gBAAgB,iCAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA,sDAAsD,kDAAmB;AACzE;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA,uEAAuE,yCAAyC,EAAE;AAClH;AACA;AACA;AACA,gCAAgC,mCAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA+B;AACrD;AACA;AACA,oCAAoC,6BAAc;AAClD,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA;AACA,gDAAgD,qCAAkB;AAClE;AACA;AACA;AACA,gDAAgD,qBAAU;AAC1D;AACA,0BAA0B,yFAA4C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,8BAA8B,mEAAiC;AAC/D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACltB0D;AACV;AAChD;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,2BAAa;AACe;;AAE9B;;;;;;AC7DgD;AACU;AACE;AACF;AACA;AAC1D;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD,uBAAuB,yDAAkB;AACzC,yCAAyC,kCAAW;AACpD,uBAAuB,qCAAkB;AACzC,mBAAmB,2BAAa;AAChC;AACA;AACA,CAAC;AAC+B;;AAEhC;;;ACzBkC;AAClC;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;ACjB0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA,0DAA0D,UAAU,IAAI,QAAQ,YAAY,OAAO,sBAAsB,UAAU;AACnI;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;;AAErB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACG;;AAE9B;;;;;;;;;AC9G0D;AACqB;AACrB;AACoB;AACc;AAC5F,IAAI,2BAAa;AACjB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qCAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACG;;AAEzB;;;AC3F0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACO;;AAElC;;;AC9E0D;AACqB;AACb;AACY;AACc;AAC5F,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6CAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAO,CAAC,qJAA6B;AAC/D;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACO;;AAE7B;;;;;;;;;;;;ACzF0D;AACoC;AAC9B;AACyB;AACG;AACR;AACzB;AACY;AACvE;AACA;AACA;AACA,IAAI,+BAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yCAAyC,4CAAgB;AACzD,6BAA6B;AAC7B,yBAAyB;AACzB;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,8DAAyB;AACA;;AAE3B;;;ACvM0D;AACqB;AAC3B;AAC0B;AAC9E,IAAI,qBAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+BAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA,qBAAqB;AACrB,8BAA8B,6BAA6B;AAC3D,qBAAqB;AACrB,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,oDAAoB;AACA;;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvF4E;AACZ;AAC8B;AACF;AACR;AACf;AACZ;AACU;AACE;AACM;AACE;AACV;AACE;AACf;AACK;AACZ;AACd;AACsC;AACvE;AACA;AACA;AACA,IAAI,uCAAmB;AACvB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAAgB;AAClD;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,gEAAgE,EAAE;AAChJ;AACA;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,qEAAqE,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sBAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,6EAA6E,mEAAmE,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,oBAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,wDAAwD,sBAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA,yFAAyF,oBAAoB,EAAE;AAC/G;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,iFAAiF,gEAAgE,EAAE;AACnJ;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,iJAAiJ,oBAAoB,EAAE;AACvK,sFAAsF,kCAAkC,EAAE;AAC1H,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,2IAA2I,oBAAoB,EAAE;AACjK,gFAAgF,kCAAkC,EAAE;AACpH,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kCAAW;AAC9D;AACA;AACA,6BAA6B;AAC7B;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,4DAA4D,kCAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW;AAC/E;AACA,oEAAoE,6CAA6C,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,gFAAgF,oBAAoB,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,iCAAiC,4BAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,kFAAkF,kCAAkC,EAAE;AACtH;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA,mJAAmJ,oBAAoB,EAAE;AACzK,wFAAwF,kCAAkC,EAAE;AAC5H,uDAAuD,sBAAK;AAC5D,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,kCAAW;AAClE;AACA;AACA,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+HAA+H,sCAAsC,EAAE;AACvK,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,2CAA2C,qCAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,kCAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,oBAAoB,EAAE;AAC7K,mGAAmG,yCAAyC,EAAE;AAC9I,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA,6JAA6J,oBAAoB,EAAE;AACnL,yGAAyG,yCAAyC,EAAE;AACpJ,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA,gFAAgF,sGAAsG,EAAE;AACxL;AACA;AACA;AACA;AACA;AACA,mFAAmF,iFAAiF,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,oBAAoB,EAAE;AAC3F;AACA;AACA;AACA;AACA,6IAA6I,oBAAoB,EAAE;AACnK,wFAAwF,kCAAkC,EAAE;AAC5H,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,uDAAuD,gDAAgD,EAAE;AACzG,wDAAwD,gCAAgC,EAAE;AAC1F;AACA,mFAAmF,iCAAiC,EAAE;AACtH,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,oBAAoB,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kCAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,kEAAkE,EAAE;AACxJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,gEAAgE,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,0EAA0E,EAAE;AACxK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,wCAAc,yDAAyD,mCAAmC,EAAE;AACrL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,wEAAwE,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,0CAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gCAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB,EAAE;AACnF;AACA,kFAAkF,mCAAmC,EAAE;AACvH;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uIAAuI;AACvI;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAAM;AACnC;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,sCAAS;AAC5G;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA,wDAAwD,sBAAK;AAC7D,yFAAyF,oGAAoG;AAC7L;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,wGAAwG,EAAE;AAC3L,8EAA8E,QAAQ,sCAAS;AAC/F;AACA;AACA,2DAA2D,wCAAW;AACtE;AACA;AACA;AACA;AACA,iEAAiE;AACjE,kFAAkF,kCAAW;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,wBAAwB,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wIAAwI,oDAAoD,EAAE;AAC9L,iIAAiI,mDAAmD,EAAE;AACtL;AACA,oHAAoH;AACpH;AACA,mIAAmI,EAAE;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,iDAAiD,EAAE,EAAE;AACrD;AACA;AACA;AACA,qEAAqE,4BAAQ;AAC7E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,mGAAmG,iEAAiE,EAAE;AACtK,2DAA2D,kCAAW;AACtE;AACA,2FAA2F,yBAAyB,EAAE;AACtH,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,kGAAkG,iEAAiE,EAAE;AACrK,2DAA2D,gCAAU;AACrE;AACA,0FAA0F,yBAAyB,EAAE;AACrH;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,wEAAwE,4BAAQ;AAChF;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,2DAA2D,wCAAc;AACzE;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,4BAAQ;AACjF;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,wGAAwG,oEAAoE,EAAE;AAC9K;AACA;AACA;AACA,2DAA2D,0CAAe;AAC1E;AACA,kGAAkG,4BAA4B,EAAE;AAChI;AACA,4GAA4G,uCAAuC,EAAE;AACrJ;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA,6CAA6C,uBAAuB,mCAAmC,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,2DAA2D,gCAAU;AACrE;AACA;AACA,2FAA2F,yBAAyB,EAAE;AACtH;AACA;AACA,2FAA2F,+DAA+D,EAAE;AAC5J;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,kDAAkD,EAAE;AACzH;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,kCAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG;AACA,iIAAiI,oBAAoB,EAAE;AACvJ,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB,EAAE;AACxD,oCAAoC,iBAAiB,8GAA8G,EAAE;AACrK,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,qCAAqC,8DAA8D;AACnG;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yDAAyD,oBAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,2EAA2E,iBAAiB;AAC5F,uEAAuE,aAAa;AACpF;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gIAAgI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,gCAAgC,EAAE;AACzH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,6CAA6C,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD;AACA,4BAA4B,sBAAK,8DAA8D,sBAAK;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,iCAAiC,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,sEAAsE,oBAAoB,EAAE;AAC5F;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,8EAA8E,6BAA6B,EAAE;AAC7G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAc;AACrE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,wEAAwE,6BAA6B,EAAE;AACvG,4FAA4F,6BAA6B,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,yDAAyD,0CAAe;AACxE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK,sBAAsB,oBAAI;AACzE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0CAAe;AACc;;AAE/B;;;ACp6FkE;AAC4B;AACF;AACR;AACd;AACC;AACvE,IAAI,2DAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,uCAAmB;AACrB;AACA;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2DAA0B;AACgB;;AAE5C;;;AC7L0D;AACE;AACC;AAC6C;AAC/B;AAC3E,IAAI,2CAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,qDAAc;AAChB,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+KAA+K,4DAA4D,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iEAAgC,0JAA0J,4DAA4D,EAAE;AAC3Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6CAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2CAAe;AACsB;;AAEvC;;;AC1HiE;AACD;AACZ;AACU;AACT;AACA;AACG;AACa;AACE;AACrB;AACA;AACS;AACZ;AAC6B;AACmB;AACnD;AAC+B;AAC3E;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qDAAc;AACzC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,gDAAS;AACpC;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,2BAAa;AACxC;AACA,2BAA2B,gDAAkB;AAC7C;AACA,2BAA2B,mCAAiB;AAC5C;AACA,2BAA2B,kCAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qBAAU;AACrC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,uDAA2B;AACtD;AACA,0BAA0B,qCAAkB;AAC5C;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACO;AACP,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,6BAA6B,EAAE;AACxF;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA,kBAAkB;AAClB;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,kJAAkJ,4BAA4B,EAAE;AAChL;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACxH8C;AACI;AAClD;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA,eAAe,wCAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,+CAA+C,0CAAa,KAAK,mCAAM;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACtY8C;AACc;AAC5D;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mCAAmC,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD;AACA;AACA;AACA;AACA,sCAAsC,0CAAa,KAAK,mCAAM;AAC9D,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,8DAA8D,EAAE;AACrI;AACA;AACA,qEAAqE,iEAAiE,EAAE;AACxI;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B,4CAA4C,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE;AAC1G;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,4BAA4B,EAAE;AAC7F,mFAAmF,4BAA4B,EAAE;AACjH;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACnD8C;AACY;AACE;AACA;AACQ;AACV;AAC0B;AACpF;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,oBAAoB,mCAAM;AACpG,6DAA6D,2CAA2C,EAAE;AAC1G;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,0CAA0C,EAAE;AAC/J;AACA,6EAA6E,yBAAyB,EAAE;AACxG;AACA;AACA;AACA,+FAA+F,gEAAgE,EAAE;AACjK;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,0CAA0C,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,yGAAyG,gEAAgE,EAAE;AAC3K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;AC5N4D;AACA;AACQ;AACV;AAC1D;AACA;AACA;AACA;AACA,IAAI,yEAAoC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC+C;;AAEhD;;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,6JAA6J,4BAA4B,EAAE;AAC3L;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACxF0D;AACE;AACA;AACQ;AACP;AACuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uDAAuD;AAChE,SAAS,uDAAuD;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAwE;AAC5F,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,mDAAY,qCAAqC,yBAAyB,EAAE;AAC1H,oBAAoB;AACpB;AACA;AACA,uCAAuC,cAAc;AACrD;AACA;AACA;AACA,wJAAwJ,uBAAuB,EAAE;AACjL;AACA;AACA,aAAa;AACb;AACA,oBAAoB;AACpB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,8CAA8C,EAAE;AACrI;AACA;AACA,wFAAwF;AACxF;AACA;AACA,cAAc;AACd;AACA,yGAAyG,gEAAgE,EAAE,EAAE;AAC7K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8FAA8F,+CAA+C,EAAE;AAC/I;AACA,uCAAuC,wCAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kDAAW,uCAAuC,0DAAmB;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iEAAiE;AACjE,0DAA0D;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC9B8C;AAC0B;AACpB;AACQ;AACA;AACF;AACM;AACA;AACI;AACM;AACA;AAC1B;AACgC;AACc;AACtB;AACI;AAChB;AACF;AACA;AACY;AACH;AACD;AACkB;AACpF;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2DAA6B;AAC9E,wDAAwD,yEAAoC;AAC5F,6CAA6C,mDAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,uHAAuH,EAAE;AACrL;AACA,mEAAmE,8CAA8C,EAAE;AACnH;AACA,2DAA2D,2EAA2E,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC,aAAa;AACb,SAAS;AACT;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA,2DAA2D,yDAAyD,EAAE;AACtH;AACA,2DAA2D,wEAAwE,EAAE;AACrI;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA,iEAAiE,oDAAoD,EAAE;AACvH;AACA,gLAAgL;AAChL;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAW,uCAAuC,0DAAmB;AAChI,8DAA8D,sDAAe,uCAAuC,gDAAS;AAC7H,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,+DAA+D,sDAAe;AAC9E;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sDAAe;AACpF,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,iEAAiE,8BAA8B,EAAE;AACjG;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,6DAA6D,0CAAa,KAAK,mCAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,2GAA2G,kCAAkC,EAAE;AAC/I,uHAAuH,mDAAmD,EAAE;AAC5K,SAAS;AACT;AACA;AACA,yCAAyC,8CAA8C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yCAAyC,8EAA8E,EAAE;AACzH,gDAAgD,4DAA4D,EAAE;AAC9G;AACA;AACA,6DAA6D,qDAAqD,EAAE;AACpH,SAAS;AACT;AACA;AACA,8DAA8D,sDAAsD,EAAE;AACtH,SAAS;AACT;AACA;AACA,4DAA4D,qDAAqD,EAAE;AACnH,SAAS;AACT;AACA;AACA,oEAAoE,yDAAyD,EAAE;AAC/H,SAAS;AACT;AACA;AACA,yCAAyC,4CAA4C,EAAE;AACvF;AACA;AACA,6CAA6C,wBAAwB,EAAE;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB,EAAE;AAC5D,2CAA2C,mCAAmC,EAAE;AAChF,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA,mBAAmB,wCAAc;AACjC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8FAA8F,kDAAkD,EAAE;AAClJ,6BAA6B,wCAAc,EAAE,2EAA2E;AACxH;AACA,4GAA4G,uGAAuG,EAAE;AACrN;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wFAAwF,0DAA0D,EAAE;AACpJ;AACA,0CAA0C,wCAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,+BAA+B,EAAE;AAChJ,4FAA4F,yCAAyC,EAAE;AACvI;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAAc;AAC7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AA4C,EAAE;AAC1I;AACA,2FAA2F,gDAAgD,EAAE;AAC7I,kGAAkG,mEAAmE,EAAE;AACvK,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,sFAAsF,yBAAyB,EAAE;AACjH,4FAA4F,+BAA+B,EAAE;AAC7H,wFAAwF,2BAA2B,EAAE;AACrH,4FAA4F,+BAA+B,EAAE;AAC7H,6FAA6F,gCAAgC,EAAE;AAC/H,+FAA+F,kCAAkC,EAAE;AACnI,uFAAuF,0BAA0B,EAAE;AACnH,kEAAkE,0DAA0D,EAAE;AAC9H;AACA,kEAAkE,2BAA2B,EAAE;AAC/F,wEAAwE,8BAA8B,EAAE;AACxG;AACA,wEAAwE,2BAA2B,EAAE;AACrG,8EAA8E,8BAA8B,EAAE;AAC9G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,oJAAoJ,EAAE;AACjO;AACA;AACA;AACA;AACA;AACA,sGAAsG,wEAAwE,EAAE;AAChL,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;AChmBkE;AAClE;AACA;AACA;AACA;AACA;AACA,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC;AACA,SAAS;AACT;AACA;AACA,8DAA8D,sCAAsC,EAAE;AACtG;AACA;AACA,4EAA4E,6CAA6C,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mDAAmD,EAAE;AAC5G;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC7KiC;AAC0C;AAC3E;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uCAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gEAAgE;AACtH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,qCAAQ,2EAA2E,8BAA8B;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,gBAAgB;AACnE;AACA;AACA;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;AC5O8C;AACwC;AAC1C;AACI;AACE;AACgC;AACC;AACtB;AAC7D;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kCAAkC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,qBAAqB,mCAAM,CAAC,4BAA4B;AAChI,kEAAkE,QAAQ,gBAAgB,iBAAiB,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,mCAAmC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,sBAAsB,mCAAM,CAAC,4BAA4B;AAClI,eAAe,sBAAsB;AACrC;AACA,sCAAsC,QAAQ,gBAAgB,kBAAkB,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kFAAkF,gCAAgC,oCAAY,YAAY,EAAE;AAC5I,kFAAkF,+BAA+B,oCAAY,CAAC,EAAE;AAChI,+BAA+B,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM,CAAC,4BAA4B;AAC1H;AACA,uCAAuC,oCAAY;AACnD;AACA;AACA;AACA,SAAS;AACT,2CAA2C,2CAAqB,kBAAkB,sBAAsB;AACxG,gDAAgD,+CAAuB;AACvE,wCAAwC,2CAAqB;AAC7D,eAAe,0CAAa,CAAC,0CAAa,KAAK,mCAAM,6BAA6B,mCAAM;AACxF;AACA;AACA,CAAC;AACoC;;AAErC;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC9F0D;AAC1D;AACA;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,mBAAmB,6CAAa;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,2BAA2B,6CAAa;AACjE,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa,2BAA2B,6CAAa;AAC7D,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,iCAAiC,6CAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;AC/FkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,IAAI,iCAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;ACzD0B;AACgC;AAC1D;AACA;AACA;AACA,IAAI,uBAAW;AACf;AACA,6BAA6B,iBAAK;AAClC,+BAA+B,iBAAK;AACpC,8BAA8B,iBAAK;AACnC,gCAAgC,iBAAK;AACrC,8BAA8B,iBAAK;AACnC,wBAAwB,iBAAK;AAC7B,yBAAyB,iBAAK;AAC9B,yBAAyB,iBAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAa,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAa,yBAAyB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAa,yBAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;AC9F4D;AACI;AACtB;AACE;AAC5C;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA,+BAA+B,iCAAU;AACzC;AACA,+BAA+B,2CAAqB;AACpD;AACA,+BAA+B,uBAAW;AAC1C;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA;AACA,CAAC;AACwB;;AAEzB;;;AClC+C;AACW;AAC1D;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACtN+C;AACc;AACO;AACE;AAChB;AACtD;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,uCAAuC;AAC3G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,+CAA+C;AACnH;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,yCAAyC;AAC7G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,6CAA6C;AACjH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,0CAA0C;AAC9G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,2CAA2C;AAC/G;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+CAA+C,sDAAe,OAAO,cAAc,uDAAuD;AAC1K;AACA;AACA;AACA,kDAAkD,mDAAY;AAC9D;AACA,mHAAmH,uBAAuB;AAC1I;AACA;AACA;AACA;AACA,gCAAgC,0CAA0C,sDAAe,OAAO,cAAc,6CAA6C;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8DAA8D,sDAAe,GAAG;AAChF;AACA,gDAAgD,cAAc;AAC9D,0CAA0C,cAAc;AACxD,8CAA8C,cAAc;AAC5D,2CAA2C,cAAc;AACzD,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,uCAAuC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAY;AAC1E,qFAAqF,kCAAkC;AACvH;AACA;AACA,4EAA4E,kCAAkC;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,oFAAoF,yBAAyB;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC3PgE;AACN;AAC1D;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0JAA0J,wCAAwC;AAClM;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAqB;AAC5C;AACA;AACA,uBAAuB,qCAAkB;AACzC;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACpC8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,0CAA0C,EAAE;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,2DAA2D,EAAE;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,uEAAuE;AACvE,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0EAA0E,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,wGAAwG,EAAE;AAChN;AACA,aAAa;AACb;AACA,+CAA+C;AAC/C;AACA;AACA,sBAAsB;AACtB;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvN+C;AACiB;AAChE;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,gDAAgD,iCAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,UAAU,mDAAmD,EAAE,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,gCAAgC,EAAE;AAC9I,iHAAiH,gCAAgC,EAAE;AACnJ;AACA;AACA,0GAA0G,gCAAgC,EAAE;AAC5I,mHAAmH,gCAAgC,EAAE;AACrJ;AACA;AACA,kFAAkF,gCAAgC,EAAE;AACpH;AACA;AACA;AACA;AACA,yGAAyG,gCAAgC,EAAE;AAC3I;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uEAAuE,2DAA2D,EAAE;AACpI,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA,kFAAkF,kEAAkE,EAAE;AACtJ,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,4BAA4B,8BAA8B,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,yEAAyE,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;AChSyD;AACwB;AACQ;AACQ;AACd;AAChB;AACP;AACc;AACY;AACqB;AAC7B;AACtB;AACgB;AACC;AACjB;AACmB;AACD;AACT;AACI;AAClC;AACmC;AACZ;AACR;AACkC;AAChC;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAa;AACvC,0BAA0B,2BAAa;AACvC;AACA,4DAA4D,2CAAqB;AACjF,oDAAoD,+CAAuB;AAC3E,kCAAkC,6BAAc;AAChD,oCAAoC,iCAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yDAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,qEAAkC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,oBAAoB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAsD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,qBAAqB;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sDAAe,2BAA2B,kDAAW,2BAA2B,0DAAmB;AACxJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,sCAAsC,qCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kDAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4CAA4C,yDAAkB;AAC9D;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAkB;AAC9C;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yCAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,mDAAyB;AACrE,0CAA0C,+CAAuB;AACjE;AACA;AACA,QAAQ,kCAAW,eAAe,2BAA2B;AAC7D;AACA;AACA,QAAQ,kCAAW,eAAe,mCAAmC;AACrE;AACA;AACA,QAAQ,kCAAW,eAAe,yBAAyB;AAC3D;AACA;AACA,8FAA8F,sCAAsC,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;AC7hBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClB0C;AACiC;AACgB;AAC3F;AACA;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,iCAAiC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sEAAsE,iCAAiC,EAAE;AACzG;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wDAAwD,EAAE;AACrI;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC7D+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,2DAAuB;AAC3B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AC5FU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFkC;AAClC;AACA;AACA;AACA;AACA,IAAI,2EAAqC;AACzC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgD;;AAEjD;;;;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;;;;;;;;;;AClBkC;AAClC,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;AClBkC;AAClC;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClBkC;AAClC;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;ACxBkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;;;;ACnBkC;AAClC;AACA;AACA,IAAI,2CAAqB;AACzB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACxBkC;AAClC;AACA;AACA,IAAI,iFAAwC;AAC5C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmD;;AAEpD;;;AClBkC;AAClC;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,yDAA4B;AAChC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuC;;AAExC;;;ACjBkC;AAClC;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2C;;AAE5C;;;ACjBkC;AAClC;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;ACrBwD;AACN;AACF;AACK;AACA;AACX;AACK;AACF;AACA;AACF;AACO;AACF;AACH;AACI;AACX;AACQ;AACV;AACiB;AACJ;AACI;AACU;AACL;AACJ;AACG;AACV;AACE;AACR;AACa;AACJ;AACT;AACG;AACL;AACF;AACY;AACS;AAChB;AACS;AACR;AACO;AACO;AACf;AACG;AACH;AACI;AACY;AACjB;AACG;AACD;AACH;AACL;AACiB;AACO;AACD;AACV;AACD;AACI;AACR;AACO;AACI;AACL;AACP;;AAE1C;;;AC9DgD;AACgC;AAChF;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA;AACA,0BAA0B,iDAAwB;AAClD;AACA;AACA,gBAAgB,sBAAsB,iBAAiB,sDAAsD;AAC7G,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;;;AC9DgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtDgD;AACgC;AACoB;AACpG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAwB;AAC9C;AACA;AACA,sBAAsB,qEAAkC;AACxD;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACpDgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA,SAAS;AACT;AACA;;AAEA;;;ACbU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,iHAAiH;AACjH;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC9BgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAChD;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACrBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,sFAAsF,uBAAuB;AAC7G,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtB8C;AAC8D;AACrG;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,sBAAsB;AAC9E;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA,qBAAqB;AACrB;AACA,uEAAuE;AACvE,wEAAwE,0CAAa,kBAAkB,mCAAM;AAC7G;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA,6BAA6B,sDAAe;AAC5C;AACA;AACA,6BAA6B,6BAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;AACA;;AAEA;;;ACpFgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAC0D;AAC1G;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2EAAqC;AAC3D;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACtBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC/BkD;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;;AAEA;;;AC5B6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8BAA8B,wBAAwB;AACtD;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;;;;ACf+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA;AACA,aAAa,sBAAsB;AACnC;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACV+C;AACxC;AACP;AACA,mBAAmB,oCAAY;AAC/B;AACA,eAAe,oCAAY;AAC3B;;AAEA;;;ACRU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFsE;AAC7B;AACS;AAClD;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW;AACnC;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2DAA2D,0CAAa,oBAAoB,mCAAM;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;ACjPU;;AAEV;;;ACFU;;AAEV;;;ACFgF;;AAEhF;;;ACFU;;AAEV;;;ACFU;;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACF+C;AAC/C;AACA;AAC0B;AACyC;AACO;AAC3B;AACU;AACsB;AAC/E;AACA;AACA;AAC4B;AACU;AACF;AACG;AACF;AACb;AACmB;AACU;AACA;AACM;AACT;AACG;AACH;AACH;AACI;AACD;AACF;AACE;AACA;AACC;AACA;AACA;AACG;AACJ;AACD;AACK;AACD;AACD;AACF;AACG;AACJ;AACD;AACC;AACD;AACA;AACD;AACK;AACH;AACP;AACK;AACK;AACD;AACC;AACO;AACG;AACb;AACL;AACE;AACR;AACJ;AACC;AACD;AACI;AACA;AACO;AACD;AACI;AACF;AACH;AACI;AACE;AACO;AACV;AACD;AACI;AACO;AACZ;AACA;AACE;AACC;AACD;AACF;AACI;AACL;AACK;AACA;AAChB;AACO;AACQ;AACF;AACT;AACM;AACK;AACC;AACR;AACA;AACI;AACC;AACF;AACF;AACS;AACC;AACG;AACC;AACL;AACC;AACN;AACJ;AACG;AACG;AACG;AAC6B;AAC1B;AACc;AACP;AACY;AACA;AACA;AACA;AACI;AACxB;AACe;AACA;AACA;AACM;AACvB;AACgB;AACc;AACpB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAa;AACnC;AACA,qDAAqD,uCAAmB;AACxE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE,WAAW,sCAAS;AACpB,eAAe,wCAAW;AAC1B,sCAAsC,2DAAuB;AAC7D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP,WAAW,gBAAgB,CAAC,mCAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA,6CAA6C,2DAAuB;AACpE;AACA;AACA;AACA;AACA,kEAAkE,+CAA+C,EAAE;AACnH,6FAA6F,6BAA6B,EAAE;AAC5H;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACxSA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,mCAAmC,mEAAa,KAAK,4DAAM;AAC3D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;;AC/DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAC3B;AACA;AACA;AACA;AACA;AACO;AACP,kCAAkC,sBAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iDAAiD,kEAAkE,EAAE;AACrH;AACA;AACA;AACA;AACO;AACP,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM,2CAA2C;AACjD;AACO;AACP,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,+BAA+B,EAAE;AAC9F;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,cAAc;AAC3C,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACjGA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM,6DAA6D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;;;;;AChCA,uBAAuB;AACvB;AACA;AACA;;;;;;;ACHA,SAAS,mBAAO,CAAC,EAAc;AAC/B,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,iBAAiB,mBAAO,CAAC,EAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA;AACA,cAAc,mBAAO,CAAC,GAAY;AAClC,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;;;;;;;;ACLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,a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AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D,uBAAuB,QAAQ;AAC/B;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;AC5IA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA,UAAU,mBAAO,CAAC,GAAe;AACjC,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,gBA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,EAAmB,CAAG;;;;EA5DI,2B;;AAA9B,4B;;;;;;;ACXA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;;;;;;AClBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AAC0B;AACR;AACf;AACN;AACN;AACU;AACU;AACvB;AACiB;AACtC;AACoC;AACA;AACtB;AACoB;AACnE;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,4GAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA,gFAAgF,sCAAsC,EAAE;AACxH;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,sEAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,wDAAwD,yEAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAK;AACtC,mCAAmC,qDAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA;AACA,4DAA4D,qFAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,yEAAyE,6CAA6C;AACtH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,8FAA8F,wDAAwD,EAAE;AACxJ;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qFAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F,oDAAoD,EAAE;AACpJ,6FAA6F,wCAAwC,EAAE;AACvI,8FAA8F,0CAA0C,EAAE;AAC1I,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI,sFAAsF,iCAAiC,EAAE;AACzH,uFAAuF,mCAAmC,EAAE;AAC5H,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,2DAA2D,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,sFAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,yDAAyD,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oFAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4DAA4D,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+CAA+C,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6FAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAkD,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,8CAA8C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mFAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,4CAA4C,EAAE;AAC/G;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,yBAAyB,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sEAAI;AACnD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,gFAAgF,8BAA8B,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,+DAAS;AAC5G;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA,wDAAwD,yEAAK,EAAE,wBAAwB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,oDAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,qFAAW;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,2BAA2B,EAAE;AAC/I;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA,6CAA6C;AAC7C,yEAAyE,gEAAQ,8CAA8C,2BAA2B,EAAE;AAC5J;AACA,mHAAmH,iGAAiG,EAAE;AACtN,8GAA8G,6BAA6B,EAAE;AAC7I,wHAAwH,2BAA2B,EAAE;AACrJ;AACA;AACA,2DAA2D,6FAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA;AACA,uHAAuH,oCAAoC,EAAE;AAC7J,iEAAiE;AACjE;AACA;AACA;AACA;AACA,sFAAsF,sFAAW;AACjG;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,oFAAU,EAAE,yCAAyC;AAC3H;AACA;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,gHAAgH,2CAA2C,EAAE;AAC7J;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA,sFAAsF,mFAAU;AAChG;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA,6FAA6F,gBAAgB,EAAE;AAC/G;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA,qEAAqE,wDAAwD,EAAE;AAC/H;AACA;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,sFAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA,sFAAsF,0CAA0C,EAAE;AAClI;AACA;AACA;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,yEAAK;AACpD;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,mFAAU;AACzD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,wBAAwB,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,kCAAkC,EAAE;AACzH,qFAAqF,kCAAkC,EAAE;AACzH;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA,+CAA+C,qDAAK;AACpD,iDAAiD,qDAAK;AACtD;AACA;AACA;AACA;AACA;AACA,2CAA2C,qDAAK;AAChD,6CAA6C,qDAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,sFAAe;AACoB;;AAErC;;;;;;;;AChuDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;ACXA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;ACJa;AACb,IAAI,mBAAO,CAAC,EAAgB;AAC5B,gBAAgB,mBAAO,CAAC,EAAY;AACpC,eAAe,mBAAO,CAAC,EAAW;AAClC,cAAc,mBAAO,CAAC,EAAU;AAChC,gBAAgB,mBAAO,CAAC,CAAW;AACnC,eAAe,mBAAO,CAAC,GAAU;AACjC,gBAAgB,mBAAO,CAAC,GAAiB;AACzC,YAAY,mBAAO,CAAC,EAAQ;AAC5B,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,qBAAqB,mBAAO,CAAC,EAAkB;AAC/C,aAAa,mBAAO,CAAC,EAAS;AAC9B,oBAAoB,mBAAO,CAAC,GAAiB;AAC7C,kBAAkB,mBAAO,CAAC,EAAe;AACzC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,wBAAwB,mBAAO,CAAC,EAAsB;AACtD,oBAAoB,mBAAO,CAAC,EAAiB;AAC7C,YAAY,mBAAO,CAAC,EAAQ;AAC5B,gBAAgB,mBAAO,CAAC,GAAY;AACpC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,oBAAoB,mBAAO,CAAC,GAAkB;AAC9C,eAAe,mBAAO,CAAC,EAAkB;AACzC,uBAAuB,mBAAO,CAAC,EAAe;AAC9C,aAAa,mBAAO,CAAC,EAAgB;AACrC,kBAAkB,mBAAO,CAAC,GAA4B;AACtD,YAAY,mBAAO,CAAC,EAAQ;AAC5B,YAAY,mBAAO,CAAC,EAAQ;AAC5B,0BAA0B,mBAAO,CAAC,EAAkB;AACpD,4BAA4B,mBAAO,CAAC,GAAmB;AACvD,2BAA2B,mBAAO,CAAC,GAAwB;AAC3D,uBAAuB,mBAAO,CAAC,GAAsB;AACrD,kBAAkB,mBAAO,CAAC,GAAc;AACxC,oBAAoB,mBAAO,CAAC,GAAgB;AAC5C,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,kBAAkB,mBAAO,CAAC,GAAe;AACzC,wBAAwB,mBAAO,CAAC,GAAsB;AACtD,YAAY,mBAAO,CAAC,EAAc;AAClC,cAAc,mBAAO,CAAC,EAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA,4BAA4B;AAC5B,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB,0BAA0B,EAAE,EAAE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gCAAgC;AACzF;AACA,OAAO;AACP;AACA;AACA,6EAA6E,YAAY;AACzF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,6CAA6C,EAAE;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,mDAAmD;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,oCAAoC;AACpC;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,8DAA8D;AAC9D;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB,sBAAsB,EAAE,EAAE;AACnD;AACA;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,yBAAyB;AACzB,KAAK;AACL,uBAAuB;AACvB,2BAA2B;AAC3B,0BAA0B;AAC1B,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,aAAa;AACvC,OAAO;AACP;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,uDAAuD,6BAA6B,EAAE;AACtF;AACA;AACA,KAAK;;AAEL;;AAEA;;AAEA;;AAEA,uDAAuD,YAAY;;AAEnE;;AAEA;;AAEA;AACA;AACA,KAAK,UAAU,gBAAgB;;AAE/B;AACA;AACA,KAAK;AACL;AACA,KAAK,WAAW,kCAAkC;;AAElD;AACA;AACA;AACA,CAAC,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/drC;;AACA;;IAEa,iB;;;;;AAWT;AAAA;;AAAA;;AACI;AAHJ,sBAAY,IAAZ;AAII,UAAK,SAAL,GAAiB,IAAI,IAAJ,EAAjB;AACA,UAAK,SAAL,GAAiB,IAAI,IAAJ,EAAjB;AACA,UAAK,OAAL,GAAe,CAAf;AACA,UAAK,OAAL,GAAe,KAAf;AALJ;AAMC;;;;WAED,gBAAO,WAAP,EAAkB;AAAA;;AACd,UAAI,SAAS,GAA8B,KAAK,WAAL,CAAkB,sBAAlB,EAA3C;AACA,UAAI,OAAO,GAA8B,KAAK,WAAL,CAAkB,oBAAlB,EAAzC;AAEA,UAAI,GAAG,GAAG,EAAV;AACA,YAAM,CAAC,IAAP,CAAY,OAAZ,EAAqB,OAArB,CAA6B,mBAAS,EAAG;AACrC,WAAG,CAAC,SAAD,CAAH,GAAiB,MAAI,CAAC,SAAD,CAArB;AACH,OAFD;AAGA,YAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,OAAvB,CAA+B,sBAAY,EAAG;AAC1C,YAAI,WAAW,KAAK,IAApB,EAA0B;AACtB,aAAG,CAAC,YAAD,CAAH,GAAoB,MAAI,CAAC,YAAD,CAAxB;AACH,SAFD,MAEO;AACH,cAAI,KAAK,CAAC,OAAN,CAAc,MAAI,CAAC,YAAD,CAAlB,CAAJ,EAAuC;AACnC,gBAAI,GAAG,GAAG,EAAV;;AACA,kBAAI,CAAC,YAAD,CAAJ,CAAmB,OAAnB,CAA2B,eAAK;AAAA,qBAAK,KAAK,IAAI,GAAG,CAAC,IAAJ,CAAS,KAAK,CAAC,EAAf,CAAd;AAAA,aAAhC;;AACA,eAAG,CAAC,YAAD,CAAH,GAAoB,GAApB;AACH,WAJD,MAIO,IAAI,MAAI,CAAC,YAAD,CAAJ,YAA8B,kCAAlC,EAA6C;AAChD,eAAG,CAAC,YAAD,CAAH,GAAoB,MAAI,CAAC,YAAD,CAAJ,CAAmB,EAAvC;AACH,WAFM,MAEA;AACH,eAAG,CAAC,YAAD,CAAH,GAAoB,IAApB;AACH;AACJ;AACJ,OAdD;AAeA,aAAO,GAAP;AACH;;;WAED,gCAA2B;AACvB,UAAI,OAAO,oFAAX;;AACA,aAAO,CAAC,WAAD,CAAP,GAAuB;AACnB,YAAI,EAAE,sCAAa,KAAb,CAAmB;AADN,OAAvB;AAGA,aAAO,CAAC,WAAD,CAAP,GAAuB;AACnB,YAAI,EAAE,sCAAa,KAAb,CAAmB;AADN,OAAvB;AAGA,aAAO,CAAC,SAAD,CAAP,GAAqB;AACjB,YAAI,EAAE,sCAAa,KAAb,CAAmB;AADR,OAArB;AAGA,aAAO,CAAC,SAAD,CAAP,GAAqB;AACjB,YAAI,EAAE,sCAAa,KAAb,CAAmB;AADR,OAArB;AAGA,aAAO,OAAP;AACH;;;WAED,mBAAuB,WAAvB,EAAoC,QAApC,EAA8C,gBAA9C,EAA8D;;;;;;;;;AAC1D,wBAAQ,GAAG,QAAQ,IAAI,EAAvB;AACI,uB,GAAU,KAAK,CAAC,OAAN,CAAc,WAAd,C;;AACd,oBAAI,CAAC,OAAL,EAAc;AACV,6BAAW,GAAG,CAAC,WAAD,CAAd;AACH;;AACD,oBAAI,CAAC,KAAK,CAAC,OAAN,CAAc,QAAd,CAAL,EAA8B;AAC1B,0BAAQ,GAAG,CAAC,QAAD,CAAX;AACH;;AAEG,4B,GAAe,E;AACf,+B,GAAkB,E;AACtB,2BAAW,CAAC,OAAZ,CAAoB,UAAC,UAAD,EAAa,KAAb,EAAsB;AACtC,iCAAe,CAAC,IAAhB,CAAqB,IAAI,OAAJ,CAAY,UAAM,OAAN;AAAA,2BAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AACzC,oCADyC,GAChC,IADgC;;AAAA,oCAEzC,QAAQ,CAAC,MAAT,GAAkB,KAFuB;AAAA;AAAA;AAAA;;AAGzC,oCAAM,GAAG,QAAQ,CAAC,KAAD,CAAjB;AAHyC;AAAA;;AAAA;AAAA,mCAIlC,gBAAO,SAAP,CAAiB,UAAU,CAAC,EAA5B,CAJkC;AAAA;AAAA;AAAA;;AAAA;AAKhC,qCAAM,KAAK,QAAL,CAAc,UAAU,CAAC,EAAzB,EAA6B,KAAK,YAAL,EAA7B,CAAN;;AALgC;AAKzC,oCALyC;;AAAA;AAQ7C,kCAAI,MAAM,KAAK,IAAf,EAAqB;AACjB,sCAAM,GAAG,IAAI,IAAJ,EAAT;AACH;;AACD,kCAAI,CAAC,UAAU,CAAC,OAAZ,IAAuB,UAAU,CAAC,OAAX,KAAuB,CAAlD,EAAqD;AACjD,0CAAU,CAAC,OAAX,GAAqB,CAArB;AACH;;AAED,sCAAQ,CAAC,KAAD,CAAR,GAAkB,MAAM,CAAC,MAAP,CAAc,MAAd,EAAsB,UAAtB,CAAlB;;AAEA,mCAAK,cAAL,CAAoB,QAAQ,CAAC,KAAD,CAA5B;;AACA,mCAAK,gBAAL,CAAsB,QAAQ,CAAC,KAAD,CAA9B,EAAuC,gBAAvC,EAAyD,YAAzD;;AACA,qCAAO;;AAnBsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAhB;AAAA,mBAAZ,CAArB;AAqBH,iBAtBD,E,CAuBA;;;AACA,uBAAM,OAAO,CAAC,GAAR,CAAY,eAAZ,CAAN;;;;AACA,uBAAM,OAAO,CAAC,GAAR,CAAY,YAAZ,CAAN;;;AACA,oBAAI,CAAC,OAAL,EAAc;AACV,0BAAQ,GAAI,QAAQ,CAAC,MAAT,GAAkB,CAAnB,GAAwB,QAAQ,CAAC,CAAD,CAAhC,GAAsC,IAAjD;AACH;;kDACM,Q;;;;;;;;;AACV;;;WAEO,0BAAwB,MAAxB,EAAgC,gBAAhC,EAAkD,YAAlD,EAA8D;AAClE,UAAI,SAAS,GAAG,KAAK,sBAAL,EAAhB;AACA,YAAM,CAAC,IAAP,CAAY,SAAZ,EAAuB,OAAvB,CAA+B,sBAAY,EAAG;AAC1C,YAAI,MAAM,GAAG,MAAM,CAAC,YAAD,CAAnB;;AACA,YAAI,OAAO,MAAP,KAAkB,QAAlB,IAA+B,KAAK,CAAC,OAAN,CAAc,MAAd,KAAyB,MAAM,CAAC,MAAP,IAAiB,CAA1C,IAA+C,OAAO,MAAM,CAAC,CAAD,CAAb,KAAqB,QAAvG,EAAkH;AAC9G,cAAI,gBAAgB,KAAK,IAAzB,EAA+B;AAC3B,gBAAI,WAAW,GAAG,IAAlB;;AACA,gBAAI,KAAK,CAAC,OAAN,CAAc,MAAd,CAAJ,EAA2B;AACvB,yBAAW,GAAG,sCAAa,QAAb,CAAsB,SAAS,CAAC,YAAD,CAAT,CAAwB,MAA9C,EAAsD,SAAtD,CAAgE,MAAhE,CAAd;AACH,aAFD,MAEO;AACH,yBAAW,GAAG,sCAAa,QAAb,CAAsB,SAAS,CAAC,YAAD,CAAT,CAAwB,MAA9C,EAAsD,QAAtD,CAA+D,MAA/D,CAAd;AACH;;AACD,wBAAY,CAAC,IAAb,CAAkB,WAAW,CAAC,IAAZ,CAAiB,eAAK,EAAG;AACvC,oBAAM,CAAC,YAAD,CAAN,GAAuB,KAAvB;AACH,aAFiB,CAAlB;AAIH,WAXD,MAWO,IAAI,gBAAgB,KAAK,KAAzB,EAAgC;AACnC,gBAAI,SAAS,CAAC,YAAD,CAAT,CAAwB,IAAxB,KAAiC,cAAjC,IAAmD,SAAS,CAAC,YAAD,CAAT,CAAwB,IAAxB,KAAiC,aAAxF,EAAuG;AACnG,oBAAM,CAAC,YAAD,CAAN,GAAuB,EAAvB;AACH,aAFD,MAEO;AACH,oBAAM,CAAC,YAAD,CAAN,GAAuB,IAAvB;AACH;AACJ;AACJ;AACJ,OAtBD;AAuBH;;;WAEO,wBAAsB,MAAtB,EAA4B;AAChC,UAAI,gBAAgB,GAAG,KAAK,mBAAL,EAAvB;AACA,UAAI,OAAO,GAAG,gBAAgB,CAAC,SAAD,CAA9B;AAEA,YAAM,CAAC,IAAP,CAAY,OAAZ,EAAqB,OAArB,CAA6B,oBAAU,EAAG;AACtC,YAAI,OAAO,CAAC,UAAD,CAAP,CAAoB,UAAxB,EAAoC;AAChC,gBAAM,CAAC,UAAD,CAAN,GAAqB,mBAAU,UAAV,CAAqB,MAAM,CAAC,UAAD,CAA3B,CAArB;AACH;;AACD,YAAI,OAAO,CAAC,UAAD,CAAP,CAAoB,QAAxB,EAAkC;AAC9B,gBAAM,CAAC,UAAD,CAAN,GAAqB,mBAAU,QAAV,CAAmB,MAAM,CAAC,UAAD,CAAzB,CAArB;AACH;AACJ,OAPD;AASH;;;WAEM,qBAAmB,QAAnB,EAA2B;AAC9B,aAAO,QAAP;AACH;;;;EAtJkC,kC;;AAAvC;AAGW,kCAAgB,IAAhB;AAsJX,iBAAiB,CAAC,aAAlB,GAAkC,IAAlC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5JA;;AACA;AAGA;;AAEG;;;IACU,gB;;;;;AAMT;;;;;AAKG;AACH,4BAAY,IAAZ,EAAkB,IAAlB,EAAsB;AAAA;;AAAA;;AAClB,8BAAM,IAAN;AACA,UAAK,KAAL,GAAa,IAAb;AACA,UAAK,UAAL,GAAkB,IAAlB;AAEA,UAAK,OAAL,GAAe,IAAf;AALkB;AAOrB;AAED;;;;AAIG;;;;;WACH,mBAAO;AACH,UAAI,KAAK,KAAL,YAAsB,gBAA1B,EAA4C;AACxC,eAAO,KAAK,KAAL,CAAW,OAAX,EAAP;AACH;;AACD,aAAO,KAAK,KAAZ;AACH;;;WAEK,mBAAU,IAAV,EAAgB,IAAhB,EAAoB;;;;;;iDACf,KAAK,KAAL,CAAW,SAAX,CAAqB,IAArB,EAA2B,IAA3B,C;;;;;;;;;AACV;AAED;;;;AAIG;;;;WACH,oBAAQ;AACJ,aAAO,KAAK,OAAZ;AACH;;;WAED,sBAAa,KAAb,EAAkB;AACd,WAAK,UAAL,GAAkB,KAAlB;AACH;;;WAED,wBAAY;AACR,aAAO,KAAK,UAAZ;AACH;;;WAED,mBAAU,MAAV,EAAgB;AACZ,WAAK,OAAL,GAAe,MAAf;;AACA,UAAI,gBAAO,SAAP,CAAiB,KAAK,KAAtB,CAAJ,EAAkC;AAC9B,YAAI,MAAJ,EAAY;AACR,eAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,QAA5B;AACH,SAFD,MAEO;AACH,eAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,QAAzB;AACH;AACJ;AACJ;;;;EA/DiC,iB;;AAAtC,4C;;;;;;;;;;;;;;;;;;;;ACPA;AAEA;;AAEG;;;IACU,U;AA8BT;;;;;;;;;AASG;AACH,sBAAY,IAAZ,EAAmB,MAAnB,EAA4B,OAA5B,EAAsC,KAAtC,EAA8C,IAA9C,EAAmD;AAAA;;AA/BnD,oBAAW,EAAX;AAEA,4BAAmB,IAAnB;AACA,oBAAW,IAAX;AACA,sBAAa,IAAb;AACA,mBAAU,EAAV;AAEA,iBAAQ,IAAR;AAyBI,SAAK,KAAL,GAAa,IAAb;AACA,SAAK,OAAL,GAAe,MAAf;AACA,SAAK,QAAL,GAAgB,gBAAO,OAAP,CAAe,OAAf,EAAwB,UAAU,CAAC,eAAnC,CAAhB;AACA,SAAK,MAAL,GAAc,gBAAO,OAAP,CAAe,KAAf,EAAsB,IAAtB,CAAd;AACA,SAAK,KAAL,GAAa,IAAb;AAEA,SAAK,GAAL,GAAW,UAAU,CAAC,MAAX,EAAX;AACA,SAAK,QAAL,GAAgB,EAAhB;AAEA,SAAK,gBAAL,GAAwB,IAAxB;AACA,SAAK,QAAL,GAAgB,IAAhB;AACA,SAAK,UAAL,GAAkB,IAAlB;AAEA,SAAK,KAAL,GAAa,IAAb;AACA,SAAK,OAAL,GAAe,EAAf;AACH;AAED;;;;;AAKG;;;;;WACH,cAAK,MAAL,EAAW;AACP,UAAI,YAAY,GAAG,gBAAO,OAAP,CAAe,MAAf,EAAuB,IAAI,UAAJ,EAAvB,CAAnB;AAEA,kBAAY,CAAC,KAAb,GAAqB,KAAK,KAA1B;AACA,kBAAY,CAAC,OAAb,GAAuB,KAAK,OAA5B;AACA,kBAAY,CAAC,QAAb,GAAwB,KAAK,QAA7B;AACA,kBAAY,CAAC,MAAb,GAAsB,KAAK,MAA3B;AACA,kBAAY,CAAC,QAAb,GAAwB,KAAK,QAA7B;AACA,kBAAY,CAAC,gBAAb,GAAgC,KAAK,gBAArC;AACA,kBAAY,CAAC,QAAb,GAAwB,KAAK,QAA7B;AACA,kBAAY,CAAC,UAAb,GAA0B,KAAK,UAA/B;AACA,kBAAY,CAAC,KAAb,GAAqB,KAAK,KAA1B;AAEA,kBAAY,CAAC,GAAb,GAAmB,UAAU,CAAC,MAAX,EAAnB;;AAEA,WAAK,OAAL,CAAa,IAAb,CAAkB,YAAlB;;AACA,aAAO,YAAP,CAhBO,CAiBP;AACH,K,CAED;AACA;AACA;AACA;AACA;;AAEA;;AAEG;;;;WACH,kBAAM;AACF,UAAI,gBAAO,SAAP,CAAiB,KAAK,KAAtB,CAAJ,EAAkC;AAC9B,aAAK,KAAL,CAAW,YAAX,CAAwB,IAAxB;AACH;;AACD,WAAK,OAAL,CAAa,OAAb,CAAqB,cAAI;AAAA,eAAI,IAAI,CAAC,MAAL,EAAJ;AAAA,OAAzB;AACH;AAED;;AAEG;;;;WACH,kBAAM;AACF,WAAK,KAAL,CAAW,YAAX,CAAwB,IAAxB;;AACA,WAAK,OAAL,CAAa,OAAb,CAAqB,cAAI;AAAA,eAAI,IAAI,CAAC,MAAL,EAAJ;AAAA,OAAzB;AACH;AAED;;;;;AAKG;;;;WACH,oBAAQ;AACJ,aAAO,KAAK,MAAZ;AACH;AAED;;;;AAIG;;;;WACH,uBAAW;AACP,aAAO,KAAK,UAAZ;AACH;AAED;;;;AAIG;;;;WACH,6BAAiB;AACb,aAAO,KAAK,gBAAZ;AACH;;;WAED,4BAAmB,eAAnB,EAAkC;AAC9B,WAAK,gBAAL,GAAyB,eAAe,KAAK,IAA7C;AACA,WAAK,MAAL;AACH;;;WAED,uBAAc,UAAd,EAAwB;AACpB,WAAK,QAAL,GAAgB,UAAhB;AACA,WAAK,MAAL;;AACA,WAAK,OAAL,CAAa,OAAb,CAAqB,cAAI;AAAA,eAAI,IAAI,CAAC,aAAL,CAAmB,UAAnB,CAAJ;AAAA,OAAzB;AACH;AAED;;;;AAIG;;;;WACH,qBAAS;AACL,aAAO,KAAK,QAAZ;AACH;AAED;;;;AAIG;;;;WACH,mBAAO;AACH,aAAO,KAAK,KAAZ;AACH;;;WAED,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;AACA,WAAK,MAAL;AACH;AAED;;;AAGG;;;;WACH,qBAAS;AACL,aAAO,KAAK,OAAZ;AACH;AAED;;;AAGG;;;;WACH,iBAAK;AACD,aAAO,KAAK,GAAZ;AACH;AAED;;;AAGG;;;;WACH,mBAAO;AACH,aAAO,KAAK,KAAZ;AACH;;;WAED,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;AACA,WAAK,MAAL;AACH;AAED;;;AAGG;;;;WACH,sBAAU;AACN,aAAO,KAAK,QAAZ;AACH;AAED;;;AAGG;;;;WACH,sBAAU;AACN,aAAO,KAAK,QAAZ;AACH;;;WAED,oBAAW,QAAX,EAAmB;AACf,WAAK,QAAL,GAAgB,QAAhB;;AACA,WAAK,OAAL,CAAa,OAAb,CAAqB,WAAC;AAAA,eAAI,CAAC,CAAC,UAAF,CAAa,QAAb,CAAJ;AAAA,OAAtB;;AACA,WAAK,MAAL;AACH;AAED;;;;AAIG;;;;WACH,mBAAO;AACH,aAAO,KAAK,KAAZ;AACH;AAED;;;;AAIG;;;;WACH,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;AACH;;;;;;AA7OL;AAkBI;;;AAGG;;AACY,oBAAiB,CAAjB;AA0NnB;;;;;AAKG;;AACH,UAAU,CAAC,WAAX,GAAyB,QAAzB;AACA;;;;;AAKG;;AACH,UAAU,CAAC,gBAAX,GAA8B,SAA9B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,eAAX,GAA6B,QAA7B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,cAAX,GAA4B,OAA5B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,UAAX,GAAwB,OAAxB,C;;;;;;ACvRA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,GAAU;;AAEnC,OAAO,WAAW;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;AC5QA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,cAAc,mBAAO,CAAC,EAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,EAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;;AACA;;AACA;;IAEa,M;AAcT,kBAAY,OAAZ,EAAqB,KAArB,EAA0B;AAAA;;AAAA;;AACtB,SAAK,SAAL,GAAiB,IAAjB;AACA,SAAK,QAAL,GAAgB,IAAhB;AACA,SAAK,kBAAL,GAA0B,IAA1B;AACA,SAAK,WAAL,GAAmB,IAAnB;AACA,SAAK,MAAL,GAAc,gBAAO,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAd;AACA,SAAK,aAAL,GAAqB,IAArB;AACA,SAAK,kBAAL,GAA0B,EAA1B;AACA,SAAK,QAAL,GAAgB,EAAhB;AACA,SAAK,OAAL,GAAe,IAAf;AACA,SAAK,eAAL,GAAuB,IAAvB;AACA,SAAK,mBAAL,GAA2B,IAAI,OAAJ,CAAY,WAAC,EAAG;AACvC,WAAI,CAAC,2BAAL,GAAmC,CAAnC;AACH,KAF0B,CAA3B;;AAIA,QAAI,gBAAO,SAAP,CAAiB,OAAjB,CAAJ,EAA+B;AAC3B,WAAK,UAAL,CAAgB,OAAhB;AACH;AACJ;;;;WAED,kBAAS,KAAT,EAAc;AACV,WAAK,MAAL,GAAc,KAAd;AACA,aAAO,IAAP;AACH;;;WAED,yBAAgB,YAAhB,EAA4B;AACxB,WAAK,aAAL,GAAqB,YAArB;AACH;;;WAED,8BAAqB,OAArB,EAA4B;AACxB,WAAK,kBAAL,GAA0B,OAA1B;AACH;;;WAED,oBAAQ;AACJ,aAAO,KAAK,MAAZ;AACH;;;WAED,uBAAc,UAAd,EAAwB;AACpB,WAAK,WAAL,GAAoB,UAAU,KAAK,IAAnC;AACA,aAAO,IAAP;AACH;;;WAEK,oBAAW,OAAX,EAAkB;;;;;;AACpB,oBAAI,OAAO,OAAP,KAAmB,QAAnB,IAA+B,OAAO,CAAC,QAAR,CAAiB,OAAjB,CAAnC,EAA8D;AAC1D,yBAAO,GAAG,4BAAa,WAAb,GAA2B,IAA3B,CAAgC,OAAhC,CAAV;AACH;;AACD,qBAAK,eAAL,GAAuB,OAAO,CAAC,OAAR,CAAgB,OAAhB,CAAvB;;AACgB,uBAAM,KAAK,eAAX;;;AAAhB,qBAAK,Q;iDACE,I;;;;;;;;;AACV;;;WAED,mBAAU,aAAV,EAAyB,gBAAzB,EAA2C,WAA3C,EAAuD;AACnD,iBAAW,GAAG,gBAAO,OAAP,CAAe,WAAf,EAA4B,IAA5B,CAAd;AAEA,UAAI,MAAM,GAAG,IAAb;;AACA,UAAI,OAAO,aAAP,KAAyB,QAA7B,EAAuC;AACnC,cAAM,GAAG,QAAQ,CAAC,aAAT,CAAuB,QAAvB,CAAT;AACA,cAAM,CAAC,SAAP,CAAiB,GAAjB,CAAqB,QAArB;AACA,cAAM,CAAC,SAAP,CAAiB,GAAjB,CAAqB,OAArB;AACA,cAAM,CAAC,WAAP,CAAmB,wBAAW,yBAAX,CAAqC,aAArC,CAAnB;AACH,OALD,MAKO;AACH,cAAM,GAAG,aAAT;AACH;;AAED,UAAI,IAAI,GAAG,IAAX;;AACA,UAAI,OAAO,gBAAP,KAA4B,UAAhC,EAA4C;AACxC,YAAI,MAAM,GAAG,gBAAb;;AACA,wBAAgB,GAAG;AACf,cAAI,CAAC,OAAL,GAAe,MAAf;AACH,SAFD;AAGH;;AAED,UAAI,QAAQ,GAAG,IAAf;;AACA,UAAI,WAAJ,EAAiB;AACb,gBAAQ,GAAG,kBAAU,CAAV,EAAW;AAClB,cAAI,gBAAO,SAAP,CAAiB,gBAAjB,CAAJ,EAAwC;AACpC,4BAAgB,CAAC,CAAD,CAAhB;AACH;;AACD,cAAI,CAAC,KAAL;AACH,SALD;AAMH,OAPD,MAOO;AACH,gBAAQ,GAAG,gBAAX;AACH;;AAED,UAAI,gBAAO,SAAP,CAAiB,QAAjB,CAAJ,EAAgC;AAC5B,cAAM,CAAC,gBAAP,CAAwB,OAAxB,EAAiC,QAAjC;AACH;;AACD,WAAK,QAAL,CAAc,IAAd,CAAmB,MAAnB;AACH;;;WAEK,gBAAI;;;;;;;;;AACN,uBAAM,KAAK,eAAX;;;AAEA,qBAAK,kBAAL,GAA0B,KAAK,wBAAL,EAA1B;;AACA,qBAAK,kBAAL,CAAwB,gBAAxB,CAAyC,OAAzC,EAAkD,WAAC,EAAG;AAClD,sBAAI,CAAC,CAAC,GAAF,KAAU,QAAV,IAAsB,MAAI,CAAC,WAA/B,EAA2C;AACvC,0BAAI,CAAC,KAAL;AACH;AACJ,iBAJD;;AAKA,wBAAQ,CAAC,IAAT,CAAc,WAAd,CAA0B,KAAK,kBAA/B;;AACA,uBAAmB,wBAAW,WAAX,GAA0B,kBAA1B,EAAnB;;;AAEA,qBAAK,2BAAL;;kDAEO,IAAI,OAAJ,CAAY,UAAC,OAAD,EAAY;AAC3B,wBAAI,CAAC,SAAL,GAAiB,OAAjB;AACH,iBAFM,C;;;;;;;;;AAGV;;;WAED,oCAAwB;AAAA;;AACpB,UAAI,YAAY,GAAG,QAAQ,CAAC,aAAT,CAAuB,MAAvB,CAAnB;AACA,kBAAY,CAAC,SAAb,CAAuB,GAAvB,CAA2B,OAA3B;;AACA,UAAI,KAAK,aAAL,IAAsB,KAAK,MAAL,KAAgB,EAA1C,EAA8C;AAC1C,oBAAY,CAAC,WAAb,CAAyB,wBAAW,yBAAX,CAAqC,KAAK,MAA1C,CAAzB;AACH,OAFD,MAEO;AACH,oBAAY,CAAC,SAAb,GAAyB,KAAK,MAA9B;AACH;;AAED,UAAI,QAAQ,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAf;AACA,cAAQ,CAAC,WAAT,CAAqB,YAArB;AAEA,UAAI,gBAAgB,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAvB;AACA,sBAAgB,CAAC,SAAjB,CAA2B,GAA3B,CAA+B,mBAA/B;AAEA,UAAI,WAAW,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAlB;AACA,iBAAW,CAAC,SAAZ,GAAwB,KAAK,kBAA7B;AACA,iBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,OAA1B;AACA,iBAAW,CAAC,WAAZ,CAAwB,QAAxB;AACA,iBAAW,CAAC,WAAZ,CAAwB,gBAAxB;AAEA,UAAI,SAAS,GAAG,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAAhB;AACA,eAAS,CAAC,SAAV,CAAoB,GAApB,CAAwB,wBAAxB;;AAEA,WAAK,IAAI,CAAC,GAAG,CAAR,EAAW,CAAC,GAAG,KAAK,QAAL,CAAc,MAAlC,EAA0C,CAAC,GAAG,CAA9C,EAAiD,CAAC,EAAlD,EAAsD;AAClD,iBAAS,CAAC,WAAV,CAAsB,KAAK,QAAL,CAAc,CAAd,CAAtB;AACH;;AAED,UAAI,EAAE,KAAK,QAAL,YAAyB,IAA3B,CAAJ,EAAsC;AAClC,aAAK,QAAL,GAAiB,KAAK,aAAN,GAAuB,wBAAW,yBAAX,CAAqC,KAAK,QAA1C,CAAvB,GAA6E,QAAQ,CAAC,cAAT,CAAwB,KAAK,QAA7B,CAA7F;AACH;;AACD,sBAAgB,CAAC,WAAjB,CAA6B,KAAK,QAAlC;AAGA,WAAK,kBAAL,GAA0B,QAAQ,CAAC,aAAT,CAAuB,KAAvB,CAA1B;;AACA,WAAK,kBAAL,CAAwB,SAAxB,CAAkC,GAAlC,CAAsC,YAAtC;;AACA,WAAK,kBAAL,CAAwB,KAAxB,CAA8B,OAA9B,GAAwC,OAAxC;;AAEA,WAAK,kBAAL,CAAwB,WAAxB,CAAoC,WAApC;;AACA,WAAK,kBAAL,CAAwB,aAAxB,CAAsC,QAAtC,EAAgD,WAAhD,CAA4D,SAA5D;;AAEA,UAAI,KAAK,WAAT,EAAsB;AAClB,YAAI,WAAW,GAAG,QAAQ,CAAC,aAAT,CAAuB,MAAvB,CAAlB;AACA,mBAAW,CAAC,SAAZ,CAAsB,GAAtB,CAA0B,OAA1B;AACA,mBAAW,CAAC,SAAZ,GAAwB,SAAxB;AAEA,gBAAQ,CAAC,WAAT,CAAqB,WAArB;AACA,mBAAW,CAAC,gBAAZ,CAA6B,OAA7B,EAAsC,YAAK;AACvC,gBAAI,CAAC,KAAL;AACH,SAFD;AAGA,cAAM,CAAC,gBAAP,CAAwB,OAAxB,EAAiC,UAAC,CAAD,EAAM;AACnC,cAAI,CAAC,CAAC,MAAF,KAAa,MAAI,CAAC,kBAAtB,EAA0C;AACtC,kBAAI,CAAC,KAAL;AACH;AACJ,SAJD;AAKH;;AACD,aAAO,KAAK,kBAAZ;AACH;;;WAEK,6BAAiB;;;;;;kDACZ,KAAK,mB;;;;;;;;;AACf;;;WAED,iBAAK;AAAA;;AACD,WAAK,iBAAL,GAAyB,IAAzB,CAA8B,YAAK;AAC/B,YAAI,gBAAO,SAAP,CAAiB,MAAI,CAAC,kBAAtB,CAAJ,EAA+C;AAC3C,gBAAI,CAAC,kBAAL,CAAwB,KAAxB,CAA8B,OAA9B,GAAwC,MAAxC;;AACA,gBAAI,CAAC,kBAAL,CAAwB,MAAxB;;AACA,gBAAI,CAAC,kBAAL,GAA0B,IAA1B;AACH;AACJ,OAND;;AAOA,UAAI,gBAAO,SAAP,CAAiB,KAAK,SAAtB,CAAJ,EAAsC;AAClC,aAAK,SAAL,CAAe,KAAK,OAApB;AACH;AACJ;;;;;;AArML,wB;;;;;;;ACJA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;;;;;;;ACJA;;;;;;;ACAA;AACA,YAAY,mBAAO,CAAC,GAAyB;AAC7C,kBAAkB,mBAAO,CAAC,GAAkB;;AAE5C;AACA;AACA;;;;;;;ACNA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,GAAe;AACjC,kBAAkB,mBAAO,CAAC,GAAkB;AAC5C,eAAe,mBAAO,CAAC,GAAe;AACtC,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,GAAe;AACtC;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAO,CAAC,GAAS;AACnB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACxCA;AACA,YAAY,mBAAO,CAAC,GAAyB;AAC7C,iBAAiB,mBAAO,CAAC,GAAkB;;AAE3C;AACA;AACA;;;;;;;ACNA;AACA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,GAAe;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACZA;AACA,kBAAkB,mBAAO,CAAC,EAAQ;AAClC;AACA,0CAA0C,mBAAO,CAAC,EAAS,6BAA6B;AACxF;AACA;AACA;;;;;;;ACNA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,GAAW;AAChC,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;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tEqB,0B;;AAA1B;AAyEA,sCAAa,QAAb,CAAsB,IAAtB,E;;;;;;;AC7EA;AAAA;AAAA;AAAkC;AACM;AACxC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,mDAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACvCA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;ACjBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACpBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBsE;AACf;AACvD,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B,oFAAoF,QAAQ,sCAAS;AACrG;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,kCAAW;AAC5I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,oIAAoI,kCAAW;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kCAAW;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE,4BAA4B,8BAA8B,EAAE;AAChI;AACA;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,kCAAW;AAC5F;AACA,qCAAqC,IAAI;AACzC,iCAAiC;AACjC;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM;AAClG;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrN4D;AAC5D,IAAI,iFAAwC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAmB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmD;;AAEpD;;;ACrD+C;AAC/C,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,0FAA0F,QAAQ,sCAAS;AAC3G;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA,0JAA0J,8CAA8C,EAAE;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC8B;;AAE/B;;;ACnHkE;AAClE,IAAI,uFAA2C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAsB;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsD;;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;ACrDiF;AAC7B;AAC8C;AAC5B;AACqC;AACd;AACI;AACN;AAC3C;AACwB;AACS;AACf;AACgD;AACvC;AACgD;AAC7E;AACmD;AACvC;AACS;AACN;AACyB;AACa;AAC/B;AAClB;AACE;AACgC;AACZ;AACL;AACnE;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU,uBAAuB,EAAE,EAAE;AACpJ;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,6CAA6C,sDAAsD;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wDAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAiC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,gCAAgC,sCAAa;AAC7C;AACA;AACA;AACA,0DAA0D;AAC1D,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0CAAa,KAAK,mCAAM;AACtE,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E,4DAA4D,0CAAa,KAAK,mCAAM;AACpF;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI;AACA,qCAAqC,kDAAkD;AACvF,6FAA6F,6CAA6C,EAAE;AAC5I;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC,+CAA+C,EAAE;AACxF,wCAAwC,yBAAyB,uFAAuF,EAAE,EAAE;AAC5J;AACA;AACA,6BAA6B,iBAAiB;AAC9C;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAqE,EAAE;AAC7G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0DAA0D,6FAA6F,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qDAAc;AAC5C,0EAA0E,uCAAuC,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kDAAW,sCAAsC,0DAAmB,sCAAsC,gDAAS;AACtK;AACA;AACA;AACA;AACA;AACA,0BAA0B,kFAAmC;AAC7D;AACA,mDAAmD,oDAAoB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mDAAY;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB;AAC1F;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,mDAAY;AACvD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB,sBAAsB,mDAAY;AAC5H;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,uCAAuC,EAAE;AACvH;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM,4CAA4C,iCAAiC,EAAE;AAC/I;AACA,oCAAoC,0CAAa,KAAK,mCAAM;AAC5D,uEAAuE,mEAAmE,EAAE;AAC5I,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kIAAkI,8CAA8C,EAAE;AAClL,yBAAyB,0CAAa,CAAC,0CAAa,KAAK,mCAAM,YAAY,mCAAM;AACjF;AACA,gFAAgF,mEAAmE,EAAE;AACrJ;AACA;AACA,uDAAuD,kDAAW,uCAAuC,0DAAmB;AAC5H;AACA;AACA;AACA;AACA,uDAAuD,qDAAc;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,sDAAe;AACtE;AACA;AACA;AACA;AACA,oFAAoF,kCAAW;AAC/F;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,4EAA4E,uCAAuC,EAAE;AACrH;AACA;AACA;AACA,4DAA4D,mEAAmE,EAAE;AACjI,SAAS;AACT;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe,sCAAsC,qDAAc;AACjH;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,kDAAW;AACzD;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA,iFAAiF,uEAAuE,EAAE,aAAa;AACvK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE,eAAe;AACzH;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,0FAAuC;AAC7E;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA,+CAA+C,iCAAgB;AAC/D,kDAAkD,uCAAmB;AACrE,4DAA4D,iFAAwC;AACpG;AACA,+DAA+D,uFAA2C;AAC1G;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA,2DAA2D,kCAAW;AACtE;AACA;AACA,wCAAwC,kCAAW;AACnD;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA,sCAAsC,kCAAW;AACjD,oEAAoE,wBAAwB,EAAE;AAC9F,qEAAqE,+BAA+B,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,4CAA4C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA;AACA,8CAA8C,8CAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,kCAAW;AACjF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,kCAAW;AACxF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,kCAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oCAAY;AACgB;;AAE9B;;;;;;;;ACtoDA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,uCAAuC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,0CAA0C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAA+C;AACH;AACiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sGAAsG,QAAQ,+DAAS;AACvH;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA;AACA,8FAA8F,gFAAY;AAC1G;AACA;AACA;AACA,iDAAiD,IAAI;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,wDAAwD,EAAE;AACrK,yHAAyH,wDAAwD,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,+EAA+E,gFAAY;AAC3F;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAAQ;AAChD;AACA,iCAAiC;AACjC;AACA,mGAAmG;AACnG;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uFAAuF,wDAAwD,EAAE;AACjJ,mFAAmF,wDAAwD,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;;;ACvLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;ACrBa;AACb;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZa;;AAEb,cAAc,mBAAO,CAAC,GAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBa;AACb,mBAAO,CAAC,GAAmB;AAC3B,eAAe,mBAAO,CAAC,EAAa;AACpC,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,EAAU;AAC9B,cAAc,mBAAO,CAAC,EAAY;AAClC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;;AAEzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,aAAa;AAC3D;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;AC/FA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAc;AACjC,kBAAkB,mBAAO,CAAC,G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A,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4EAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACwB;;AAEzB;;;;;;;;;;;;;;;;;;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;ACZgF;AACxC;AACY;AACpD,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,sEAAsE,+BAA+B,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,yEAAyE,iCAAiC,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wEAAwE,wCAAwC,EAAE;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,iDAAiD,sBAAK;AACtD;AACA,mDAAmD,sBAAK;AACxD;AAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,EAAQ;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnFa;AACb,aAAa,mBAAO,CAAC,EAAW;AAChC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAY;AAClC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,EAAS;AAC5B,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,YAAY,mBAAO,CAAC,EAAU;AAC9B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,GAAa;AACnC,WAAW,mBAAO,CAAC,EAAgB;AACnC,SAAS,mBAAO,CAAC,EAAc;AAC/B,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,QAAQ,UAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB,uBAAuB,EAAE,EAAE;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB,GAAG;AACH,uBAAuB;AACvB,0BAA0B;AAC1B,0BAA0B;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;ACLzC;AACA;AACA;;;;;;;ACFA;AACA,kBAAkB,mBAAO,CAAC,GAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;ACHY;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACjKA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACT;AACA;AACL;AAC8C;AACtB;AACG;AACM;AAC5B;AACU;AACP;AACA;AACuB;AACpF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,yEAAY;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA,4FAA4F,wFAAY;AACxG;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,iCAAiC,EAAE;AACnJ;AACA;AACA;AACA,2FAA2F,+CAA+C,EAAE;AAC5I;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH,mGAAmG,6CAA6C,EAAE;AAClJ;AACA,uDAAuD,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AACpL,mGAAmG,qEAAqE,EAAE;AAC1K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D,qEAAqE,wFAAY,8EAA8E;AAC/J;AACA;AACA,8CAA8C,uFAAW,sCAAsC,+FAAmB;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,uFAAW,sCAAsC,+FAAmB;AAC5I;AACA;AACA;AACA,qEAAqE,2FAAe;AACpF;AACA;AACA;AACA;AACA,kDAAkD,wFAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB,GAAG;AACzH;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAW,sCAAsC,+FAAmB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA;AACA;AACA,8CAA8C,2FAAe;AAC7D;AACA;AACA,2CAA2C,+IAA+I,EAAE;AAC5L,yCAAyC,wDAAwD,EAAE;AACnG,8DAA8D,eAAe;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,wFAAY;AACpE,wDAAwD,yGAAoB;AAC5E,wDAAwD,uFAAW;AACnE,wDAAwD,+FAAmB;AAC3E,wDAAwD,2FAAe;AACvE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAA0C,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,2EAA2E,iCAAiC,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wFAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,YAAY,QAAQ,EAAE,0BAA0B;AACpG;AACA,+GAA+G;AAC/G;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,gCAAgC,6EAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wFAAY,gEAAgE,yGAAoB,uCAAuC,qFAAS,GAAG;AACnN,0FAA0F;AAC1F;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yGAAoB,uCAAuC,qFAAS;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gGAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC5kBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACP;AACP;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AAC5B;AACgB;AACR;AACe;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA,8DAA8D,0FAAc;AAC5E;AACA;AACA;AACA,mEAAmE,uFAAW;AAC9E;AACA;AACA;AACA,mEAAmE,+FAAmB;AACtF;AACA;AACA;AACA,mEAAmE,+FAAmB,GAAG;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW;AAC3E,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA,YAAY,+EAAc;AAC1B;AACA;AACA;AACA,8BAA8B,yFAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,gEAAgE,qFAAS;AACzE;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA,gCAAgC;AAChC;AACA;AACA,+DAA+D,uFAAW;AAC1E,+DAA+D,+FAAmB;AAClF,+DAA+D,wFAAY;AAC3E,+DAA+D,yGAAoB;AACnF,+DAA+D,qFAAS;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,yHAAyH;AACzH;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,4DAA4D,qFAAS;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uFAAW;AACtE,2DAA2D,+FAAmB;AAC9E,2DAA2D,wFAAY;AACvE,2DAA2D,yGAAoB;AAC/E,2DAA2D,qFAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH;AACA;AACA;AACA,0BAA0B,6GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iGAAwB;AAC1C;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC1gBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACX;AACf;AACwB;AACH;AACd;AAC8C;AACzC;AACA;AACU;AAC5B;AAC4C;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,6BAA6B,4DAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD;AACA;AACA;AACA,mDAAmD,+FAAmB;AACtE;AACA;AACA;AACA,mDAAmD,2FAAe,sBAAsB,0FAAc,sBAAsB,2FAAe;AAC3I;AACA;AACA;AACA;AACA,mDAAmD,wFAAY;AAC/D;AACA;AACA,mDAAmD,+FAAmB,GAAG;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mDAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,2FAAe;AACzI;AACA;AACA,iFAAiF,2FAAe;AAChG;AACA;A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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA,6EAA6E,mDAAY,mDAAmD,gDAAS;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACpJsE;AACtE;AACA;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACvG0D;AACZ;AACM;AACA;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,yCAAoB;AACxB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B,+EAA+E,mBAAmB,EAAE;AACpG,aAAa;AACb,SAAS;AACT;AACA;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C,GAAS;AAC5B,gBAAgB,mBAAO,CAAC,GAAc;AACtC,iCAAiC,mBAAO,CAAC,GAA2B;AACpE,cAAc,mBAAO,CAAC,GAAY;AAClC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C,EAAE,mBAAO,CAAC,EAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,kCAAkC;AACrD,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,yBAAyB,KAAK;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB;AACA,uBAAuB,mBAAO,CAAC,GAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,oBAAoB;AAC9E,mBAAO,CAAC,GAAsB;AAC9B,mBAAO,CAAC,GAAgB;AACxB,UAAU,mBAAO,CAAC,EAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gDAAgD,mBAAO,CAAC,GAAgB;AACxE;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;;AC7RY;AACb;AACA,gBAAgB,mBAAO,CAAC,EAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACjBA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,2BAA2B,mBAAO,CAAC,GAA2B;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACXa;AACb,SAAS,mBAAO,CAAC,EAAc;AAC/B,aAAa,mBAAO,CAAC,EAAkB;AACvC,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,kBAAkB,mBAAO,CAAC,GAAgB;AAC1C,WAAW,mBAAO,CAAC,GAAc;AACjC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,wBAAwB,mBAAO,CAAC,EAAkB;AAClD,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACpFA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,WAAW,mBAAO,CAAC,EAAgB;AACnC,WAAW,mBAAO,CAAC,GAAgB;AACnC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,EAAW;AACjC;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,aAAa,mBAAO,CAAC,GAAkB;AACvC,cAAc,mBAAO,CAAC,EAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAgB;AACtC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,aAAa,mBAAO,CAAC,GAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA,6BAA6B;AAC7B,uCAAuC;;;;;;;ACDvC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACNA;AAEA;;AAEG;;;IACU,U;AAiBT;;;AAGG;AA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,MAAD,CAAjC,GAA4C,KAAnD;AACH,OAFM,CAAP;AAGH;;;;;;AAnLL;AAsLA,UAAU,CAAC,aAAX,GAA2B,EAA3B;AAEA,UAAU,CAAC,QAAX,GAAsB,IAAtB,C;;;;;;AC7LA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACtIA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACnQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AAC1B;AACwB;AACH;AACd;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AACJ;AACxB;AACgB;AAChB;AAC7D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,0FAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yGAA4B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH;AACrH;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW;AAC7D;AACA;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kEAAY;AACoB;;AAElC;;;;;;;;AC3Ya;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB,kBAAkB;AAC5D,SAAS;AACT;AACA;AACA;AACA,qC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AAEA;;AAEG;;;IACU,W;AAoBT;;AAEG;AACH;AAAA;;AACI,SAAK,OAAL,GAAe,KAAf;AACH;AAhBD;;;AAG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AAA;AAAA;AAAA;AAA0D;AACqB;AACX;AACU;AACc;AAC5F;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wFAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4GAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACQ;;AAE9B;;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAC4D;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2EAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8GAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gFAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,4GAAyB;AACQ;;AAEnC;;;;;;;;ACxEA;AAAA;AAAA;AAAA;AAA8C;AACC;AACQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,uBAAuB,EAAE;AAChH;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,+CAA+C,QAAQ,uEAAW,iEAAiE,EAAE;AAC/L;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,sDAAsD,QAAQ,uEAAW,iEAAiE,EAAE;AACtM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0EAA0E,eAAe,uEAAW,8FAA8F,EAAE;AACpM;AACA,2EAA2E,yDAAyD,EAAE;AACtI,aAAa;AACb;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,mCAAmC,EAAE,eAAe;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,wBAAwB,EAAE;AAC7I;AACA,sCAAsC,uEAAW;AACjD;AACA;AACA;AACA;AACA,qEAAqE,uGAAuG,EAAE;AAC9K;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,mCAAmC,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA,kBAAkB;AAClB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAQ;AAC5B;AACA;AACA;AACA,8EAA8E,mBAAmB,EAAE;AACnG;AACA;AACA,uGAAuG,mBAAmB,EAAE;AAC5H,uHAAuH;AACvH;AACA,sBAAsB;AACtB;AACA,yFAAyF,mBAAmB,EAAE;AAC9G;AACA;AACA,kGAAkG,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA,iBAAiB,IAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4BAA4B,6BAA6B,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,iFAAiF,EAAE;AAC1I;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA,wDAAwD,uEAAW,kEAAkE;AACrI;AACA;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,mBAAmB,EAAE;AAC7G;AACA;AACA,sFAAsF,mBAAmB,EAAE;AAC3G;AACA;AACA;AACA,0EAA0E,mBAAmB,EAAE;AAC/F;AACA;AACA,iGAAiG,mBAAmB,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA,mGAAmG,uEAAW;AAC9G;AACA;AACA,mGAAmG,uEAAW;AAC9G;AACA,aAAa;AACb;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,wFAAwF,mBAAmB,EAAE;AA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AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,sBAAsB,uBAAuB,WAAW,IAAI;AAC5D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,KAAK;AACL;AACA,sBAAsB,mCAAmC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,EAAE,mBAAO,CAAC,EAAgB;AAC1B,EAAE,mBAAO,CAAC,GAAe;AACzB;;AAEA,sBAAsB,mBAAO,CAAC,EAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAA0D,kBAAkB;;AAE5E;AACA;AACA;AACA,oBAAoB,uBAAuB;;AAE3C,oDAAoD,6BAA6B;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,eAAe,EAAE;AAC3C,0BAA0B,gBAAgB;AAC1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,8CAA8C,YAAY,EAAE;;AAE5D;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO,QAAQ,iCAAiC;AACpG,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AAC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yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,iBAAiB,mBAAO,CAAC,GAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACrHY;;AAEb,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,iBAAiB,mBAAO,CAAC,GAAyB;;AAElD;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AC9BY;;AAEb,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,yBAAyB,mBAAO,CAAC,GAAwB;AACzD,yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAyB;AACtD,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,EAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,yBAAyB,EAAE;;AAEhE;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACrID,aAAa,mBAAO,CAAC,EAAW;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC;AACA;AACA;AACA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uCAAuC,sBAAsB,EAAE;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;ACpEA;AACA;AACA,YAAY;AACZ,GAAG;AACH,YAAY;AACZ;AACA;;;;;;;;ACNa;AACb,aAAa,mBAAO,CAAC,GAAsB;AAC3C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AAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,KAA0B,oBAAoB,SAAE;AAClD;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3uBA,mBAAO,CAAC,GAAuB;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;;;;;;;ACD3C;AACA,cAAc,mBAAO,CAAC,GAAW;;AAEjC,oBAAoB,SAAS,mBAAO,CAAC,GAAW,GAAG;;;;;;;ACHnD,aAAa,mBAAO,CAAC,GAAW;AAChC,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;AC7DA;AACA,gBAAgB,mBAAO,CAAC,GAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA,SAAS,mBAAO,CAAC,GAAc;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;AAC3C,iBAAiB,mBAAO,CAAC,GAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA,eAAe,mBAAO,CAAC,GAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,GAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;ACfA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA,kBAAkB,mBAAO,CAAC,GAAgB,MAAM,mBAAO,CAAC,GAAU;AAClE,+BAA+B,mBAAO,CAAC,GAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;ACFD,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,GAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA,uBAAuB;AACvB;AACA;AACA;;;;;;;;ACHa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;;;;;ACrBa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,sC;;;;;;;AClFa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,EAAS;AACnC,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,mEAAmE;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2C;;;;;;ACnNA;AACA;AACA,+DAA+D;AAC/D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mDAAmD;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,6BAA6B,gBAAgB,kBAAkB;AAC/D;AACA;AACA;AACA;AACA,+BAA+B,4CAA4C;AAC3E;AACA,mCAAmC,wBAAwB,kBAAkB,EAAE;AAC/E,mCAAmC,yBAAyB,EAAE,EAAE;AAChE;AACA,uCAAuC,8BAA8B;AACrE,uCAAuC,mBAAmB,EAAE;AAC5D;AACA,uCAAuC,qDAAqD;AAC5F,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,aAAa;AAChF,qEAAqE,aAAa;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B,EAAE;AAClE;AACA;AACA,iBAAiB;AACjB,oDAAoD,+CAA+C;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0DAA0D;AAC5G,oDAAoD,4DAA4D;AAChH,qDAAqD,4DAA4D;AACjH,2DAA2D,uBAAuB;AAClF,6DAA6D,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uBAAuB,EAAE;AAC/D;AACA;AACA,iBAAiB;AACjB,sDAAsD,6BAA6B;AACnF,sDAAsD,0CAA0C;AAChG,yDAAyD,gCAAgC;AACzF,mDAAmD,mBAAmB;AACtE,kDAAkD,yBAAyB;AAC3E,oDAAoD,2BAA2B;AAC/E,qDAAqD,4BAA4B;AACjF,2DAA2D,oBAAoB;AAC/E,6DAA6D,oBAAoB;AACjF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B;AACtF;AACA;AACA;AACA;AACA,+BAA+B,UAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;;;;;;;;AC1mC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AC7FY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;ACpFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACpDA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACvDA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAO,CAAC,GAAI;AACpC;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,cAAc;AAC1B;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;ACpQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACjKa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;AClHa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+C;;;;;;;AC7Ba;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,kC;;;;;;;AChCa;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,GAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,mDAAmD;AAClF;AACA,SAAS;AACT;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,iEAAiE;AAChG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,iEAAiE;AACjG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;ACxEa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kCAAkC;AAClC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yC;;;;;;;ACtEa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAkB;AAC3C,qBAAqB,mBAAO,CAAC,EAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 288);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Dummy driver classes for replacement via `package.json` in browser builds.\n * Using those classes reduces the build size by one third.\n *\n * If we don't include those dummy classes (and just disable the driver import\n * with `false` in `package.json`) typeorm will throw an error on runtime and\n * during webpack builds even if those driver are not used.\n */\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoDriver = /** @class */ (function () {\n function MongoDriver() {\n }\n return MongoDriver;\n}());\nexport { MongoDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoQueryRunner = /** @class */ (function () {\n function MongoQueryRunner() {\n }\n return MongoQueryRunner;\n}());\nexport { MongoQueryRunner };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoEntityManager = /** @class */ (function () {\n function MongoEntityManager() {\n }\n return MongoEntityManager;\n}());\nexport { MongoEntityManager };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoRepository = /** @class */ (function () {\n function MongoRepository() {\n }\n return MongoRepository;\n}());\nexport { MongoRepository };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar PostgresDriver = /** @class */ (function () {\n function PostgresDriver() {\n }\n return PostgresDriver;\n}());\nexport { PostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiDriver = /** @class */ (function () {\n function AuroraDataApiDriver() {\n }\n return AuroraDataApiDriver;\n}());\nexport { AuroraDataApiDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar CockroachDriver = /** @class */ (function () {\n function CockroachDriver() {\n }\n return CockroachDriver;\n}());\nexport { CockroachDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiPostgresDriver = /** @class */ (function () {\n function AuroraDataApiPostgresDriver() {\n }\n return AuroraDataApiPostgresDriver;\n}());\nexport { AuroraDataApiPostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqlServerDriver = /** @class */ (function () {\n function SqlServerDriver() {\n }\n return SqlServerDriver;\n}());\nexport { SqlServerDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SapDriver = /** @class */ (function () {\n function SapDriver() {\n }\n return SapDriver;\n}());\nexport { SapDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MysqlDriver = /** @class */ (function () {\n function MysqlDriver() {\n }\n return MysqlDriver;\n}());\nexport { MysqlDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar OracleDriver = /** @class */ (function () {\n function OracleDriver() {\n }\n return OracleDriver;\n}());\nexport { OracleDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqliteDriver = /** @class */ (function () {\n function SqliteDriver() {\n }\n return SqliteDriver;\n}());\nexport { SqliteDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar BetterSqlite3Driver = /** @class */ (function () {\n function BetterSqlite3Driver() {\n }\n return BetterSqlite3Driver;\n}());\nexport { BetterSqlite3Driver };\n\n//# sourceMappingURL=BrowserDisabledDriversDummy.js.map\n","/**\n * This class stores query and its parameters\n */\nvar Query = /** @class */ (function () {\n function Query(query, parameters) {\n this.query = query;\n this.parameters = parameters;\n }\n return Query;\n}());\nexport { Query };\n\n//# sourceMappingURL=Query.js.map\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/js/Context/UserSite\"), exports);\n__exportStar(require(\"./client/js/Dialog/SelectUserDialog\"), exports);\n__exportStar(require(\"./client/js/MenuAction/StartUserSiteMenuAction\"), exports);\n__exportStar(require(\"./client/js/MenuAction/UserMenuAction\"), exports);\n__exportStar(require(\"./client/js/OfflineUserManager\"), exports);\n__exportStar(require(\"./client/js/Site/ChangeUserSite\"), exports);\n__exportStar(require(\"./client/js/Site/ForgotPasswordSite\"), exports);\n__exportStar(require(\"./client/js/Site/LoginSite\"), exports);\n__exportStar(require(\"./client/js/Site/NotAllowedSite\"), exports);\n__exportStar(require(\"./client/js/Site/RegistrationSite\"), exports);\n__exportStar(require(\"./client/js/UserManager\"), exports);\n__exportStar(require(\"./client/js/translationInit\"), exports);\n//# sourceMappingURL=client.js.map","import { TableColumn } from \"./TableColumn\";\nimport { TableIndex } from \"./TableIndex\";\nimport { TableForeignKey } from \"./TableForeignKey\";\nimport { TableUtils } from \"../util/TableUtils\";\nimport { TableUnique } from \"./TableUnique\";\nimport { TableCheck } from \"./TableCheck\";\nimport { TableExclusion } from \"./TableExclusion\";\n/**\n * Table in the database represented in this class.\n */\nvar Table = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Table(options) {\n /**\n * Table columns.\n */\n this.columns = [];\n /**\n * Table indices.\n */\n this.indices = [];\n /**\n * Table foreign keys.\n */\n this.foreignKeys = [];\n /**\n * Table unique constraints.\n */\n this.uniques = [];\n /**\n * Table check constraints.\n */\n this.checks = [];\n /**\n * Table exclusion constraints.\n */\n this.exclusions = [];\n /**\n * Indicates if table was just created.\n * This is needed, for example to check if we need to skip primary keys creation\n * for new tables.\n */\n this.justCreated = false;\n if (options) {\n this.name = options.name;\n if (options.columns)\n this.columns = options.columns.map(function (column) { return new TableColumn(column); });\n if (options.indices)\n this.indices = options.indices.map(function (index) { return new TableIndex(index); });\n if (options.foreignKeys)\n this.foreignKeys = options.foreignKeys.map(function (foreignKey) { return new TableForeignKey(foreignKey); });\n if (options.uniques)\n this.uniques = options.uniques.map(function (unique) { return new TableUnique(unique); });\n if (options.checks)\n this.checks = options.checks.map(function (check) { return new TableCheck(check); });\n if (options.exclusions)\n this.exclusions = options.exclusions.map(function (exclusion) { return new TableExclusion(exclusion); });\n if (options.justCreated !== undefined)\n this.justCreated = options.justCreated;\n this.engine = options.engine;\n }\n }\n Object.defineProperty(Table.prototype, \"primaryColumns\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n get: function () {\n return this.columns.filter(function (column) { return column.isPrimary; });\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n Table.prototype.clone = function () {\n return new Table({\n name: this.name,\n columns: this.columns.map(function (column) { return column.clone(); }),\n indices: this.indices.map(function (constraint) { return constraint.clone(); }),\n foreignKeys: this.foreignKeys.map(function (constraint) { return constraint.clone(); }),\n uniques: this.uniques.map(function (constraint) { return constraint.clone(); }),\n checks: this.checks.map(function (constraint) { return constraint.clone(); }),\n exclusions: this.exclusions.map(function (constraint) { return constraint.clone(); }),\n justCreated: this.justCreated,\n engine: this.engine,\n });\n };\n /**\n * Add column and creates its constraints.\n */\n Table.prototype.addColumn = function (column) {\n this.columns.push(column);\n };\n /**\n * Remove column and its constraints.\n */\n Table.prototype.removeColumn = function (column) {\n var foundColumn = this.columns.find(function (c) { return c.name === column.name; });\n if (foundColumn)\n this.columns.splice(this.columns.indexOf(foundColumn), 1);\n };\n /**\n * Adds unique constraint.\n */\n Table.prototype.addUniqueConstraint = function (uniqueConstraint) {\n this.uniques.push(uniqueConstraint);\n if (uniqueConstraint.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === uniqueConstraint.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = true;\n }\n };\n /**\n * Removes unique constraint.\n */\n Table.prototype.removeUniqueConstraint = function (removedUnique) {\n var foundUnique = this.uniques.find(function (unique) { return unique.name === removedUnique.name; });\n if (foundUnique) {\n this.uniques.splice(this.uniques.indexOf(foundUnique), 1);\n if (foundUnique.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === foundUnique.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = false;\n }\n }\n };\n /**\n * Adds check constraint.\n */\n Table.prototype.addCheckConstraint = function (checkConstraint) {\n this.checks.push(checkConstraint);\n };\n /**\n * Removes check constraint.\n */\n Table.prototype.removeCheckConstraint = function (removedCheck) {\n var foundCheck = this.checks.find(function (check) { return check.name === removedCheck.name; });\n if (foundCheck) {\n this.checks.splice(this.checks.indexOf(foundCheck), 1);\n }\n };\n /**\n * Adds exclusion constraint.\n */\n Table.prototype.addExclusionConstraint = function (exclusionConstraint) {\n this.exclusions.push(exclusionConstraint);\n };\n /**\n * Removes exclusion constraint.\n */\n Table.prototype.removeExclusionConstraint = function (removedExclusion) {\n var foundExclusion = this.exclusions.find(function (exclusion) { return exclusion.name === removedExclusion.name; });\n if (foundExclusion) {\n this.exclusions.splice(this.exclusions.indexOf(foundExclusion), 1);\n }\n };\n /**\n * Adds foreign keys.\n */\n Table.prototype.addForeignKey = function (foreignKey) {\n this.foreignKeys.push(foreignKey);\n };\n /**\n * Removes foreign key.\n */\n Table.prototype.removeForeignKey = function (removedForeignKey) {\n var fk = this.foreignKeys.find(function (foreignKey) { return foreignKey.name === removedForeignKey.name; });\n if (fk)\n this.foreignKeys.splice(this.foreignKeys.indexOf(fk), 1);\n };\n /**\n * Adds index.\n */\n Table.prototype.addIndex = function (index, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n this.indices.push(index);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we mark this column as unique\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column)\n column.isUnique = true;\n }\n };\n /**\n * Removes index.\n */\n Table.prototype.removeIndex = function (tableIndex, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n var index = this.indices.find(function (index) { return index.name === tableIndex.name; });\n if (index) {\n this.indices.splice(this.indices.indexOf(index), 1);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we move `unique` attribute from its column\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column_1 = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column_1)\n column_1.isUnique = this.indices.some(function (ind) { return ind.columnNames.length === 1 && ind.columnNames[0] === column_1.name && !!index.isUnique; });\n }\n }\n };\n Table.prototype.findColumnByName = function (name) {\n return this.columns.find(function (column) { return column.name === name; });\n };\n /**\n * Returns all column indices.\n */\n Table.prototype.findColumnIndices = function (column) {\n return this.indices.filter(function (index) {\n return !!index.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column foreign keys.\n */\n Table.prototype.findColumnForeignKeys = function (column) {\n return this.foreignKeys.filter(function (foreignKey) {\n return !!foreignKey.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column uniques.\n */\n Table.prototype.findColumnUniques = function (column) {\n return this.uniques.filter(function (unique) {\n return !!unique.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column checks.\n */\n Table.prototype.findColumnChecks = function (column) {\n return this.checks.filter(function (check) {\n return !!check.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table from a given entity metadata.\n */\n Table.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n engine: entityMetadata.engine,\n columns: entityMetadata.columns\n .filter(function (column) { return column; })\n .map(function (column) { return TableUtils.createTableColumnOptions(column, driver); }),\n indices: entityMetadata.indices\n .filter(function (index) { return index.synchronize === true; })\n .map(function (index) { return TableIndex.create(index); }),\n uniques: entityMetadata.uniques.map(function (unique) { return TableUnique.create(unique); }),\n checks: entityMetadata.checks.map(function (check) { return TableCheck.create(check); }),\n exclusions: entityMetadata.exclusions.map(function (exclusion) { return TableExclusion.create(exclusion); }),\n };\n return new Table(options);\n };\n return Table;\n}());\nexport { Table };\n\n//# sourceMappingURL=Table.js.map\n","import { __read, __spreadArray } from \"tslib\";\nvar OrmUtils = /** @class */ (function () {\n function OrmUtils() {\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Chunks array into peaces.\n */\n OrmUtils.chunk = function (array, size) {\n return Array.from(Array(Math.ceil(array.length / size)), function (_, i) {\n return array.slice(i * size, i * size + size);\n });\n };\n OrmUtils.splitClassesAndStrings = function (clsesAndStrings) {\n return [\n (clsesAndStrings).filter(function (cls) { return typeof cls !== \"string\"; }),\n (clsesAndStrings).filter(function (str) { return typeof str === \"string\"; }),\n ];\n };\n OrmUtils.groupBy = function (array, propertyCallback) {\n return array.reduce(function (groupedArray, value) {\n var key = propertyCallback(value);\n var grouped = groupedArray.find(function (i) { return i.id === key; });\n if (!grouped) {\n grouped = { id: key, items: [] };\n groupedArray.push(grouped);\n }\n grouped.items.push(value);\n return groupedArray;\n }, []);\n };\n OrmUtils.uniq = function (array, criteriaOrProperty) {\n return array.reduce(function (uniqueArray, item) {\n var found = false;\n if (criteriaOrProperty instanceof Function) {\n var itemValue_1 = criteriaOrProperty(item);\n found = !!uniqueArray.find(function (uniqueItem) { return criteriaOrProperty(uniqueItem) === itemValue_1; });\n }\n else if (typeof criteriaOrProperty === \"string\") {\n found = !!uniqueArray.find(function (uniqueItem) { return uniqueItem[criteriaOrProperty] === item[criteriaOrProperty]; });\n }\n else {\n found = uniqueArray.indexOf(item) !== -1;\n }\n if (!found)\n uniqueArray.push(item);\n return uniqueArray;\n }, []);\n };\n OrmUtils.isObject = function (item) {\n return (item && typeof item === \"object\" && !Array.isArray(item));\n };\n /**\n * Deep Object.assign.\n *\n * @see http://stackoverflow.com/a/34749873\n */\n OrmUtils.mergeDeep = function (target) {\n var _a, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n if (!sources.length)\n return target;\n var source = sources.shift();\n if (this.isObject(target) && this.isObject(source)) {\n for (var key in source) {\n var value = source[key];\n if (key === \"__proto__\" || value instanceof Promise)\n continue;\n if (this.isObject(value)\n && !(value instanceof Map)\n && !(value instanceof Set)\n && !(value instanceof Date)\n && !(value instanceof Buffer)\n && !(value instanceof RegExp)) {\n if (!target[key])\n Object.assign(target, (_a = {}, _a[key] = Object.create(Object.getPrototypeOf(value)), _a));\n this.mergeDeep(target[key], value);\n }\n else {\n Object.assign(target, (_b = {}, _b[key] = value, _b));\n }\n }\n }\n return this.mergeDeep.apply(this, __spreadArray([target], __read(sources)));\n };\n /**\n * Deep compare objects.\n *\n * @see http://stackoverflow.com/a/1144249\n */\n OrmUtils.deepCompare = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var i, l, leftChain, rightChain;\n if (arguments.length < 1) {\n return true; // Die silently? Don't know how to handle such case, please help...\n // throw \"Need two or more arguments to compare\";\n }\n for (i = 1, l = arguments.length; i < l; i++) {\n leftChain = []; // Todo: this can be cached\n rightChain = [];\n if (!this.compare2Objects(leftChain, rightChain, arguments[0], arguments[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * Check if two entity-id-maps are the same\n */\n OrmUtils.compareIds = function (firstId, secondId) {\n if (firstId === undefined || firstId === null || secondId === undefined || secondId === null)\n return false;\n // Optimized version for the common case\n if (((typeof firstId.id === \"string\" && typeof secondId.id === \"string\") ||\n (typeof firstId.id === \"number\" && typeof secondId.id === \"number\")) &&\n Object.keys(firstId).length === 1 &&\n Object.keys(secondId).length === 1) {\n return firstId.id === secondId.id;\n }\n return OrmUtils.deepCompare(firstId, secondId);\n };\n /**\n * Transforms given value into boolean value.\n */\n OrmUtils.toBoolean = function (value) {\n if (typeof value === \"boolean\")\n return value;\n if (typeof value === \"string\")\n return value === \"true\" || value === \"1\";\n if (typeof value === \"number\")\n return value > 0;\n return false;\n };\n /**\n * Composes an object from the given array of keys and values.\n */\n OrmUtils.zipObject = function (keys, values) {\n return keys.reduce(function (object, column, index) {\n object[column] = values[index];\n return object;\n }, {});\n };\n /**\n * Compares two arrays.\n */\n OrmUtils.isArraysEqual = function (arr1, arr2) {\n if (arr1.length !== arr2.length)\n return false;\n return arr1.every(function (element) {\n return arr2.indexOf(element) !== -1;\n });\n };\n // -------------------------------------------------------------------------\n // Private methods\n // -------------------------------------------------------------------------\n OrmUtils.compare2Objects = function (leftChain, rightChain, x, y) {\n var p;\n // remember that NaN === NaN returns false\n // and isNaN(undefined) returns true\n if (Number.isNaN(x) && Number.isNaN(y))\n return true;\n // Compare primitives and functions.\n // Check if both arguments link to the same object.\n // Especially useful on the step where we compare prototypes\n if (x === y)\n return true;\n // Unequal, but either is null or undefined (use case: jsonb comparasion)\n // PR #3776, todo: add tests\n if (x === null || y === null || x === undefined || y === undefined)\n return false;\n // Fix the buffer compare bug.\n // See: https://github.com/typeorm/typeorm/issues/3654\n if ((typeof x.equals === \"function\" || x.equals instanceof Function) && x.equals(y))\n return true;\n // Works in case when functions are created in constructor.\n // Comparing dates is a common scenario. Another built-ins?\n // We can even handle functions passed across iframes\n if ((typeof x === \"function\" && typeof y === \"function\") ||\n (x instanceof Date && y instanceof Date) ||\n (x instanceof RegExp && y instanceof RegExp) ||\n (x instanceof String && y instanceof String) ||\n (x instanceof Number && y instanceof Number))\n return x.toString() === y.toString();\n // At last checking prototypes as good as we can\n if (!(x instanceof Object && y instanceof Object))\n return false;\n if (x.isPrototypeOf(y) || y.isPrototypeOf(x))\n return false;\n if (x.constructor !== y.constructor)\n return false;\n if (x.prototype !== y.prototype)\n return false;\n // Check for infinitive linking loops\n if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1)\n return false;\n // Quick checking of one object being a subset of another.\n // todo: cache the structure of arguments[0] for performance\n for (p in y) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n }\n for (p in x) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n switch (typeof (x[p])) {\n case \"object\":\n case \"function\":\n leftChain.push(x);\n rightChain.push(y);\n if (!this.compare2Objects(leftChain, rightChain, x[p], y[p])) {\n return false;\n }\n leftChain.pop();\n rightChain.pop();\n break;\n default:\n if (x[p] !== y[p]) {\n return false;\n }\n break;\n }\n }\n return true;\n };\n return OrmUtils;\n}());\nexport { OrmUtils };\n\n//# sourceMappingURL=OrmUtils.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst JsonHelper_1 = require(\"./JsonHelper\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable, ...args) {\n return Helper.isAllNull(...arguments);\n }\n static isAllNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if (!(args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable, ...args) {\n return Helper.isAllNotNull(...arguments);\n }\n static isAllNotNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if ((args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNotNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n return JsonHelper_1.JsonHelper.deepCopy(obj);\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n static isMobileApp() {\n return (typeof device !== \"undefined\" && device.platform !== \"browser\");\n }\n static toSnakeCase(camelCase) {\n return camelCase.replace(/([A-Z])/g, function (find, something, position) { return ((position > 0) ? \"_\" : \"\") + find[0].toLowerCase(); });\n }\n static wait(timeout, result) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(() => {\n r(result);\n }, timeout);\n });\n });\n }\n static timeout(time, otherPromise, timeoutResult) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.race([otherPromise, Helper.wait(time).then(() => {\n if (timeoutResult === undefined) {\n return Promise.reject();\n }\n else {\n return timeoutResult;\n }\n })]);\n });\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","/**\n * Broadcaster execution result - promises executed by operations and number of executed listeners and subscribers.\n */\nvar BroadcasterResult = /** @class */ (function () {\n function BroadcasterResult() {\n /**\n * Number of executed listeners and subscribers.\n */\n this.count = 0;\n /**\n * Promises returned by listeners and subscribers which needs to be awaited.\n */\n this.promises = [];\n }\n return BroadcasterResult;\n}());\nexport { BroadcasterResult };\n\n//# sourceMappingURL=BroadcasterResult.js.map\n","/**\n * Find Operator used in Find Conditions.\n */\nvar FindOperator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function FindOperator(type, value, useParameter, multipleParameters, getSql, objectLiteralParameters) {\n if (useParameter === void 0) { useParameter = true; }\n if (multipleParameters === void 0) { multipleParameters = false; }\n this._type = type;\n this._value = value;\n this._useParameter = useParameter;\n this._multipleParameters = multipleParameters;\n this._getSql = getSql;\n this._objectLiteralParameters = objectLiteralParameters;\n }\n Object.defineProperty(FindOperator.prototype, \"useParameter\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Indicates if parameter is used or not for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.useParameter;\n return this._useParameter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"multipleParameters\", {\n /**\n * Indicates if multiple parameters must be used for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.multipleParameters;\n return this._multipleParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"type\", {\n /**\n * Gets the Type of this FindOperator\n */\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"value\", {\n /**\n * Gets the final value needs to be used as parameter value.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.value;\n return this._value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"objectLiteralParameters\", {\n /**\n * Gets ObjectLiteral parameters.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.objectLiteralParameters;\n return this._objectLiteralParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"child\", {\n /**\n * Gets the child FindOperator if it exists\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value;\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"getSql\", {\n /**\n * Gets the SQL generator\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.getSql;\n return this._getSql;\n },\n enumerable: false,\n configurable: true\n });\n return FindOperator;\n}());\nexport { FindOperator };\n\n//# sourceMappingURL=FindOperator.js.map\n","/**\n * Browser's implementation of the platform-specific tools.\n *\n * This file gonna replace PlatformTools for browser environment.\n * For node.js environment this class is not getting packaged.\n * Don't use methods of this class in the code, use PlatformTools methods instead.\n */\nvar PlatformTools = /** @class */ (function () {\n function PlatformTools() {\n }\n /**\n * Gets global variable where global stuff can be stored.\n */\n PlatformTools.getGlobalVariable = function () {\n if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n // NativeScript uses global, not window\n return global;\n }\n };\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n PlatformTools.load = function (name) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: require(\\\"\" + name + \"\\\").\");\n return \"\";\n };\n /**\n * Normalizes given path. Does \"path.normalize\".\n */\n PlatformTools.pathNormalize = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.normalize(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Gets file extension. Does \"path.extname\".\n */\n PlatformTools.pathExtname = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.extname(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n PlatformTools.pathResolve = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.resolve(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n PlatformTools.fileExist = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.existsSync(\\\"\" + pathStr + \"\\\").\");\n return false;\n };\n PlatformTools.dotenv = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: dotenv.config({ path: \\\"\" + pathStr + \"\\\" }).\");\n };\n /**\n * Gets environment variable.\n */\n PlatformTools.getEnvVariable = function (name) {\n // if (this.type === \"browser\")\n // throw new Error(`This option/function is not supported in the browser environment. Failed operation: process.env[\"${name}\"].`);\n return undefined;\n };\n PlatformTools.readFileSync = function (filename) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.readFileSync(\\\"\" + filename + \"\\\").\");\n return null;\n };\n PlatformTools.appendFileSync = function (filename, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.appendFileSync(\\\"\" + filename + \"\\\").\");\n };\n PlatformTools.writeFile = function (path, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.writeFile(\\\"\" + path + \"\\\").\");\n return Promise.reject(null);\n };\n /**\n * Highlights sql string to be print in the console.\n */\n PlatformTools.highlightSql = function (sql) {\n return sql;\n };\n /**\n * Highlights json string to be print in the console.\n */\n PlatformTools.highlightJson = function (json) {\n return json;\n };\n /**\n * Logging functions needed by AdvancedConsoleLogger (but here without chalk)\n */\n PlatformTools.logInfo = function (prefix, info) {\n console.info(prefix + \" \", info);\n };\n PlatformTools.logError = function (prefix, error) {\n console.error(prefix + \" \", error);\n };\n PlatformTools.logWarn = function (prefix, warning) {\n console.warn(prefix + \" \", warning);\n };\n PlatformTools.log = function (message) {\n console.log(message);\n };\n PlatformTools.warn = function (message) {\n return message;\n };\n /**\n * Type of the currently running platform.\n */\n PlatformTools.type = \"browser\";\n return PlatformTools;\n}());\nexport { PlatformTools };\n/**\n * These classes are needed for stream operations or\n * in the mongodb driver. Both aren't supported in the browser.\n */\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n }\n return EventEmitter;\n}());\nexport { EventEmitter };\nvar Readable = /** @class */ (function () {\n function Readable() {\n }\n return Readable;\n}());\nexport { Readable };\nvar Writable = /** @class */ (function () {\n function Writable() {\n }\n return Writable;\n}());\nexport { Writable };\nif (typeof window !== \"undefined\") {\n window.Buffer = require(\"buffer/\").Buffer;\n}\n// NativeScript uses global, not window\nif (typeof global !== \"undefined\") {\n global.Buffer = require(\"buffer/\").Buffer;\n}\n\n//# sourceMappingURL=BrowserPlatformTools.js.map\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst Translator_1 = require(\"../Translator\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable) {\n return (variable === null || variable === undefined);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable) {\n return !Helper.isNull(variable);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string|never}\n */\n static strftime(sFormat, date, useUTC, makePersistentTranslation) {\n useUTC = Helper.nonNull(useUTC, false);\n makePersistentTranslation = Helper.nonNull(makePersistentTranslation, true);\n date = Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, function (sMatch) {\n return {\n '%a': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDaysShort[nDay]).outerHTML : Translator_1.Translator.translate(aDaysShort[nDay]),\n '%A': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDays[nDay]).outerHTML : Translator_1.Translator.translate(aDays[nDay]),\n '%b': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth].slice(0, 3)).outerHTML : Translator_1.Translator.translate(aMonths[nMonth].slice(0, 3)),\n '%B': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth]).outerHTML : Translator_1.Translator.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = Helper.cloneJson(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = Helper.cloneJson(obj[i]);\n }\n return cloneO;\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n // debugger;\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n // static getIndexedObject(array, keyValue) {\n // let obj = {};\n // for (let i = 0, n = array.length; i < n; i++) {\n // obj[array[i][keyValue]] = array[i];\n // }\n // return obj;\n // }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n if (array instanceof Map) {\n array = Array.from(array.values());\n }\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { Table } from \"./table/Table\";\nimport { TableColumn } from \"./table/TableColumn\";\nimport { TableForeignKey } from \"./table/TableForeignKey\";\nimport { TableIndex } from \"./table/TableIndex\";\nimport { TableUtils } from \"./util/TableUtils\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { TableUnique } from \"./table/TableUnique\";\nimport { TableCheck } from \"./table/TableCheck\";\nimport { TableExclusion } from \"./table/TableExclusion\";\nimport { View } from \"./view/View\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates complete tables schemas in the database based on the entity metadatas.\n *\n * Steps how schema is being built:\n * 1. load list of all tables with complete column and keys information from the db\n * 2. drop all (old) foreign keys that exist in the table, but does not exist in the metadata\n * 3. create new tables that does not exist in the db, but exist in the metadata\n * 4. drop all columns exist (left old) in the db table, but does not exist in the metadata\n * 5. add columns from metadata which does not exist in the table\n * 6. update all exist columns which metadata has changed\n * 7. update primary keys - update old and create new primary key from changed columns\n * 8. create foreign keys which does not exist in the table yet\n * 9. create indices which are missing in db yet, and drops indices which exist in the db, but does not exist in the metadata anymore\n */\nvar RdbmsSchemaBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RdbmsSchemaBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates complete schemas for the given entity metadatas.\n */\n RdbmsSchemaBuilder.prototype.build = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 12, 18, 20]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 7:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 9];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 11];\n return [4 /*yield*/, this.queryRunner.commitTransaction()];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 20];\n case 12:\n error_1 = _a.sent();\n _a.label = 13;\n case 13:\n _a.trys.push([13, 16, , 17]);\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 15];\n return [4 /*yield*/, this.queryRunner.rollbackTransaction()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18: return [4 /*yield*/, this.queryRunner.release()];\n case 19:\n _a.sent();\n return [7 /*endfinally*/];\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns sql queries to be executed by schema builder.\n */\n RdbmsSchemaBuilder.prototype.log = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 9, 11]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 5:\n _a.sent();\n this.queryRunner.enableSqlMemory();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 6:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 8];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [2 /*return*/, this.queryRunner.getMemorySql()];\n case 9:\n // its important to disable this mode despite the fact we are release query builder\n // because there exist drivers which reuse same query runner. Also its important to disable\n // sql memory after call of getMemorySql() method because last one flushes sql memory.\n this.queryRunner.disableSqlMemory();\n return [4 /*yield*/, this.queryRunner.release()];\n case 10:\n _a.sent();\n return [7 /*endfinally*/];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"entityToSyncMetadatas\", {\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.synchronize && metadata.tableType !== \"entity-child\" && metadata.tableType !== \"view\"; });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"viewEntityToSyncMetadatas\", {\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.tableType === \"view\" && metadata.synchronize; });\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Executes schema sync operations in a proper order.\n * Order of operations matter here.\n */\n RdbmsSchemaBuilder.prototype.executeSchemaSyncOperationsInProperOrder = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.dropOldViews()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.dropOldForeignKeys()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.dropOldIndices()];\n case 3:\n _a.sent();\n return [4 /*yield*/, this.dropOldChecks()];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.dropOldExclusions()];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.dropCompositeUniqueConstraints()];\n case 6:\n _a.sent();\n // await this.renameTables();\n return [4 /*yield*/, this.renameColumns()];\n case 7:\n // await this.renameTables();\n _a.sent();\n return [4 /*yield*/, this.createNewTables()];\n case 8:\n _a.sent();\n return [4 /*yield*/, this.dropRemovedColumns()];\n case 9:\n _a.sent();\n return [4 /*yield*/, this.addNewColumns()];\n case 10:\n _a.sent();\n return [4 /*yield*/, this.updatePrimaryKeys()];\n case 11:\n _a.sent();\n return [4 /*yield*/, this.updateExistColumns()];\n case 12:\n _a.sent();\n return [4 /*yield*/, this.createNewIndices()];\n case 13:\n _a.sent();\n return [4 /*yield*/, this.createNewChecks()];\n case 14:\n _a.sent();\n return [4 /*yield*/, this.createNewExclusions()];\n case 15:\n _a.sent();\n return [4 /*yield*/, this.createCompositeUniqueConstraints()];\n case 16:\n _a.sent();\n return [4 /*yield*/, this.createForeignKeys()];\n case 17:\n _a.sent();\n return [4 /*yield*/, this.createViews()];\n case 18:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all (old) foreign keys that exist in the tables, but do not exist in the entity metadata.\n */\n RdbmsSchemaBuilder.prototype.dropOldForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_1, this_1, _a, _b, metadata, e_1_1;\n var e_1, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_1 = function (metadata) {\n var table, tableForeignKeysToDrop;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_1.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n tableForeignKeysToDrop = table.foreignKeys.filter(function (tableForeignKey) {\n var metadataFK = metadata.foreignKeys.find(function (metadataForeignKey) { return foreignKeysMatch(tableForeignKey, metadataForeignKey); });\n return !metadataFK\n || (metadataFK.onDelete && metadataFK.onDelete !== tableForeignKey.onDelete)\n || (metadataFK.onUpdate && metadataFK.onUpdate !== tableForeignKey.onUpdate);\n });\n if (tableForeignKeysToDrop.length === 0)\n return [2 /*return*/, \"continue\"];\n this_1.connection.logger.logSchemaBuild(\"dropping old foreign keys of \" + table.name + \": \" + tableForeignKeysToDrop.map(function (dbForeignKey) { return dbForeignKey.name; }).join(\", \"));\n // drop foreign keys from the database\n return [4 /*yield*/, this_1.queryRunner.dropForeignKeys(table, tableForeignKeysToDrop)];\n case 1:\n // drop foreign keys from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_1(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _d.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rename tables\n */\n RdbmsSchemaBuilder.prototype.renameTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Renames columns.\n * Works if only one column per table was changed.\n * Changes only column name. If something besides name was changed, these changes will be ignored.\n */\n RdbmsSchemaBuilder.prototype.renameColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_2, this_2, _a, _b, metadata, e_2_1;\n var e_2, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_2 = function (metadata) {\n var table, renamedMetadataColumns, renamedTableColumns, renamedColumn;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_2.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n if (metadata.columns.length !== table.columns.length)\n return [2 /*return*/, \"continue\"];\n renamedMetadataColumns = metadata.columns.filter(function (column) {\n return !table.columns.find(function (tableColumn) {\n return tableColumn.name === column.databaseName\n && tableColumn.type === _this.connection.driver.normalizeType(column)\n && tableColumn.isNullable === column.isNullable\n && tableColumn.isUnique === _this.connection.driver.normalizeIsUnique(column);\n });\n });\n if (renamedMetadataColumns.length === 0 || renamedMetadataColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (column) {\n return column.databaseName === tableColumn.name\n && _this.connection.driver.normalizeType(column) === tableColumn.type\n && column.isNullable === tableColumn.isNullable\n && _this.connection.driver.normalizeIsUnique(column) === tableColumn.isUnique;\n });\n });\n if (renamedTableColumns.length === 0 || renamedTableColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedColumn = renamedTableColumns[0].clone();\n renamedColumn.name = renamedMetadataColumns[0].databaseName;\n this_2.connection.logger.logSchemaBuild(\"renaming column \\\"\" + renamedTableColumns[0].name + \"\\\" in to \\\"\" + renamedColumn.name + \"\\\"\");\n return [4 /*yield*/, this_2.queryRunner.renameColumn(table, renamedTableColumns[0], renamedColumn)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_2(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_2_1 = _d.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_3, this_3, _a, _b, metadata, e_3_1;\n var e_3, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_3 = function (metadata) {\n var table, dropQueries;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_3.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n dropQueries = table.indices\n .filter(function (tableIndex) {\n var indexMetadata = metadata.indices.find(function (index) { return index.name === tableIndex.name; });\n if (indexMetadata) {\n if (indexMetadata.synchronize === false)\n return false;\n if (indexMetadata.isUnique !== tableIndex.isUnique)\n return true;\n if (indexMetadata.isSpatial !== tableIndex.isSpatial)\n return true;\n if (_this.connection.driver.isFullTextColumnTypeSupported() && indexMetadata.isFulltext !== tableIndex.isFulltext)\n return true;\n if (indexMetadata.columns.length !== tableIndex.columnNames.length)\n return true;\n return !indexMetadata.columns.every(function (column) { return tableIndex.columnNames.indexOf(column.databaseName) !== -1; });\n }\n return true;\n })\n .map(function (tableIndex) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.connection.logger.logSchemaBuild(\"dropping an index: \\\"\" + tableIndex.name + \"\\\" from table \" + table.name);\n return [4 /*yield*/, this.queryRunner.dropIndex(table, tableIndex)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(dropQueries)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_3 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_3(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _d.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_4, this_4, _a, _b, metadata, e_4_1;\n var e_4, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_4 = function (metadata) {\n var table, oldChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_4.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldChecks = table.checks.filter(function (tableCheck) {\n return !metadata.checks.find(function (checkMetadata) { return checkMetadata.name === tableCheck.name; });\n });\n if (oldChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_4.connection.logger.logSchemaBuild(\"dropping old check constraint: \" + oldChecks.map(function (check) { return \"\\\"\" + check.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_4.queryRunner.dropCheckConstraints(table, oldChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_4 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_4(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_4_1 = _d.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_5, this_5, _a, _b, metadata, e_5_1;\n var e_5, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_5 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_5.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = table.uniques.filter(function (tableUnique) {\n return tableUnique.columnNames.length > 1 && !metadata.uniques.find(function (uniqueMetadata) { return uniqueMetadata.name === tableUnique.name; });\n });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_5.connection.logger.logSchemaBuild(\"dropping old unique constraint: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_5.queryRunner.dropUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_5 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_5(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_5_1 = _d.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_6, this_6, _a, _b, metadata, e_6_1;\n var e_6, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_6 = function (metadata) {\n var table, oldExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_6.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldExclusions = table.exclusions.filter(function (tableExclusion) {\n return !metadata.exclusions.find(function (exclusionMetadata) { return exclusionMetadata.name === tableExclusion.name; });\n });\n if (oldExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_6.connection.logger.logSchemaBuild(\"dropping old exclusion constraint: \" + oldExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_6.queryRunner.dropExclusionConstraints(table, oldExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_6 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_6(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_6_1 = _d.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates tables that do not exist in the database yet.\n * New tables are created without foreign and primary keys.\n * Primary key only can be created in conclusion with auto generated column.\n */\n RdbmsSchemaBuilder.prototype.createNewTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_7, this_7, _a, _b, metadata, e_7_1;\n var e_7, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_7 = function (metadata) {\n var existTable, table;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existTable = this_7.queryRunner.loadedTables.find(function (table) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullTableName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n return table.name === fullTableName;\n });\n if (existTable)\n return [2 /*return*/, \"continue\"];\n this_7.connection.logger.logSchemaBuild(\"creating a new table: \" + metadata.tablePath);\n table = Table.create(metadata, this_7.connection.driver);\n return [4 /*yield*/, this_7.queryRunner.createTable(table, false, false)];\n case 1:\n _e.sent();\n this_7.queryRunner.loadedTables.push(table);\n return [2 /*return*/];\n }\n });\n };\n this_7 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_7(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_7_1 = _d.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_8, this_8, _a, _b, metadata, e_8_1;\n var e_8, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_8 = function (metadata) {\n var existView, view;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existView = this_8.queryRunner.loadedViews.find(function (view) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existView)\n return [2 /*return*/, \"continue\"];\n this_8.connection.logger.logSchemaBuild(\"creating a new view: \" + metadata.tablePath);\n view = View.create(metadata, this_8.connection.driver);\n return [4 /*yield*/, this_8.queryRunner.createView(view)];\n case 1:\n _e.sent();\n this_8.queryRunner.loadedViews.push(view);\n return [2 /*return*/];\n }\n });\n };\n this_8 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.viewEntityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_8(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_8_1 = _d.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_9, this_9, _a, _b, view, e_9_1;\n var e_9, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_9 = function (view) {\n var existViewMetadata;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existViewMetadata = this_9.viewEntityToSyncMetadatas.find(function (metadata) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existViewMetadata)\n return [2 /*return*/, \"continue\"];\n this_9.connection.logger.logSchemaBuild(\"dropping an old view: \" + view.name);\n // drop an old view\n return [4 /*yield*/, this_9.queryRunner.dropView(view)];\n case 1:\n // drop an old view\n _e.sent();\n this_9.queryRunner.loadedViews.splice(this_9.queryRunner.loadedViews.indexOf(view), 1);\n return [2 /*return*/];\n }\n });\n };\n this_9 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.queryRunner.loadedViews), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n view = _b.value;\n return [5 /*yield**/, _loop_9(view)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_9_1 = _d.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all columns that exist in the table, but does not exist in the metadata (left old).\n * We drop their keys too, since it should be safe.\n */\n RdbmsSchemaBuilder.prototype.dropRemovedColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_10, this_10, _a, _b, metadata, e_10_1;\n var e_10, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_10 = function (metadata) {\n var table, droppedTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_10.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n droppedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (columnMetadata) { return columnMetadata.databaseName === tableColumn.name; });\n });\n if (droppedTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_10.connection.logger.logSchemaBuild(\"columns dropped in \" + table.name + \": \" + droppedTableColumns.map(function (column) { return column.name; }).join(\", \"));\n // drop columns from the database\n return [4 /*yield*/, this_10.queryRunner.dropColumns(table, droppedTableColumns)];\n case 1:\n // drop columns from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_10 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_10(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_10_1 = _d.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Adds columns from metadata which does not exist in the table.\n * Columns are created without keys.\n */\n RdbmsSchemaBuilder.prototype.addNewColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_11, this_11, _a, _b, metadata, e_11_1;\n var e_11, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_11 = function (metadata) {\n var table, newColumnMetadatas, newTableColumnOptions, newTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_11.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newColumnMetadatas = metadata.columns.filter(function (columnMetadata) {\n return !table.columns.find(function (tableColumn) { return tableColumn.name === columnMetadata.databaseName; });\n });\n if (newColumnMetadatas.length === 0)\n return [2 /*return*/, \"continue\"];\n newTableColumnOptions = this_11.metadataColumnsToTableColumnOptions(newColumnMetadatas);\n newTableColumns = newTableColumnOptions.map(function (option) { return new TableColumn(option); });\n if (newTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_11.connection.logger.logSchemaBuild(\"new columns added: \" + newColumnMetadatas.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_11.queryRunner.addColumns(table, newTableColumns)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_11 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_11(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_11_1 = _d.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n RdbmsSchemaBuilder.prototype.updatePrimaryKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_12, this_12, _a, _b, metadata, e_12_1;\n var e_12, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_12 = function (metadata) {\n var table, primaryMetadataColumns, primaryTableColumns, changedPrimaryColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_12.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n primaryMetadataColumns = metadata.columns.filter(function (column) { return column.isPrimary; });\n primaryTableColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (!(primaryTableColumns.length !== primaryMetadataColumns.length && primaryMetadataColumns.length > 1)) return [3 /*break*/, 2];\n changedPrimaryColumns = primaryMetadataColumns.map(function (primaryMetadataColumn) {\n return new TableColumn(TableUtils.createTableColumnOptions(primaryMetadataColumn, _this.connection.driver));\n });\n return [4 /*yield*/, this_12.queryRunner.updatePrimaryKeys(table, changedPrimaryColumns)];\n case 1:\n _e.sent();\n _e.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n };\n this_12 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_12(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_12_1 = _d.sent();\n e_12 = { error: e_12_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_12) throw e_12.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Update all exist columns which metadata has changed.\n * Still don't create keys. Also we don't touch foreign keys of the changed columns.\n */\n RdbmsSchemaBuilder.prototype.updateExistColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_13, this_13, _a, _b, metadata, e_13_1;\n var e_13, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_13 = function (metadata) {\n var table, changedColumns, changedColumns_1, changedColumns_1_1, changedColumn, e_14_1, changedColumns_2, changedColumns_2_1, changedColumn, e_15_1, changedColumns_3, changedColumns_3_1, changedColumn, e_16_1, newAndOldTableColumns;\n var e_14, _e, e_15, _f, e_16, _g;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n table = this_13.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n changedColumns = this_13.connection.driver.findChangedColumns(table.columns, metadata.columns);\n if (changedColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n _h.label = 1;\n case 1:\n _h.trys.push([1, 6, 7, 8]);\n changedColumns_1 = (e_14 = void 0, __values(changedColumns)), changedColumns_1_1 = changedColumns_1.next();\n _h.label = 2;\n case 2:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 5];\n changedColumn = changedColumns_1_1.value;\n return [4 /*yield*/, this_13.dropColumnReferencedForeignKeys(metadata.tablePath, changedColumn.databaseName)];\n case 3:\n _h.sent();\n _h.label = 4;\n case 4:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_14_1 = _h.sent();\n e_14 = { error: e_14_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_e = changedColumns_1.return)) _e.call(changedColumns_1);\n }\n finally { if (e_14) throw e_14.error; }\n return [7 /*endfinally*/];\n case 8:\n _h.trys.push([8, 13, 14, 15]);\n changedColumns_2 = (e_15 = void 0, __values(changedColumns)), changedColumns_2_1 = changedColumns_2.next();\n _h.label = 9;\n case 9:\n if (!!changedColumns_2_1.done) return [3 /*break*/, 12];\n changedColumn = changedColumns_2_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeIndices(metadata.tablePath, changedColumn.databaseName)];\n case 10:\n _h.sent();\n _h.label = 11;\n case 11:\n changedColumns_2_1 = changedColumns_2.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_15_1 = _h.sent();\n e_15 = { error: e_15_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (changedColumns_2_1 && !changedColumns_2_1.done && (_f = changedColumns_2.return)) _f.call(changedColumns_2);\n }\n finally { if (e_15) throw e_15.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!!(this_13.connection.driver instanceof MysqlDriver || this_13.connection.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 23];\n _h.label = 16;\n case 16:\n _h.trys.push([16, 21, 22, 23]);\n changedColumns_3 = (e_16 = void 0, __values(changedColumns)), changedColumns_3_1 = changedColumns_3.next();\n _h.label = 17;\n case 17:\n if (!!changedColumns_3_1.done) return [3 /*break*/, 20];\n changedColumn = changedColumns_3_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeUniques(metadata.tablePath, changedColumn.databaseName)];\n case 18:\n _h.sent();\n _h.label = 19;\n case 19:\n changedColumns_3_1 = changedColumns_3.next();\n return [3 /*break*/, 17];\n case 20: return [3 /*break*/, 23];\n case 21:\n e_16_1 = _h.sent();\n e_16 = { error: e_16_1 };\n return [3 /*break*/, 23];\n case 22:\n try {\n if (changedColumns_3_1 && !changedColumns_3_1.done && (_g = changedColumns_3.return)) _g.call(changedColumns_3);\n }\n finally { if (e_16) throw e_16.error; }\n return [7 /*endfinally*/];\n case 23:\n newAndOldTableColumns = changedColumns.map(function (changedColumn) {\n var oldTableColumn = table.columns.find(function (column) { return column.name === changedColumn.databaseName; });\n var newTableColumnOptions = TableUtils.createTableColumnOptions(changedColumn, _this.connection.driver);\n var newTableColumn = new TableColumn(newTableColumnOptions);\n return {\n oldColumn: oldTableColumn,\n newColumn: newTableColumn\n };\n });\n if (newAndOldTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_13.connection.logger.logSchemaBuild(\"columns changed in \\\"\" + table.name + \"\\\". updating: \" + changedColumns.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_13.queryRunner.changeColumns(table, newAndOldTableColumns)];\n case 24:\n _h.sent();\n return [2 /*return*/];\n }\n });\n };\n this_13 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_13(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_13_1 = _d.sent();\n e_13 = { error: e_13_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_13) throw e_13.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite indices which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_14, this_14, _a, _b, metadata, e_17_1;\n var e_17, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_14 = function (metadata) {\n var table, newIndices;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_14.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newIndices = metadata.indices\n .filter(function (indexMetadata) { return !table.indices.find(function (tableIndex) { return tableIndex.name === indexMetadata.name; }) && indexMetadata.synchronize === true; })\n .map(function (indexMetadata) { return TableIndex.create(indexMetadata); });\n if (newIndices.length === 0)\n return [2 /*return*/, \"continue\"];\n this_14.connection.logger.logSchemaBuild(\"adding new indices \" + newIndices.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_14.queryRunner.createIndices(table, newIndices)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_14 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_14(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_17_1 = _d.sent();\n e_17 = { error: e_17_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_17) throw e_17.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createNewChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_15, this_15, _a, _b, metadata, e_18_1;\n var e_18, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_15 = function (metadata) {\n var table, newChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_15.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newChecks = metadata.checks\n .filter(function (checkMetadata) { return !table.checks.find(function (tableCheck) { return tableCheck.name === checkMetadata.name; }); })\n .map(function (checkMetadata) { return TableCheck.create(checkMetadata); });\n if (newChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_15.connection.logger.logSchemaBuild(\"adding new check constraints: \" + newChecks.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_15.queryRunner.createCheckConstraints(table, newChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_15 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_15(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_18_1 = _d.sent();\n e_18 = { error: e_18_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_18) throw e_18.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite uniques which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_16, this_16, _a, _b, metadata, e_19_1;\n var e_19, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_16 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_16.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = metadata.uniques\n .filter(function (uniqueMetadata) { return uniqueMetadata.columns.length > 1 && !table.uniques.find(function (tableUnique) { return tableUnique.name === uniqueMetadata.name; }); })\n .map(function (uniqueMetadata) { return TableUnique.create(uniqueMetadata); });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_16.connection.logger.logSchemaBuild(\"adding new unique constraints: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_16.queryRunner.createUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_16 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_16(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_19_1 = _d.sent();\n e_19 = { error: e_19_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_19) throw e_19.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates exclusions which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_17, this_17, _a, _b, metadata, e_20_1;\n var e_20, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_17 = function (metadata) {\n var table, newExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_17.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newExclusions = metadata.exclusions\n .filter(function (exclusionMetadata) { return !table.exclusions.find(function (tableExclusion) { return tableExclusion.name === exclusionMetadata.name; }); })\n .map(function (exclusionMetadata) { return TableExclusion.create(exclusionMetadata); });\n if (newExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_17.connection.logger.logSchemaBuild(\"adding new exclusion constraints: \" + newExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_17.queryRunner.createExclusionConstraints(table, newExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_17 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_17(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_20_1 = _d.sent();\n e_20 = { error: e_20_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_20) throw e_20.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates foreign keys which does not exist in the table yet.\n */\n RdbmsSchemaBuilder.prototype.createForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_18, this_18, _a, _b, metadata, e_21_1;\n var e_21, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_18 = function (metadata) {\n var table, newKeys, dbForeignKeys;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_18.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newKeys = metadata.foreignKeys\n .filter(function (foreignKey) {\n return !table.foreignKeys.find(function (dbForeignKey) { return foreignKeysMatch(dbForeignKey, foreignKey); });\n });\n if (newKeys.length === 0)\n return [2 /*return*/, \"continue\"];\n dbForeignKeys = newKeys.map(function (foreignKeyMetadata) { return TableForeignKey.create(foreignKeyMetadata); });\n this_18.connection.logger.logSchemaBuild(\"creating a foreign keys: \" + newKeys.map(function (key) { return key.name; }).join(\", \") + \" on table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_18.queryRunner.createForeignKeys(table, dbForeignKeys)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_18 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_18(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_21_1 = _d.sent();\n e_21 = { error: e_21_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_21) throw e_21.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all foreign keys where given column of the given table is being used.\n */\n RdbmsSchemaBuilder.prototype.dropColumnReferencedForeignKeys = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, tablesWithFK, columnForeignKey, clonedTable, tablesWithFK_1, tablesWithFK_1_1, tableWithFK, e_22_1;\n var e_22, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n tablesWithFK = [];\n columnForeignKey = table.foreignKeys.find(function (foreignKey) { return foreignKey.columnNames.indexOf(columnName) !== -1; });\n if (columnForeignKey) {\n clonedTable = table.clone();\n clonedTable.foreignKeys = [columnForeignKey];\n tablesWithFK.push(clonedTable);\n table.removeForeignKey(columnForeignKey);\n }\n this.queryRunner.loadedTables.forEach(function (loadedTable) {\n var dependForeignKeys = loadedTable.foreignKeys.filter(function (foreignKey) {\n return foreignKey.referencedTableName === tablePath && foreignKey.referencedColumnNames.indexOf(columnName) !== -1;\n });\n if (dependForeignKeys.length > 0) {\n var clonedTable = loadedTable.clone();\n clonedTable.foreignKeys = dependForeignKeys;\n tablesWithFK.push(clonedTable);\n dependForeignKeys.forEach(function (dependForeignKey) { return loadedTable.removeForeignKey(dependForeignKey); });\n }\n });\n if (!(tablesWithFK.length > 0)) return [3 /*break*/, 8];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, 7, 8]);\n tablesWithFK_1 = __values(tablesWithFK), tablesWithFK_1_1 = tablesWithFK_1.next();\n _b.label = 2;\n case 2:\n if (!!tablesWithFK_1_1.done) return [3 /*break*/, 5];\n tableWithFK = tablesWithFK_1_1.value;\n this.connection.logger.logSchemaBuild(\"dropping related foreign keys of \" + tableWithFK.name + \": \" + tableWithFK.foreignKeys.map(function (foreignKey) { return foreignKey.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropForeignKeys(tableWithFK, tableWithFK.foreignKeys)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4:\n tablesWithFK_1_1 = tablesWithFK_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_22_1 = _b.sent();\n e_22 = { error: e_22_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (tablesWithFK_1_1 && !tablesWithFK_1_1.done && (_a = tablesWithFK_1.return)) _a.call(tablesWithFK_1);\n }\n finally { if (e_22) throw e_22.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite indices, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeIndices = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedIndices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedIndices = table.indices.filter(function (index) { return index.columnNames.length > 1 && index.columnNames.indexOf(columnName) !== -1; });\n if (relatedIndices.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related indices of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedIndices.map(function (index) { return index.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropIndices(table, relatedIndices)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite uniques, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeUniques = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedUniques;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedUniques = table.uniques.filter(function (unique) { return unique.columnNames.length > 1 && unique.columnNames.indexOf(columnName) !== -1; });\n if (relatedUniques.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related unique constraints of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedUniques.map(function (unique) { return unique.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropUniqueConstraints(table, relatedUniques)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new columns from the given column metadatas.\n */\n RdbmsSchemaBuilder.prototype.metadataColumnsToTableColumnOptions = function (columns) {\n var _this = this;\n return columns.map(function (columnMetadata) { return TableUtils.createTableColumnOptions(columnMetadata, _this.connection.driver); });\n };\n /**\n * Creates typeorm service table for storing user defined Views.\n */\n RdbmsSchemaBuilder.prototype.createTypeormMetadataTable = function () {\n return __awaiter(this, void 0, void 0, function () {\n var options, typeormMetadataTable;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n options = this.connection.driver.options;\n typeormMetadataTable = this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n return [4 /*yield*/, this.queryRunner.createTable(new Table({\n name: typeormMetadataTable,\n columns: [\n {\n name: \"type\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataType }),\n isNullable: false\n },\n {\n name: \"database\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataDatabase }),\n isNullable: true\n },\n {\n name: \"schema\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataSchema }),\n isNullable: true\n },\n {\n name: \"table\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataTable }),\n isNullable: true\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataName }),\n isNullable: true\n },\n {\n name: \"value\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataValue }),\n isNullable: true\n },\n ]\n }), true)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return RdbmsSchemaBuilder;\n}());\nexport { RdbmsSchemaBuilder };\nfunction foreignKeysMatch(tableForeignKey, metadataForeignKey) {\n return (tableForeignKey.name === metadataForeignKey.name)\n && (tableForeignKey.referencedTableName === metadataForeignKey.referencedTablePath);\n}\n\n//# sourceMappingURL=RdbmsSchemaBuilder.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { DateUtils } from \"../../util/DateUtils\";\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\n/**\n * Organizes communication with sqlite DBMS.\n */\nvar AbstractSqliteDriver = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteDriver(connection) {\n /**\n * Indicates if replication is enabled.\n */\n this.isReplicated = false;\n /**\n * Indicates if tree tables are supported by this driver.\n */\n this.treeSupport = true;\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm\n * @see https://sqlite.org/datatype3.html\n */\n this.supportedDataTypes = [\n \"int\",\n \"integer\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"unsigned big int\",\n \"int2\",\n \"int8\",\n \"integer\",\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"clob\",\n \"text\",\n \"blob\",\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"boolean\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support length by a driver.\n */\n this.withLengthColumnTypes = [\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"blob\",\n \"clob\"\n ];\n /**\n * Gets list of spatial column data types.\n */\n this.spatialTypes = [];\n /**\n * Gets list of column data types that support precision by a driver.\n */\n this.withPrecisionColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support scale by a driver.\n */\n this.withScaleColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n ];\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n this.mappedDataTypes = {\n createDate: \"datetime\",\n createDateDefault: \"datetime('now')\",\n updateDate: \"datetime\",\n updateDateDefault: \"datetime('now')\",\n deleteDate: \"datetime\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\n };\n this.connection = connection;\n this.options = connection.options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n AbstractSqliteDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AbstractSqliteDriver.prototype.afterConnect = function () {\n return Promise.resolve();\n };\n /**\n * Closes connection with database.\n */\n AbstractSqliteDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(function (err) { return err ? fail(err) : ok(); });\n })];\n });\n });\n };\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n AbstractSqliteDriver.prototype.createSchemaBuilder = function () {\n return new RdbmsSchemaBuilder(this.connection);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AbstractSqliteDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n if (value === null || value === undefined)\n return value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n return value === true ? 1 : 0;\n }\n else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n // to string conversation needs because SQLite stores date as integer number, when date came as Object\n // TODO: think about `toUTC` conversion\n return DateUtils.mixedDateToUtcDatetimeString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value);\n }\n return value;\n };\n /**\n * Prepares given value to a value to be hydrated, based on its column type or metadata.\n */\n AbstractSqliteDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n /**\n * Fix date conversion issue\n *\n * If the format of the date string is \"2018-03-14 02:33:33.906\", Safari (and iOS WKWebView) will convert it to an invalid date object.\n * We need to modify the date string to \"2018-03-14T02:33:33.906Z\" and Safari will convert it correctly.\n *\n * ISO 8601\n * https://www.w3.org/TR/NOTE-datetime\n */\n if (value && typeof value === \"string\") {\n // There are various valid time string formats a sqlite time string might have:\n // https://www.sqlite.org/lang_datefunc.html\n // There are two separate fixes we may need to do:\n // 1) Add 'T' separator if space is used instead\n // 2) Add 'Z' UTC suffix if no timezone or offset specified\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d/.test(value)) {\n value = value.replace(\" \", \"T\");\n }\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d(:\\d\\d(\\.\\d\\d\\d)?)?$/.test(value)) {\n value += \"Z\";\n }\n }\n value = DateUtils.normalizeHydratedDate(value);\n }\n else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return value;\n };\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n AbstractSqliteDriver.prototype.escapeQueryWithParameters = function (sql, parameters, nativeParameters) {\n var builtParameters = Object.keys(nativeParameters).map(function (key) {\n // Mapping boolean values to their numeric representation\n if (typeof nativeParameters[key] === \"boolean\") {\n return nativeParameters[key] === true ? 1 : 0;\n }\n return nativeParameters[key];\n });\n if (!parameters || !Object.keys(parameters).length)\n return [sql, builtParameters];\n var keys = Object.keys(parameters).map(function (parameter) { return \"(:(\\\\.\\\\.\\\\.)?\" + parameter + \"\\\\b)\"; }).join(\"|\");\n sql = sql.replace(new RegExp(keys, \"g\"), function (key) {\n var value;\n var isArray = false;\n if (key.substr(0, 4) === \":...\") {\n isArray = true;\n value = parameters[key.substr(4)];\n }\n else {\n value = parameters[key.substr(1)];\n }\n if (isArray) {\n return value.map(function (v) {\n builtParameters.push(v);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }).join(\", \");\n }\n else if (value instanceof Function) {\n return value();\n }\n else {\n builtParameters.push(value);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, builtParameters];\n };\n /**\n * Escapes a column name.\n */\n AbstractSqliteDriver.prototype.escape = function (columnName) {\n return \"\\\"\" + columnName + \"\\\"\";\n };\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. \"myDB\".\"mySchema\".\"myTable\"\n *\n * Returns only simple table name because all inherited drivers does not supports schema and database.\n */\n AbstractSqliteDriver.prototype.buildTableName = function (tableName, schema, database) {\n return tableName;\n };\n /**\n * Creates a database type from a given column metadata.\n */\n AbstractSqliteDriver.prototype.normalizeType = function (column) {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\";\n }\n else if (column.type === String) {\n return \"varchar\";\n }\n else if (column.type === Date) {\n return \"datetime\";\n }\n else if (column.type === Boolean) {\n return \"boolean\";\n }\n else if (column.type === \"uuid\") {\n return \"varchar\";\n }\n else if (column.type === \"simple-array\") {\n return \"text\";\n }\n else if (column.type === \"simple-json\") {\n return \"text\";\n }\n else if (column.type === \"simple-enum\") {\n return \"varchar\";\n }\n else {\n return column.type || \"\";\n }\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeDefault = function (columnMetadata) {\n var defaultValue = columnMetadata.default;\n if (typeof defaultValue === \"number\") {\n return \"\" + defaultValue;\n }\n else if (typeof defaultValue === \"boolean\") {\n return defaultValue === true ? \"1\" : \"0\";\n }\n else if (typeof defaultValue === \"function\") {\n return defaultValue();\n }\n else if (typeof defaultValue === \"string\") {\n return \"'\" + defaultValue + \"'\";\n }\n else if (defaultValue === null) {\n return undefined;\n }\n else {\n return defaultValue;\n }\n };\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeIsUnique = function (column) {\n return column.entityMetadata.uniques.some(function (uq) { return uq.columns.length === 1 && uq.columns[0] === column; });\n };\n /**\n * Calculates column length taking into account the default length values.\n */\n AbstractSqliteDriver.prototype.getColumnLength = function (column) {\n return column.length ? column.length.toString() : \"\";\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.createFullType = function (column) {\n var type = column.type;\n if (column.enum) {\n return \"varchar\";\n }\n if (column.length) {\n type += \"(\" + column.length + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += \"(\" + column.precision + \",\" + column.scale + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined) {\n type += \"(\" + column.precision + \")\";\n }\n if (column.isArray)\n type += \" array\";\n return type;\n };\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainMasterConnection = function () {\n return Promise.resolve();\n };\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainSlaveConnection = function () {\n return Promise.resolve();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n AbstractSqliteDriver.prototype.createGeneratedMap = function (metadata, insertResult, entityIndex, entityNum) {\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n var value;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult) {\n // NOTE: When INSERT statement is successfully completed, the last inserted row ID is returned.\n // see also: SqliteQueryRunner.query()\n value = insertResult - entityNum + entityIndex + 1;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // value = insertValue[generatedColumn.databaseName];\n }\n if (!value)\n return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n AbstractSqliteDriver.prototype.findChangedColumns = function (tableColumns, columnMetadatas) {\n var _this = this;\n return columnMetadatas.filter(function (columnMetadata) {\n var tableColumn = tableColumns.find(function (c) { return c.name === columnMetadata.databaseName; });\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"comment:\", tableColumn.comment, columnMetadata.comment);\n // console.log(\"default:\", this.normalizeDefault(columnMetadata), columnMetadata.default);\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log(\"==========================================\");\n return tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== _this.normalizeType(columnMetadata)\n || tableColumn.length !== columnMetadata.length\n || tableColumn.precision !== columnMetadata.precision\n || tableColumn.scale !== columnMetadata.scale\n // || tableColumn.comment !== columnMetadata.comment || // todo\n || _this.normalizeDefault(columnMetadata) !== tableColumn.default\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== _this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\n });\n };\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n AbstractSqliteDriver.prototype.isReturningSqlSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n AbstractSqliteDriver.prototype.isUUIDGenerationSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports fulltext indices.\n */\n AbstractSqliteDriver.prototype.isFullTextColumnTypeSupported = function () {\n return false;\n };\n /**\n * Creates an escaped parameter.\n */\n AbstractSqliteDriver.prototype.createParameter = function (parameterName, index) {\n // return \"$\" + (index + 1);\n return \"?\";\n // return \"$\" + parameterName;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n AbstractSqliteDriver.prototype.createDatabaseConnection = function () {\n throw new Error(\"Do not use AbstractSqlite directly, it has to be used with one of the sqlite drivers\");\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AbstractSqliteDriver.prototype.loadDependencies = function () {\n // dependencies have to be loaded in the specific driver\n };\n return AbstractSqliteDriver;\n}());\nexport { AbstractSqliteDriver };\n\n//# sourceMappingURL=AbstractSqliteDriver.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SoundManager = void 0;\nconst AudioChain_1 = require(\"./AudioChain\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst App_1 = require(\"../App\");\nconst DataManager_1 = require(\"../DataManager\");\nclass SoundManager {\n constructor() {\n this.channels = {};\n if ('AudioContext' in window) {\n this.context = new AudioContext();\n }\n else if ('webkitAudioContext' in window) {\n // @ts-ignore\n this.context = new webkitAudioContext();\n }\n else {\n throw new Error(\"No audio context found!\");\n }\n this.context.onstatechange = function () {\n console.log(\"stateChange from context\", arguments);\n };\n this.context.oncomplete = function () {\n console.log(\"onComplete from context\", arguments);\n };\n window.addEventListener(\"visibilitychange\", (e) => {\n // console.log(\"visibility Change event\", e);\n this.handleVisibilityChange();\n });\n //For safari\n let checkVisibility = () => {\n this.handleVisibilityChange();\n setTimeout(checkVisibility, 500);\n };\n checkVisibility();\n }\n static getInstance() {\n if (Helper_1.Helper.isNull(SoundManager._instance)) {\n SoundManager._instance = new SoundManager();\n }\n return SoundManager._instance;\n }\n isNotSuspended() {\n // return false;\n return this.context.state !== \"suspended\";\n }\n set(options, channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let audioObject = Helper_1.Helper.nonNull(this.channels[channel], {});\n if (typeof options === \"string\") {\n options = { audio: options };\n }\n let audio = options.audio;\n if (Helper_1.Helper.isNotNull(audio)) {\n audioObject.loadedPromise = DataManager_1.DataManager.loadAsset(audio, \"raw\").then(res => res.arrayBuffer()).then(arrayBuffer => {\n return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n }).catch(e => console.error(e));\n // audioObject.loadedPromise = fetch(audio).then(res => res.arrayBuffer()).then(arrayBuffer => {\n // return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n // }).catch(e => console.error(e));\n this.stop(channel);\n }\n audioObject.muted = Helper_1.Helper.nonNull(options.muted, audioObject.muted, false);\n audioObject.volume = Helper_1.Helper.nonNull(options.volume, audioObject.volume, 1);\n audioObject.loop = Helper_1.Helper.nonNull(options.loop, audioObject.loop, false);\n audioObject.timeOffset = Helper_1.Helper.nonNull(options.timeOffset, audioObject.timeOffset, 0);\n this.channels[channel] = audioObject;\n if (audioObject.muted) {\n this.stop(channel);\n }\n return this.channels[channel];\n }\n resumeContext() {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.context.resume === \"function\") {\n return this.context.resume();\n }\n });\n }\n play(channel, audioOrOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n this.resumeContext();\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNull(audioOrOptions)) {\n audioOrOptions = {};\n }\n else if (!(typeof audioOrOptions === \"object\")) {\n audioOrOptions = {\n audio: audioOrOptions\n };\n }\n audioOrOptions.timeOffset = Helper_1.Helper.nonNull(audioOrOptions.timeOffset, 0);\n this.stop(channel);\n this.set(audioOrOptions, channel);\n if (!this.channels[channel].muted) {\n let buffer = yield this.channels[channel].loadedPromise;\n let source = new AudioChain_1.AudioChain(this.context, buffer, (sourceNode) => {\n let gain = this.context.createGain();\n gain.gain.value = this.channels[channel].volume;\n sourceNode.connect(gain);\n gain.connect(this.context.destination);\n });\n source.setBuffer(buffer);\n //to prevent gap in mp3-files\n source.setLooping(this.channels[channel].loop, 0.3, buffer.duration - 0.3);\n this.channels[channel].source = source;\n yield source.start();\n }\n return this.channels[channel];\n });\n }\n stop(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let oldAudio = this.channels[channel];\n if (Helper_1.Helper.isNotNull(oldAudio) && Helper_1.Helper.isNotNull(oldAudio.source)) {\n oldAudio.source.stop();\n }\n }\n get(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n return this.channels[channel];\n }\n resume(channel) {\n return __awaiter(this, void 0, void 0, function* () {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNotNull(this.channels[channel]) && !this.channels[channel].muted && Helper_1.Helper.isNotNull(this.channels[channel].source)) {\n return this.channels[channel].source.resume();\n }\n });\n }\n stopAll() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.stop();\n }\n }\n }\n resumeAllIfNotMuted() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k]) && !this.channels[k].muted && Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.resume();\n }\n }\n }\n handleVisibilityChange() {\n if (document.hidden) {\n this.stopAll();\n }\n else {\n this.resumeAllIfNotMuted();\n }\n }\n}\nexports.SoundManager = SoundManager;\nSoundManager.CHANNELS = {\n MUSIC: \"music\",\n SOUND: \"sound\",\n DEFAULT: \"default\"\n};\nApp_1.App.addInitialization(app => {\n // PauseSite.onPauseListeners.push(() => {\n // SoundManager.getInstance().stopAll();\n // });\n // PauseSite.onStartListeners.push(() => {\n // SoundManager.getInstance().resumeAllIfNotMuted();\n // });\n});\n// AndroidBridge.addDefinition(() => {\n// window[\"soundManagerInstance\"] = SoundManager.getInstance();\n// window[\"soundManagerInstance\"][\"stopAll\"] = window[\"soundManagerInstance\"].stopAll;\n// window[\"soundManagerInstance\"][\"resumeAllIfNotMuted\"] = window[\"soundManagerInstance\"].resumeAllIfNotMuted;\n// });\n//# sourceMappingURL=SoundManager.js.map","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./BaseDatabase\"));\n__export(require(\"./BaseModel\"));\n__export(require(\"./cordova-sites-database\"));\n//# sourceMappingURL=cordova-sites-database.js.map","import { __read, __values } from \"tslib\";\nimport { hash } from \"../util/StringUtils\";\n/**\n * Common driver utility functions.\n */\nvar DriverUtils = /** @class */ (function () {\n function DriverUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes and builds a new driver options.\n * Extracts settings from connection url and sets to a new options object.\n */\n DriverUtils.buildDriverOptions = function (options, buildOptions) {\n var e_1, _a;\n if (options.url) {\n var urlDriverOptions = this.parseConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * buildDriverOptions for MongodDB only to support replica set\n */\n DriverUtils.buildMongoDBDriverOptions = function (options, buildOptions) {\n var e_2, _a;\n if (options.url) {\n var urlDriverOptions = this.parseMongoDBConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * Builds column alias from given alias name and column name.\n *\n * If alias length is greater than the limit (if any) allowed by the current\n * driver, replaces it with a hashed string.\n *\n * @param driver Current `Driver`.\n * @param alias Alias part.\n * @param column Name of the column to be concatened to `alias`.\n *\n * @return An alias allowing to select/transform the target `column`.\n */\n DriverUtils.buildColumnAlias = function (_a, alias, column) {\n var maxAliasLength = _a.maxAliasLength;\n var columnAliasName = alias + \"_\" + column;\n if (maxAliasLength && maxAliasLength > 0 && columnAliasName.length > maxAliasLength) {\n return hash(columnAliasName, { length: maxAliasLength });\n }\n return columnAliasName;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Extracts connection data from the connection url.\n */\n DriverUtils.parseConnectionUrl = function (url) {\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n var _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n return {\n type: type,\n host: host,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined\n };\n };\n /**\n * Extracts connection data from the connection url for MongoDB to support replica set.\n */\n DriverUtils.parseMongoDBConnectionUrl = function (url) {\n var _a;\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n var afterQuestionMark = \"\";\n var host = undefined;\n var port = undefined;\n var hostReplicaSet = undefined;\n var replicaSet = undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n // split params to get replica set\n afterQuestionMark = afterBase.substr((afterBase.indexOf(\"?\") + 1), afterBase.length);\n replicaSet = afterQuestionMark.split(\"=\")[1];\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n if (replicaSet) {\n hostReplicaSet = hostAndPort;\n }\n else {\n _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n }\n return {\n type: type,\n host: host,\n hostReplicaSet: hostReplicaSet,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined,\n replicaSet: replicaSet || undefined\n };\n };\n return DriverUtils;\n}());\nexport { DriverUtils };\n\n//# sourceMappingURL=DriverUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Provides utilities to transform hydrated and persisted data.\n */\nvar DateUtils = /** @class */ (function () {\n function DateUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes date object hydrated from the database.\n */\n DateUtils.normalizeHydratedDate = function (mixedDate) {\n if (!mixedDate)\n return mixedDate;\n return typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n };\n /**\n * Converts given value into date string in a \"YYYY-MM-DD\" format.\n */\n DateUtils.mixedDateToDateString = function (value) {\n if (value instanceof Date)\n return this.formatZerolessValue(value.getFullYear()) + \"-\" + this.formatZerolessValue(value.getMonth() + 1) + \"-\" + this.formatZerolessValue(value.getDate());\n return value;\n };\n /**\n * Converts given value into date object.\n */\n DateUtils.mixedDateToDate = function (mixedDate, toUtc, useMilliseconds) {\n if (toUtc === void 0) { toUtc = false; }\n if (useMilliseconds === void 0) { useMilliseconds = true; }\n var date = typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n if (toUtc)\n date = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n if (!useMilliseconds)\n date.setUTCMilliseconds(0);\n return date;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedDateToTimeString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n if (value instanceof Date)\n return this.formatZerolessValue(value.getHours()) +\n \":\" + this.formatZerolessValue(value.getMinutes()) +\n (!skipSeconds ? \":\" + this.formatZerolessValue(value.getSeconds()) : \"\");\n return value;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToDate = function (value) {\n if (typeof value === \"string\") {\n var _a = __read(value.split(\":\"), 3), hours = _a[0], minutes = _a[1], seconds = _a[2];\n var date = new Date();\n if (hours)\n date.setHours(parseInt(hours));\n if (minutes)\n date.setMinutes(parseInt(minutes));\n if (seconds)\n date.setSeconds(parseInt(seconds));\n return date;\n }\n return value;\n };\n /**\n * Converts given string value with \"-\" separator into a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n value = value instanceof Date ? (value.getHours() + \":\" + value.getMinutes() + (!skipSeconds ? \":\" + value.getSeconds() : \"\")) : value;\n if (typeof value === \"string\") {\n return value.split(\":\")\n .map(function (v) { return v.length === 1 ? \"0\" + v : v; }) // append zero at beginning if we have a first-zero-less number\n .join(\":\");\n }\n return value;\n };\n /**\n * Converts given value into datetime string in a \"YYYY-MM-DD HH-mm-ss\" format.\n */\n DateUtils.mixedDateToDatetimeString = function (value, useMilliseconds) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n var finalValue = this.formatZerolessValue(value.getFullYear()) + \"-\" +\n this.formatZerolessValue(value.getMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getDate()) + \" \" +\n this.formatZerolessValue(value.getHours()) + \":\" +\n this.formatZerolessValue(value.getMinutes()) + \":\" +\n this.formatZerolessValue(value.getSeconds());\n if (useMilliseconds)\n finalValue += \".\" + this.formatMilliseconds(value.getMilliseconds());\n value = finalValue;\n }\n return value;\n };\n /**\n * Converts given value into utc datetime string in a \"YYYY-MM-DD HH-mm-ss.sss\" format.\n */\n DateUtils.mixedDateToUtcDatetimeString = function (value) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n return this.formatZerolessValue(value.getUTCFullYear()) + \"-\" +\n this.formatZerolessValue(value.getUTCMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getUTCDate()) + \" \" +\n this.formatZerolessValue(value.getUTCHours()) + \":\" +\n this.formatZerolessValue(value.getUTCMinutes()) + \":\" +\n this.formatZerolessValue(value.getUTCSeconds()) + \".\" +\n this.formatMilliseconds(value.getUTCMilliseconds());\n }\n return value;\n };\n /**\n * Converts each item in the given array to string joined by \",\" separator.\n */\n DateUtils.simpleArrayToString = function (value) {\n if (Array.isArray(value)) {\n return value\n .map(function (i) { return String(i); })\n .join(\",\");\n }\n return value;\n };\n /**\n * Converts given string to simple array split by \",\" separator.\n */\n DateUtils.stringToSimpleArray = function (value) {\n if (value instanceof String || typeof value === \"string\") {\n if (value.length > 0) {\n return value.split(\",\");\n }\n else {\n return [];\n }\n }\n return value;\n };\n DateUtils.simpleJsonToString = function (value) {\n return JSON.stringify(value);\n };\n DateUtils.stringToSimpleJson = function (value) {\n return typeof value === \"string\" ? JSON.parse(value) : value;\n };\n DateUtils.simpleEnumToString = function (value) {\n return \"\" + value;\n };\n DateUtils.stringToSimpleEnum = function (value, columnMetadata) {\n if (columnMetadata.enum\n && !isNaN(value)\n && columnMetadata.enum.indexOf(parseInt(value)) >= 0) {\n // convert to number if that exists in poosible enum options\n value = parseInt(value);\n }\n return value;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatZerolessValue = function (value) {\n if (value < 10)\n return \"0\" + value;\n return String(value);\n };\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatMilliseconds = function (value) {\n if (value < 10) {\n return \"00\" + value;\n }\n else if (value < 100) {\n return \"0\" + value;\n }\n else {\n return String(value);\n }\n };\n return DateUtils;\n}());\nexport { DateUtils };\n\n//# sourceMappingURL=DateUtils.js.map\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Counter\"), exports);\n__exportStar(require(\"./shared/DateHelper\"), exports);\n__exportStar(require(\"./shared/Helper\"), exports);\n__exportStar(require(\"./shared/JsonHelper\"), exports);\n__exportStar(require(\"./shared/MigrationHelper\"), exports);\n__exportStar(require(\"./shared/Prioritized\"), exports);\n__exportStar(require(\"./shared/PromiseWithHandlers\"), exports);\n__exportStar(require(\"./shared/Random\"), exports);\n__exportStar(require(\"./shared/XSSHelper\"), exports);\n//# sourceMappingURL=shared.js.map","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","import { __values } from \"tslib\";\nvar ObjectUtils = /** @class */ (function () {\n function ObjectUtils() {\n }\n /**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target The target object to copy to.\n * @param sources One or more source objects from which to copy properties\n */\n ObjectUtils.assign = function (target) {\n var e_1, _a, e_2, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n try {\n for (var sources_1 = __values(sources), sources_1_1 = sources_1.next(); !sources_1_1.done; sources_1_1 = sources_1.next()) {\n var source = sources_1_1.value;\n try {\n for (var _c = (e_2 = void 0, __values(Object.getOwnPropertyNames(source))), _d = _c.next(); !_d.done; _d = _c.next()) {\n var prop = _d.value;\n target[prop] = source[prop];\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n return ObjectUtils;\n}());\nexport { ObjectUtils };\n\n//# sourceMappingURL=ObjectUtils.js.map\n","/**\n * Table's columns in the database represented in this class.\n */\nvar TableColumn = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableColumn(options) {\n /**\n * Indicates if column is NULL, or is NOT NULL in the database.\n */\n this.isNullable = false;\n /**\n * Indicates if column is auto-generated sequence.\n */\n this.isGenerated = false;\n /**\n * Indicates if column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if column has unique value.\n */\n this.isUnique = false;\n /**\n * Indicates if column stores array.\n */\n this.isArray = false;\n /**\n * Column type's length. Used only on some column types.\n * For example type = \"string\" and length = \"100\" means that ORM will create a column with type varchar(100).\n */\n this.length = \"\";\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n if (options) {\n this.name = options.name;\n this.type = options.type || \"\";\n this.length = options.length || \"\";\n this.width = options.width;\n this.charset = options.charset;\n this.collation = options.collation;\n this.precision = options.precision;\n this.scale = options.scale;\n this.zerofill = options.zerofill || false;\n this.unsigned = this.zerofill ? true : (options.unsigned || false);\n this.default = options.default;\n this.onUpdate = options.onUpdate;\n this.isNullable = options.isNullable || false;\n this.isGenerated = options.isGenerated || false;\n this.generationStrategy = options.generationStrategy;\n this.isPrimary = options.isPrimary || false;\n this.isUnique = options.isUnique || false;\n this.isArray = options.isArray || false;\n this.comment = options.comment;\n this.enum = options.enum;\n this.enumName = options.enumName;\n this.asExpression = options.asExpression;\n this.generatedType = options.generatedType;\n this.spatialFeatureType = options.spatialFeatureType;\n this.srid = options.srid;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this column to a new column with exact same properties as this column has.\n */\n TableColumn.prototype.clone = function () {\n return new TableColumn({\n name: this.name,\n type: this.type,\n length: this.length,\n width: this.width,\n charset: this.charset,\n collation: this.collation,\n precision: this.precision,\n scale: this.scale,\n zerofill: this.zerofill,\n unsigned: this.unsigned,\n enum: this.enum,\n enumName: this.enumName,\n asExpression: this.asExpression,\n generatedType: this.generatedType,\n default: this.default,\n onUpdate: this.onUpdate,\n isNullable: this.isNullable,\n isGenerated: this.isGenerated,\n generationStrategy: this.generationStrategy,\n isPrimary: this.isPrimary,\n isUnique: this.isUnique,\n isArray: this.isArray,\n comment: this.comment,\n spatialFeatureType: this.spatialFeatureType,\n srid: this.srid\n });\n };\n return TableColumn;\n}());\nexport { TableColumn };\n\n//# sourceMappingURL=TableColumn.js.map\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewHelper = void 0;\nclass ViewHelper {\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n from.childNodes.forEach(child => {\n children.push(child);\n });\n children.forEach(child => {\n from.removeChild(child);\n to.appendChild(child);\n });\n return to;\n }\n static insertAfter(newChild, referenceChild) {\n const parent = referenceChild.parentNode;\n if (parent) {\n if (parent.lastChild === referenceChild) {\n parent.appendChild(newChild);\n }\n else {\n parent.insertBefore(newChild, referenceChild.nextSibling);\n }\n return true;\n }\n return false;\n }\n}\nexports.ViewHelper = ViewHelper;\n//# sourceMappingURL=ViewHelper.js.map","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table unique constraint stored in this class.\n */\nvar TableUnique = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableUnique(options) {\n /**\n * Columns that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableUnique.prototype.clone = function () {\n return new TableUnique({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames))\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates unique from the unique metadata object.\n */\n TableUnique.create = function (uniqueMetadata) {\n return new TableUnique({\n name: uniqueMetadata.name,\n columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; })\n });\n };\n return TableUnique;\n}());\nexport { TableUnique };\n\n//# sourceMappingURL=TableUnique.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * This metadata contains all information about entity's column.\n */\nvar ColumnMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ColumnMetadata(options) {\n /**\n * Type's length in the database.\n */\n this.length = \"\";\n /**\n * Indicates if this column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if this column is generated (auto increment or generated other way).\n */\n this.isGenerated = false;\n /**\n * Indicates if column can contain nulls or not.\n */\n this.isNullable = false;\n /**\n * Indicates if column is selected by query builder or not.\n */\n this.isSelect = true;\n /**\n * Indicates if column is inserted by default or not.\n */\n this.isInsert = true;\n /**\n * Indicates if column allows updates or not.\n */\n this.isUpdate = true;\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n /**\n * Indicates if this column is an array.\n */\n this.isArray = false;\n /**\n * Indicates if column is virtual. Virtual columns are not mapped to the entity.\n */\n this.isVirtual = false;\n /**\n * Indicates if column is discriminator. Discriminator columns are not mapped to the entity.\n */\n this.isDiscriminator = false;\n /**\n * Indicates if column is tree-level column. Tree-level columns are used in closure entities.\n */\n this.isTreeLevel = false;\n /**\n * Indicates if this column contains an entity creation date.\n */\n this.isCreateDate = false;\n /**\n * Indicates if this column contains an entity update date.\n */\n this.isUpdateDate = false;\n /**\n * Indicates if this column contains an entity delete date.\n */\n this.isDeleteDate = false;\n /**\n * Indicates if this column contains an entity version.\n */\n this.isVersion = false;\n /**\n * Indicates if this column contains an object id.\n */\n this.isObjectId = false;\n /**\n * Indicates if this column is nested set's left column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetLeft = false;\n /**\n * Indicates if this column is nested set's right column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetRight = false;\n /**\n * Indicates if this column is materialized path's path column.\n * Used only in tree entities with materialized path type.\n */\n this.isMaterializedPath = false;\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.referencedColumn = options.referencedColumn;\n if (options.args.target)\n this.target = options.args.target;\n if (options.args.propertyName)\n this.propertyName = options.args.propertyName;\n if (options.args.options.name)\n this.givenDatabaseName = options.args.options.name;\n if (options.args.options.type)\n this.type = options.args.options.type;\n if (options.args.options.length)\n this.length = options.args.options.length ? options.args.options.length.toString() : \"\";\n if (options.args.options.width)\n this.width = options.args.options.width;\n if (options.args.options.charset)\n this.charset = options.args.options.charset;\n if (options.args.options.collation)\n this.collation = options.args.options.collation;\n if (options.args.options.primary)\n this.isPrimary = options.args.options.primary;\n if (options.args.options.default === null) // to make sure default: null is the same as nullable: true\n this.isNullable = true;\n if (options.args.options.nullable !== undefined)\n this.isNullable = options.args.options.nullable;\n if (options.args.options.select !== undefined)\n this.isSelect = options.args.options.select;\n if (options.args.options.insert !== undefined)\n this.isInsert = options.args.options.insert;\n if (options.args.options.update !== undefined)\n this.isUpdate = options.args.options.update;\n if (options.args.options.readonly !== undefined)\n this.isUpdate = !options.args.options.readonly;\n if (options.args.options.comment)\n this.comment = options.args.options.comment;\n if (options.args.options.default !== undefined)\n this.default = options.args.options.default;\n if (options.args.options.onUpdate)\n this.onUpdate = options.args.options.onUpdate;\n if (options.args.options.scale !== null && options.args.options.scale !== undefined)\n this.scale = options.args.options.scale;\n if (options.args.options.zerofill) {\n this.zerofill = options.args.options.zerofill;\n this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n }\n if (options.args.options.unsigned)\n this.unsigned = options.args.options.unsigned;\n if (options.args.options.precision !== undefined)\n this.precision = options.args.options.precision;\n if (options.args.options.enum) {\n if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) {\n this.enum = Object.keys(options.args.options.enum)\n .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them\n .map(function (key) { return options.args.options.enum[key]; });\n }\n else {\n this.enum = options.args.options.enum;\n }\n }\n if (options.args.options.enumName) {\n this.enumName = options.args.options.enumName;\n }\n if (options.args.options.asExpression) {\n this.asExpression = options.args.options.asExpression;\n this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : \"VIRTUAL\";\n }\n if (options.args.options.hstoreType)\n this.hstoreType = options.args.options.hstoreType;\n if (options.args.options.array)\n this.isArray = options.args.options.array;\n if (options.args.mode) {\n this.isVirtual = options.args.mode === \"virtual\";\n this.isTreeLevel = options.args.mode === \"treeLevel\";\n this.isCreateDate = options.args.mode === \"createDate\";\n this.isUpdateDate = options.args.mode === \"updateDate\";\n this.isDeleteDate = options.args.mode === \"deleteDate\";\n this.isVersion = options.args.mode === \"version\";\n this.isObjectId = options.args.mode === \"objectId\";\n }\n if (options.args.options.transformer)\n this.transformer = options.args.options.transformer;\n if (options.args.options.spatialFeatureType)\n this.spatialFeatureType = options.args.options.spatialFeatureType;\n if (options.args.options.srid !== undefined)\n this.srid = options.args.options.srid;\n if (this.isTreeLevel)\n this.type = options.connection.driver.mappedDataTypes.treeLevel;\n if (this.isCreateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.createDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; };\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.createDatePrecision;\n }\n if (this.isUpdateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.updateDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; };\n if (!this.onUpdate)\n this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision;\n }\n if (this.isDeleteDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.deleteDate;\n if (!this.isNullable)\n this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision;\n }\n if (this.isVersion)\n this.type = options.connection.driver.mappedDataTypes.version;\n if (options.closureType)\n this.closureType = options.closureType;\n if (options.nestedSetLeft)\n this.isNestedSetLeft = options.nestedSetLeft;\n if (options.nestedSetRight)\n this.isNestedSetRight = options.nestedSetRight;\n if (options.materializedPath)\n this.isMaterializedPath = options.materializedPath;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates entity id map from the given entity ids array.\n */\n ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) {\n var _a;\n var _this = this;\n if (useDatabaseName === void 0) { useDatabaseName = false; }\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_1 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_1(propertyNames, map[propertyName]);\n return map;\n }\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((_this.generationStrategy === \"increment\" || _this.generationStrategy === \"rowid\") && _this.type === \"bigint\" && value !== null)\n value = String(value);\n map[useDatabaseName ? _this.databaseName : _this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_1(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((this.generationStrategy === \"increment\" || this.generationStrategy === \"rowid\") && this.type === \"bigint\" && value !== null)\n value = String(value);\n return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a;\n }\n };\n /**\n * Extracts column value and returns its column name with this value in a literal object.\n * If column is in embedded (or recursive embedded) it returns complex literal object.\n *\n * Examples what this method can return depend if this column is in embeds.\n * { id: 1 } or { title: \"hello\" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } }\n */\n ColumnMetadata.prototype.getEntityValueMap = function (entity, options) {\n var _a, _b;\n var _this = this;\n var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will.\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) {\n var propertyName = propertyNames.shift();\n if (value === undefined)\n return map;\n if (propertyName) {\n var submap = {};\n extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap);\n if (Object.keys(submap).length > 0) {\n map[propertyName] = submap;\n }\n return map;\n }\n if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null))\n map[_this.propertyName] = value[_this.propertyName];\n return map;\n };\n var map = {};\n extractEmbeddedColumnValue_2(propertyNames, entity, map);\n return Object.keys(map).length > 0 ? map : undefined;\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) {\n var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) {\n var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]);\n if (value === undefined)\n return map;\n return OrmUtils.mergeDeep(map, value);\n }, {});\n if (Object.keys(map).length > 0)\n return _a = {}, _a[this.propertyName] = map, _a;\n return undefined;\n }\n else {\n if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null))\n return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b;\n return undefined;\n }\n }\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n ColumnMetadata.prototype.getEntityValue = function (entity, transform) {\n if (transform === void 0) { transform = false; }\n if (entity === undefined || entity === null)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n var value = undefined;\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_3 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity);\n if (embeddedObject) {\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(entity);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator) && !(relatedEntity instanceof Function)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof FindOperator) && !(entity[this.propertyName] instanceof Function)) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n if (transform && this.transformer)\n value = ApplyValueTransformers.transformTo(this.transformer, value);\n return value;\n };\n /**\n * Sets given entity's column value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n */\n ColumnMetadata.prototype.setEntityValue = function (entity, value) {\n var _this = this;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_4(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n // we write a deep object in this entity only if the column is virtual\n // because if its not virtual it means the user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) {\n if (!(this.propertyName in entity)) {\n entity[this.propertyName] = {};\n }\n entity[this.propertyName][this.referencedColumn.propertyName] = value;\n }\n else {\n entity[this.propertyName] = value;\n }\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n ColumnMetadata.prototype.build = function (connection) {\n this.propertyPath = this.buildPropertyPath();\n this.propertyAliasName = this.propertyPath.replace(\".\", \"_\");\n this.databaseName = this.buildDatabaseName(connection);\n this.databasePath = this.buildDatabasePath();\n this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []);\n return this;\n };\n ColumnMetadata.prototype.buildPropertyPath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.propertyName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName)\n path += \".\" + this.referencedColumn.propertyName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabasePath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.databaseName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName)\n path += \".\" + this.referencedColumn.databaseName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabaseName = function (connection) {\n var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : [];\n if (connection.driver instanceof MongoDriver) // we don't need to include embedded name for the mongodb column names\n propertyNames = [];\n return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames);\n };\n return ColumnMetadata;\n}());\nexport { ColumnMetadata };\n\n//# sourceMappingURL=ColumnMetadata.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst NativeStoragePromise_1 = require(\"./NativeStoragePromise\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"../../shared/Translator\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator extends Translator_1.Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config) {\n super(config);\n config = Helper_1.Helper.nonNull(config, {});\n this._currentLanguage = config.currentLanguage || this._fallbackLanguage;\n this._nativeStorageKey = config.nativeStorageKey || \"language\";\n this._translationClass = config.translationClass || \"translation\";\n this._initPromise = this.loadUserLanguage().then(userLanguage => this.setLanguage(userLanguage.toLowerCase()));\n }\n /**\n * Setzt die neue Sprache, updated alle Übersetzungen. Speichert danach die aktuelle Sprache in NativeStorage\n * @param language\n */\n setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._currentLanguage === language) {\n yield this.updateTranslations();\n return;\n }\n if (!this._translations[language]) {\n return;\n }\n if (typeof document !== 'undefined') {\n document.getElementsByTagName(\"html\")[0].setAttribute(\"lang\", language);\n }\n this._currentLanguage = language;\n yield this.updateTranslations();\n //zum schluss => Falls setzen des Keys fehlschlägt, wird trotzdem noch übersetzt\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this._nativeStorageKey, this._currentLanguage);\n });\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @returns {*}\n */\n translate(key, args, language) {\n return super.translate(key, args, Helper_1.Helper.nonNull(language, this._currentLanguage));\n }\n /**\n * Fügt eine Callback hinzu, die aufgerufen wird, sobald die Seite übersetzt wird. Sollte genutzt werden, um Teile\n * zu übersetzen, die nicht per HTML übersetzt werden können, die der Document Title\n *\n * wenn callImmediately true ist (default), wird die Callback sofort einmal ausgeführt\n *\n * Gibt die CallbackId zurück\n *\n * @param callback\n * @param callImmediately\n * @returns {number}\n */\n addTranslationCallback(callback, callImmediately) {\n callImmediately = Helper_1.Helper.nonNull(callImmediately, true);\n this._lastTranslationCallbackId++;\n this._translationCallbacks.set(this._lastTranslationCallbackId, callback);\n if (callImmediately) {\n callback();\n }\n return this._lastTranslationCallbackId;\n }\n /**\n * Entfernt die Callback anhand der gegebenen ID\n *\n * @param callbackId\n */\n removeTranslationCallback(callbackId) {\n this._translationCallbacks.delete(callbackId);\n }\n /**\n * Updated die aktuellen übersetzungen\n */\n updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n baseElement = Helper_1.Helper.nonNull(baseElement, document);\n if (typeof baseElement !== 'undefined') {\n let elements = baseElement.getElementsByClassName(this._translationClass);\n for (let i = 0, max = elements.length; i < max; i++) {\n let key = (Translator._isValid(elements[i].dataset[\"translation\"]) ? elements[i].dataset[\"translation\"] : (elements[i].innerText || \"\"));\n if (key !== \"\" && !elements[i].dataset[\"onlyTranslateAttributes\"]) {\n try {\n let translation = this.translate(key, (elements[i].dataset[\"translationArgs\"] !== undefined) ? JSON.parse(elements[i].dataset[\"translationArgs\"]) : undefined);\n if (elements[i].dataset[\"translationUseText\"] === \"1\") {\n elements[i].innerText = translation;\n }\n else {\n elements[i].innerHTML = translation;\n }\n elements[i].dataset[\"translation\"] = key;\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n //Übersetzung von Attributen\n for (let k in elements[i].dataset) {\n if (k.startsWith(\"translation\") && !k.endsWith(\"Args\")) {\n try {\n elements[i][k.substr(11).toLowerCase()] = this.translate(elements[i].dataset[k], (elements[i].dataset[k + \"Args\"] !== undefined) ? JSON.parse(elements[i].dataset[k + \"Args\"]) : undefined);\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n }\n }\n }\n //Call translation callbacks\n yield Helper_1.Helper.asyncForEach(this._translationCallbacks, (callback) => __awaiter(this, void 0, void 0, function* () { return callback(baseElement); }));\n // this._translationCallbacks.forEach(callback => callback(baseElement));\n });\n }\n /**\n * Lädt die im NativeStorage gespeicherte Sprache oder - falls diese nicht vorhanden ist - die vom User untersütze Sprache im Browser\n * @returns {Promise<*>}\n */\n loadUserLanguage() {\n return __awaiter(this, void 0, void 0, function* () {\n let userLanguage = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this._nativeStorageKey);\n if (!Translator._isValid(userLanguage) || !(userLanguage in this._translations)) {\n let userLanguages = [];\n if (navigator.language !== undefined) {\n userLanguages.push(navigator.language);\n }\n if (\"languages\" in navigator) {\n //.slice(0) klont das Array. Behebt einen Bug in Firefox\n userLanguages = navigator.languages.slice(0);\n }\n //sicherstellen, dass überhaupt eine Sprache gefunden wird\n userLanguages.push(this._fallbackLanguage);\n // if (userLanguages !== undefined) {\n for (let i = 0, numLanguages = userLanguages.length; i < numLanguages; i++) {\n if (userLanguages[i] in this._translations) {\n userLanguage = userLanguages[i];\n break;\n }\n }\n // }\n }\n return userLanguage;\n });\n }\n /**\n * Erstellt eine neue Übersetzung, welche auch übersetzt wird, wenn die Sprache geändert wird\n * @param key\n * @param args\n * @param tag\n * @param useText\n * @returns {any}\n */\n makePersistentTranslation(key, args, tag, useText) {\n useText = Helper_1.Helper.nonNull(useText, tag, args, false);\n tag = tag || \"span\";\n if (typeof document !== 'undefined') {\n let htmlElem = document.createElement(tag);\n htmlElem.dataset[\"translation\"] = key;\n htmlElem.classList.add(this._translationClass);\n if (args !== undefined) {\n htmlElem.dataset[\"translationArgs\"] = JSON.stringify(args);\n }\n if (useText === true) {\n htmlElem.innerText = this.translate(key, args);\n htmlElem.dataset[\"translationUseText\"] = \"1\";\n }\n else {\n htmlElem.innerHTML = this.translate(key, args);\n }\n return htmlElem;\n }\n }\n getTranslationClass() {\n return this._translationClass;\n }\n getCurrentLanguage() {\n return this._currentLanguage;\n }\n static getInstance() {\n return Translator_1.Translator.getInstance();\n }\n static setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.setLanguage(language);\n }\n });\n }\n static makePersistentTranslation(key, args, tag, useText) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.makePersistentTranslation(key, args, tag, useText);\n }\n }\n static addTranslationCallback(callback, callImmediately) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addTranslationCallback(callback, callImmediately);\n }\n }\n static removeTranslationCallback(callbackId) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.removeTranslationCallback(callbackId);\n }\n }\n static updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.updateTranslations(baseElement);\n }\n });\n }\n static init(config) {\n Translator_1.Translator.instance = new Translator(config);\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.logMissingTranslations = true;\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.App = void 0;\n/**\n * Eine Klasse, welche als Ursprung für die App genutzt wird\n */\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst SiteManager_1 = require(\"./Context/SiteManager\");\nclass App {\n /**\n * Erstellt eine neue App, speichert ein internes Promise, welches resolved wird, sobald das deviceready-Event gefeuert wird\n */\n constructor() {\n this._resolver = { resolve: null, reject: null };\n this._readyPromise = new Promise(r => document.addEventListener(\"deviceready\", r, false));\n this._deepLinks = {};\n this._siteManager = SiteManager_1.SiteManager.getInstance();\n }\n addDeepLink(link, siteConstructor) {\n this._deepLinks[link] = siteConstructor;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._siteManager) {\n return this._siteManager.startSite(site, args);\n }\n });\n }\n static setLogo(logo) {\n this._logo = logo;\n }\n static getLogo() {\n return this._logo;\n }\n start(startSiteConstructor) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.ready();\n let initialSiteConstructor = startSiteConstructor;\n let params = App._getStartParams();\n this.startingSite = initialSiteConstructor;\n this.startingSiteParameters = params;\n if (Helper_1.Helper.isNotNull(params[\"s\"])) {\n startSiteConstructor = Helper_1.Helper.nonNull(this._deepLinks[params[\"s\"]], startSiteConstructor);\n delete params[\"s\"];\n }\n this.startingSiteParameters = null;\n let siteManager = this._siteManager;\n siteManager.init(\"site\", this._deepLinks);\n Helper_1.Helper.removeAllChildren(document.getElementById(\"site\"));\n siteManager.startSite(startSiteConstructor, params);\n siteManager.setAppEndedListener(manager => {\n manager.startSite(initialSiteConstructor);\n });\n });\n }\n /**\n * Startet die erste Seite\n */\n startStartingSite() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.startingSite) {\n return this.startSite(this.startingSite, this.startingSiteParameters);\n }\n });\n }\n /**\n * Führt die Callback aus, sobald das interne Promise aufgelöst wird und App._promises fertig sind oder gibt das interne Promise zurück\n *\n * @param callback\n * @returns {Promise<*>}\n */\n ready(callback) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._readyPromise.then(() => {\n App._resolver.resolve(this);\n return Promise.all(App._promises);\n });\n if (callback) {\n return promise.then(callback);\n }\n else {\n return promise;\n }\n });\n }\n static addInitialization(callbackOrPromise) {\n if (typeof callbackOrPromise === \"function\") {\n let promise = callbackOrPromise;\n callbackOrPromise = App._mainPromise.then((app) => {\n return promise(app);\n });\n }\n App._promises.push(callbackOrPromise);\n }\n static _getStartParams() {\n return Object.assign(App._extractParams(window.location.search.substr(1)), App._startParams);\n }\n static _extractParams(paramString) {\n if (Helper_1.Helper.isNull(paramString)) {\n return null;\n }\n let result = {}, tmp = [];\n let items = paramString.split(\"&\");\n for (let index = 0; index < items.length; index++) {\n tmp = items[index].split(\"=\");\n if (tmp[0].trim().length > 0) {\n result[tmp[0]] = decodeURIComponent(tmp[1]);\n }\n }\n return result;\n }\n static setStartParam(name, value) {\n this._startParams[name] = value;\n }\n}\nexports.App = App;\nApp._promises = [];\nApp._resolver = {\n resolve: null,\n reject: null,\n};\nApp._mainPromise = new Promise((res, rej) => {\n App._resolver = {\n resolve: res,\n reject: rej,\n };\n});\nApp._startParams = {};\n//# sourceMappingURL=App.js.map","import { __extends } from \"tslib\";\n/**\n */\nvar QueryRunnerAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerAlreadyReleasedError, _super);\n function QueryRunnerAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerAlreadyReleasedError.prototype);\n _this.message = \"Query runner already released. Cannot run queries anymore.\";\n return _this;\n }\n return QueryRunnerAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerAlreadyReleasedError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { CannotCreateEntityIdMapError } from \"../error/CannotCreateEntityIdMapError\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Contains all entity metadata.\n */\nvar EntityMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityMetadata(options) {\n /**\n * Children entity metadatas. Used in inheritance patterns.\n */\n this.childEntityMetadatas = [];\n /**\n * All \"inheritance tree\" from a target entity.\n * For example for target Post < ContentModel < Unit it will be an array of [Post, ContentModel, Unit].\n * It also contains child entities for single table inheritance.\n */\n this.inheritanceTree = [];\n /**\n * Table type. Tables can be abstract, closure, junction, embedded, etc.\n */\n this.tableType = \"regular\";\n /**\n * Enables Sqlite \"WITHOUT ROWID\" modifier for the \"CREATE TABLE\" statement\n */\n this.withoutRowid = false;\n /**\n * Indicates if schema will be synchronized for this entity or not.\n */\n this.synchronize = true;\n /**\n * Checks if there any non-nullable column exist in this entity.\n */\n this.hasNonNullableRelations = false;\n /**\n * Indicates if this entity metadata of a junction table, or not.\n * Junction table is a table created by many-to-many relationship.\n *\n * Its also possible to understand if entity is junction via tableType.\n */\n this.isJunction = false;\n /**\n * Checks if this table is a junction table of the closure table.\n * This type is for tables that contain junction metadata of the closure tables.\n */\n this.isClosureJunction = false;\n /**\n * Checks if entity's table has multiple primary columns.\n */\n this.hasMultiplePrimaryKeys = false;\n /**\n * Indicates if this entity metadata has uuid generated columns.\n */\n this.hasUUIDGeneratedColumns = false;\n /**\n * Entity's column metadatas defined by user.\n */\n this.ownColumns = [];\n /**\n * Columns of the entity, including columns that are coming from the embeddeds of this entity.\n */\n this.columns = [];\n /**\n * Ancestor columns used only in closure junction tables.\n */\n this.ancestorColumns = [];\n /**\n * Descendant columns used only in closure junction tables.\n */\n this.descendantColumns = [];\n /**\n * All columns except for virtual columns.\n */\n this.nonVirtualColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of owner entity.\n */\n this.ownerColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of inverse entity.\n */\n this.inverseColumns = [];\n /**\n * Gets the column with generated flag.\n */\n this.generatedColumns = [];\n /**\n * Gets the primary columns.\n */\n this.primaryColumns = [];\n /**\n * Entity's relation metadatas.\n */\n this.ownRelations = [];\n /**\n * Relations of the entity, including relations that are coming from the embeddeds of this entity.\n */\n this.relations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.eagerRelations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.lazyRelations = [];\n /**\n * Gets only one-to-one relations of the entity.\n */\n this.oneToOneRelations = [];\n /**\n * Gets only owner one-to-one relations of the entity.\n */\n this.ownerOneToOneRelations = [];\n /**\n * Gets only one-to-many relations of the entity.\n */\n this.oneToManyRelations = [];\n /**\n * Gets only many-to-one relations of the entity.\n */\n this.manyToOneRelations = [];\n /**\n * Gets only many-to-many relations of the entity.\n */\n this.manyToManyRelations = [];\n /**\n * Gets only owner many-to-many relations of the entity.\n */\n this.ownerManyToManyRelations = [];\n /**\n * Gets only owner one-to-one and many-to-one relations.\n */\n this.relationsWithJoinColumns = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationIds = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationCounts = [];\n /**\n * Entity's foreign key metadatas.\n */\n this.foreignKeys = [];\n /**\n * Entity's embedded metadatas.\n */\n this.embeddeds = [];\n /**\n * All embeddeds - embeddeds from this entity metadata and from all child embeddeds, etc.\n */\n this.allEmbeddeds = [];\n /**\n * Entity's own indices.\n */\n this.ownIndices = [];\n /**\n * Entity's index metadatas.\n */\n this.indices = [];\n /**\n * Entity's unique metadatas.\n */\n this.uniques = [];\n /**\n * Entity's own uniques.\n */\n this.ownUniques = [];\n /**\n * Entity's check metadatas.\n */\n this.checks = [];\n /**\n * Entity's exclusion metadatas.\n */\n this.exclusions = [];\n /**\n * Entity's own listener metadatas.\n */\n this.ownListeners = [];\n /**\n * Entity listener metadatas.\n */\n this.listeners = [];\n /**\n * Listener metadatas with \"AFTER LOAD\" type.\n */\n this.afterLoadListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.beforeInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.afterInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.beforeUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.afterUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.beforeRemoveListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.afterRemoveListeners = [];\n this.connection = options.connection;\n this.inheritanceTree = options.inheritanceTree || [];\n this.inheritancePattern = options.inheritancePattern;\n this.treeType = options.tableTree ? options.tableTree.type : undefined;\n this.treeOptions = options.tableTree ? options.tableTree.options : undefined;\n this.parentClosureEntityMetadata = options.parentClosureEntityMetadata;\n this.tableMetadataArgs = options.args;\n this.target = this.tableMetadataArgs.target;\n this.tableType = this.tableMetadataArgs.type;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new entity.\n */\n EntityMetadata.prototype.create = function (queryRunner) {\n var _this = this;\n // if target is set to a function (e.g. class) that can be created then create it\n var ret;\n if (this.target instanceof Function) {\n ret = new this.target();\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, ret, queryRunner); });\n return ret;\n }\n // otherwise simply return a new empty object\n var newObject = {};\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, newObject, queryRunner); });\n return newObject;\n };\n /**\n * Checks if given entity has an id.\n */\n EntityMetadata.prototype.hasId = function (entity) {\n if (!entity)\n return false;\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined && value !== \"\";\n });\n };\n /**\n * Checks if given entity / object contains ALL primary keys entity must have.\n * Returns true if it contains all of them, false if at least one of them is not defined.\n */\n EntityMetadata.prototype.hasAllPrimaryKeys = function (entity) {\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined;\n });\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n EntityMetadata.prototype.ensureEntityIdMap = function (id) {\n if (id instanceof Object)\n return id;\n if (this.hasMultiplePrimaryKeys)\n throw new CannotCreateEntityIdMapError(this, id);\n return this.primaryColumns[0].createValueMap(id);\n };\n /**\n * Gets primary keys of the entity and returns them in a literal object.\n * For example, for Post{ id: 1, title: \"hello\" } where id is primary it will return { id: 1 }\n * For multiple primary keys it returns multiple keys in object.\n * For primary keys inside embeds it returns complex object literal with keys in them.\n */\n EntityMetadata.prototype.getEntityIdMap = function (entity) {\n if (!entity)\n return undefined;\n return EntityMetadata.getValueMap(entity, this.primaryColumns, { skipNulls: true });\n };\n /**\n * Creates a \"mixed id map\".\n * If entity has multiple primary keys (ids) then it will return just regular id map, like what getEntityIdMap returns.\n * But if entity has a single primary key then it will return just value of the id column of the entity, just value.\n * This is called mixed id map.\n */\n EntityMetadata.prototype.getEntityIdMixedMap = function (entity) {\n if (!entity)\n return entity;\n var idMap = this.getEntityIdMap(entity);\n if (this.hasMultiplePrimaryKeys) {\n return idMap;\n }\n else if (idMap) {\n return this.primaryColumns[0].getEntityValue(idMap); // todo: what about parent primary column?\n }\n return idMap;\n };\n /**\n * Compares two different entities by their ids.\n * Returns true if they match, false otherwise.\n */\n EntityMetadata.prototype.compareEntities = function (firstEntity, secondEntity) {\n var firstEntityIdMap = this.getEntityIdMap(firstEntity);\n if (!firstEntityIdMap)\n return false;\n var secondEntityIdMap = this.getEntityIdMap(secondEntity);\n if (!secondEntityIdMap)\n return false;\n return OrmUtils.compareIds(firstEntityIdMap, secondEntityIdMap);\n };\n /**\n * Finds column with a given property name.\n */\n EntityMetadata.prototype.findColumnWithPropertyName = function (propertyName) {\n return this.columns.find(function (column) { return column.propertyName === propertyName; });\n };\n /**\n * Finds column with a given database name.\n */\n EntityMetadata.prototype.findColumnWithDatabaseName = function (databaseName) {\n return this.columns.find(function (column) { return column.databaseName === databaseName; });\n };\n /**\n * Finds column with a given property path.\n */\n EntityMetadata.prototype.findColumnWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return column;\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns.length === 1)\n return relation.joinColumns[0];\n return undefined;\n };\n /**\n * Finds columns with a given property path.\n * Property path can match a relation, and relations can contain multiple columns.\n */\n EntityMetadata.prototype.findColumnsWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return [column];\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns)\n return relation.joinColumns;\n return [];\n };\n /**\n * Finds relation with the given property path.\n */\n EntityMetadata.prototype.findRelationWithPropertyPath = function (propertyPath) {\n return this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n };\n /**\n * Checks if there is an embedded with a given property path.\n */\n EntityMetadata.prototype.hasEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.some(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Finds embedded with a given property path.\n */\n EntityMetadata.prototype.findEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.find(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Iterates through entity and finds and extracts all values from relations in the entity.\n * If relation value is an array its being flattened.\n */\n EntityMetadata.prototype.extractRelationValuesFromEntity = function (entity, relations) {\n var _this = this;\n var relationsAndValues = [];\n relations.forEach(function (relation) {\n var value = relation.getEntityValue(entity);\n if (Array.isArray(value)) {\n value.forEach(function (subValue) { return relationsAndValues.push([relation, subValue, _this.getInverseEntityMetadata(subValue, relation)]); });\n }\n else if (value) {\n relationsAndValues.push([relation, value, _this.getInverseEntityMetadata(value, relation)]);\n }\n });\n return relationsAndValues;\n };\n EntityMetadata.prototype.getInverseEntityMetadata = function (value, relation) {\n var childEntityMetadata = relation.inverseEntityMetadata.childEntityMetadatas.find(function (metadata) {\n return metadata.target === value.constructor;\n });\n return childEntityMetadata ? childEntityMetadata : relation.inverseEntityMetadata;\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a property paths for a given entity.\n */\n EntityMetadata.createPropertyPath = function (metadata, entity, prefix) {\n var _this = this;\n if (prefix === void 0) { prefix = \"\"; }\n var paths = [];\n Object.keys(entity).forEach(function (key) {\n // check for function is needed in the cases when createPropertyPath used on values containg a function as a value\n // example: .update().set({ name: () => `SUBSTR('', 1, 2)` })\n var parentPath = prefix ? prefix + \".\" + key : key;\n if (metadata.hasEmbeddedWithPropertyPath(parentPath)) {\n var subPaths = _this.createPropertyPath(metadata, entity[key], parentPath);\n paths.push.apply(paths, __spreadArray([], __read(subPaths)));\n }\n else {\n var path = prefix ? prefix + \".\" + key : key;\n paths.push(path);\n }\n });\n return paths;\n };\n /**\n * Finds difference between two entity id maps.\n * Returns items that exist in the first array and absent in the second array.\n */\n EntityMetadata.difference = function (firstIdMaps, secondIdMaps) {\n return firstIdMaps.filter(function (firstIdMap) {\n return !secondIdMaps.find(function (secondIdMap) { return OrmUtils.compareIds(firstIdMap, secondIdMap); });\n });\n };\n /**\n * Creates value map from the given values and columns.\n * Examples of usages are primary columns map and join columns map.\n */\n EntityMetadata.getValueMap = function (entity, columns, options) {\n return columns.reduce(function (map, column) {\n var value = column.getEntityValueMap(entity, options);\n // make sure that none of the values of the columns are not missing\n if (map === undefined || value === null || value === undefined)\n return undefined;\n return column.isObjectId ? Object.assign(map, value) : OrmUtils.mergeDeep(map, value);\n }, {});\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n EntityMetadata.prototype.build = function () {\n var namingStrategy = this.connection.namingStrategy;\n var entityPrefix = this.connection.options.entityPrefix;\n this.engine = this.tableMetadataArgs.engine;\n this.database = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.database : this.tableMetadataArgs.database;\n if (this.tableMetadataArgs.schema) {\n this.schema = this.tableMetadataArgs.schema;\n }\n else if ((this.tableMetadataArgs.type === \"entity-child\") && this.parentEntityMetadata) {\n this.schema = this.parentEntityMetadata.schema;\n }\n else {\n this.schema = this.connection.options.schema;\n }\n this.givenTableName = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.givenTableName : this.tableMetadataArgs.name;\n this.synchronize = this.tableMetadataArgs.synchronize === false ? false : true;\n this.targetName = this.tableMetadataArgs.target instanceof Function ? this.tableMetadataArgs.target.name : this.tableMetadataArgs.target;\n if (this.tableMetadataArgs.type === \"closure-junction\") {\n this.tableNameWithoutPrefix = namingStrategy.closureJunctionTableName(this.givenTableName);\n }\n else if (this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata) {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.parentEntityMetadata.targetName, this.parentEntityMetadata.givenTableName);\n }\n else {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.targetName, this.givenTableName);\n if (this.connection.driver.maxAliasLength && this.connection.driver.maxAliasLength > 0 && this.tableNameWithoutPrefix.length > this.connection.driver.maxAliasLength) {\n this.tableNameWithoutPrefix = shorten(this.tableNameWithoutPrefix, { separator: \"_\", segmentLength: 3 });\n }\n }\n this.tableName = entityPrefix ? namingStrategy.prefixTableName(entityPrefix, this.tableNameWithoutPrefix) : this.tableNameWithoutPrefix;\n this.target = this.target ? this.target : this.tableName;\n this.name = this.targetName ? this.targetName : this.tableName;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid === true ? true : false;\n this.tablePath = this.buildTablePath();\n this.schemaPath = this.buildSchemaPath();\n this.orderBy = (this.tableMetadataArgs.orderBy instanceof Function) ? this.tableMetadataArgs.orderBy(this.propertiesMap) : this.tableMetadataArgs.orderBy; // todo: is propertiesMap available here? Looks like its not\n this.isJunction = this.tableMetadataArgs.type === \"closure-junction\" || this.tableMetadataArgs.type === \"junction\";\n this.isClosureJunction = this.tableMetadataArgs.type === \"closure-junction\";\n };\n /**\n * Registers a new column in the entity and recomputes all depend properties.\n */\n EntityMetadata.prototype.registerColumn = function (column) {\n if (this.ownColumns.indexOf(column) !== -1)\n return;\n this.ownColumns.push(column);\n this.columns = this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, this.ownColumns);\n this.primaryColumns = this.columns.filter(function (column) { return column.isPrimary; });\n this.hasMultiplePrimaryKeys = this.primaryColumns.length > 1;\n this.hasUUIDGeneratedColumns = this.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n this.propertiesMap = this.createPropertiesMap();\n if (this.childEntityMetadatas)\n this.childEntityMetadatas.forEach(function (entityMetadata) { return entityMetadata.registerColumn(column); });\n };\n /**\n * Creates a special object - all columns and relations of the object (plus columns and relations from embeds)\n * in a special format - { propertyName: propertyName }.\n *\n * example: Post{ id: number, name: string, counterEmbed: { count: number }, category: Category }.\n * This method will create following object:\n * { id: \"id\", counterEmbed: { count: \"counterEmbed.count\" }, category: \"category\" }\n */\n EntityMetadata.prototype.createPropertiesMap = function () {\n var map = {};\n this.columns.forEach(function (column) { return OrmUtils.mergeDeep(map, column.createValueMap(column.propertyPath)); });\n this.relations.forEach(function (relation) { return OrmUtils.mergeDeep(map, relation.createValueMap(relation.propertyPath)); });\n return map;\n };\n /**\n * Builds table path using database name, schema name and table name.\n */\n EntityMetadata.prototype.buildTablePath = function () {\n var tablePath = this.tableName;\n if (this.schema && ((this.connection.driver instanceof OracleDriver) || (this.connection.driver instanceof PostgresDriver) || (this.connection.driver instanceof SqlServerDriver) || (this.connection.driver instanceof SapDriver))) {\n tablePath = this.schema + \".\" + tablePath;\n }\n if (this.database && !(this.connection.driver instanceof PostgresDriver)) {\n if (!this.schema && this.connection.driver instanceof SqlServerDriver) {\n tablePath = this.database + \"..\" + tablePath;\n }\n else {\n tablePath = this.database + \".\" + tablePath;\n }\n }\n return tablePath;\n };\n /**\n * Builds table path using schema name and database name.\n */\n EntityMetadata.prototype.buildSchemaPath = function () {\n if (!this.schema)\n return undefined;\n return this.database && !(this.connection.driver instanceof PostgresDriver) ? this.database + \".\" + this.schema : this.schema;\n };\n return EntityMetadata;\n}());\nexport { EntityMetadata };\n\n//# sourceMappingURL=EntityMetadata.js.map\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","import { __extends } from \"tslib\";\n/**\n * Thrown if some required driver's option is not set.\n */\nvar DriverOptionNotSetError = /** @class */ (function (_super) {\n __extends(DriverOptionNotSetError, _super);\n function DriverOptionNotSetError(optionName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverOptionNotSetError\";\n Object.setPrototypeOf(_this, DriverOptionNotSetError.prototype);\n _this.message = \"Driver option (\" + optionName + \") is not set. Please set it to perform connection to the database.\";\n return _this;\n }\n return DriverOptionNotSetError;\n}(Error));\nexport { DriverOptionNotSetError };\n\n//# sourceMappingURL=DriverOptionNotSetError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table index stored in this class.\n */\nvar TableIndex = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableIndex(options) {\n /**\n * Columns included in this index.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.isUnique = !!options.isUnique;\n this.isSpatial = !!options.isSpatial;\n this.isFulltext = !!options.isFulltext;\n this.parser = options.parser;\n this.where = options.where ? options.where : \"\";\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this index with exactly same properties.\n */\n TableIndex.prototype.clone = function () {\n return new TableIndex({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n isUnique: this.isUnique,\n isSpatial: this.isSpatial,\n isFulltext: this.isFulltext,\n parser: this.parser,\n where: this.where\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates index from the index metadata object.\n */\n TableIndex.create = function (indexMetadata) {\n return new TableIndex({\n name: indexMetadata.name,\n columnNames: indexMetadata.columns.map(function (column) { return column.databaseName; }),\n isUnique: indexMetadata.isUnique,\n isSpatial: indexMetadata.isSpatial,\n isFulltext: indexMetadata.isFulltext,\n parser: indexMetadata.parser,\n where: indexMetadata.where\n });\n };\n return TableIndex;\n}());\nexport { TableIndex };\n\n//# sourceMappingURL=TableIndex.js.map\n","import { __assign, __extends } from \"tslib\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Thrown when query execution has failed.\n*/\nvar QueryFailedError = /** @class */ (function (_super) {\n __extends(QueryFailedError, _super);\n function QueryFailedError(query, parameters, driverError) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, QueryFailedError.prototype);\n _this.message = driverError.toString()\n .replace(/^error: /, \"\")\n .replace(/^Error: /, \"\")\n .replace(/^Request/, \"\");\n ObjectUtils.assign(_this, __assign(__assign({}, driverError), { name: \"QueryFailedError\", query: query, parameters: parameters || [] }));\n return _this;\n }\n return QueryFailedError;\n}(Error));\nexport { QueryFailedError };\n\n//# sourceMappingURL=QueryFailedError.js.map\n","import { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n */\nvar Alias = /** @class */ (function () {\n function Alias(alias) {\n ObjectUtils.assign(this, alias || {});\n }\n Object.defineProperty(Alias.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"hasMetadata\", {\n get: function () {\n return !!this._metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"metadata\", {\n get: function () {\n if (!this._metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.name + \"\\\"\");\n return this._metadata;\n },\n set: function (metadata) {\n this._metadata = metadata;\n },\n enumerable: false,\n configurable: true\n });\n return Alias;\n}());\nexport { Alias };\n\n//# sourceMappingURL=Alias.js.map\n","import { __assign, __read } from \"tslib\";\nimport { Alias } from \"./Alias\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nvar QueryExpressionMap = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryExpressionMap(connection) {\n this.connection = connection;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n this.queryEntity = false;\n /**\n * All aliases (including main alias) used in the query.\n */\n this.aliases = [];\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n this.queryType = \"select\";\n /**\n * Data needs to be SELECT-ed.\n */\n this.selects = [];\n /**\n * Whether SELECT is DISTINCT.\n */\n this.selectDistinct = false;\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n this.selectDistinctOn = [];\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n this.extraReturningColumns = [];\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n this.onConflict = \"\";\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n this.onIgnore = false;\n /**\n * JOIN queries.\n */\n this.joinAttributes = [];\n /**\n * RelationId queries.\n */\n this.relationIdAttributes = [];\n /**\n * Relation count queries.\n */\n this.relationCountAttributes = [];\n /**\n * WHERE queries.\n */\n this.wheres = [];\n /**\n * HAVING queries.\n */\n this.havings = [];\n /**\n * ORDER BY queries.\n */\n this.orderBys = {};\n /**\n * GROUP BY queries.\n */\n this.groupBys = [];\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n this.withDeleted = false;\n /**\n * Parameters used to be escaped in final query.\n */\n this.parameters = {};\n /**\n * Indicates if alias, table names and column names will be ecaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n this.disableEscaping = true;\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n this.enableRelationIdValues = false;\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n this.extraAppendedAndWhereCondition = \"\";\n /**\n * Indicates if query builder creates a subquery.\n */\n this.subQuery = false;\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n this.aliasNamePrefixingEnabled = true;\n /**\n * Indicates if query result cache is enabled or not.\n */\n this.cache = false;\n /**\n * Options that define QueryBuilder behaviour.\n */\n this.options = [];\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n this.insertColumns = [];\n /**\n * Used if user wants to update or delete a specific entities.\n */\n this.whereEntities = [];\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n this.updateEntity = true;\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n this.callListeners = true;\n /**\n * Indicates if query must be wrapped into transaction.\n */\n this.useTransaction = false;\n /**\n * Extra parameters.\n * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n */\n this.nativeParameters = {};\n }\n Object.defineProperty(QueryExpressionMap.prototype, \"allOrderBys\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get: function () {\n var _this = this;\n if (!Object.keys(this.orderBys).length && this.mainAlias.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n var entityOrderBy_1 = this.mainAlias.metadata.orderBy || {};\n return Object.keys(entityOrderBy_1).reduce(function (orderBy, key) {\n orderBy[_this.mainAlias.name + \".\" + key] = entityOrderBy_1[key];\n return orderBy;\n }, {});\n }\n return this.orderBys;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.setMainAlias = function (alias) {\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n // set new main alias\n this.mainAlias = alias;\n return alias;\n };\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.createAlias = function (options) {\n var aliasName = options.name;\n if (!aliasName && options.tablePath)\n aliasName = options.tablePath;\n if (!aliasName && options.target instanceof Function)\n aliasName = options.target.name;\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target;\n var alias = new Alias();\n alias.type = options.type;\n if (aliasName)\n alias.name = aliasName;\n if (options.metadata)\n alias.metadata = options.metadata;\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target);\n if (options.tablePath)\n alias.tablePath = options.tablePath;\n if (options.subQuery)\n alias.subQuery = options.subQuery;\n this.aliases.push(alias);\n return alias;\n };\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n QueryExpressionMap.prototype.findAliasByName = function (aliasName) {\n var alias = this.aliases.find(function (alias) { return alias.name === aliasName; });\n if (!alias)\n throw new Error(\"\\\"\" + aliasName + \"\\\" alias was not found. Maybe you forgot to join it?\");\n return alias;\n };\n QueryExpressionMap.prototype.findColumnByAliasExpression = function (aliasExpression) {\n var _a = __read(aliasExpression.split(\".\"), 2), aliasName = _a[0], propertyPath = _a[1];\n var alias = this.findAliasByName(aliasName);\n return alias.metadata.findColumnWithPropertyName(propertyPath);\n };\n Object.defineProperty(QueryExpressionMap.prototype, \"relationMetadata\", {\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get: function () {\n if (!this.mainAlias)\n throw new Error(\"Entity to work with is not specified!\"); // todo: better message\n var relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \" + this.relationPropertyPath + \" was not found in entity \" + this.mainAlias.name); // todo: better message\n return relationMetadata;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n QueryExpressionMap.prototype.clone = function () {\n var _this = this;\n var map = new QueryExpressionMap(this.connection);\n map.queryType = this.queryType;\n map.selects = this.selects.map(function (select) { return select; });\n map.selectDistinct = this.selectDistinct;\n map.selectDistinctOn = this.selectDistinctOn;\n this.aliases.forEach(function (alias) { return map.aliases.push(new Alias(alias)); });\n map.mainAlias = this.mainAlias;\n map.valuesSet = this.valuesSet;\n map.returning = this.returning;\n map.onConflict = this.onConflict;\n map.onIgnore = this.onIgnore;\n map.onUpdate = this.onUpdate;\n map.joinAttributes = this.joinAttributes.map(function (join) { return new JoinAttribute(_this.connection, _this, join); });\n map.relationIdAttributes = this.relationIdAttributes.map(function (relationId) { return new RelationIdAttribute(_this, relationId); });\n map.relationCountAttributes = this.relationCountAttributes.map(function (relationCount) { return new RelationCountAttribute(_this, relationCount); });\n map.wheres = this.wheres.map(function (where) { return (__assign({}, where)); });\n map.havings = this.havings.map(function (having) { return (__assign({}, having)); });\n map.orderBys = Object.assign({}, this.orderBys);\n map.groupBys = this.groupBys.map(function (groupBy) { return groupBy; });\n map.limit = this.limit;\n map.offset = this.offset;\n map.skip = this.skip;\n map.take = this.take;\n map.lockMode = this.lockMode;\n map.lockVersion = this.lockVersion;\n map.lockTables = this.lockTables;\n map.withDeleted = this.withDeleted;\n map.parameters = Object.assign({}, this.parameters);\n map.disableEscaping = this.disableEscaping;\n map.enableRelationIdValues = this.enableRelationIdValues;\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n map.subQuery = this.subQuery;\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n map.cache = this.cache;\n map.cacheId = this.cacheId;\n map.cacheDuration = this.cacheDuration;\n map.relationPropertyPath = this.relationPropertyPath;\n map.of = this.of;\n map.insertColumns = this.insertColumns;\n map.whereEntities = this.whereEntities;\n map.updateEntity = this.updateEntity;\n map.callListeners = this.callListeners;\n map.useTransaction = this.useTransaction;\n map.nativeParameters = Object.assign({}, this.nativeParameters);\n map.comment = this.comment;\n return map;\n };\n return QueryExpressionMap;\n}());\nexport { QueryExpressionMap };\n\n//# sourceMappingURL=QueryExpressionMap.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { QueryExpressionMap } from \"./QueryExpressionMap\";\nimport { Brackets } from \"./Brackets\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { EntitySchema } from \"../\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { In } from \"../find-options/operator/In\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar QueryBuilder = /** @class */ (function () {\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n function QueryBuilder(connectionOrQueryBuilder, queryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n }\n else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n Object.defineProperty(QueryBuilder.prototype, \"alias\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the main alias string used in this query builder.\n */\n get: function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Main alias is not set\"); // todo: better exception\n return this.expressionMap.mainAlias.name;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n QueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n // loading it dynamically because of circular issue\n var SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this;\n return new SelectQueryBuilderCls(this);\n };\n /**\n * Creates INSERT query.\n */\n QueryBuilder.prototype.insert = function () {\n this.expressionMap.queryType = \"insert\";\n // loading it dynamically because of circular issue\n var InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this;\n return new InsertQueryBuilderCls(this);\n };\n /**\n * Creates UPDATE query and applies given update values.\n */\n QueryBuilder.prototype.update = function (entityOrTableNameUpdateSet, maybeUpdateSet) {\n var updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n var mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n // loading it dynamically because of circular issue\n var UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this;\n return new UpdateQueryBuilderCls(this);\n };\n /**\n * Creates DELETE query.\n */\n QueryBuilder.prototype.delete = function () {\n this.expressionMap.queryType = \"delete\";\n // loading it dynamically because of circular issue\n var DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this;\n return new DeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.softDelete = function () {\n this.expressionMap.queryType = \"soft-delete\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.restore = function () {\n this.expressionMap.queryType = \"restore\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n QueryBuilder.prototype.relation = function (entityTargetOrPropertyPath, maybePropertyPath) {\n var entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n var propertyPath = arguments.length === 2 ? maybePropertyPath : entityTargetOrPropertyPath;\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n if (entityTarget) {\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n // loading it dynamically because of circular issue\n var RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this;\n return new RelationQueryBuilderCls(this);\n };\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n QueryBuilder.prototype.hasRelation = function (target, relation) {\n var entityMetadata = this.connection.getMetadata(target);\n var relations = Array.isArray(relation) ? relation : [relation];\n return relations.every(function (relation) {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n };\n /**\n * Sets parameter name and its value.\n */\n QueryBuilder.prototype.setParameter = function (key, value) {\n this.expressionMap.parameters[key] = value;\n return this;\n };\n /**\n * Adds all parameters from the given object.\n */\n QueryBuilder.prototype.setParameters = function (parameters) {\n var _this = this;\n // remove function parameters\n Object.keys(parameters).forEach(function (key) {\n if (parameters[key] instanceof Function) {\n throw new Error(\"Function parameter isn't supported in the parameters. Please check \\\"\" + key + \"\\\" parameter.\");\n }\n });\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n Object.keys(parameters).forEach(function (key) { return _this.setParameter(key, parameters[key]); });\n return this;\n };\n /**\n * Adds native parameters from the given object.\n */\n QueryBuilder.prototype.setNativeParameters = function (parameters) {\n var _this = this;\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n Object.keys(parameters).forEach(function (key) {\n _this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n };\n /**\n * Gets all parameters.\n */\n QueryBuilder.prototype.getParameters = function () {\n var parameters = Object.assign({}, this.expressionMap.parameters);\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var values = metadata.childEntityMetadatas\n .filter(function (childMetadata) { return childMetadata.discriminatorColumn; })\n .map(function (childMetadata) { return childMetadata.discriminatorValue; });\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n return parameters;\n };\n /**\n * Prints sql to stdout using console.log.\n */\n QueryBuilder.prototype.printSql = function () {\n var _a = __read(this.getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n this.connection.logger.logQuery(query, parameters);\n return this;\n };\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n QueryBuilder.prototype.getSql = function () {\n return this.getQueryAndParameters()[0];\n };\n /**\n * Gets query to be executed with all parameters used in it.\n */\n QueryBuilder.prototype.getQueryAndParameters = function () {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n var query = this.getQuery();\n var parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n QueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 3, 8]);\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 2: return [2 /*return*/, _b.sent()]; // await is needed here because we are using finally\n case 3:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n if (!(this.connection.driver instanceof SqljsDriver)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 6:\n _b.sent();\n _b.label = 7;\n case 7: return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n QueryBuilder.prototype.createQueryBuilder = function () {\n return new this.constructor(this.connection, this.queryRunner);\n };\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n QueryBuilder.prototype.clone = function () {\n return new this.constructor(this);\n };\n /**\n * Includes a Query comment in the query builder. This is helpful for debugging purposes,\n * such as finding a specific query in the database server's logs, or for categorization using\n * an APM product.\n */\n QueryBuilder.prototype.comment = function (comment) {\n this.expressionMap.comment = comment;\n return this;\n };\n /**\n * Disables escaping.\n */\n QueryBuilder.prototype.disableEscaping = function () {\n this.expressionMap.disableEscaping = false;\n return this;\n };\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n QueryBuilder.prototype.escape = function (name) {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n };\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n QueryBuilder.prototype.setQueryRunner = function (queryRunner) {\n this.queryRunner = queryRunner;\n return this;\n };\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n QueryBuilder.prototype.callListeners = function (enabled) {\n this.expressionMap.callListeners = enabled;\n return this;\n };\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n QueryBuilder.prototype.useTransaction = function (enabled) {\n this.expressionMap.useTransaction = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n QueryBuilder.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.escape(i);\n }).join(\".\");\n };\n /**\n * Gets name of the table where insert should be performed.\n */\n QueryBuilder.prototype.getMainTableName = function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Entity where values should be inserted is not specified. Call \\\"qb.into(entity)\\\" method to specify it.\");\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n return this.expressionMap.mainAlias.tablePath;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n QueryBuilder.prototype.createFromAlias = function (entityTarget, aliasName) {\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n var metadata = this.connection.getMetadata(entityTarget);\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n }\n else {\n if (typeof entityTarget === \"string\") {\n var isSubquery = entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: !isSubquery ? entityTarget : undefined,\n subQuery: isSubquery ? entityTarget : undefined,\n });\n }\n var subQueryBuilder = entityTarget(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n var subquery = subQueryBuilder.getQuery();\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n subQuery: subquery\n });\n }\n };\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n QueryBuilder.prototype.replacePropertyNames = function (statement) {\n var e_1, _a;\n var _this = this;\n // Escape special characters in regular expressions\n // Per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n var escapeRegExp = function (s) { return s.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); };\n var _loop_1 = function (alias) {\n var e_2, _d, e_3, _e, e_4, _f, e_5, _g, e_6, _h, e_7, _j;\n if (!alias.hasMetadata)\n return \"continue\";\n var replaceAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? alias.name + \".\" : \"\";\n var replacementAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? this_1.escape(alias.name) + \".\" : \"\";\n var replacements = {};\n try {\n // Insert & overwrite the replacements from least to most relevant in our replacements object.\n // To do this we iterate and overwrite in the order of relevance.\n // Least to Most Relevant:\n // * Relation Property Path to first join column key\n // * Relation Property Path + Column Path\n // * Column Database Name\n // * Column Propety Name\n // * Column Property Path\n for (var _k = (e_2 = void 0, __values(alias.metadata.relations)), _l = _k.next(); !_l.done; _l = _k.next()) {\n var relation = _l.value;\n if (relation.joinColumns.length > 0)\n replacements[relation.propertyPath] = relation.joinColumns[0].databaseName;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_d = _k.return)) _d.call(_k);\n }\n finally { if (e_2) throw e_2.error; }\n }\n try {\n for (var _m = (e_3 = void 0, __values(alias.metadata.relations)), _o = _m.next(); !_o.done; _o = _m.next()) {\n var relation = _o.value;\n try {\n for (var _p = (e_4 = void 0, __values(__spreadArray(__spreadArray([], __read(relation.joinColumns)), __read(relation.inverseJoinColumns)))), _q = _p.next(); !_q.done; _q = _p.next()) {\n var joinColumn = _q.value;\n var propertyKey = relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n replacements[propertyKey] = joinColumn.databaseName;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_q && !_q.done && (_f = _p.return)) _f.call(_p);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_o && !_o.done && (_e = _m.return)) _e.call(_m);\n }\n finally { if (e_3) throw e_3.error; }\n }\n try {\n for (var _r = (e_5 = void 0, __values(alias.metadata.columns)), _s = _r.next(); !_s.done; _s = _r.next()) {\n var column = _s.value;\n replacements[column.databaseName] = column.databaseName;\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_s && !_s.done && (_g = _r.return)) _g.call(_r);\n }\n finally { if (e_5) throw e_5.error; }\n }\n try {\n for (var _t = (e_6 = void 0, __values(alias.metadata.columns)), _u = _t.next(); !_u.done; _u = _t.next()) {\n var column = _u.value;\n replacements[column.propertyName] = column.databaseName;\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_u && !_u.done && (_h = _t.return)) _h.call(_t);\n }\n finally { if (e_6) throw e_6.error; }\n }\n try {\n for (var _v = (e_7 = void 0, __values(alias.metadata.columns)), _w = _v.next(); !_w.done; _w = _v.next()) {\n var column = _w.value;\n replacements[column.propertyPath] = column.databaseName;\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (_w && !_w.done && (_j = _v.return)) _j.call(_v);\n }\n finally { if (e_7) throw e_7.error; }\n }\n var replacementKeys = Object.keys(replacements);\n if (replacementKeys.length) {\n statement = statement.replace(new RegExp(\n // Avoid a lookbehind here since it's not well supported\n \"([ =(]|^.{0})\" +\n (escapeRegExp(replaceAliasNamePrefix) + \"(\" + replacementKeys.map(escapeRegExp).join(\"|\") + \")\") +\n \"(?=[ =),]|.{0}$)\", \"gm\"), function (_, pre, p) {\n return \"\" + pre + replacementAliasNamePrefix + _this.escape(replacements[p]);\n });\n }\n };\n var this_1 = this;\n try {\n for (var _b = __values(this.expressionMap.aliases), _c = _b.next(); !_c.done; _c = _b.next()) {\n var alias = _c.value;\n _loop_1(alias);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return statement;\n };\n QueryBuilder.prototype.createComment = function () {\n if (!this.expressionMap.comment) {\n return \"\";\n }\n // ANSI SQL 2003 support C style comments - comments that start with `/*` and end with `*/`\n // In some dialects query nesting is available - but not all. Because of this, we'll need\n // to scrub \"ending\" characters from the SQL but otherwise we can leave everything else\n // as-is and it should be valid.\n return \"/* \" + this.expressionMap.comment.replace(\"*/\", \"\") + \" */ \";\n };\n /**\n * Creates \"WHERE\" expression.\n */\n QueryBuilder.prototype.createWhereExpression = function () {\n var conditionsArray = [];\n var whereExpression = this.createWhereExpressionString();\n whereExpression.trim() && conditionsArray.push(this.createWhereExpressionString());\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n // Adds the global condition of \"non-deleted\" for the entity with delete date columns in select query.\n if (this.expressionMap.queryType === \"select\" && !this.expressionMap.withDeleted && metadata.deleteDateColumn) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.deleteDateColumn.propertyName\n : metadata.deleteDateColumn.propertyName;\n var condition = this.replacePropertyNames(column) + \" IS NULL\";\n conditionsArray.push(condition);\n }\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n var condition = this.replacePropertyNames(column) + \" IN (:...discriminatorColumnValues)\";\n conditionsArray.push(condition);\n }\n }\n if (this.expressionMap.extraAppendedAndWhereCondition) {\n var condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n conditionsArray.push(condition);\n }\n if (!conditionsArray.length) {\n return \"\";\n }\n else if (conditionsArray.length === 1) {\n return \" WHERE \" + conditionsArray[0];\n }\n else {\n return \" WHERE ( \" + conditionsArray.join(\" ) AND ( \") + \" )\";\n }\n };\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n QueryBuilder.prototype.createReturningExpression = function () {\n var _this = this;\n var columns = this.getReturningColumns();\n var driver = this.connection.driver;\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push.apply(columns, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (column) {\n return columns.indexOf(column) === -1;\n }))));\n }\n if (columns.length) {\n var columnsExpression = columns.map(function (column) {\n var name = _this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (_this.expressionMap.queryType === \"insert\" || _this.expressionMap.queryType === \"update\" || _this.expressionMap.queryType === \"soft-delete\" || _this.expressionMap.queryType === \"restore\") {\n return \"INSERTED.\" + name;\n }\n else {\n return _this.escape(_this.getMainTableName()) + \".\" + name;\n }\n }\n else {\n return name;\n }\n }).join(\", \");\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(function (column) {\n var parameterName = \"output_\" + column.databaseName;\n _this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return _this.connection.driver.createParameter(parameterName, Object.keys(_this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n columnsExpression += \" INTO @OutputTable\";\n }\n }\n return columnsExpression;\n }\n else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n return \"\";\n };\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n QueryBuilder.prototype.getReturningColumns = function () {\n var _this = this;\n var columns = [];\n if (Array.isArray(this.expressionMap.returning)) {\n this.expressionMap.returning.forEach(function (columnName) {\n if (_this.expressionMap.mainAlias.hasMetadata) {\n columns.push.apply(columns, __spreadArray([], __read(_this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName))));\n }\n });\n }\n return columns;\n };\n /**\n * Concatenates all added where expressions into one string.\n */\n QueryBuilder.prototype.createWhereExpressionString = function () {\n var _this = this;\n return this.expressionMap.wheres.map(function (where, index) {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(where.condition);\n default:\n return _this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n };\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n QueryBuilder.prototype.createWhereIdsExpression = function (ids) {\n var _a;\n var _this = this;\n var metadata = this.expressionMap.mainAlias.metadata;\n var normalized = (Array.isArray(ids) ? ids : [ids]).map(function (id) { return metadata.ensureEntityIdMap(id); });\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0) {\n var primaryColumn_1 = metadata.primaryColumns[0];\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn_1.transformer) {\n return this.computeWhereParameter((_a = {},\n _a[primaryColumn_1.propertyName] = In(normalized.map(function (id) { return primaryColumn_1.getEntityValue(id, false); })),\n _a));\n }\n }\n // create shortcuts for better readability\n var alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias.name) + \".\" : \"\";\n var parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n var whereStrings = normalized.map(function (id, index) {\n var whereSubStrings = [];\n metadata.primaryColumns.forEach(function (primaryColumn, secondIndex) {\n var parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + _this.escape(primaryColumn.databaseName) + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex));\n _this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(function (whereString) { return \"(\" + whereString + \")\"; }).join(\" OR \") + \")\"\n : whereStrings[0];\n };\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n QueryBuilder.prototype.computeWhereParameter = function (where) {\n var _this = this;\n if (typeof where === \"string\")\n return where;\n if (where instanceof Brackets) {\n var whereQueryBuilder = this.createQueryBuilder();\n whereQueryBuilder.expressionMap.mainAlias = this.expressionMap.mainAlias;\n whereQueryBuilder.expressionMap.aliasNamePrefixingEnabled = this.expressionMap.aliasNamePrefixingEnabled;\n whereQueryBuilder.expressionMap.nativeParameters = this.expressionMap.nativeParameters;\n where.whereFactory(whereQueryBuilder);\n var whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n }\n else if (where instanceof Function) {\n return where(this);\n }\n else if (where instanceof Object) {\n var wheres = Array.isArray(where) ? where : [where];\n var andConditions = void 0;\n var parameterIndex_1 = Object.keys(this.expressionMap.nativeParameters).length;\n if (this.expressionMap.mainAlias.hasMetadata) {\n andConditions = wheres.map(function (where, whereIndex) {\n var propertyPaths = EntityMetadata.createPropertyPath(_this.expressionMap.mainAlias.metadata, where);\n return propertyPaths.map(function (propertyPath, propertyIndex) {\n var columns = _this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(propertyPath);\n if (!columns.length) {\n throw new EntityColumnNotFound(propertyPath);\n }\n return columns.map(function (column, columnIndex) {\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + propertyPath : column.propertyPath;\n var parameterValue = column.getEntityValue(where, true);\n var parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n var parameterBaseCount = Object.keys(_this.expressionMap.nativeParameters).filter(function (x) { return x.startsWith(parameterName); }).length;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else if (parameterValue instanceof FindOperator) {\n var parameters_1 = [];\n if (parameterValue.useParameter) {\n if (parameterValue.objectLiteralParameters) {\n _this.setParameters(parameterValue.objectLiteralParameters);\n }\n else {\n var realParameterValues = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach(function (realParameterValue, realParameterValueIndex) {\n _this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex_1++;\n parameters_1.push(_this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex_1 - 1));\n });\n }\n }\n return _this.computeFindOperatorExpression(parameterValue, aliasPath, parameters_1);\n }\n else {\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex_1++;\n var parameter = _this.connection.driver.createParameter(parameterName, parameterIndex_1 - 1);\n return aliasPath + \" = \" + parameter;\n }\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n });\n }\n else {\n andConditions = wheres.map(function (where, whereIndex) {\n return Object.keys(where).map(function (key, parameterIndex) {\n var parameterValue = where[key];\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + key : key;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else {\n var parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return aliasPath + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n }\n }).join(\" AND \");\n });\n }\n if (andConditions.length > 1)\n return andConditions.map(function (where) { return \"(\" + where + \")\"; }).join(\" OR \");\n return andConditions.join(\"\");\n }\n return \"\";\n };\n /**\n * Gets SQL needs to be inserted into final query.\n */\n QueryBuilder.prototype.computeFindOperatorExpression = function (operator, aliasPath, parameters) {\n var driver = this.connection.driver;\n switch (operator.type) {\n case \"not\":\n if (operator.child) {\n return \"NOT(\" + this.computeFindOperatorExpression(operator.child, aliasPath, parameters) + \")\";\n }\n else {\n return aliasPath + \" != \" + parameters[0];\n }\n case \"lessThan\":\n return aliasPath + \" < \" + parameters[0];\n case \"lessThanOrEqual\":\n return aliasPath + \" <= \" + parameters[0];\n case \"moreThan\":\n return aliasPath + \" > \" + parameters[0];\n case \"moreThanOrEqual\":\n return aliasPath + \" >= \" + parameters[0];\n case \"equal\":\n return aliasPath + \" = \" + parameters[0];\n case \"ilike\":\n if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n return aliasPath + \" ILIKE \" + parameters[0];\n }\n return \"UPPER(\" + aliasPath + \") LIKE UPPER(\" + parameters[0] + \")\";\n case \"like\":\n return aliasPath + \" LIKE \" + parameters[0];\n case \"between\":\n return aliasPath + \" BETWEEN \" + parameters[0] + \" AND \" + parameters[1];\n case \"in\":\n if (parameters.length === 0) {\n return \"0=1\";\n }\n return aliasPath + \" IN (\" + parameters.join(\", \") + \")\";\n case \"any\":\n return aliasPath + \" = ANY(\" + parameters[0] + \")\";\n case \"isNull\":\n return aliasPath + \" IS NULL\";\n case \"raw\":\n if (operator.getSql) {\n return operator.getSql(aliasPath);\n }\n else {\n return aliasPath + \" = \" + operator.value;\n }\n }\n throw new TypeError(\"Unsupported FindOperator \" + FindOperator.constructor.name);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n QueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner();\n };\n return QueryBuilder;\n}());\nexport { QueryBuilder };\n\n//# sourceMappingURL=QueryBuilder.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsQueryRunner } from \"./SqljsQueryRunner\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nvar SqljsDriver = /** @class */ (function (_super) {\n __extends(SqljsDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // If autoSave is enabled by user, location or autoSaveCallback have to be set\n // because either autoSave saves to location or calls autoSaveCallback.\n if (_this.options.autoSave && !_this.options.location && !_this.options.autoSaveCallback) {\n throw new DriverOptionNotSetError(\"location or autoSaveCallback\");\n }\n // load sql.js package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n SqljsDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Closes connection with database.\n */\n SqljsDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection.close();\n ok();\n }\n catch (e) {\n fail(e);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n SqljsDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new SqljsQueryRunner(this);\n return this.queryRunner;\n };\n /**\n * Loads a database from a given file (Node.js), local storage key (browser) or array.\n * This will delete the current database!\n */\n SqljsDriver.prototype.load = function (fileNameOrLocalStorageOrData, checkIfFileOrLocalStorageExists) {\n if (checkIfFileOrLocalStorageExists === void 0) { checkIfFileOrLocalStorageExists = true; }\n return __awaiter(this, void 0, void 0, function () {\n var database, localStorageContent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(typeof fileNameOrLocalStorageOrData === \"string\")) return [3 /*break*/, 8];\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 1];\n // Node.js\n // fileNameOrLocalStorageOrData should be a path to the file\n if (PlatformTools.fileExist(fileNameOrLocalStorageOrData)) {\n database = PlatformTools.readFileSync(fileNameOrLocalStorageOrData);\n return [2 /*return*/, this.createDatabaseConnectionWithImport(database)];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // File doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing an existing file.\n // File will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n return [3 /*break*/, 7];\n case 1:\n localStorageContent = null;\n if (!this.options.useLocalForage) return [3 /*break*/, 5];\n if (!window.localforage) return [3 /*break*/, 3];\n return [4 /*yield*/, window.localforage.getItem(fileNameOrLocalStorageOrData)];\n case 2:\n localStorageContent = _a.sent();\n return [3 /*break*/, 4];\n case 3: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 4: return [3 /*break*/, 6];\n case 5:\n localStorageContent = PlatformTools.getGlobalVariable().localStorage.getItem(fileNameOrLocalStorageOrData);\n _a.label = 6;\n case 6:\n if (localStorageContent != null) {\n // localStorage value exists.\n return [2 /*return*/, this.createDatabaseConnectionWithImport(JSON.parse(localStorageContent))];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // localStorage value doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing anything.\n // localStorage value will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n _a.label = 7;\n case 7: return [3 /*break*/, 9];\n case 8: return [2 /*return*/, this.createDatabaseConnectionWithImport(fileNameOrLocalStorageOrData)];\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saved the current database to the given file (Node.js), local storage key (browser) or\n * indexedDB key (browser with enabled useLocalForage option).\n * If no location path is given, the location path in the options (if specified) will be used.\n */\n SqljsDriver.prototype.save = function (location) {\n return __awaiter(this, void 0, void 0, function () {\n var path, content, e_1, database, databaseArray;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!location && !this.options.location) {\n throw new Error(\"No location is set, specify a location parameter or add the location option to your configuration\");\n }\n path = \"\";\n if (location) {\n path = location;\n }\n else if (this.options.location) {\n path = this.options.location;\n }\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n content = Buffer.from(this.databaseConnection.export());\n return [4 /*yield*/, PlatformTools.writeFile(path, content)];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n throw new Error(\"Could not save database, error: \" + e_1);\n case 4: return [3 /*break*/, 10];\n case 5:\n database = this.databaseConnection.export();\n databaseArray = [].slice.call(database);\n if (!this.options.useLocalForage) return [3 /*break*/, 9];\n if (!window.localforage) return [3 /*break*/, 7];\n return [4 /*yield*/, window.localforage.setItem(path, JSON.stringify(databaseArray))];\n case 6:\n _a.sent();\n return [3 /*break*/, 8];\n case 7: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 8: return [3 /*break*/, 10];\n case 9:\n PlatformTools.getGlobalVariable().localStorage.setItem(path, JSON.stringify(databaseArray));\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * This gets called by the QueryRunner when a change to the database is made.\n * If a custom autoSaveCallback is specified, it get's called with the database as Uint8Array,\n * otherwise the save method is called which saves it to file (Node.js), local storage (browser)\n * or indexedDB (browser with enabled useLocalForage option).\n */\n SqljsDriver.prototype.autoSave = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.options.autoSave) return [3 /*break*/, 4];\n if (!this.options.autoSaveCallback) return [3 /*break*/, 2];\n return [4 /*yield*/, this.options.autoSaveCallback(this.export())];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.save()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database as Uint8Array.\n */\n SqljsDriver.prototype.export = function () {\n return this.databaseConnection.export();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n SqljsDriver.prototype.createGeneratedMap = function (metadata, insertResult) {\n var _this = this;\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n // seems to be the only way to get the inserted id, see https://github.com/kripken/sql.js/issues/77\n if (generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\") {\n var query = \"SELECT last_insert_rowid()\";\n try {\n var result = _this.databaseConnection.exec(query);\n _this.connection.logger.logQuery(query);\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(result[0].values[0][0]));\n }\n catch (e) {\n _this.connection.logger.logQueryError(e, query, []);\n }\n }\n return map;\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n * If the location option is set, the database is loaded first.\n */\n SqljsDriver.prototype.createDatabaseConnection = function () {\n if (this.options.location) {\n return this.load(this.options.location, false);\n }\n return this.createDatabaseConnectionWithImport(this.options.database);\n };\n /**\n * Creates connection with an optional database.\n * If database is specified it is loaded, otherwise a new empty database is created.\n */\n SqljsDriver.prototype.createDatabaseConnectionWithImport = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n var isLegacyVersion, sqlite, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isLegacyVersion = typeof this.sqlite.Database === \"function\";\n if (!isLegacyVersion) return [3 /*break*/, 1];\n _a = this.sqlite;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.sqlite(this.options.sqlJsConfig)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n sqlite = _a;\n if (database && database.length > 0) {\n this.databaseConnection = new sqlite.Database(database);\n }\n else {\n this.databaseConnection = new sqlite.Database();\n }\n // Enable foreign keys for database\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.databaseConnection.exec(\"PRAGMA foreign_keys = ON;\");\n ok(_this.databaseConnection);\n }\n catch (e) {\n fail(e);\n }\n })];\n }\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n SqljsDriver.prototype.loadDependencies = function () {\n if (PlatformTools.type === \"browser\") {\n this.sqlite = window.SQL;\n }\n else {\n try {\n this.sqlite = PlatformTools.load(\"sql.js\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"sql.js\", \"sql.js\");\n }\n }\n };\n return SqljsDriver;\n}(AbstractSqliteDriver));\nexport { SqljsDriver };\n\n//# sourceMappingURL=SqljsDriver.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeStoragePromise = void 0;\n/**\n * Promise-Wrapper-Klasse für Native-Storage\n */\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst JsonHelper_1 = require(\"js-helper/dist/shared/JsonHelper\");\nclass NativeStoragePromise {\n static _isElectron() {\n return (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0);\n }\n /**\n * Setzt ein Item für NativeStorage\n *\n * @param key\n * @param value\n * @returns {Promise<*>}\n */\n static setItem(key, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.set(this.prefix + key, value, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.setItem(this.prefix + key, value, res, rej));\n }\n }\n else {\n this._cache[this.prefix + key] = value;\n }\n });\n }\n /**\n * Bekomme ein Item von NativeStorage\n *\n * @param key\n * @param defaultValue?\n * @returns {Promise<*>}\n */\n static getItem(key, defaultValue) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res, rej) => {\n if (this._isElectron()) {\n this.electronStorage.get(this.prefix + key, (e, data) => {\n if (e) {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }\n else {\n res(JsonHelper_1.JsonHelper.deepEqual(data, {}) ? defaultValue : data);\n }\n });\n }\n else {\n NativeStorage.getItem(this.prefix + key, data => res(Helper_1.Helper.nonNull(data, defaultValue)), (e => {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }));\n }\n });\n });\n }\n /**\n * Bekomme die Keys vom NativeStorage\n *\n * @returns {Promise<*>}\n */\n static keys() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = [];\n if (this.persistent) {\n if (this._isElectron()) {\n keys = yield new Promise((res, rej) => this.electronStorage.keys((err, keys) => {\n if (err) {\n rej(err);\n }\n else {\n res(keys);\n }\n }));\n }\n else {\n keys = yield new Promise((res, rej) => NativeStorage.keys(res, rej));\n }\n }\n else {\n keys = Object.keys(this._cache);\n }\n return keys.filter(key => key.startsWith(this.prefix));\n });\n }\n /**\n * Entfernt ein Object aus dem NativeStorage\n *\n * @param key\n * @returns {Promise<*>}\n */\n static remove(key) {\n return __awaiter(this, void 0, void 0, function* () {\n delete this._cache[this.prefix + key];\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.remove(this.prefix + key, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.remove(this.prefix + key, res, rej));\n }\n });\n }\n /**\n * Entfernt alle Objects aus dem NativeStorage\n *\n * @returns {Promise<*>}\n */\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = yield this.keys();\n yield Helper_1.Helper.asyncForEach((keys), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.remove(key);\n }), true);\n });\n }\n static makePersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistent) {\n this.persistent = true;\n yield Helper_1.Helper.asyncForEach(Object.keys(this._cache), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.setItem(key, this._cache[key]);\n }), true);\n }\n });\n }\n static makeUnpersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n let keys = yield this.keys();\n let values = {};\n yield Helper_1.Helper.asyncForEach(keys, (key) => __awaiter(this, void 0, void 0, function* () {\n values[key] = yield this.getItem(key);\n }));\n this.clear();\n this.persistent = false;\n this._cache = values;\n }\n });\n }\n}\nexports.NativeStoragePromise = NativeStoragePromise;\nNativeStoragePromise._cache = {};\nNativeStoragePromise.prefix = \"\";\nNativeStoragePromise.persistent = true;\nNativeStoragePromise.electronStorage = null;\n//# sourceMappingURL=NativeStoragePromise.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table check constraint stored in this class.\n */\nvar TableCheck = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableCheck(options) {\n /**\n * Column that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableCheck.prototype.clone = function () {\n return new TableCheck({\n name: this.name,\n columnNames: this.columnNames ? __spreadArray([], __read(this.columnNames)) : [],\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates checks from the check metadata object.\n */\n TableCheck.create = function (checkMetadata) {\n return new TableCheck({\n name: checkMetadata.name,\n expression: checkMetadata.expression\n });\n };\n return TableCheck;\n}());\nexport { TableCheck };\n\n//# sourceMappingURL=TableCheck.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is not started yet and user tries to run commit or rollback.\n */\nvar TransactionNotStartedError = /** @class */ (function (_super) {\n __extends(TransactionNotStartedError, _super);\n function TransactionNotStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionNotStartedError\";\n Object.setPrototypeOf(_this, TransactionNotStartedError.prototype);\n _this.message = \"Transaction is not started yet, start transaction before committing or rolling it back.\";\n return _this;\n }\n return TransactionNotStartedError;\n}(Error));\nexport { TransactionNotStartedError };\n\n//# sourceMappingURL=TransactionNotStartedError.js.map\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","import { __read, __spreadArray } from \"tslib\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { camelCase, snakeCase, titleCase } from \"../util/StringUtils\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Naming strategy that is used by default.\n */\nvar DefaultNamingStrategy = /** @class */ (function () {\n function DefaultNamingStrategy() {\n this.nestedSetColumnNames = { left: \"nsleft\", right: \"nsright\" };\n this.materializedPathColumnName = \"mpath\";\n }\n /**\n * Normalizes table name.\n *\n * @param targetName Name of the target entity that can be used to generate a table name.\n * @param userSpecifiedName For example if user specified a table name in a decorator, e.g. @Entity(\"name\")\n */\n DefaultNamingStrategy.prototype.tableName = function (targetName, userSpecifiedName) {\n return userSpecifiedName ? userSpecifiedName : snakeCase(targetName);\n };\n /**\n * Creates a table name for a junction table of a closure table.\n *\n * @param originalClosureTableName Name of the closure table which owns this junction table.\n */\n DefaultNamingStrategy.prototype.closureJunctionTableName = function (originalClosureTableName) {\n return originalClosureTableName + \"_closure\";\n };\n DefaultNamingStrategy.prototype.columnName = function (propertyName, customName, embeddedPrefixes) {\n var name = customName || propertyName;\n if (embeddedPrefixes.length)\n return camelCase(embeddedPrefixes.join(\"_\")) + titleCase(name);\n return name;\n };\n DefaultNamingStrategy.prototype.relationName = function (propertyName) {\n return propertyName;\n };\n DefaultNamingStrategy.prototype.primaryKeyName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"PK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.uniqueConstraintName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"UQ_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.relationConstraintName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"REL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.defaultConstraintName = function (tableOrName, columnName) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + columnName;\n return \"DF_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.foreignKeyName = function (tableOrName, columnNames, _referencedTablePath, _referencedColumnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"FK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.indexName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"IDX_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.checkConstraintName = function (tableOrName, expression, isEnum) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n var name = \"CHK_\" + RandomGenerator.sha1(key).substr(0, 26);\n return isEnum ? name + \"_ENUM\" : name;\n };\n DefaultNamingStrategy.prototype.exclusionConstraintName = function (tableOrName, expression) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n return \"XCL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.joinColumnName = function (relationName, referencedColumnName) {\n return camelCase(relationName + \"_\" + referencedColumnName);\n };\n DefaultNamingStrategy.prototype.joinTableName = function (firstTableName, secondTableName, firstPropertyName, secondPropertyName) {\n return snakeCase(firstTableName + \"_\" + firstPropertyName.replace(/\\./gi, \"_\") + \"_\" + secondTableName);\n };\n DefaultNamingStrategy.prototype.joinTableColumnDuplicationPrefix = function (columnName, index) {\n return columnName + \"_\" + index;\n };\n DefaultNamingStrategy.prototype.joinTableColumnName = function (tableName, propertyName, columnName) {\n return camelCase(tableName + \"_\" + (columnName ? columnName : propertyName));\n };\n DefaultNamingStrategy.prototype.joinTableInverseColumnName = function (tableName, propertyName, columnName) {\n return this.joinTableColumnName(tableName, propertyName, columnName);\n };\n /**\n * Adds globally set prefix to the table name.\n * This method is executed no matter if prefix was set or not.\n * Table name is either user's given table name, either name generated from entity target.\n * Note that table name comes here already normalized by #tableName method.\n */\n DefaultNamingStrategy.prototype.prefixTableName = function (prefix, tableName) {\n return prefix + tableName;\n };\n DefaultNamingStrategy.prototype.eagerJoinRelationAlias = function (alias, propertyPath) {\n return alias + \"_\" + propertyPath.replace(\".\", \"_\");\n };\n return DefaultNamingStrategy;\n}());\nexport { DefaultNamingStrategy };\n\n//# sourceMappingURL=DefaultNamingStrategy.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to execute operation allowed only if connection is opened.\n */\nvar CannotExecuteNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotExecuteNotConnectedError, _super);\n function CannotExecuteNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotExecuteNotConnectedError\";\n Object.setPrototypeOf(_this, CannotExecuteNotConnectedError.prototype);\n _this.message = \"Cannot execute operation on \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotExecuteNotConnectedError;\n}(Error));\nexport { CannotExecuteNotConnectedError };\n\n//# sourceMappingURL=CannotExecuteNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to connect when he already connected.\n */\nvar CannotConnectAlreadyConnectedError = /** @class */ (function (_super) {\n __extends(CannotConnectAlreadyConnectedError, _super);\n function CannotConnectAlreadyConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotConnectAlreadyConnectedError\";\n Object.setPrototypeOf(_this, CannotConnectAlreadyConnectedError.prototype);\n _this.message = \"Cannot create a \\\"\" + connectionName + \"\\\" connection because connection to the database already established.\";\n return _this;\n }\n return CannotConnectAlreadyConnectedError;\n}(Error));\nexport { CannotConnectAlreadyConnectedError };\n\n//# sourceMappingURL=CannotConnectAlreadyConnectedError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n */\nvar EntityMetadataNotFoundError = /** @class */ (function (_super) {\n __extends(EntityMetadataNotFoundError, _super);\n function EntityMetadataNotFoundError(target) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityMetadataNotFound\";\n Object.setPrototypeOf(_this, EntityMetadataNotFoundError.prototype);\n var targetName;\n if (target instanceof EntitySchema) {\n targetName = target.options.name;\n }\n else if (typeof target === \"function\") {\n targetName = target.name;\n }\n else if (typeof target === \"object\" && \"name\" in target) {\n targetName = target.name;\n }\n else {\n targetName = target;\n }\n _this.message = \"No metadata for \\\"\" + targetName + \"\\\" was found.\";\n return _this;\n }\n return EntityMetadataNotFoundError;\n}(Error));\nexport { EntityMetadataNotFoundError };\n\n//# sourceMappingURL=EntityMetadataNotFoundError.js.map\n","/**\n * Represents entity of the migration in the database.\n */\nvar Migration = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Migration(id, timestamp, name, instance) {\n this.id = id;\n this.timestamp = timestamp;\n this.name = name;\n this.instance = instance;\n }\n return Migration;\n}());\nexport { Migration };\n\n//# sourceMappingURL=Migration.js.map\n","/**\n * Sql server driver requires parameter types to be specified fo input parameters used in the query.\n *\n * @see https://github.com/patriksimek/node-mssql#data-types\n */\nvar MssqlParameter = /** @class */ (function () {\n function MssqlParameter(value, type) {\n var params = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n params[_i - 2] = arguments[_i];\n }\n this.value = value;\n this.type = type;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n this.params = [];\n this.params = params || [];\n }\n return MssqlParameter;\n}());\nexport { MssqlParameter };\n\n//# sourceMappingURL=MssqlParameter.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { Table } from \"../schema-builder/table/Table\";\nimport { Migration } from \"./Migration\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nvar MigrationExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MigrationExecutor(connection, queryRunner) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n this.transaction = \"all\";\n var options = this.connection.driver.options;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Tries to execute a single migration given.\n */\n MigrationExecutor.prototype.executeMigration = function (migration) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, migration.instance.up(queryRunner)];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 3:\n _a.sent();\n return [2 /*return*/, migration];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all migrations.\n */\n MigrationExecutor.prototype.getAllMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(this.getMigrations())];\n });\n });\n };\n /**\n * Returns an array of all executed migrations.\n */\n MigrationExecutor.prototype.getExecutedMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all pending migrations.\n */\n MigrationExecutor.prototype.getPendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var allMigrations, executedMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getAllMigrations()];\n case 1:\n allMigrations = _a.sent();\n return [4 /*yield*/, this.getExecutedMigrations()];\n case 2:\n executedMigrations = _a.sent();\n return [2 /*return*/, allMigrations.filter(function (migration) {\n return !executedMigrations.find(function (executedMigration) {\n return executedMigration.name === migration.name;\n });\n })];\n }\n });\n });\n };\n /**\n * Inserts an executed migration.\n */\n MigrationExecutor.prototype.insertMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.insertExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Deletes an executed migration.\n */\n MigrationExecutor.prototype.deleteMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.deleteExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n MigrationExecutor.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var hasUnappliedMigrations, queryRunner, executedMigrations, allMigrations, _loop_1, this_1, allMigrations_1, allMigrations_1_1, migration;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n hasUnappliedMigrations = false;\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n allMigrations = this.getMigrations();\n _loop_1 = function (migration) {\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration) {\n this_1.connection.logger.logSchemaBuild(\" [X] \" + migration.name);\n }\n else {\n hasUnappliedMigrations = true;\n this_1.connection.logger.logSchemaBuild(\" [ ] \" + migration.name);\n }\n };\n this_1 = this;\n try {\n for (allMigrations_1 = __values(allMigrations), allMigrations_1_1 = allMigrations_1.next(); !allMigrations_1_1.done; allMigrations_1_1 = allMigrations_1.next()) {\n migration = allMigrations_1_1.value;\n _loop_1(migration);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allMigrations_1_1 && !allMigrations_1_1.done && (_a = allMigrations_1.return)) _a.call(allMigrations_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, hasUnappliedMigrations];\n }\n });\n });\n };\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n MigrationExecutor.prototype.executePendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, successMigrations, pendingMigrations, transactionStartedByUs, _loop_2, this_2, pendingMigrations_1, pendingMigrations_1_1, migration, e_2_1, err_1, rollbackError_1;\n var e_2, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n allMigrations = this.getMigrations();\n successMigrations = [];\n pendingMigrations = allMigrations.filter(function (migration) {\n // check if we already have executed migration\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration)\n return false;\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new Error(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n if (!!pendingMigrations.length) return [3 /*break*/, 5];\n this.connection.logger.logSchemaBuild(\"No migrations are pending\");\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, []];\n case 5:\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(allMigrations.length + \" migrations were found in the source code.\");\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(pendingMigrations.length + \" migrations are new migrations that needs to be executed.\");\n transactionStartedByUs = false;\n if (!(this.transaction === \"all\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 6:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 7;\n case 7:\n _b.trys.push([7, 18, 23, 26]);\n _loop_2 = function (migration) {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!(this_2.transaction === \"each\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 2];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 1:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 2;\n case 2: return [4 /*yield*/, migration.instance.up(queryRunner)\n .then(function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: // now when migration is executed we need to insert record about it into the database\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 1:\n _a.sent();\n if (!(this.transaction === \"each\" && transactionStartedByUs)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); })\n .then(function () {\n successMigrations.push(migration);\n _this.connection.logger.logSchemaBuild(\"Migration \" + migration.name + \" has been executed successfully.\");\n })];\n case 3:\n _c.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _b.label = 8;\n case 8:\n _b.trys.push([8, 13, 14, 15]);\n pendingMigrations_1 = __values(pendingMigrations), pendingMigrations_1_1 = pendingMigrations_1.next();\n _b.label = 9;\n case 9:\n if (!!pendingMigrations_1_1.done) return [3 /*break*/, 12];\n migration = pendingMigrations_1_1.value;\n return [5 /*yield**/, _loop_2(migration)];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11:\n pendingMigrations_1_1 = pendingMigrations_1.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (pendingMigrations_1_1 && !pendingMigrations_1_1.done && (_a = pendingMigrations_1.return)) _a.call(pendingMigrations_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!(this.transaction === \"all\" && transactionStartedByUs)) return [3 /*break*/, 17];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 16:\n _b.sent();\n _b.label = 17;\n case 17: return [3 /*break*/, 26];\n case 18:\n err_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 22];\n _b.label = 19;\n case 19:\n _b.trys.push([19, 21, , 22]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 20:\n _b.sent();\n return [3 /*break*/, 22];\n case 21:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 22];\n case 22: throw err_1;\n case 23:\n if (!!this.queryRunner) return [3 /*break*/, 25];\n return [4 /*yield*/, queryRunner.release()];\n case 24:\n _b.sent();\n _b.label = 25;\n case 25: return [7 /*endfinally*/];\n case 26: return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last migration that were run.\n */\n MigrationExecutor.prototype.undoLastMigration = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, migrationToRevert, transactionStartedByUs, err_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _a.sent();\n lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(\"No migrations was found in the database. Nothing to revert!\");\n return [2 /*return*/];\n }\n allMigrations = this.getMigrations();\n migrationToRevert = allMigrations.find(function (migration) { return migration.name === lastTimeExecutedMigration.name; });\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new Error(\"No migration \" + lastTimeExecutedMigration.name + \" was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.\");\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(\"Now reverting it...\");\n transactionStartedByUs = false;\n if (!((this.transaction !== \"none\") && !queryRunner.isTransactionActive)) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 3:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 4;\n case 4:\n _a.trys.push([4, 9, 14, 17]);\n return [4 /*yield*/, migrationToRevert.instance.down(queryRunner)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.deleteExecutedMigration(queryRunner, migrationToRevert)];\n case 6:\n _a.sent();\n this.connection.logger.logSchemaBuild(\"Migration \" + migrationToRevert.name + \" has been reverted successfully.\");\n if (!transactionStartedByUs) return [3 /*break*/, 8];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [3 /*break*/, 17];\n case 9:\n err_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 13];\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw err_2;\n case 14:\n if (!!this.queryRunner) return [3 /*break*/, 16];\n return [4 /*yield*/, queryRunner.release()];\n case 15:\n _a.sent();\n _a.label = 16;\n case 16: return [7 /*endfinally*/];\n case 17: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n MigrationExecutor.prototype.createMigrationsTableIfNotExist = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, queryRunner.hasTable(this.migrationsTable)];\n case 1:\n tableExist = _a.sent();\n if (!!tableExist) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationId }),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n MigrationExecutor.prototype.loadExecutedMigrations = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var mongoRunner, migrationsRaw;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection\n .db(this.connection.driver.database)\n .collection(this.migrationsTableName)\n .find()\n .sort({ \"_id\": -1 })\n .toArray()];\n case 1: return [2 /*return*/, _a.sent()];\n case 2: return [4 /*yield*/, this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany()];\n case 3:\n migrationsRaw = _a.sent();\n return [2 /*return*/, migrationsRaw.map(function (migrationRaw) {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n })];\n }\n });\n });\n };\n /**\n * Gets all migrations that setup for this connection.\n */\n MigrationExecutor.prototype.getMigrations = function () {\n var migrations = this.connection.migrations.map(function (migration) {\n var migrationClassName = migration.name || migration.constructor.name;\n var migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new Error(migrationClassName + \" migration name is wrong. Migration class name should have a JavaScript timestamp appended.\");\n }\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n this.checkForDuplicateMigrations(migrations);\n // sort them by timestamp\n return migrations.sort(function (a, b) { return a.timestamp - b.timestamp; });\n };\n MigrationExecutor.prototype.checkForDuplicateMigrations = function (migrations) {\n var migrationNames = migrations.map(function (migration) { return migration.name; });\n var duplicates = Array.from(new Set(migrationNames.filter(function (migrationName, index) { return migrationNames.indexOf(migrationName) < index; })));\n if (duplicates.length > 0) {\n throw Error(\"Duplicate migrations: \" + duplicates.join(\", \"));\n }\n };\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n MigrationExecutor.prototype.getLatestTimestampMigration = function (migrations) {\n var sortedMigrations = migrations.map(function (migration) { return migration; }).sort(function (a, b) { return (a.timestamp - b.timestamp) * -1; });\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n MigrationExecutor.prototype.getLatestExecutedMigration = function (sortedMigrations) {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Inserts new executed migration's data into migrations table.\n */\n MigrationExecutor.prototype.insertExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var values, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n values = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).insert(values)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n MigrationExecutor.prototype.deleteExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var conditions, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n conditions = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).deleteOne(conditions)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.delete()\n .from(this.migrationsTable)\n .where(qb.escape(\"timestamp\") + \" = :timestamp\")\n .andWhere(qb.escape(\"name\") + \" = :name\")\n .setParameters(conditions)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n MigrationExecutor.prototype.withQueryRunner = function (callback) {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 2, 5]);\n return [2 /*return*/, callback(queryRunner)];\n case 2:\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n return MigrationExecutor;\n}());\nexport { MigrationExecutor };\n\n//# sourceMappingURL=MigrationExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingPrimaryColumnError = /** @class */ (function (_super) {\n __extends(MissingPrimaryColumnError, _super);\n function MissingPrimaryColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingPrimaryColumnError\";\n Object.setPrototypeOf(_this, MissingPrimaryColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have a primary column. Primary column is required to \" +\n \"have in all your entities. Use @PrimaryColumn decorator to add a primary column to your entity.\";\n return _this;\n }\n return MissingPrimaryColumnError;\n}(Error));\nexport { MissingPrimaryColumnError };\n\n//# sourceMappingURL=MissingPrimaryColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when circular relations detected with nullable set to false.\n */\nvar CircularRelationsError = /** @class */ (function (_super) {\n __extends(CircularRelationsError, _super);\n function CircularRelationsError(path) {\n var _this = _super.call(this) || this;\n _this.name = \"CircularRelationsError\";\n Object.setPrototypeOf(_this, CircularRelationsError.prototype);\n _this.message = \"Circular relations detected: \" + path + \". To resolve this issue you need to set nullable: true somewhere in this dependency structure.\";\n return _this;\n }\n return CircularRelationsError;\n}(Error));\nexport { CircularRelationsError };\n\n//# sourceMappingURL=CircularRelationsError.js.map\n","/**\n * This source code is from https://github.com/jriecken/dependency-graph\n * Just added \"any\" types here, wrapper everything into exported class.\n * We cant use a package itself because we want to package \"everything-in-it\" for the frontend users of TypeORM.\n */\n/**\n * A simple dependency graph\n */\n/**\n * Helper for creating a Depth-First-Search on\n * a set of edges.\n *\n * Detects cycles and throws an Error if one is detected.\n *\n * @param edges The set of edges to DFS through\n * @param leavesOnly Whether to only return \"leaf\" nodes (ones who have no edges)\n * @param result An array in which the results will be populated\n */\nfunction createDFS(edges, leavesOnly, result) {\n var currentPath = [];\n var visited = {};\n return function DFS(currentNode) {\n visited[currentNode] = true;\n currentPath.push(currentNode);\n edges[currentNode].forEach(function (node) {\n if (!visited[node]) {\n DFS(node);\n }\n else if (currentPath.indexOf(node) >= 0) {\n currentPath.push(node);\n throw new Error(\"Dependency Cycle Found: \" + currentPath.join(\" -> \"));\n }\n });\n currentPath.pop();\n if ((!leavesOnly || edges[currentNode].length === 0) && result.indexOf(currentNode) === -1) {\n result.push(currentNode);\n }\n };\n}\nvar DepGraph = /** @class */ (function () {\n function DepGraph() {\n this.nodes = {};\n this.outgoingEdges = {}; // Node -> [Dependency Node]\n this.incomingEdges = {}; // Node -> [Dependant Node]\n }\n /**\n * Add a node to the dependency graph. If a node already exists, this method will do nothing.\n */\n DepGraph.prototype.addNode = function (node, data) {\n if (!this.hasNode(node)) {\n // Checking the arguments length allows the user to add a node with undefined data\n if (arguments.length === 2) {\n this.nodes[node] = data;\n }\n else {\n this.nodes[node] = node;\n }\n this.outgoingEdges[node] = [];\n this.incomingEdges[node] = [];\n }\n };\n /**\n * Remove a node from the dependency graph. If a node does not exist, this method will do nothing.\n */\n DepGraph.prototype.removeNode = function (node) {\n if (this.hasNode(node)) {\n delete this.nodes[node];\n delete this.outgoingEdges[node];\n delete this.incomingEdges[node];\n [this.incomingEdges, this.outgoingEdges].forEach(function (edgeList) {\n Object.keys(edgeList).forEach(function (key) {\n var idx = edgeList[key].indexOf(node);\n if (idx >= 0) {\n edgeList[key].splice(idx, 1);\n }\n }, this);\n });\n }\n };\n /**\n * Check if a node exists in the graph\n */\n DepGraph.prototype.hasNode = function (node) {\n return this.nodes.hasOwnProperty(node);\n };\n /**\n * Get the data associated with a node name\n */\n DepGraph.prototype.getNodeData = function (node) {\n if (this.hasNode(node)) {\n return this.nodes[node];\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Set the associated data for a given node name. If the node does not exist, this method will throw an error\n */\n DepGraph.prototype.setNodeData = function (node, data) {\n if (this.hasNode(node)) {\n this.nodes[node] = data;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Add a dependency between two nodes. If either of the nodes does not exist,\n * an Error will be thrown.\n */\n DepGraph.prototype.addDependency = function (from, to) {\n if (!this.hasNode(from)) {\n throw new Error(\"Node does not exist: \" + from);\n }\n if (!this.hasNode(to)) {\n throw new Error(\"Node does not exist: \" + to);\n }\n if (this.outgoingEdges[from].indexOf(to) === -1) {\n this.outgoingEdges[from].push(to);\n }\n if (this.incomingEdges[to].indexOf(from) === -1) {\n this.incomingEdges[to].push(from);\n }\n return true;\n };\n /**\n * Remove a dependency between two nodes.\n */\n DepGraph.prototype.removeDependency = function (from, to) {\n var idx;\n if (this.hasNode(from)) {\n idx = this.outgoingEdges[from].indexOf(to);\n if (idx >= 0) {\n this.outgoingEdges[from].splice(idx, 1);\n }\n }\n if (this.hasNode(to)) {\n idx = this.incomingEdges[to].indexOf(from);\n if (idx >= 0) {\n this.incomingEdges[to].splice(idx, 1);\n }\n }\n };\n /**\n * Get an array containing the nodes that the specified node depends on (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned\n * in the array.\n */\n DepGraph.prototype.dependenciesOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.outgoingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * get an array containing the nodes that depend on the specified node (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not have any dependants will be returned in the array.\n */\n DepGraph.prototype.dependantsOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.incomingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Construct the overall processing order for the dependency graph.\n *\n * Throws an Error if the graph has a cycle.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned.\n */\n DepGraph.prototype.overallOrder = function (leavesOnly) {\n var self = this;\n var result = [];\n var keys = Object.keys(this.nodes);\n if (keys.length === 0) {\n return result; // Empty graph\n }\n else {\n // Look for cycles - we run the DFS starting at all the nodes in case there\n // are several disconnected subgraphs inside this dependency graph.\n var CycleDFS_1 = createDFS(this.outgoingEdges, false, []);\n keys.forEach(function (n) {\n CycleDFS_1(n);\n });\n var DFS_1 = createDFS(this.outgoingEdges, leavesOnly, result);\n // Find all potential starting points (nodes with nothing depending on them) an\n // run a DFS starting at these points to get the order\n keys.filter(function (node) {\n return self.incomingEdges[node].length === 0;\n }).forEach(function (n) {\n DFS_1(n);\n });\n return result;\n }\n };\n return DepGraph;\n}());\nexport { DepGraph };\n\n//# sourceMappingURL=DepGraph.js.map\n","import { __extends } from \"tslib\";\nvar DataTypeNotSupportedError = /** @class */ (function (_super) {\n __extends(DataTypeNotSupportedError, _super);\n function DataTypeNotSupportedError(column, dataType, database) {\n var _this = _super.call(this) || this;\n _this.name = \"DataTypeNotSupportedError\";\n Object.setPrototypeOf(_this, DataTypeNotSupportedError.prototype);\n var type = typeof dataType === \"string\" ? dataType : dataType.name;\n _this.message = \"Data type \\\"\" + type + \"\\\" in \\\"\" + column.entityMetadata.targetName + \".\" + column.propertyName + \"\\\" is not supported by \\\"\" + database + \"\\\" database.\";\n return _this;\n }\n return DataTypeNotSupportedError;\n}(Error));\nexport { DataTypeNotSupportedError };\n\n//# sourceMappingURL=DataTypeNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when some option is not set in the connection options.\n */\nvar NoConnectionOptionError = /** @class */ (function (_super) {\n __extends(NoConnectionOptionError, _super);\n function NoConnectionOptionError(optionName) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, NoConnectionOptionError.prototype);\n _this.message = \"Option \\\"\" + optionName + \"\\\" is not set in your connection options, please define \\\"\" + optionName + \"\\\" option in your connection options or ormconfig.json\";\n return _this;\n }\n return NoConnectionOptionError;\n}(Error));\nexport { NoConnectionOptionError };\n\n//# sourceMappingURL=NoConnectionOptionError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relation has array initialized which is forbidden my ORM.\n *\n * @see https://github.com/typeorm/typeorm/issues/1319\n * @see http://typeorm.io/#/relations-faq/avoid-relation-property-initializers\n */\nvar InitializedRelationError = /** @class */ (function (_super) {\n __extends(InitializedRelationError, _super);\n function InitializedRelationError(relation) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, InitializedRelationError.prototype);\n _this.message = \"Array initializations are not allowed in entity relations. \" +\n (\"Please remove array initialization (= []) from \\\"\" + relation.entityMetadata.targetName + \"#\" + relation.propertyPath + \"\\\". \") +\n \"This is ORM requirement to make relations to work properly. Refer docs for more information.\";\n return _this;\n }\n return InitializedRelationError;\n}(Error));\nexport { InitializedRelationError };\n\n//# sourceMappingURL=InitializedRelationError.js.map\n","import { MissingPrimaryColumnError } from \"../error/MissingPrimaryColumnError\";\nimport { CircularRelationsError } from \"../error/CircularRelationsError\";\nimport { DepGraph } from \"../util/DepGraph\";\nimport { DataTypeNotSupportedError } from \"../error/DataTypeNotSupportedError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { NoConnectionOptionError } from \"../error/NoConnectionOptionError\";\nimport { InitializedRelationError } from \"../error/InitializedRelationError\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n/**\n * Validates built entity metadatas.\n */\nvar EntityMetadataValidator = /** @class */ (function () {\n function EntityMetadataValidator() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given entity metadatas.\n */\n EntityMetadataValidator.prototype.validateMany = function (entityMetadatas, driver) {\n var _this = this;\n entityMetadatas.forEach(function (entityMetadata) { return _this.validate(entityMetadata, entityMetadatas, driver); });\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n };\n /**\n * Validates given entity metadata.\n */\n EntityMetadataValidator.prototype.validate = function (entityMetadata, allEntityMetadatas, driver) {\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new Error(\"Entity \" + entityMetadata.name + \" using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?\");\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new Error(\"Entity \" + entityMetadata.name + \" has an undefined discriminator value. Discriminator value should be defined.\");\n var sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(function (metadata) {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(function (parent) { return entityMetadata.inheritanceTree.indexOf(parent) !== -1; });\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new Error(\"Entities \" + entityMetadata.name + \" and \" + sameDiscriminatorValueEntityMetadata.name + \" have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.\");\n }\n entityMetadata.relationCounts.forEach(function (relationCount) {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new Error(\"Relation count can not be implemented on ManyToOne or OneToOne relations.\");\n });\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(function (column) {\n var normalizedColumn = driver.normalizeType(column);\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new Error(\"Column \" + column.propertyName + \" of Entity \" + entityMetadata.name + \" does not support length property.\");\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new Error(\"Column \\\"\" + column.propertyName + \"\\\" of Entity \\\"\" + entityMetadata.name + \"\\\" is defined as enum, but missing \\\"enum\\\" or \\\"enumName\\\" properties.\");\n });\n }\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n var generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated && column.generationStrategy !== \"uuid\"; });\n if (generatedColumns.length > 1)\n throw new Error(\"Error in \" + entityMetadata.name + \" entity. There can be only one auto-increment column in MySql table.\");\n }\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n var metadatasWithDatabase = allEntityMetadatas.filter(function (metadata) { return metadata.database; });\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n if (driver instanceof SqlServerDriver) {\n var charsetColumns = entityMetadata.columns.filter(function (column) { return column.charset; });\n if (charsetColumns.length > 1)\n throw new Error(\"Character set specifying is not supported in Sql Server\");\n }\n // check if relations are all without initialized properties\n var entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(function (relation) {\n if (relation.isManyToMany || relation.isOneToMany) {\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n // get entity relation value and check if its an array\n var relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n // validate relations\n entityMetadata.relations.forEach(function (relation) {\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new Error(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new Error(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n });\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(function (relation) {\n var isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new Error(\"Relation \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseRelation.entityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" both has cascade remove set. \" +\n \"This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.\");\n }); // todo: maybe better just deny removal from one to one relation without join column?\n entityMetadata.eagerRelations.forEach(function (relation) {\n });\n };\n /**\n * Validates dependencies of the entity metadatas.\n */\n EntityMetadataValidator.prototype.validateDependencies = function (entityMetadatas) {\n var graph = new DepGraph();\n entityMetadatas.forEach(function (entityMetadata) {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns\n .filter(function (relation) { return !relation.isNullable; })\n .forEach(function (relation) {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n }\n catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n };\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n EntityMetadataValidator.prototype.validateEagerRelations = function (entityMetadatas) {\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.eagerRelations.forEach(function (relation) {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new Error(\"Circular eager relations are disallowed. \" +\n (entityMetadata.targetName + \"#\" + relation.propertyPath + \" contains \\\"eager: true\\\", and its inverse side \") +\n (relation.inverseEntityMetadata.targetName + \"#\" + relation.inverseRelation.propertyPath + \" contains \\\"eager: true\\\" as well.\") +\n \" Remove \\\"eager: true\\\" from one side of the relation.\");\n });\n });\n };\n return EntityMetadataValidator;\n}());\nexport { EntityMetadataValidator };\n\n//# sourceMappingURL=EntityMetadataValidator.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use query runner from query runner provider after it was released.\n */\nvar QueryRunnerProviderAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerProviderAlreadyReleasedError, _super);\n function QueryRunnerProviderAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerProviderAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerProviderAlreadyReleasedError.prototype);\n _this.message = \"Database connection provided by a query runner was already released, cannot continue to use its querying methods anymore.\";\n return _this;\n }\n return QueryRunnerProviderAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerProviderAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerProviderAlreadyReleasedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to release entity manager that does not use single database connection.\n */\nvar NoNeedToReleaseEntityManagerError = /** @class */ (function (_super) {\n __extends(NoNeedToReleaseEntityManagerError, _super);\n function NoNeedToReleaseEntityManagerError() {\n var _this = _super.call(this) || this;\n _this.name = \"NoNeedToReleaseEntityManagerError\";\n Object.setPrototypeOf(_this, NoNeedToReleaseEntityManagerError.prototype);\n _this.message = \"Entity manager is not using single database connection and cannot be released. \" +\n \"Only entity managers created by connection#createEntityManagerWithSingleDatabaseConnection \" +\n \"methods have a single database connection and they should be released.\";\n return _this;\n }\n return NoNeedToReleaseEntityManagerError;\n}(Error));\nexport { NoNeedToReleaseEntityManagerError };\n\n//# sourceMappingURL=NoNeedToReleaseEntityManagerError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nvar Repository = /** @class */ (function () {\n function Repository() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Repository.prototype.createQueryBuilder = function (alias, queryRunner) {\n return this.manager.createQueryBuilder(this.metadata.target, alias || this.metadata.targetName, queryRunner || this.queryRunner);\n };\n Object.defineProperty(Repository.prototype, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n Repository.prototype.hasId = function (entity) {\n return this.manager.hasId(this.metadata.target, entity);\n };\n /**\n * Gets entity mixed id.\n */\n Repository.prototype.getId = function (entity) {\n return this.manager.getId(this.metadata.target, entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n Repository.prototype.create = function (plainEntityLikeOrPlainEntityLikes) {\n return this.manager.create(this.metadata.target, plainEntityLikeOrPlainEntityLikes);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n Repository.prototype.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.manager).merge.apply(_a, __spreadArray([this.metadata.target, mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n Repository.prototype.preload = function (entityLike) {\n return this.manager.preload(this.metadata.target, entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n Repository.prototype.save = function (entityOrEntities, options) {\n return this.manager.save(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n Repository.prototype.remove = function (entityOrEntities, options) {\n return this.manager.remove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n Repository.prototype.softRemove = function (entityOrEntities, options) {\n return this.manager.softRemove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Recovers one or many given entities.\n */\n Repository.prototype.recover = function (entityOrEntities, options) {\n return this.manager.recover(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n Repository.prototype.insert = function (entity) {\n return this.manager.insert(this.metadata.target, entity);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.update = function (criteria, partialEntity) {\n return this.manager.update(this.metadata.target, criteria, partialEntity);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.delete = function (criteria) {\n return this.manager.delete(this.metadata.target, criteria);\n };\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.softDelete = function (criteria) {\n return this.manager.softDelete(this.metadata.target, criteria);\n };\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.restore = function (criteria) {\n return this.manager.restore(this.metadata.target, criteria);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n Repository.prototype.count = function (optionsOrConditions) {\n return this.manager.count(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n Repository.prototype.find = function (optionsOrConditions) {\n return this.manager.find(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n Repository.prototype.findAndCount = function (optionsOrConditions) {\n return this.manager.findAndCount(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n Repository.prototype.findByIds = function (ids, optionsOrConditions) {\n return this.manager.findByIds(this.metadata.target, ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOne = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOne(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOneOrFail(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n Repository.prototype.query = function (query, parameters) {\n return this.manager.query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n Repository.prototype.clear = function () {\n return this.manager.clear(this.metadata.target);\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.increment = function (conditions, propertyPath, value) {\n return this.manager.increment(this.metadata.target, conditions, propertyPath, value);\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.decrement = function (conditions, propertyPath, value) {\n return this.manager.decrement(this.metadata.target, conditions, propertyPath, value);\n };\n return Repository;\n}());\nexport { Repository };\n\n//# sourceMappingURL=Repository.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { Repository } from \"./Repository\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nvar TreeRepository = /** @class */ (function (_super) {\n __extends(TreeRepository, _super);\n function TreeRepository() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // todo: implement moving\n // todo: implement removing\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Gets complete trees for all roots in the table.\n */\n TreeRepository.prototype.findTrees = function () {\n return __awaiter(this, void 0, void 0, function () {\n var roots;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.findRoots()];\n case 1:\n roots = _a.sent();\n return [4 /*yield*/, Promise.all(roots.map(function (root) { return _this.findDescendantsTree(root); }))];\n case 2:\n _a.sent();\n return [2 /*return*/, roots];\n }\n });\n });\n };\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n TreeRepository.prototype.findRoots = function () {\n var _this = this;\n var escapeAlias = function (alias) { return _this.manager.connection.driver.escape(alias); };\n var escapeColumn = function (column) { return _this.manager.connection.driver.escape(column); };\n var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName, this.metadata.primaryColumns[0].propertyName);\n return this.createQueryBuilder(\"treeEntity\")\n .where(escapeAlias(\"treeEntity\") + \".\" + escapeColumn(parentPropertyName) + \" IS NULL\")\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findDescendantsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildChildrenEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of descendants of the entity.\n */\n TreeRepository.prototype.countDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n TreeRepository.prototype.createDescendantsQueryBuilder = function (alias, closureTableAlias, entity) {\n var _this = this;\n // create shortcuts for better readability\n var escape = function (alias) { return _this.manager.connection.driver.escape(alias); };\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn.propertyPath);\n }).join(\" AND \");\n var parameters_1 = {};\n var whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n parameters_1[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_1);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_2 = {};\n var joinCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_2[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters_2);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE \" + subQuery.getQuery() + \" || '%'\";\n }\n else {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE CONCAT(\" + subQuery.getQuery() + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findAncestorsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of ancestors of the entity.\n */\n TreeRepository.prototype.countAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n TreeRepository.prototype.createAncestorsQueryBuilder = function (alias, closureTableAlias, entity) {\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n var _this = this;\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn.propertyPath;\n }).join(\" AND \");\n var parameters_3 = {};\n var whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n parameters_3[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_3);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_4 = {};\n var whereCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_4[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters_4);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return subQuery.getQuery() + \" LIKE \" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" || '%'\";\n }\n else {\n return subQuery.getQuery() + \" LIKE CONCAT(\" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise {\n return Promise.resolve();\n } */\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n TreeRepository.prototype.createRelationMaps = function (alias, rawResults) {\n var _this = this;\n return rawResults.map(function (rawResult) {\n var joinColumn = _this.metadata.treeParentRelation.joinColumns[0];\n // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n var joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n var id = rawResult[alias + \"_\" + _this.metadata.primaryColumns[0].databaseName];\n var parentId = rawResult[alias + \"_\" + joinColumnName];\n return {\n id: _this.manager.connection.driver.prepareHydratedValue(id, _this.metadata.primaryColumns[0]),\n parentId: _this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n };\n });\n };\n TreeRepository.prototype.buildChildrenEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var childProperty = this.metadata.treeChildrenRelation.propertyName;\n var parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var childRelationMaps = relationMaps.filter(function (relationMap) { return relationMap.parentId === parentEntityId; });\n var childIds = new Set(childRelationMaps.map(function (relationMap) { return relationMap.id; }));\n entity[childProperty] = entities.filter(function (entity) { return childIds.has(_this.metadata.primaryColumns[0].getEntityValue(entity)); });\n entity[childProperty].forEach(function (childEntity) {\n _this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n });\n };\n TreeRepository.prototype.buildParentEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var parentProperty = this.metadata.treeParentRelation.propertyName;\n var entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var parentRelationMap = relationMaps.find(function (relationMap) { return relationMap.id === entityId; });\n var parentEntity = entities.find(function (entity) {\n if (!parentRelationMap)\n return false;\n return _this.metadata.primaryColumns[0].getEntityValue(entity) === parentRelationMap.parentId;\n });\n if (parentEntity) {\n entity[parentProperty] = parentEntity;\n this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n }\n };\n return TreeRepository;\n}(Repository));\nexport { TreeRepository };\n\n//# sourceMappingURL=TreeRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relations specified in the find options were not found in the entities.\n*/\nvar FindRelationsNotFoundError = /** @class */ (function (_super) {\n __extends(FindRelationsNotFoundError, _super);\n function FindRelationsNotFoundError(notFoundRelations) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, FindRelationsNotFoundError.prototype);\n if (notFoundRelations.length === 1) {\n _this.message = \"Relation \\\"\" + notFoundRelations[0] + \"\\\" was not found; please check if it is correct and really exists in your entity.\";\n }\n else {\n _this.message = \"Relations \" + notFoundRelations.map(function (relation) { return \"\\\"\" + relation + \"\\\"\"; }).join(\", \") + \" were not found; please check if relations are correct and they exist in your entities.\";\n }\n return _this;\n }\n return FindRelationsNotFoundError;\n}(Error));\nexport { FindRelationsNotFoundError };\n\n//# sourceMappingURL=FindRelationsNotFoundError.js.map\n","import { FindRelationsNotFoundError } from \"../error/FindRelationsNotFoundError\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Utilities to work with FindOptions.\n */\nvar FindOptionsUtils = /** @class */ (function () {\n function FindOptionsUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if given object is really instance of FindOneOptions interface.\n */\n FindOptionsUtils.isFindOneOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions &&\n (Array.isArray(possibleOptions.select) ||\n possibleOptions.where instanceof Object ||\n typeof possibleOptions.where === \"string\" ||\n Array.isArray(possibleOptions.relations) ||\n possibleOptions.join instanceof Object ||\n possibleOptions.order instanceof Object ||\n possibleOptions.cache instanceof Object ||\n typeof possibleOptions.cache === \"boolean\" ||\n typeof possibleOptions.cache === \"number\" ||\n possibleOptions.lock instanceof Object ||\n possibleOptions.loadRelationIds instanceof Object ||\n typeof possibleOptions.loadRelationIds === \"boolean\" ||\n typeof possibleOptions.loadEagerRelations === \"boolean\" ||\n typeof possibleOptions.withDeleted === \"boolean\" ||\n typeof possibleOptions.transaction === \"boolean\");\n };\n /**\n * Checks if given object is really instance of FindManyOptions interface.\n */\n FindOptionsUtils.isFindManyOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions && (this.isFindOneOptions(possibleOptions) ||\n typeof possibleOptions.skip === \"number\" ||\n typeof possibleOptions.take === \"number\" ||\n typeof possibleOptions.skip === \"string\" ||\n typeof possibleOptions.take === \"string\");\n };\n /**\n * Checks if given object is really instance of FindOptions interface.\n */\n FindOptionsUtils.extractFindManyOptionsAlias = function (object) {\n if (this.isFindManyOptions(object) && object.join)\n return object.join.alias;\n return undefined;\n };\n /**\n * Applies give find many options to the given query builder.\n */\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder = function (qb, options) {\n if (this.isFindManyOptions(options))\n return this.applyOptionsToQueryBuilder(qb, options);\n if (options)\n return qb.where(options);\n return qb;\n };\n /**\n * Applies give find options to the given query builder.\n */\n FindOptionsUtils.applyOptionsToQueryBuilder = function (qb, options) {\n // if options are not set then simply return query builder. This is made for simplicity of usage.\n if (!options || (!this.isFindOneOptions(options) && !this.isFindManyOptions(options)))\n return qb;\n if (options.transaction === true) {\n qb.expressionMap.useTransaction = true;\n }\n if (!qb.expressionMap.mainAlias || !qb.expressionMap.mainAlias.hasMetadata)\n return qb;\n var metadata = qb.expressionMap.mainAlias.metadata;\n // apply all options from FindOptions\n if (options.select) {\n qb.select([]);\n options.select.forEach(function (select) {\n if (!metadata.findColumnWithPropertyPath(String(select)))\n throw new Error(select + \" column was not found in the \" + metadata.name + \" entity.\");\n qb.addSelect(qb.alias + \".\" + select);\n });\n }\n if (options.where)\n qb.where(options.where);\n if (options.skip)\n qb.skip(options.skip);\n if (options.take)\n qb.take(options.take);\n if (options.order)\n Object.keys(options.order).forEach(function (key) {\n var order = options.order[key];\n if (!metadata.findColumnWithPropertyPath(key))\n throw new Error(key + \" column was not found in the \" + metadata.name + \" entity.\");\n switch (order) {\n case 1:\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case -1:\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n case \"ASC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case \"DESC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n }\n });\n if (options.relations) {\n var allRelations = options.relations.map(function (relation) { return relation; });\n this.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, \"\");\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n if (options.join) {\n if (options.join.leftJoin)\n Object.keys(options.join.leftJoin).forEach(function (key) {\n qb.leftJoin(options.join.leftJoin[key], key);\n });\n if (options.join.innerJoin)\n Object.keys(options.join.innerJoin).forEach(function (key) {\n qb.innerJoin(options.join.innerJoin[key], key);\n });\n if (options.join.leftJoinAndSelect)\n Object.keys(options.join.leftJoinAndSelect).forEach(function (key) {\n qb.leftJoinAndSelect(options.join.leftJoinAndSelect[key], key);\n });\n if (options.join.innerJoinAndSelect)\n Object.keys(options.join.innerJoinAndSelect).forEach(function (key) {\n qb.innerJoinAndSelect(options.join.innerJoinAndSelect[key], key);\n });\n }\n if (options.cache) {\n if (options.cache instanceof Object) {\n var cache = options.cache;\n qb.cache(cache.id, cache.milliseconds);\n }\n else {\n qb.cache(options.cache);\n }\n }\n if (options.lock) {\n if (options.lock.mode === \"optimistic\") {\n qb.setLock(options.lock.mode, options.lock.version);\n }\n else if (options.lock.mode === \"pessimistic_read\" || options.lock.mode === \"pessimistic_write\" || options.lock.mode === \"dirty_read\" || options.lock.mode === \"pessimistic_partial_write\" || options.lock.mode === \"pessimistic_write_or_fail\") {\n var tableNames = options.lock.tables ? options.lock.tables.map(function (table) {\n var tableAlias = qb.expressionMap.aliases.find(function (alias) {\n return alias.metadata.tableNameWithoutPrefix === table;\n });\n if (!tableAlias) {\n throw new Error(\"\\\"\" + table + \"\\\" is not part of this query\");\n }\n return qb.escape(tableAlias.name);\n }) : undefined;\n qb.setLock(options.lock.mode, undefined, tableNames);\n }\n }\n if (options.withDeleted) {\n qb.withDeleted();\n }\n if (options.loadRelationIds === true) {\n qb.loadAllRelationIds();\n }\n else if (options.loadRelationIds instanceof Object) {\n qb.loadAllRelationIds(options.loadRelationIds);\n }\n return qb;\n };\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n /**\n * Adds joins for all relations and sub-relations of the given relations provided in the find options.\n */\n FindOptionsUtils.applyRelationsRecursively = function (qb, allRelations, alias, metadata, prefix) {\n var _this = this;\n // find all relations that match given prefix\n var matchedBaseRelations = [];\n if (prefix) {\n var regexp_1 = new RegExp(\"^\" + prefix.replace(\".\", \"\\\\.\") + \"\\\\.\");\n matchedBaseRelations = allRelations\n .filter(function (relation) { return relation.match(regexp_1); })\n .map(function (relation) { return relation.replace(regexp_1, \"\"); })\n .filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n else {\n matchedBaseRelations = allRelations.filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n // go through all matched relations and add join for them\n matchedBaseRelations.forEach(function (relation) {\n // generate a relation alias\n var relationAlias = alias + \"__\" + relation;\n // shorten it if needed by the driver\n if (qb.connection.driver.maxAliasLength && relationAlias.length > qb.connection.driver.maxAliasLength) {\n relationAlias = shorten(relationAlias);\n }\n // add a join for the found relation\n var selection = alias + \".\" + relation;\n qb.leftJoinAndSelect(selection, relationAlias);\n // join the eager relations of the found relation\n var relMetadata = metadata.relations.find(function (metadata) { return metadata.propertyName === relation; });\n if (relMetadata) {\n _this.joinEagerRelations(qb, relationAlias, relMetadata.inverseEntityMetadata);\n }\n // remove added relations from the allRelations array, this is needed to find all not found relations at the end\n allRelations.splice(allRelations.indexOf(prefix ? prefix + \".\" + relation : relation), 1);\n // try to find sub-relations\n var join = qb.expressionMap.joinAttributes.find(function (join) { return join.entityOrProperty === selection; });\n _this.applyRelationsRecursively(qb, allRelations, join.alias.name, join.metadata, prefix ? prefix + \".\" + relation : relation);\n });\n };\n FindOptionsUtils.joinEagerRelations = function (qb, alias, metadata) {\n var _this = this;\n metadata.eagerRelations.forEach(function (relation) {\n var relationAlias = qb.connection.namingStrategy.eagerJoinRelationAlias(alias, relation.propertyPath);\n qb.leftJoinAndSelect(alias + \".\" + relation.propertyPath, relationAlias);\n _this.joinEagerRelations(qb, relationAlias, relation.inverseEntityMetadata);\n });\n };\n return FindOptionsUtils;\n}());\nexport { FindOptionsUtils };\n\n//# sourceMappingURL=FindOptionsUtils.js.map\n","/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToNewEntityTransformer = /** @class */ (function () {\n function PlainObjectToNewEntityTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToNewEntityTransformer.prototype.transform = function (newEntity, object, metadata, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // console.log(\"groupAndTransform entity:\", newEntity);\n // console.log(\"groupAndTransform object:\", object);\n this.groupAndTransform(newEntity, object, metadata, getLazyRelationsPromiseValue);\n // console.log(\"result:\", newEntity);\n return newEntity;\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n PlainObjectToNewEntityTransformer.prototype.groupAndTransform = function (entity, object, metadata, getLazyRelationsPromiseValue) {\n // console.log(\"groupAndTransform entity:\", entity);\n // console.log(\"groupAndTransform object:\", object);\n var _this = this;\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // copy regular column properties from the given object\n metadata.nonVirtualColumns.forEach(function (column) {\n var objectColumnValue = column.getEntityValue(object);\n if (objectColumnValue !== undefined)\n column.setEntityValue(entity, objectColumnValue);\n });\n // // copy relation properties from the given object\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n var entityRelatedValue = relation.getEntityValue(entity);\n var objectRelatedValue = relation.getEntityValue(object, getLazyRelationsPromiseValue);\n if (objectRelatedValue === undefined)\n return;\n if (relation.isOneToMany || relation.isManyToMany) {\n if (!Array.isArray(objectRelatedValue))\n return;\n if (!entityRelatedValue) {\n entityRelatedValue = [];\n relation.setEntityValue(entity, entityRelatedValue);\n }\n objectRelatedValue.forEach(function (objectRelatedValueItem) {\n // check if we have this item from the merging object in the original entity we merge into\n var objectRelatedValueEntity = entityRelatedValue.find(function (entityRelatedValueItem) {\n return relation.inverseEntityMetadata.compareEntities(objectRelatedValueItem, entityRelatedValueItem);\n });\n // if such item already exist then merge new data into it, if its not we create a new entity and merge it into the array\n if (!objectRelatedValueEntity) {\n objectRelatedValueEntity = relation.inverseEntityMetadata.create();\n entityRelatedValue.push(objectRelatedValueEntity);\n }\n _this.groupAndTransform(objectRelatedValueEntity, objectRelatedValueItem, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n });\n }\n else {\n // if related object isn't an object (direct relation id for example)\n // we just set it to the entity relation, we don't need anything more from it\n // however we do it only if original entity does not have this relation set to object\n // to prevent full overriding of objects\n if (!(objectRelatedValue instanceof Object)) {\n if (!(entityRelatedValue instanceof Object))\n relation.setEntityValue(entity, objectRelatedValue);\n return;\n }\n if (!entityRelatedValue) {\n entityRelatedValue = relation.inverseEntityMetadata.create();\n relation.setEntityValue(entity, entityRelatedValue);\n }\n _this.groupAndTransform(entityRelatedValue, objectRelatedValue, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n }\n });\n }\n };\n return PlainObjectToNewEntityTransformer;\n}());\nexport { PlainObjectToNewEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToNewEntityTransformer.js.map\n","import { __awaiter, __generator, __read } from \"tslib\";\n/**\n */\nvar LoadMapItem = /** @class */ (function () {\n function LoadMapItem(plainEntity, metadata, parentLoadMapItem, relation) {\n this.plainEntity = plainEntity;\n this.metadata = metadata;\n this.parentLoadMapItem = parentLoadMapItem;\n this.relation = relation;\n }\n Object.defineProperty(LoadMapItem.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LoadMapItem.prototype, \"id\", {\n get: function () {\n return this.metadata.getEntityIdMixedMap(this.plainEntity);\n },\n enumerable: false,\n configurable: true\n });\n return LoadMapItem;\n}());\nvar LoadMap = /** @class */ (function () {\n function LoadMap() {\n this.loadMapItems = [];\n }\n Object.defineProperty(LoadMap.prototype, \"mainLoadMapItem\", {\n get: function () {\n return this.loadMapItems.find(function (item) { return !item.relation && !item.parentLoadMapItem; });\n },\n enumerable: false,\n configurable: true\n });\n LoadMap.prototype.addLoadMap = function (newLoadMap) {\n var item = this.loadMapItems.find(function (item) { return item.target === newLoadMap.target && item.id === newLoadMap.id; });\n if (!item)\n this.loadMapItems.push(newLoadMap);\n };\n LoadMap.prototype.fillEntities = function (target, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n var item = _this.loadMapItems.find(function (loadMapItem) {\n return loadMapItem.target === target && loadMapItem.metadata.compareEntities(entity, loadMapItem.plainEntity);\n });\n if (item)\n item.entity = entity;\n });\n };\n LoadMap.prototype.groupByTargetIds = function () {\n var groups = [];\n this.loadMapItems.forEach(function (loadMapItem) {\n var group = groups.find(function (group) { return group.target === loadMapItem.target; });\n if (!group) {\n group = { target: loadMapItem.target, ids: [] };\n groups.push(group);\n }\n group.ids.push(loadMapItem.id);\n });\n return groups;\n };\n return LoadMap;\n}());\n/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToDatabaseEntityTransformer = /** @class */ (function () {\n function PlainObjectToDatabaseEntityTransformer(manager) {\n this.manager = manager;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToDatabaseEntityTransformer.prototype.transform = function (plainObject, metadata) {\n return __awaiter(this, void 0, void 0, function () {\n var loadMap, fillLoadMap;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if plain object does not have id then nothing to load really\n if (!metadata.hasAllPrimaryKeys(plainObject))\n return [2 /*return*/, Promise.reject(\"Given object does not have a primary column, cannot transform it to database entity.\")];\n loadMap = new LoadMap();\n fillLoadMap = function (entity, entityMetadata, parentLoadMapItem, relation) {\n var item = new LoadMapItem(entity, entityMetadata, parentLoadMapItem, relation);\n loadMap.addLoadMap(item);\n entityMetadata\n .extractRelationValuesFromEntity(entity, metadata.relations)\n .filter(function (value) { return value !== null && value !== undefined; })\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], value = _b[1], inverseEntityMetadata = _b[2];\n return fillLoadMap(value, inverseEntityMetadata, item, relation);\n });\n };\n fillLoadMap(plainObject, metadata);\n // load all entities and store them in the load map\n return [4 /*yield*/, Promise.all(loadMap.groupByTargetIds().map(function (targetWithIds) {\n return _this.manager\n .findByIds(targetWithIds.target, targetWithIds.ids)\n .then(function (entities) { return loadMap.fillEntities(targetWithIds.target, entities); });\n }))];\n case 1:\n // load all entities and store them in the load map\n _a.sent();\n // go through each item in the load map and set their entity relationship using metadata stored in load map\n loadMap.loadMapItems.forEach(function (loadMapItem) {\n if (!loadMapItem.relation ||\n !loadMapItem.entity ||\n !loadMapItem.parentLoadMapItem ||\n !loadMapItem.parentLoadMapItem.entity)\n return;\n if (loadMapItem.relation.isManyToMany || loadMapItem.relation.isOneToMany) {\n if (!loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName])\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = [];\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName].push(loadMapItem.entity);\n }\n else {\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = loadMapItem.entity;\n }\n });\n return [2 /*return*/, loadMap.mainLoadMapItem ? loadMap.mainLoadMapItem.entity : undefined];\n }\n });\n });\n };\n return PlainObjectToDatabaseEntityTransformer;\n}());\nexport { PlainObjectToDatabaseEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToDatabaseEntityTransformer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository was not found.\n */\nvar CustomRepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(CustomRepositoryNotFoundError, _super);\n function CustomRepositoryNotFoundError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryNotFoundError\";\n Object.setPrototypeOf(_this, CustomRepositoryNotFoundError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" was not found. \" +\n \"Did you forgot to put @EntityRepository decorator on it?\";\n return _this;\n }\n return CustomRepositoryNotFoundError;\n}(Error));\nexport { CustomRepositoryNotFoundError };\n\n//# sourceMappingURL=CustomRepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repositories that extend AbstractRepository classes does not have managed entity.\n */\nvar CustomRepositoryDoesNotHaveEntityError = /** @class */ (function (_super) {\n __extends(CustomRepositoryDoesNotHaveEntityError, _super);\n function CustomRepositoryDoesNotHaveEntityError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryDoesNotHaveEntityError\";\n Object.setPrototypeOf(_this, CustomRepositoryDoesNotHaveEntityError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" does not have managed entity. \" +\n \"Did you forget to specify entity for it @EntityRepository(MyEntity)? \";\n return _this;\n }\n return CustomRepositoryDoesNotHaveEntityError;\n}(Error));\nexport { CustomRepositoryDoesNotHaveEntityError };\n\n//# sourceMappingURL=CustomRepositoryDoesNotHaveEntityError.js.map\n","import { CustomRepositoryDoesNotHaveEntityError } from \"../error/CustomRepositoryDoesNotHaveEntityError\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\n/**\n * Provides abstract class for custom repositories that do not inherit from original orm Repository.\n * Contains all most-necessary methods to simplify code in the custom repository.\n * All methods are protected thus not exposed and it allows to create encapsulated custom repository.\n *\n * @experimental\n */\nvar AbstractRepository = /** @class */ (function () {\n function AbstractRepository() {\n }\n Object.defineProperty(AbstractRepository.prototype, \"repository\", {\n // -------------------------------------------------------------------------\n // Protected Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the original ORM repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AbstractRepository.prototype, \"treeRepository\", {\n /**\n * Gets the original ORM tree repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getTreeRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder for the repository's entity that can be used to build a sql query.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n AbstractRepository.prototype.createQueryBuilder = function (alias) {\n var target = this.getCustomRepositoryTarget(this.constructor);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target).createQueryBuilder(alias);\n };\n /**\n * Creates a new query builder for the given entity that can be used to build a sql query.\n */\n AbstractRepository.prototype.createQueryBuilderFor = function (entity, alias) {\n return this.getRepositoryFor(entity).createQueryBuilder(alias);\n };\n /**\n * Gets the original ORM repository for the given entity class.\n */\n AbstractRepository.prototype.getRepositoryFor = function (entity) {\n return this.manager.getRepository(entity);\n };\n /**\n * Gets the original ORM tree repository for the given entity class.\n */\n AbstractRepository.prototype.getTreeRepositoryFor = function (entity) {\n return this.manager.getTreeRepository(entity);\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Gets custom repository's managed entity.\n * If given custom repository does not manage any entity then undefined will be returned.\n */\n AbstractRepository.prototype.getCustomRepositoryTarget = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n return entityRepositoryMetadataArgs.entity;\n };\n return AbstractRepository;\n}());\nexport { AbstractRepository };\n\n//# sourceMappingURL=AbstractRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository inherits Repository class however entity is not set in @EntityRepository decorator.\n */\nvar CustomRepositoryCannotInheritRepositoryError = /** @class */ (function (_super) {\n __extends(CustomRepositoryCannotInheritRepositoryError, _super);\n function CustomRepositoryCannotInheritRepositoryError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryCannotInheritRepositoryError\";\n Object.setPrototypeOf(_this, CustomRepositoryCannotInheritRepositoryError.prototype);\n _this.message = \"Custom entity repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" \" +\n \" cannot inherit Repository class without entity being set in the @EntityRepository decorator.\";\n return _this;\n }\n return CustomRepositoryCannotInheritRepositoryError;\n}(Error));\nexport { CustomRepositoryCannotInheritRepositoryError };\n\n//# sourceMappingURL=CustomRepositoryCannotInheritRepositoryError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(RepositoryNotFoundError, _super);\n function RepositoryNotFoundError(connectionName, entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotFoundError\";\n Object.setPrototypeOf(_this, RepositoryNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"No repository for \\\"\" + targetName + \"\\\" was found. Looks like this entity is not registered in \" +\n (\"current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return RepositoryNotFoundError;\n}(Error));\nexport { RepositoryNotFoundError };\n\n//# sourceMappingURL=RepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotTreeError = /** @class */ (function (_super) {\n __extends(RepositoryNotTreeError, _super);\n function RepositoryNotTreeError(entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotTreeError\";\n Object.setPrototypeOf(_this, RepositoryNotTreeError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"Repository of the \\\"\" + targetName + \"\\\" class is not a TreeRepository. Try to apply @Tree decorator on your entity.\";\n return _this;\n }\n return RepositoryNotTreeError;\n}(Error));\nexport { RepositoryNotTreeError };\n\n//# sourceMappingURL=RepositoryNotTreeError.js.map\n","import { TreeRepository } from \"./TreeRepository\";\nimport { Repository } from \"./Repository\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoRepository } from \"./MongoRepository\";\n/**\n * Factory used to create different types of repositories.\n */\nvar RepositoryFactory = /** @class */ (function () {\n function RepositoryFactory() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a repository.\n */\n RepositoryFactory.prototype.create = function (manager, metadata, queryRunner) {\n if (metadata.treeType) {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = new TreeRepository();\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n else {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = void 0;\n if (manager.connection.driver instanceof MongoDriver) {\n repository = new MongoRepository();\n }\n else {\n repository = new Repository();\n }\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n };\n return RepositoryFactory;\n}());\nexport { RepositoryFactory };\n\n//# sourceMappingURL=RepositoryFactory.js.map\n","import { __extends } from \"tslib\";\nvar TreeRepositoryNotSupportedError = /** @class */ (function (_super) {\n __extends(TreeRepositoryNotSupportedError, _super);\n function TreeRepositoryNotSupportedError(driver) {\n var _this = _super.call(this) || this;\n _this.name = \"TreeRepositoryNotSupportedError\";\n Object.setPrototypeOf(_this, TreeRepositoryNotSupportedError.prototype);\n _this.message = \"Tree repositories are not supported in \" + driver.options.type + \" driver.\";\n return _this;\n }\n return TreeRepositoryNotSupportedError;\n}(Error));\nexport { TreeRepositoryNotSupportedError };\n\n//# sourceMappingURL=TreeRepositoryNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when method expects entity but instead something else is given.\n */\nvar MustBeEntityError = /** @class */ (function (_super) {\n __extends(MustBeEntityError, _super);\n function MustBeEntityError(operation, wrongValue) {\n var _this = _super.call(this) || this;\n _this.name = \"MustBeEntityError\";\n Object.setPrototypeOf(_this, MustBeEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be an entity, instead \\\"\" + wrongValue + \"\\\" is given.\";\n return _this;\n }\n return MustBeEntityError;\n}(Error));\nexport { MustBeEntityError };\n\n//# sourceMappingURL=MustBeEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nvar SubjectTopoligicalSorter = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectTopoligicalSorter(subjects) {\n this.subjects = __spreadArray([], __read(subjects)); // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sorts (orders) subjects in their topological order.\n */\n SubjectTopoligicalSorter.prototype.sort = function (direction) {\n var _this = this;\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length)\n return this.subjects;\n var sortedSubjects = [];\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n var junctionSubjects = this.subjects.filter(function (subject) { return !subject.entity && !subject.databaseEntity; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(junctionSubjects)));\n this.removeAlreadySorted(junctionSubjects);\n }\n // next we always insert entities with non-nullable relations, sort them first\n var nonNullableDependencies = this.getNonNullableDependencies();\n var sortedNonNullableEntityTargets = this.toposort(nonNullableDependencies);\n if (direction === \"insert\")\n sortedNonNullableEntityTargets = sortedNonNullableEntityTargets.reverse();\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // next sort all other entities\n // same process as in above but with other entities\n var otherDependencies = this.getDependencies();\n var sortedOtherEntityTargets = this.toposort(otherDependencies);\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();\n sortedOtherEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // if we have something left in the subjects add them as well\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(this.subjects)));\n return sortedSubjects;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n SubjectTopoligicalSorter.prototype.removeAlreadySorted = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.subjects.splice(_this.subjects.indexOf(subject), 1);\n });\n };\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n SubjectTopoligicalSorter.prototype.getUniqueMetadatas = function (subjects) {\n var metadatas = [];\n subjects.forEach(function (subject) {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata);\n });\n return metadatas;\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getNonNullableDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n if (relation.isNullable)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n SubjectTopoligicalSorter.prototype.toposort = function (edges) {\n function uniqueNodes(arr) {\n var res = [];\n for (var i_1 = 0, len = arr.length; i_1 < len; i_1++) {\n var edge = arr[i_1];\n if (res.indexOf(edge[0]) < 0)\n res.push(edge[0]);\n if (res.indexOf(edge[1]) < 0)\n res.push(edge[1]);\n }\n return res;\n }\n var nodes = uniqueNodes(edges);\n var cursor = nodes.length, sorted = new Array(cursor), visited = {}, i = cursor;\n while (i--) {\n if (!visited[i])\n visit(nodes[i], i, []);\n }\n function visit(node, i, predecessors) {\n if (predecessors.indexOf(node) >= 0) {\n throw new Error(\"Cyclic dependency: \" + JSON.stringify(node)); // todo: better error\n }\n if (!~nodes.indexOf(node)) {\n throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node));\n }\n if (visited[i])\n return;\n visited[i] = true;\n // outgoing edges\n var outgoing = edges.filter(function (edge) {\n return edge[0] === node;\n });\n if (i = outgoing.length) {\n var preds = predecessors.concat(node);\n do {\n var child = outgoing[--i][1];\n visit(child, nodes.indexOf(child), preds);\n } while (i);\n }\n sorted[--cursor] = node;\n }\n return sorted;\n };\n return SubjectTopoligicalSorter;\n}());\nexport { SubjectTopoligicalSorter };\n\n//# sourceMappingURL=SubjectTopoligicalSorter.js.map\n","import { DateUtils } from \"../util/DateUtils\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * Finds what columns are changed in the subject entities.\n */\nvar SubjectChangedColumnsComputer = /** @class */ (function () {\n function SubjectChangedColumnsComputer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Finds what columns are changed in the subject entities.\n */\n SubjectChangedColumnsComputer.prototype.compute = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.computeDiffColumns(subject);\n _this.computeDiffRelationalColumns(subjects, subject);\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffColumns = function (subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.columns.forEach(function (column) {\n // ignore special columns\n if (column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return;\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.column === column; });\n if (changeMap) {\n subject.changeMaps.splice(subject.changeMaps.indexOf(changeMap), 1);\n }\n // get user provided value - column value from the user provided persisted entity\n var entityValue = column.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined)\n return;\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // skip transform database value for json / jsonb for comparison later on\n var shouldTransformDatabaseEntity = column.type !== \"json\" && column.type !== \"jsonb\";\n // get database value of the column\n var databaseValue = column.getEntityValue(subject.databaseEntity, shouldTransformDatabaseEntity);\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n var value = column.relationMetadata.getEntityValue(subject.entity);\n if (value !== null && value !== undefined)\n return;\n }\n var normalizedValue = entityValue;\n // normalize special values to make proper comparision\n if (entityValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = DateUtils.mixedDateToDateString(entityValue);\n break;\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = DateUtils.mixedDateToTimeString(entityValue);\n break;\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = DateUtils.mixedDateToUtcDatetimeString(entityValue);\n databaseValue = DateUtils.mixedDateToUtcDatetimeString(databaseValue);\n break;\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (OrmUtils.deepCompare(entityValue, databaseValue))\n return;\n break;\n case \"simple-array\":\n normalizedValue = DateUtils.simpleArrayToString(entityValue);\n databaseValue = DateUtils.simpleArrayToString(databaseValue);\n break;\n case \"simple-enum\":\n normalizedValue = DateUtils.simpleEnumToString(entityValue);\n databaseValue = DateUtils.simpleEnumToString(databaseValue);\n break;\n case \"simple-json\":\n normalizedValue = DateUtils.simpleJsonToString(entityValue);\n databaseValue = DateUtils.simpleJsonToString(databaseValue);\n break;\n }\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(column.transformer, entityValue);\n }\n }\n // if value is not changed - then do nothing\n if (normalizedValue === databaseValue)\n return;\n }\n subject.diffColumns.push(column);\n subject.changeMaps.push({\n column: column,\n value: entityValue\n });\n });\n };\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffRelationalColumns = function (allSubjects, subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.relationsWithJoinColumns.forEach(function (relation) {\n // get the related entity from the persisted entity\n var relatedEntity = relation.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined)\n return;\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n var relatedEntityRelationIdMap = relatedEntity;\n if (relatedEntityRelationIdMap !== null && relatedEntityRelationIdMap instanceof Object)\n relatedEntityRelationIdMap = relation.getRelationIdMap(relatedEntityRelationIdMap);\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n var databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);\n // if relation ids are equal then we don't need to update anything\n var areRelatedIdsEqual = OrmUtils.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);\n if (areRelatedIdsEqual) {\n return;\n }\n else {\n subject.diffRelations.push(relation);\n }\n }\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n var valueSubject = allSubjects.find(function (subject) { return subject.mustBeInserted && subject.entity === relatedEntity; });\n if (valueSubject)\n relatedEntity = valueSubject;\n // find if there is already a relation to be changed\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.relation === relation; });\n if (changeMap) { // and update its value if it was found\n changeMap.value = relatedEntity;\n }\n else { // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity\n });\n }\n });\n };\n return SubjectChangedColumnsComputer;\n}());\nexport { SubjectChangedColumnsComputer };\n\n//# sourceMappingURL=SubjectChangedColumnsComputer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when operation is going to be executed on a subject without identifier.\n * This error should never be thrown, however it still presents to prevent user from updation or removing the whole table.\n * If this error occurs still, it most probably is an ORM internal problem which must be reported and fixed.\n */\nvar SubjectWithoutIdentifierError = /** @class */ (function (_super) {\n __extends(SubjectWithoutIdentifierError, _super);\n function SubjectWithoutIdentifierError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectWithoutIdentifierError\";\n Object.setPrototypeOf(_this, SubjectWithoutIdentifierError.prototype);\n _this.message = \"Internal error. Subject \" + subject.metadata.targetName + \" must have an identifier to perform operation. \" +\n \"Please report a github issue if you face this error.\";\n return _this;\n }\n return SubjectWithoutIdentifierError;\n}(Error));\nexport { SubjectWithoutIdentifierError };\n\n//# sourceMappingURL=SubjectWithoutIdentifierError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when same object is scheduled for remove and updation at the same time.\n */\nvar SubjectRemovedAndUpdatedError = /** @class */ (function (_super) {\n __extends(SubjectRemovedAndUpdatedError, _super);\n function SubjectRemovedAndUpdatedError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectRemovedAndUpdatedError\";\n Object.setPrototypeOf(_this, SubjectRemovedAndUpdatedError.prototype);\n _this.message = \"Removed entity \\\"\" + subject.metadata.name + \"\\\" is also scheduled for update operation. \" +\n \"Make sure you are not updating and removing same object (note that update or remove may be executed by cascade operations).\";\n return _this;\n }\n return SubjectRemovedAndUpdatedError;\n}(Error));\nexport { SubjectRemovedAndUpdatedError };\n\n//# sourceMappingURL=SubjectRemovedAndUpdatedError.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Executes subject operations for nested set tree entities.\n */\nvar NestedSetSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NestedSetSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n NestedSetSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var escape, tableName, leftColumnName, rightColumnName, parent, parentId, parentNsRight;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n escape = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.tablePath);\n leftColumnName = escape(subject.metadata.nestedSetLeftColumn.databaseName);\n rightColumnName = escape(subject.metadata.nestedSetRightColumn.databaseName);\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentNsRight = undefined;\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.nestedSetRightColumn.propertyPath, \"right\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) {\n var value = result ? result[\"right\"] : undefined;\n // CockroachDB returns numeric types as string\n return typeof value === \"string\" ? parseInt(value) : value;\n })];\n case 1:\n parentNsRight = _a.sent();\n _a.label = 2;\n case 2:\n if (!(parentNsRight !== undefined)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.queryRunner.query(\"UPDATE \" + tableName + \" SET \" +\n (leftColumnName + \" = CASE WHEN \" + leftColumnName + \" > \" + parentNsRight + \" THEN \" + leftColumnName + \" + 2 ELSE \" + leftColumnName + \" END,\") +\n (rightColumnName + \" = \" + rightColumnName + \" + 2 \") +\n (\"WHERE \" + rightColumnName + \" >= \" + parentNsRight))];\n case 3:\n _a.sent();\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(parentNsRight), subject.metadata.nestedSetRightColumn.createValueMap(parentNsRight + 1));\n return [3 /*break*/, 5];\n case 4:\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(1), subject.metadata.nestedSetRightColumn.createValueMap(2));\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n NestedSetSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return NestedSetSubjectExecutor;\n}());\nexport { NestedSetSubjectExecutor };\n\n//# sourceMappingURL=NestedSetSubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user saves tree children entity but its parent is not saved yet.\n*/\nvar CannotAttachTreeChildrenEntityError = /** @class */ (function (_super) {\n __extends(CannotAttachTreeChildrenEntityError, _super);\n function CannotAttachTreeChildrenEntityError(entityName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotAttachTreeChildrenEntityError\";\n Object.setPrototypeOf(_this, CannotAttachTreeChildrenEntityError.prototype);\n _this.message = \"Cannot attach entity \\\"\" + entityName + \"\\\" to its parent. Please make sure parent is saved in the database before saving children nodes.\";\n return _this;\n }\n return CannotAttachTreeChildrenEntityError;\n}(Error));\nexport { CannotAttachTreeChildrenEntityError };\n\n//# sourceMappingURL=CannotAttachTreeChildrenEntityError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { CannotAttachTreeChildrenEntityError } from \"../../error/CannotAttachTreeChildrenEntityError\";\n/**\n * Executes subject operations for closure entities.\n */\nvar ClosureSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Removes all children of the given subject's entity.\n\n async deleteChildrenOf(subject: Subject) {\n // const relationValue = subject.metadata.treeParentRelation.getEntityValue(subject.databaseEntity);\n // console.log(\"relationValue: \", relationValue);\n // this.queryRunner.manager\n // .createQueryBuilder()\n // .from(subject.metadata.closureJunctionTable.target, \"tree\")\n // .where(\"tree.\");\n }*/\n /**\n * Executes operations when subject is being inserted.\n */\n ClosureSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var closureJunctionInsertMap, parent, escape_1, tableName, ancestorColumnNames, descendantColumnNames, firstQueryParameters_1, childEntityIdValues_1, childEntityIds1, whereCondition;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n closureJunctionInsertMap = {};\n subject.metadata.closureJunctionTable.ancestorColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n subject.metadata.closureJunctionTable.descendantColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n // insert values into the closure junction table\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.closureJunctionTable.tablePath)\n .values(closureJunctionInsertMap)\n .updateEntity(false)\n .callListeners(false)\n .execute()];\n case 1:\n // insert values into the closure junction table\n _a.sent();\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n if (!parent) return [3 /*break*/, 3];\n escape_1 = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.closureJunctionTable.tablePath);\n ancestorColumnNames = subject.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n descendantColumnNames = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n firstQueryParameters_1 = [];\n childEntityIdValues_1 = subject.metadata.primaryColumns.map(function (column) { return column.getEntityValue(subject.insertedValueSet); });\n childEntityIds1 = subject.metadata.primaryColumns.map(function (column, index) {\n firstQueryParameters_1.push(childEntityIdValues_1[index]);\n return _this.queryRunner.connection.driver.createParameter(\"child_entity_\" + column.databaseName, firstQueryParameters_1.length - 1);\n });\n whereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n var columnName = escape_1(column.databaseName);\n var parentId = column.referencedColumn.getEntityValue(parent);\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n firstQueryParameters_1.push(parentId);\n var parameterName = _this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn.databaseName, firstQueryParameters_1.length - 1);\n return columnName + \" = \" + parameterName;\n }).join(\", \");\n return [4 /*yield*/, this.queryRunner.query(\"INSERT INTO \" + tableName + \" (\" + __spreadArray(__spreadArray([], __read(ancestorColumnNames)), __read(descendantColumnNames)).join(\", \") + \") \" +\n (\"SELECT \" + ancestorColumnNames.join(\", \") + \", \" + childEntityIds1.join(\", \") + \" FROM \" + tableName + \" WHERE \" + whereCondition), firstQueryParameters_1)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n ClosureSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return ClosureSubjectExecutor;\n}());\nexport { ClosureSubjectExecutor };\n\n//# sourceMappingURL=ClosureSubjectExecutor.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Executes subject operations for materialized-path tree entities.\n */\nvar MaterializedPathSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MaterializedPathSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n MaterializedPathSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var parent, parentId, parentPath, insertedEntityId;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentPath = \"\";\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) { return result ? result[\"path\"] : undefined; })];\n case 1:\n parentPath = _b.sent();\n _b.label = 2;\n case 2:\n insertedEntityId = subject.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n return joinColumn.referencedColumn.getEntityValue(subject.insertedValueSet);\n }).join(\"_\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set((_a = {},\n _a[subject.metadata.materializedPathColumn.propertyPath] = parentPath + insertedEntityId + \".\",\n _a))\n .where(subject.identifier)\n .execute()];\n case 3:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return MaterializedPathSubjectExecutor;\n}());\nexport { MaterializedPathSubjectExecutor };\n\n//# sourceMappingURL=MaterializedPathSubjectExecutor.js.map\n","import { __awaiter, __generator, __read, __values } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SubjectTopoligicalSorter } from \"./SubjectTopoligicalSorter\";\nimport { SubjectChangedColumnsComputer } from \"./SubjectChangedColumnsComputer\";\nimport { SubjectWithoutIdentifierError } from \"../error/SubjectWithoutIdentifierError\";\nimport { SubjectRemovedAndUpdatedError } from \"../error/SubjectRemovedAndUpdatedError\";\nimport { MongoQueryRunner } from \"../driver/mongodb/MongoQueryRunner\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { NestedSetSubjectExecutor } from \"./tree/NestedSetSubjectExecutor\";\nimport { ClosureSubjectExecutor } from \"./tree/ClosureSubjectExecutor\";\nimport { MaterializedPathSubjectExecutor } from \"./tree/MaterializedPathSubjectExecutor\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Executes all database operations (inserts, updated, deletes) that must be executed\n * with given persistence subjects.\n */\nvar SubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectExecutor(queryRunner, subjects, options) {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if executor has any operations to execute (e.g. has insert / update / delete operations to be executed).\n */\n this.hasExecutableOperations = false;\n /**\n * Subjects that must be inserted.\n */\n this.insertSubjects = [];\n /**\n * Subjects that must be updated.\n */\n this.updateSubjects = [];\n /**\n * Subjects that must be removed.\n */\n this.removeSubjects = [];\n /**\n * Subjects that must be soft-removed.\n */\n this.softRemoveSubjects = [];\n /**\n * Subjects that must be recovered.\n */\n this.recoverSubjects = [];\n this.queryRunner = queryRunner;\n this.allSubjects = subjects;\n this.options = options;\n this.validate();\n this.recompute();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes all operations over given array of subjects.\n * Executes queries using given query runner.\n */\n SubjectExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var broadcasterResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n broadcasterResult = undefined;\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 2];\n // console.time(\".broadcastBeforeEventsForAll\");\n broadcasterResult = this.broadcastBeforeEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n // since event listeners and subscribers can call save methods and/or trigger entity changes we need to recompute operational subjects\n // recompute only in the case if any listener or subscriber was really executed\n if (broadcasterResult && broadcasterResult.count > 0) {\n // console.time(\".recompute\");\n this.insertSubjects.forEach(function (subject) { return subject.recompute(); });\n this.updateSubjects.forEach(function (subject) { return subject.recompute(); });\n this.removeSubjects.forEach(function (subject) { return subject.recompute(); });\n this.softRemoveSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recoverSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recompute();\n // console.timeEnd(\".recompute\");\n }\n // make sure our insert subjects are sorted (using topological sorting) to make cascade inserts work properly\n // console.timeEnd(\"prepare\");\n // execute all insert operations\n // console.time(\".insertion\");\n this.insertSubjects = new SubjectTopoligicalSorter(this.insertSubjects).sort(\"insert\");\n return [4 /*yield*/, this.executeInsertOperations()];\n case 3:\n _a.sent();\n // console.timeEnd(\".insertion\");\n // recompute update operations since insertion can create updation operations for the\n // properties it wasn't able to handle on its own (referenced columns)\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n // execute update operations\n // console.time(\".updation\");\n return [4 /*yield*/, this.executeUpdateOperations()];\n case 4:\n // execute update operations\n // console.time(\".updation\");\n _a.sent();\n // console.timeEnd(\".updation\");\n // make sure our remove subjects are sorted (using topological sorting) when multiple entities are passed for the removal\n // console.time(\".removal\");\n this.removeSubjects = new SubjectTopoligicalSorter(this.removeSubjects).sort(\"delete\");\n return [4 /*yield*/, this.executeRemoveOperations()];\n case 5:\n _a.sent();\n // console.timeEnd(\".removal\");\n // recompute soft-remove operations\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n // execute soft-remove operations\n return [4 /*yield*/, this.executeSoftRemoveOperations()];\n case 6:\n // execute soft-remove operations\n _a.sent();\n // recompute recover operations\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n // execute recover operations\n return [4 /*yield*/, this.executeRecoverOperations()];\n case 7:\n // execute recover operations\n _a.sent();\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n return [4 /*yield*/, this.updateSpecialColumnsInPersistedEntities()];\n case 8:\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n _a.sent();\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 10];\n // console.time(\".broadcastAfterEventsForAll\");\n broadcasterResult = this.broadcastAfterEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given subjects.\n */\n SubjectExecutor.prototype.validate = function () {\n this.allSubjects.forEach(function (subject) {\n if (subject.mustBeUpdated && subject.mustBeRemoved)\n throw new SubjectRemovedAndUpdatedError(subject);\n });\n };\n /**\n * Performs entity re-computations - finds changed columns, re-builds insert/update/remove subjects.\n */\n SubjectExecutor.prototype.recompute = function () {\n new SubjectChangedColumnsComputer().compute(this.allSubjects);\n this.insertSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeInserted; });\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n this.removeSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRemoved; });\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n this.hasExecutableOperations = this.insertSubjects.length > 0 || this.updateSubjects.length > 0 || this.removeSubjects.length > 0 || this.softRemoveSubjects.length > 0 || this.recoverSubjects.length > 0;\n };\n /**\n * Broadcasts \"BEFORE_INSERT\", \"BEFORE_UPDATE\", \"BEFORE_REMOVE\" events for all given subjects.\n */\n SubjectExecutor.prototype.broadcastBeforeEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Broadcasts \"AFTER_INSERT\", \"AFTER_UPDATE\", \"AFTER_REMOVE\" events for all given subjects.\n * Returns void if there wasn't any listener or subscriber executed.\n * Note: this method has a performance-optimized code organization.\n */\n SubjectExecutor.prototype.broadcastAfterEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Executes insert operations.\n */\n SubjectExecutor.prototype.executeInsertOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedInsertSubjects, groupedInsertSubjectKeys, _loop_1, this_1, groupedInsertSubjectKeys_1, groupedInsertSubjectKeys_1_1, groupName, e_1_1;\n var e_1, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.insertSubjects, \"insert\"), 2), groupedInsertSubjects = _a[0], groupedInsertSubjectKeys = _a[1];\n _loop_1 = function (groupName) {\n var subjects, bulkInsertMaps, bulkInsertSubjects, singleInsertSubjects, manager, insertResult_1, insertResult_2, _loop_2, singleInsertSubjects_1, singleInsertSubjects_1_1, subject, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n subjects = groupedInsertSubjects[groupName];\n bulkInsertMaps = [];\n bulkInsertSubjects = [];\n singleInsertSubjects = [];\n if (this_1.queryRunner.connection.driver instanceof MongoDriver) {\n subjects.forEach(function (subject) {\n if (subject.metadata.createDateColumn && subject.entity) {\n subject.entity[subject.metadata.createDateColumn.databaseName] = new Date();\n }\n if (subject.metadata.updateDateColumn && subject.entity) {\n subject.entity[subject.metadata.updateDateColumn.databaseName] = new Date();\n }\n subject.createValueSetAndPopChangeMap();\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.entity);\n });\n }\n else if (this_1.queryRunner.connection.driver instanceof OracleDriver) {\n subjects.forEach(function (subject) {\n singleInsertSubjects.push(subject);\n });\n }\n else {\n subjects.forEach(function (subject) {\n // we do not insert in bulk in following cases:\n // - when there is no values in insert (only defaults are inserted), since we cannot use DEFAULT VALUES expression for multiple inserted rows\n // - when entity is a tree table, since tree tables require extra operation per each inserted row\n // - when oracle is used, since oracle's bulk insertion is very bad\n if (subject.changeMaps.length === 0 ||\n subject.metadata.treeType ||\n _this.queryRunner.connection.driver instanceof OracleDriver ||\n _this.queryRunner.connection.driver instanceof SapDriver) {\n singleInsertSubjects.push(subject);\n }\n else {\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.createValueSetAndPopChangeMap());\n }\n });\n }\n if (!(this_1.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n manager = this_1.queryRunner.manager;\n return [4 /*yield*/, manager.insert(subjects[0].metadata.target, bulkInsertMaps)];\n case 1:\n insertResult_1 = _e.sent();\n subjects.forEach(function (subject, index) {\n subject.identifier = insertResult_1.identifiers[index];\n subject.generatedMap = insertResult_1.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n return [3 /*break*/, 12];\n case 2:\n if (!(bulkInsertMaps.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subjects[0].metadata.target)\n .values(bulkInsertMaps)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()];\n case 3:\n insertResult_2 = _e.sent();\n bulkInsertSubjects.forEach(function (subject, index) {\n subject.identifier = insertResult_2.identifiers[index];\n subject.generatedMap = insertResult_2.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n _e.label = 4;\n case 4:\n if (!(singleInsertSubjects.length > 0)) return [3 /*break*/, 12];\n _loop_2 = function (subject) {\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n subject.insertedValueSet = subject.createValueSetAndPopChangeMap(); // important to have because query builder sets inserted values into it\n if (!(subject.metadata.treeType === \"nested-set\")) return [3 /*break*/, 2];\n return [4 /*yield*/, new NestedSetSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 1:\n _f.sent();\n _f.label = 2;\n case 2: return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.target)\n .values(subject.insertedValueSet)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()\n .then(function (insertResult) {\n subject.identifier = insertResult.identifiers[0];\n subject.generatedMap = insertResult.generatedMaps[0];\n })];\n case 3:\n _f.sent();\n if (!(subject.metadata.treeType === \"closure-table\")) return [3 /*break*/, 5];\n return [4 /*yield*/, new ClosureSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 4:\n _f.sent();\n return [3 /*break*/, 7];\n case 5:\n if (!(subject.metadata.treeType === \"materialized-path\")) return [3 /*break*/, 7];\n return [4 /*yield*/, new MaterializedPathSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 6:\n _f.sent();\n _f.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n };\n _e.label = 5;\n case 5:\n _e.trys.push([5, 10, 11, 12]);\n singleInsertSubjects_1 = (e_2 = void 0, __values(singleInsertSubjects)), singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n _e.label = 6;\n case 6:\n if (!!singleInsertSubjects_1_1.done) return [3 /*break*/, 9];\n subject = singleInsertSubjects_1_1.value;\n return [5 /*yield**/, _loop_2(subject)];\n case 7:\n _e.sent();\n _e.label = 8;\n case 8:\n singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n return [3 /*break*/, 6];\n case 9: return [3 /*break*/, 12];\n case 10:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 12];\n case 11:\n try {\n if (singleInsertSubjects_1_1 && !singleInsertSubjects_1_1.done && (_d = singleInsertSubjects_1.return)) _d.call(singleInsertSubjects_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 12:\n subjects.forEach(function (subject) {\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n });\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 8]);\n groupedInsertSubjectKeys_1 = __values(groupedInsertSubjectKeys), groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedInsertSubjectKeys_1_1.done) return [3 /*break*/, 5];\n groupName = groupedInsertSubjectKeys_1_1.value;\n return [5 /*yield**/, _loop_1(groupName)];\n case 3:\n _c.sent();\n _c.label = 4;\n case 4:\n groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (groupedInsertSubjectKeys_1_1 && !groupedInsertSubjectKeys_1_1.done && (_b = groupedInsertSubjectKeys_1.return)) _b.call(groupedInsertSubjectKeys_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all given subjects in the database.\n */\n SubjectExecutor.prototype.executeUpdateOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.updateSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, updateMap, updateQueryBuilder, updateResult, updateGeneratedMap_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n updateMap = subject.createValueSetAndPopChangeMap();\n updateQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set(updateMap)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n updateQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n updateQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, updateQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n updateGeneratedMap_1 = updateResult.generatedMaps[0];\n if (updateGeneratedMap_1) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(updateGeneratedMap_1);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(updateGeneratedMap_1, preparedValue);\n }\n });\n if (!subject.generatedMap) {\n subject.generatedMap = {};\n }\n Object.assign(subject.generatedMap, updateGeneratedMap_1);\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all given subjects from the database.\n *\n * todo: we need to apply topological sort here as well\n */\n SubjectExecutor.prototype.executeRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedRemoveSubjects, groupedRemoveSubjectKeys, groupedRemoveSubjectKeys_1, groupedRemoveSubjectKeys_1_1, groupName, subjects, deleteMaps, manager, e_3_1;\n var e_3, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.removeSubjects, \"delete\"), 2), groupedRemoveSubjects = _a[0], groupedRemoveSubjectKeys = _a[1];\n _c.label = 1;\n case 1:\n _c.trys.push([1, 8, 9, 10]);\n groupedRemoveSubjectKeys_1 = __values(groupedRemoveSubjectKeys), groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedRemoveSubjectKeys_1_1.done) return [3 /*break*/, 7];\n groupName = groupedRemoveSubjectKeys_1_1.value;\n subjects = groupedRemoveSubjects[groupName];\n deleteMaps = subjects.map(function (subject) {\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n return subject.identifier;\n });\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 4];\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.delete(subjects[0].metadata.target, deleteMaps)];\n case 3:\n _c.sent();\n return [3 /*break*/, 6];\n case 4: \n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(subjects[0].metadata.target)\n .where(deleteMaps)\n .callListeners(false)\n .execute()];\n case 5:\n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n _c.sent();\n _c.label = 6;\n case 6:\n groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_3_1 = _c.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (groupedRemoveSubjectKeys_1_1 && !groupedRemoveSubjectKeys_1_1.done && (_b = groupedRemoveSubjectKeys_1.return)) _b.call(groupedRemoveSubjectKeys_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Soft-removes all given subjects in the database.\n */\n SubjectExecutor.prototype.executeSoftRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.softRemoveSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .softDelete()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Recovers all given subjects in the database.\n */\n SubjectExecutor.prototype.executeRecoverOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.recoverSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = null;\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .restore()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInPersistedEntities = function () {\n var _this = this;\n // update inserted entity properties\n if (this.insertSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.insertSubjects);\n // update updated entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);\n // update soft-removed entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n // update recovered entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);\n // remove ids from the entities that were removed\n if (this.removeSubjects.length) {\n this.removeSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.primaryColumns.forEach(function (primaryColumn) {\n primaryColumn.setEntityValue(subject.entity, undefined);\n });\n });\n }\n // other post-persist updations\n this.allSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.relationIds.forEach(function (relationId) {\n relationId.setValue(subject.entity);\n });\n // mongo _id remove\n if (_this.queryRunner instanceof MongoQueryRunner) {\n if (subject.metadata.objectIdColumn\n && subject.metadata.objectIdColumn.databaseName\n && subject.metadata.objectIdColumn.databaseName !== subject.metadata.objectIdColumn.propertyName) {\n delete subject.entity[subject.metadata.objectIdColumn.databaseName];\n }\n }\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInInsertedAndUpdatedEntities = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n // set values to \"null\" for nullable columns that did not have values\n subject.metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (subject.metadata.childEntityMetadatas.length > 0 && subject.metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n // entities does not have virtual columns\n if (column.isVirtual)\n return;\n // update nullable columns\n if (column.isNullable) {\n var columnValue = column.getEntityValue(subject.entity);\n if (columnValue === undefined)\n column.setEntityValue(subject.entity, null);\n }\n // update relational columns\n if (subject.updatedRelationMaps.length > 0) {\n subject.updatedRelationMaps.forEach(function (updatedRelationMap) {\n updatedRelationMap.relation.joinColumns.forEach(function (column) {\n if (column.isVirtual === true)\n return;\n column.setEntityValue(subject.entity, updatedRelationMap.value instanceof Object ? column.referencedColumn.getEntityValue(updatedRelationMap.value) : updatedRelationMap.value);\n });\n });\n }\n });\n // merge into entity all generated values returned by a database\n if (subject.generatedMap)\n _this.queryRunner.manager.merge(subject.metadata.target, subject.entity, subject.generatedMap);\n });\n };\n /**\n * Groups subjects by metadata names (by tables) to make bulk insertions and deletions possible.\n * However there are some limitations with bulk insertions of data into tables with generated (increment) columns\n * in some drivers. Some drivers like mysql and sqlite does not support returning multiple generated columns\n * after insertion and can only return a single generated column value, that's why its not possible to do bulk insertion,\n * because it breaks insertion result's generatedMap and leads to problems when this subject is used in other subjects saves.\n * That's why we only support bulking in junction tables for those drivers.\n *\n * Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated\n * id for each inserted row, that's why bulk insertion is not limited to junction tables in there.\n */\n SubjectExecutor.prototype.groupBulkSubjects = function (subjects, type) {\n var group = {};\n var keys = [];\n var groupingAllowed = type === \"delete\" || this.queryRunner.connection.driver.isReturningSqlSupported();\n subjects.forEach(function (subject, index) {\n var key = groupingAllowed || subject.metadata.isJunction ? subject.metadata.name : subject.metadata.name + \"_\" + index;\n if (!group[key]) {\n group[key] = [subject];\n keys.push(key);\n }\n else {\n group[key].push(subject);\n }\n });\n return [group, keys];\n };\n return SubjectExecutor;\n}());\nexport { SubjectExecutor };\n\n//# sourceMappingURL=SubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to save/remove/etc. constructor-less object (object literal) instead of entity.\n */\nvar CannotDetermineEntityError = /** @class */ (function (_super) {\n __extends(CannotDetermineEntityError, _super);\n function CannotDetermineEntityError(operation) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotDetermineEntityError\";\n Object.setPrototypeOf(_this, CannotDetermineEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be instance of entity class, instead object literal is given. Or you must specify an entity target to method call.\";\n return _this;\n }\n return CannotDetermineEntityError;\n}(Error));\nexport { CannotDetermineEntityError };\n\n//# sourceMappingURL=CannotDetermineEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Subject is a subject of persistence.\n * It holds information about each entity that needs to be persisted:\n * - what entity should be persisted\n * - what is database representation of the persisted entity\n * - what entity metadata of the persisted entity\n * - what is allowed to with persisted entity (insert/update/remove)\n *\n * Having this collection of subjects we can perform database queries.\n */\nvar Subject = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Subject(options) {\n var _a;\n /**\n * Subject identifier.\n * This identifier is not limited to table entity primary columns.\n * This can be entity id or ids as well as some unique entity properties, like name or title.\n * Insert / Update / Remove operation will be executed by a given identifier.\n */\n this.identifier = undefined;\n /**\n * Copy of entity but with relational ids fulfilled.\n */\n this.entityWithFulfilledIds = undefined;\n /**\n * Indicates if database entity was loaded.\n * No matter if it was found or not, it indicates the fact of loading.\n */\n this.databaseEntityLoaded = false;\n /**\n * Changes needs to be applied in the database for the given subject.\n */\n this.changeMaps = [];\n /**\n * Indicates if this subject can be inserted into the database.\n * This means that this subject either is newly persisted, either can be inserted by cascades.\n */\n this.canBeInserted = false;\n /**\n * Indicates if this subject can be updated in the database.\n * This means that this subject either was persisted, either can be updated by cascades.\n */\n this.canBeUpdated = false;\n /**\n * Indicates if this subject MUST be removed from the database.\n * This means that this subject either was removed, either was removed by cascades.\n */\n this.mustBeRemoved = false;\n /**\n * Indicates if this subject can be soft-removed from the database.\n * This means that this subject either was soft-removed, either was soft-removed by cascades.\n */\n this.canBeSoftRemoved = false;\n /**\n * Indicates if this subject can be recovered from the database.\n * This means that this subject either was recovered, either was recovered by cascades.\n */\n this.canBeRecovered = false;\n /**\n * Relations updated by the change maps.\n */\n this.updatedRelationMaps = [];\n /**\n * List of updated columns\n */\n this.diffColumns = [];\n /**\n * List of updated relations\n */\n this.diffRelations = [];\n this.metadata = options.metadata;\n this.entity = options.entity;\n this.parentSubject = options.parentSubject;\n if (options.canBeInserted !== undefined)\n this.canBeInserted = options.canBeInserted;\n if (options.canBeUpdated !== undefined)\n this.canBeUpdated = options.canBeUpdated;\n if (options.mustBeRemoved !== undefined)\n this.mustBeRemoved = options.mustBeRemoved;\n if (options.canBeSoftRemoved !== undefined)\n this.canBeSoftRemoved = options.canBeSoftRemoved;\n if (options.canBeRecovered !== undefined)\n this.canBeRecovered = options.canBeRecovered;\n if (options.identifier !== undefined)\n this.identifier = options.identifier;\n if (options.changeMaps !== undefined)\n (_a = this.changeMaps).push.apply(_a, __spreadArray([], __read(options.changeMaps)));\n this.recompute();\n }\n Object.defineProperty(Subject.prototype, \"mustBeInserted\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Checks if this subject must be inserted into the database.\n * Subject can be inserted into the database if it is allowed to be inserted (explicitly persisted or by cascades)\n * and if it does not have database entity set.\n */\n get: function () {\n return this.canBeInserted && !this.databaseEntity;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeUpdated\", {\n /**\n * Checks if this subject must be updated into the database.\n * Subject can be updated in the database if it is allowed to be updated (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeUpdated &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity)) &&\n // ((this.entity && this.databaseEntity) || (!this.entity && !this.databaseEntity)) &&\n this.changeMaps.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeSoftRemoved\", {\n /**\n * Checks if this subject must be soft-removed into the database.\n * Subject can be updated in the database if it is allowed to be soft-removed (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeSoftRemoved &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeRecovered\", {\n /**\n * Checks if this subject must be recovered into the database.\n * Subject can be updated in the database if it is allowed to be recovered (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeRecovered &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a value set needs to be inserted / updated in the database.\n * Value set is based on the entity and change maps of the subject.\n * Important note: this method pops data from this subject's change maps.\n */\n Subject.prototype.createValueSetAndPopChangeMap = function () {\n var _this = this;\n var changeMapsWithoutValues = [];\n var changeSet = this.changeMaps.reduce(function (updateMap, changeMap) {\n var value = changeMap.value;\n if (value instanceof Subject) {\n // referenced columns can refer on values both which were just inserted and which were present in the model\n // if entity was just inserted valueSets must contain all values from the entity and values just inserted in the database\n // so, here we check if we have a value set then we simply use it as value to get our reference column values\n // otherwise simply use an entity which cannot be just inserted at the moment and have all necessary data\n value = value.insertedValueSet ? value.insertedValueSet : value.entity;\n }\n // value = changeMap.valueFactory ? changeMap.valueFactory(value) : changeMap.column.createValueMap(value);\n var valueMap;\n if (_this.metadata.isJunction && changeMap.column) {\n valueMap = changeMap.column.createValueMap(changeMap.column.referencedColumn.getEntityValue(value));\n }\n else if (changeMap.column) {\n valueMap = changeMap.column.createValueMap(value);\n }\n else if (changeMap.relation) {\n // value can be a related object, for example: post.question = { id: 1 }\n // or value can be a null or direct relation id, e.g. post.question = 1\n // if its a direction relation id then we just set it to the valueMap,\n // however if its an object then we need to extract its relation id map and set it to the valueMap\n if (value instanceof Object) {\n // get relation id, e.g. referenced column name and its value,\n // for example: { id: 1 } which then will be set to relation, e.g. post.category = { id: 1 }\n var relationId = changeMap.relation.getRelationIdMap(value);\n // but relation id can be empty, for example in the case when you insert a new post with category\n // and both post and category are newly inserted objects (by cascades) and in this case category will not have id\n // this means we need to insert post without question id and update post's questionId once question be inserted\n // that's why we create a new changeMap operation for future updation of the post entity\n if (relationId === undefined) {\n changeMapsWithoutValues.push(changeMap);\n _this.canBeUpdated = true;\n return updateMap;\n }\n valueMap = changeMap.relation.createValueMap(relationId);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: relationId });\n }\n else { // value can be \"null\" or direct relation id here\n valueMap = changeMap.relation.createValueMap(value);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: value });\n }\n }\n OrmUtils.mergeDeep(updateMap, valueMap);\n return updateMap;\n }, {});\n this.changeMaps = changeMapsWithoutValues;\n return changeSet;\n };\n /**\n * Recomputes entityWithFulfilledIds and identifier when entity changes.\n */\n Subject.prototype.recompute = function () {\n var _this = this;\n if (this.entity) {\n this.entityWithFulfilledIds = Object.assign({}, this.entity);\n if (this.parentSubject) {\n this.metadata.primaryColumns.forEach(function (primaryColumn) {\n if (primaryColumn.relationMetadata && primaryColumn.relationMetadata.inverseEntityMetadata === _this.parentSubject.metadata) {\n var value = primaryColumn.referencedColumn.getEntityValue(_this.parentSubject.entity);\n primaryColumn.setEntityValue(_this.entityWithFulfilledIds, value);\n }\n });\n }\n this.identifier = this.metadata.getEntityIdMap(this.entityWithFulfilledIds);\n }\n else if (this.databaseEntity) {\n this.identifier = this.metadata.getEntityIdMap(this.databaseEntity);\n }\n };\n return Subject;\n}());\nexport { Subject };\n\n//# sourceMappingURL=Subject.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\";\n/**\n * Builds operations needs to be executed for one-to-many relations of the given subjects.\n *\n * by example: post contains one-to-many relation with category in the property called \"categories\", e.g.\n * @OneToMany(type => Category, category => category.post) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToOneInverseSideOperationBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n OneToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // prepare objects (relation id maps) for the database entity\n // note: subject.databaseEntity contains relations with loaded relation ids only\n // by example: since subject is a post, we are expecting to get all post's categories saved in the database here,\n // particularly their relation ids, e.g. category ids stored in the database\n var relatedEntityDatabaseRelationIds = [];\n if (subject.databaseEntity) { // related entities in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationIds = relation.getEntityValue(subject.databaseEntity);\n }\n // get related entities of persisted entity\n // by example: get categories from the passed to persist post entity\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // we treat relations set to null as removed, so we don't skip it\n relatedEntities = [];\n if (relatedEntities === undefined) // if relation is undefined then nothing to update\n return;\n // extract only relation ids from the related entities, since we only need them for comparision\n // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)\n var relatedPersistedEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains categories which does not have ids yet (because they are new)\n // it means they are always newly inserted and relation update operation always must be created for them\n // it does not make sense to perform difference operation for them for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n return;\n }\n // check if this binding really exist in the database\n // by example: find our category if its already bind in the database\n var relationIdInDatabaseSubjectRelation = relatedEntityDatabaseRelationIds.find(function (relatedDatabaseEntityRelationId) {\n return OrmUtils.compareIds(relationIdMap, relatedDatabaseEntityRelationId);\n });\n // if relationIdMap DOES NOT exist in the subject's relation in the database it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!relationIdInDatabaseSubjectRelation) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n _this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // if related entity has relation id then we add it to the list of relation ids\n // this list will be used later to compare with database relation ids to find a difference\n // what exist in this array and does not exist in the database are newly inserted relations\n // what does not exist in this array, but exist in the database are removed relations\n // removed relations are set to null from inverse side of relation\n relatedPersistedEntityRelationIds.push(relationIdMap);\n });\n // find what related entities were added and what were removed based on difference between what we save and what database has\n EntityMetadata\n .difference(relatedEntityDatabaseRelationIds, relatedPersistedEntityRelationIds)\n .forEach(function (removedRelatedEntityRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n identifier: removedRelatedEntityRelationId,\n });\n if (!relation.inverseRelation || relation.inverseRelation.orphanedRowAction === \"nullify\") {\n removedRelatedEntitySubject.canBeUpdated = true;\n removedRelatedEntitySubject.changeMaps = [{\n relation: relation.inverseRelation,\n value: null\n }];\n }\n else if (relation.inverseRelation.orphanedRowAction === \"delete\") {\n removedRelatedEntitySubject.mustBeRemoved = true;\n }\n _this.subjects.push(removedRelatedEntitySubject);\n });\n };\n return OneToManySubjectBuilder;\n}());\nexport { OneToManySubjectBuilder };\n\n//# sourceMappingURL=OneToManySubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for one-to-one non-owner relations of the given subjects.\n *\n * by example: post contains one-to-one non-owner relation with category in the property called \"category\", e.g.\n * @OneToOne(type => Category, category => category.post) category: Category\n * If user sets a category into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToManyUpdateBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToOneInverseSideSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToOneInverseSideSubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToOneInverseSideSubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToOneRelations.forEach(function (relation) {\n // we don't need owning relations, this operation is only for inverse side of one-to-one relations\n // skip relations for which persistence is disabled\n if (relation.isOwning || relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"category\" inside it here.\n */\n OneToOneInverseSideSubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n // prepare objects (relation id map) for the database entity\n // note: subject.databaseEntity contains relation with loaded relation id only (id map)\n // by example: since subject is a post, we are expecting to get post's category saved in the database here,\n // particularly its relation id, e.g. category id stored in the database\n var relatedEntityDatabaseRelationId = undefined;\n if (subject.databaseEntity) // related entity in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationId = relation.getEntityValue(subject.databaseEntity);\n // get related entities of persisted entity\n // by example: get category from the passed to persist post entity\n var relatedEntity = relation.getEntityValue(subject.entity); // by example: relatedEntity is a category here\n if (relatedEntity === undefined) // if relation is undefined then nothing to update\n return;\n // if related entity is null then we need to check if there a bind in the database and unset it\n // if there is no bind in the entity then we don't need to do anything\n // by example: if post.category = null and category has this post in the database then we unset it\n if (relatedEntity === null) {\n // it makes sense to update database only there is a previously set value in the database\n if (relatedEntityDatabaseRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relatedEntityDatabaseRelationId,\n changeMaps: [{\n relation: relation.inverseRelation,\n value: null\n }]\n });\n this.subjects.push(removedRelatedEntitySubject);\n }\n return;\n } // else means entity is bind in the database\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = this.subjects.find(function (operateSubject) {\n return !!operateSubject.entity && operateSubject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains category which does not have id(s) yet (because its a new category)\n // it means its always newly inserted and relation update operation always must be created for it\n // it does not make sense to perform difference operation for it for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-one inverse relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entity which does not exist in the database yet, thus cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entity before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is OneToOne owner relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // check if this binding really exist in the database\n // by example: find our post if its already bind to category in the database and its not equal to what user tries to set\n var areRelatedIdEqualWithDatabase = relatedEntityDatabaseRelationId && OrmUtils.compareIds(relationIdMap, relatedEntityDatabaseRelationId);\n // if they aren't equal it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!areRelatedIdEqualWithDatabase) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n };\n return OneToOneInverseSideSubjectBuilder;\n}());\nexport { OneToOneInverseSideSubjectBuilder };\n\n//# sourceMappingURL=OneToOneInverseSideSubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for many-to-many relations of the given subjects.\n *\n * by example: post contains owner many-to-many relation with categories in the property called \"categories\", e.g.\n * @ManyToMany(type => Category, category => category.posts) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of junction table.\n */\nvar ManyToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ManyToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for any changes in the many-to-many relations of the subjects.\n */\n ManyToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n // if subject doesn't have entity then no need to find something that should be inserted or removed\n if (!subject.entity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n /**\n * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.\n */\n ManyToManySubjectBuilder.prototype.buildForAllRemoval = function (subject) {\n var _this = this;\n // if subject does not have a database entity then it means it does not exist in the database\n // if it does not exist in the database then we don't have anything for deletion\n if (!subject.databaseEntity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n // get all related entities (actually related entity relation ids) bind to this subject entity\n // by example: returns category ids of the post we are currently working with (subject.entity is post)\n var relatedEntityRelationIdsInDatabase = relation.getEntityValue(subject.databaseEntity);\n // go through all related entities and create a new junction subject for each row in junction table\n relatedEntityRelationIdsInDatabase.forEach(function (relationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, relationId)\n });\n // we use unshift because we need to perform those operations before post deletion is performed\n // but post deletion was already added as an subject\n // this is temporary solution, later we need to implement proper sorting of subjects before their removal\n _this.subjects.push(junctionSubject);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n ManyToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // load from db all relation ids of inverse entities that are \"bind\" to the subject's entity\n // this way we gonna check which relation ids are missing and which are new (e.g. inserted or removed)\n var databaseRelatedEntityIds = [];\n // if subject don't have database entity it means all related entities in persisted subject are new and must be bind\n // and we don't need to remove something that is not exist\n if (subject.databaseEntity)\n databaseRelatedEntityIds = relation.getEntityValue(subject.databaseEntity);\n // extract entity's relation value\n // by example: categories inside our post (subject.entity is post)\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // if value set to null its equal if we set it to empty array - all items must be removed from the database\n relatedEntities = [];\n if (!(Array.isArray(relatedEntities)))\n return;\n // from all related entities find only those which aren't found in the db - for them we will create operation subjects\n relatedEntities.forEach(function (relatedEntity) {\n // todo: check how it will work for entities which are saved by cascades, but aren't saved in the database yet\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n // if related entity relation id map is empty it means related entity is newly persisted\n if (!relatedEntityRelationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`Many-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n }\n // try to find related entity in the database\n // by example: find post's category in the database post's categories\n var relatedEntityExistInDatabase = databaseRelatedEntityIds.find(function (databaseRelatedEntityRelationId) {\n return OrmUtils.compareIds(databaseRelatedEntityRelationId, relatedEntityRelationIdMap);\n });\n // if entity is found then don't do anything - it means binding in junction table already exist, we don't need to add anything\n if (relatedEntityExistInDatabase)\n return;\n var ownerValue = relation.isOwning ? subject : (relatedEntitySubject || relatedEntity); // by example: ownerEntityMap is post from subject here\n var inverseValue = relation.isOwning ? (relatedEntitySubject || relatedEntity) : subject; // by example: inverseEntityMap is category from categories array here\n // create a new subject for insert operation of junction rows\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n canBeInserted: true,\n });\n _this.subjects.push(junctionSubject);\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: ownerValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(ownerEntityMap),\n });\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: inverseValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(inverseEntityMap),\n });\n });\n });\n // get all inverse entities relation ids that are \"bind\" to the currently persisted entity\n var changedInverseEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n // relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n if (relatedEntityRelationIdMap !== undefined && relatedEntityRelationIdMap !== null)\n changedInverseEntityRelationIds.push(relatedEntityRelationIdMap);\n });\n // now from all entities in the persisted entity find only those which aren't found in the db\n var removedJunctionEntityIds = databaseRelatedEntityIds.filter(function (existRelationId) {\n return !changedInverseEntityRelationIds.find(function (changedRelationId) {\n return OrmUtils.compareIds(changedRelationId, existRelationId);\n });\n });\n // finally create a new junction remove operations for missing related entities\n removedJunctionEntityIds.forEach(function (removedEntityRelationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, removedEntityRelationId)\n });\n _this.subjects.push(junctionSubject);\n });\n };\n /**\n * Creates identifiers for junction table.\n * Example: { postId: 1, categoryId: 2 }\n */\n ManyToManySubjectBuilder.prototype.buildJunctionIdentifier = function (subject, relation, relationId) {\n var ownerEntityMap = relation.isOwning ? subject.entity : relationId;\n var inverseEntityMap = relation.isOwning ? relationId : subject.entity;\n var identifier = {};\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(ownerEntityMap)));\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(inverseEntityMap)));\n });\n return identifier;\n };\n return ManyToManySubjectBuilder;\n}());\nexport { ManyToManySubjectBuilder };\n\n//# sourceMappingURL=ManyToManySubjectBuilder.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nvar SubjectDatabaseEntityLoader = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function SubjectDatabaseEntityLoader(queryRunner, subjects) {\n this.queryRunner = queryRunner;\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n SubjectDatabaseEntityLoader.prototype.load = function (operationType) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = this.groupByEntityTargets().map(function (subjectGroup) { return __awaiter(_this, void 0, void 0, function () {\n var allIds, allSubjects, loadRelationPropertyPaths, findOptions, entities, allSubjects_1, allSubjects_1_1, subject;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n allIds = [];\n allSubjects = [];\n subjectGroup.subjects.forEach(function (subject) {\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return [2 /*return*/];\n loadRelationPropertyPaths = [];\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(function (subject) {\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(function (relation) {\n var value = relation.getEntityValue(subject.entityWithFulfilledIds);\n if (value === undefined)\n return;\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n }\n else { // remove\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push.apply(// remove\n loadRelationPropertyPaths, __spreadArray([], __read(subjectGroup.subjects[0].metadata.manyToManyRelations.map(function (relation) { return relation.propertyPath; }))));\n }\n findOptions = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n return [4 /*yield*/, this.queryRunner.manager\n .getRepository(subjectGroup.target)\n .findByIds(allIds, findOptions)];\n case 1:\n entities = _b.sent();\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(function (entity) {\n var subjects = _this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(function (subject) {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n try {\n // this way we tell what subjects we tried to load database entities of\n for (allSubjects_1 = __values(allSubjects), allSubjects_1_1 = allSubjects_1.next(); !allSubjects_1_1.done; allSubjects_1_1 = allSubjects_1.next()) {\n subject = allSubjects_1_1.value;\n subject.databaseEntityLoaded = true;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allSubjects_1_1 && !allSubjects_1_1.done && (_a = allSubjects_1.return)) _a.call(allSubjects_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n SubjectDatabaseEntityLoader.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.subjects.filter(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n SubjectDatabaseEntityLoader.prototype.groupByEntityTargets = function () {\n return this.subjects.reduce(function (groups, operatedEntity) {\n var group = groups.find(function (group) { return group.target === operatedEntity.metadata.target; });\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, []);\n };\n return SubjectDatabaseEntityLoader;\n}());\nexport { SubjectDatabaseEntityLoader };\n\n//# sourceMappingURL=SubjectDatabaseEntityLoader.js.map\n","import { __read } from \"tslib\";\nimport { Subject } from \"../Subject\";\n/**\n * Finds all cascade operations of the given subject and cascade operations of the found cascaded subjects,\n * e.g. builds a cascade tree and creates a subjects for them.\n */\nvar CascadesSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CascadesSubjectBuilder(allSubjects) {\n this.allSubjects = allSubjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds a cascade subjects tree and pushes them in into the given array of subjects.\n */\n CascadesSubjectBuilder.prototype.build = function (subject, operationType) {\n var _this = this;\n subject.metadata\n .extractRelationValuesFromEntity(subject.entity, subject.metadata.relations) // todo: we can create EntityMetadata.cascadeRelations\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], relationEntity = _b[1], relationEntityMetadata = _b[2];\n // we need only defined values and insert, update, soft-remove or recover cascades of the relation should be set\n if (relationEntity === undefined ||\n relationEntity === null ||\n (!relation.isCascadeInsert && !relation.isCascadeUpdate && !relation.isCascadeSoftRemove && !relation.isCascadeRecover))\n return;\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we don't really need to check cascades since there is no object to insert or update\n if (!(relationEntity instanceof Object))\n return;\n // if we already has this entity in list of operated subjects then skip it to avoid recursion\n var alreadyExistRelationEntitySubject = _this.findByPersistEntityLike(relationEntityMetadata.target, relationEntity);\n if (alreadyExistRelationEntitySubject) {\n if (alreadyExistRelationEntitySubject.canBeInserted === false) // if its not marked for insertion yet\n alreadyExistRelationEntitySubject.canBeInserted = relation.isCascadeInsert === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeUpdated === false) // if its not marked for update yet\n alreadyExistRelationEntitySubject.canBeUpdated = relation.isCascadeUpdate === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeSoftRemoved === false) // if its not marked for removal yet\n alreadyExistRelationEntitySubject.canBeSoftRemoved = relation.isCascadeSoftRemove === true && operationType === \"soft-remove\";\n if (alreadyExistRelationEntitySubject.canBeRecovered === false) // if its not marked for recovery yet\n alreadyExistRelationEntitySubject.canBeRecovered = relation.isCascadeRecover === true && operationType === \"recover\";\n return;\n }\n // mark subject with what we can do with it\n // and add to the array of subjects to load only if there is no same entity there already\n var relationEntitySubject = new Subject({\n metadata: relationEntityMetadata,\n parentSubject: subject,\n entity: relationEntity,\n canBeInserted: relation.isCascadeInsert === true && operationType === \"save\",\n canBeUpdated: relation.isCascadeUpdate === true && operationType === \"save\",\n canBeSoftRemoved: relation.isCascadeSoftRemove === true && operationType === \"soft-remove\",\n canBeRecovered: relation.isCascadeRecover === true && operationType === \"recover\"\n });\n _this.allSubjects.push(relationEntitySubject);\n // go recursively and find other entities we need to insert/update\n _this.build(relationEntitySubject, operationType);\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subject where entity like given subject's entity.\n * Comparision made by entity id.\n */\n CascadesSubjectBuilder.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.allSubjects.find(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n return CascadesSubjectBuilder;\n}());\nexport { CascadesSubjectBuilder };\n\n//# sourceMappingURL=CascadesSubjectBuilder.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { MustBeEntityError } from \"../error/MustBeEntityError\";\nimport { SubjectExecutor } from \"./SubjectExecutor\";\nimport { CannotDetermineEntityError } from \"../error/CannotDetermineEntityError\";\nimport { Subject } from \"./Subject\";\nimport { OneToManySubjectBuilder } from \"./subject-builder/OneToManySubjectBuilder\";\nimport { OneToOneInverseSideSubjectBuilder } from \"./subject-builder/OneToOneInverseSideSubjectBuilder\";\nimport { ManyToManySubjectBuilder } from \"./subject-builder/ManyToManySubjectBuilder\";\nimport { SubjectDatabaseEntityLoader } from \"./SubjectDatabaseEntityLoader\";\nimport { CascadesSubjectBuilder } from \"./subject-builder/CascadesSubjectBuilder\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Persists a single entity or multiple entities - saves or removes them.\n */\nvar EntityPersistExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityPersistExecutor(connection, queryRunner, mode, target, entity, options) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.mode = mode;\n this.target = target;\n this.entity = entity;\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes persistence operation ob given entity or entities.\n */\n EntityPersistExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, entities, entitiesInChunks, executors, executorsWithExecutableOperations, isTransactionStartedByUs, executorsWithExecutableOperations_1, executorsWithExecutableOperations_1_1, executor, e_1_1, error_1, rollbackError_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // check if entity we are going to save is valid and is an object\n if (!this.entity || typeof this.entity !== \"object\")\n return [2 /*return*/, Promise.reject(new MustBeEntityError(this.mode, this.entity))];\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n return [4 /*yield*/, Promise.resolve()];\n case 1:\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n _b.sent();\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // save data in the query runner - this is useful functionality to share data from outside of the world\n // with third classes - like subscribers and listener methods\n if (this.options && this.options.data)\n queryRunner.data = this.options.data;\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 22, 25]);\n entities = Array.isArray(this.entity) ? this.entity : [this.entity];\n entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils.chunk(entities, this.options.chunk) : [entities];\n return [4 /*yield*/, Promise.all(entitiesInChunks.map(function (entities) { return __awaiter(_this, void 0, void 0, function () {\n var subjects, cascadesSubjectBuilder;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n subjects = [];\n // create subjects for all entities we received for the persistence\n entities.forEach(function (entity) {\n var entityTarget = _this.target ? _this.target : entity.constructor;\n if (entityTarget === Object)\n throw new CannotDetermineEntityError(_this.mode);\n subjects.push(new Subject({\n metadata: _this.connection.getMetadata(entityTarget),\n entity: entity,\n canBeInserted: _this.mode === \"save\",\n canBeUpdated: _this.mode === \"save\",\n mustBeRemoved: _this.mode === \"remove\",\n canBeSoftRemoved: _this.mode === \"soft-remove\",\n canBeRecovered: _this.mode === \"recover\"\n }));\n });\n cascadesSubjectBuilder = new CascadesSubjectBuilder(subjects);\n subjects.forEach(function (subject) {\n // next step we build list of subjects we will operate with\n // these subjects are subjects that we need to insert or update alongside with main persisted entity\n cascadesSubjectBuilder.build(subject, _this.mode);\n });\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n return [4 /*yield*/, new SubjectDatabaseEntityLoader(queryRunner, subjects).load(this.mode)];\n case 1:\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n _a.sent();\n // console.timeEnd(\"loading...\");\n // console.time(\"other subjects...\");\n // build all related subjects and change maps\n if (this.mode === \"save\" || this.mode === \"soft-remove\" || this.mode === \"recover\") {\n new OneToManySubjectBuilder(subjects).build();\n new OneToOneInverseSideSubjectBuilder(subjects).build();\n new ManyToManySubjectBuilder(subjects).build();\n }\n else {\n subjects.forEach(function (subject) {\n if (subject.mustBeRemoved) {\n new ManyToManySubjectBuilder(subjects).buildForAllRemoval(subject);\n }\n });\n }\n // console.timeEnd(\"other subjects...\");\n // console.timeEnd(\"building subjects...\");\n // console.log(\"subjects\", subjects);\n // create a subject executor\n return [2 /*return*/, new SubjectExecutor(queryRunner, subjects, this.options)];\n }\n });\n }); }))];\n case 3:\n executors = _b.sent();\n executorsWithExecutableOperations = executors.filter(function (executor) { return executor.hasExecutableOperations; });\n if (executorsWithExecutableOperations.length === 0)\n return [2 /*return*/];\n isTransactionStartedByUs = false;\n _b.label = 4;\n case 4:\n _b.trys.push([4, 16, , 21]);\n if (!!queryRunner.isTransactionActive) return [3 /*break*/, 6];\n if (!(!this.options || this.options.transaction !== false)) return [3 /*break*/, 6];\n isTransactionStartedByUs = true;\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n _b.trys.push([6, 11, 12, 13]);\n executorsWithExecutableOperations_1 = __values(executorsWithExecutableOperations), executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n _b.label = 7;\n case 7:\n if (!!executorsWithExecutableOperations_1_1.done) return [3 /*break*/, 10];\n executor = executorsWithExecutableOperations_1_1.value;\n return [4 /*yield*/, executor.execute()];\n case 8:\n _b.sent();\n _b.label = 9;\n case 9:\n executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n return [3 /*break*/, 7];\n case 10: return [3 /*break*/, 13];\n case 11:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 13];\n case 12:\n try {\n if (executorsWithExecutableOperations_1_1 && !executorsWithExecutableOperations_1_1.done && (_a = executorsWithExecutableOperations_1.return)) _a.call(executorsWithExecutableOperations_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 13:\n if (!(isTransactionStartedByUs === true)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 14:\n _b.sent();\n _b.label = 15;\n case 15: return [3 /*break*/, 21];\n case 16:\n error_1 = _b.sent();\n if (!isTransactionStartedByUs) return [3 /*break*/, 20];\n _b.label = 17;\n case 17:\n _b.trys.push([17, 19, , 20]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 18:\n _b.sent();\n return [3 /*break*/, 20];\n case 19:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 20];\n case 20: throw error_1;\n case 21: return [3 /*break*/, 25];\n case 22:\n if (!!this.queryRunner) return [3 /*break*/, 24];\n return [4 /*yield*/, queryRunner.release()];\n case 23:\n _b.sent();\n _b.label = 24;\n case 24: return [7 /*endfinally*/];\n case 25: return [2 /*return*/];\n }\n });\n });\n };\n return EntityPersistExecutor;\n}());\nexport { EntityPersistExecutor };\n\n//# sourceMappingURL=EntityPersistExecutor.js.map\n","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { NoNeedToReleaseEntityManagerError } from \"../error/NoNeedToReleaseEntityManagerError\";\nimport { TreeRepository } from \"../repository/TreeRepository\";\nimport { Repository } from \"../repository/Repository\";\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\";\nimport { PlainObjectToNewEntityTransformer } from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\";\nimport { PlainObjectToDatabaseEntityTransformer } from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\nimport { EntitySchema, getMetadataArgsStorage } from \"../index\";\nimport { AbstractRepository } from \"../repository/AbstractRepository\";\nimport { CustomRepositoryCannotInheritRepositoryError } from \"../error/CustomRepositoryCannotInheritRepositoryError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { RepositoryNotFoundError } from \"../error/RepositoryNotFoundError\";\nimport { RepositoryNotTreeError } from \"../error/RepositoryNotTreeError\";\nimport { RepositoryFactory } from \"../repository/RepositoryFactory\";\nimport { TreeRepositoryNotSupportedError } from \"../error/TreeRepositoryNotSupportedError\";\nimport { EntityPersistExecutor } from \"../persistence/EntityPersistExecutor\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nvar EntityManager = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityManager(connection, queryRunner) {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * Once created and then reused by en repositories.\n */\n this.repositories = [];\n /**\n * Plain to object transformer used in create and merge operations.\n */\n this.plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();\n this.connection = connection;\n if (queryRunner) {\n this.queryRunner = queryRunner;\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this });\n }\n }\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n EntityManager.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n var isolation, runInTransaction, queryRunner, result, err_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isolation = typeof isolationOrRunInTransaction === \"string\" ? isolationOrRunInTransaction : undefined;\n runInTransaction = typeof isolationOrRunInTransaction === \"function\" ? isolationOrRunInTransaction : runInTransactionParam;\n if (!runInTransaction) {\n throw new Error(\"Transaction method requires callback in second paramter if isolation level is supplied.\");\n }\n if (this.connection.driver instanceof MongoDriver)\n throw new Error(\"Transactions aren't supported by MongoDB.\");\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n if (this.queryRunner && this.queryRunner.isTransactionActive)\n throw new Error(\"Cannot start transaction because its already started\");\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!isolation) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction(isolation)];\n case 2:\n _a.sent();\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, queryRunner.startTransaction()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [4 /*yield*/, runInTransaction(queryRunner.manager)];\n case 6:\n result = _a.sent();\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n return [2 /*return*/, result];\n case 8:\n err_1 = _a.sent();\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw err_1;\n case 13:\n if (!!this.queryRunner) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n EntityManager.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.connection.query(query, parameters, this.queryRunner)];\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n EntityManager.prototype.createQueryBuilder = function (entityClass, alias, queryRunner) {\n if (alias) {\n return this.connection.createQueryBuilder(entityClass, alias, queryRunner || this.queryRunner);\n }\n else {\n return this.connection.createQueryBuilder(entityClass || queryRunner || this.queryRunner);\n }\n };\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n EntityManager.prototype.hasId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n EntityManager.prototype.getId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.getEntityIdMixedMap(entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n EntityManager.prototype.create = function (entityClass, plainObjectOrObjects) {\n var _this = this;\n var metadata = this.connection.getMetadata(entityClass);\n if (!plainObjectOrObjects)\n return metadata.create(this.queryRunner);\n if (Array.isArray(plainObjectOrObjects))\n return plainObjectOrObjects.map(function (plainEntityLike) { return _this.create(entityClass, plainEntityLike); });\n var mergeIntoEntity = metadata.create(this.queryRunner);\n this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);\n return mergeIntoEntity;\n };\n /**\n * Merges two entities into one new entity.\n */\n EntityManager.prototype.merge = function (entityClass, mergeIntoEntity) {\n var _this = this;\n var entityLikes = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n entityLikes[_i - 2] = arguments[_i];\n }\n var metadata = this.connection.getMetadata(entityClass);\n entityLikes.forEach(function (object) { return _this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata); });\n return mergeIntoEntity;\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n EntityManager.prototype.preload = function (entityClass, entityLike) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, plainObjectToDatabaseEntityTransformer, transformedEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);\n return [4 /*yield*/, plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata)];\n case 1:\n transformedEntity = _a.sent();\n if (transformedEntity)\n return [2 /*return*/, this.merge(entityClass, transformedEntity, entityLike)];\n return [2 /*return*/, undefined];\n }\n });\n });\n };\n /**\n * Saves a given entity in the database.\n */\n EntityManager.prototype.save = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"save\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Removes a given entity from the database.\n */\n EntityManager.prototype.remove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Records the delete date of one or many given entities.\n */\n EntityManager.prototype.softRemove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute soft-remove operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"soft-remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Recovers one or many given entities.\n */\n EntityManager.prototype.recover = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute recover operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"recover\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n EntityManager.prototype.insert = function (target, entity) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute()];\n });\n });\n };\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.update = function (target, criteria, partialEntity) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the update method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.delete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.softDelete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.restore = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Counts entities that match given find options or conditions.\n * Useful for pagination.\n */\n EntityManager.prototype.count = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getCount()];\n });\n });\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n EntityManager.prototype.find = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getMany()];\n });\n });\n };\n /**\n * Finds entities that match given find options and conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n EntityManager.prototype.findAndCount = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getManyAndCount()];\n });\n });\n };\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n */\n EntityManager.prototype.findByIds = function (entityClass, ids, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length)\n return [2 /*return*/, Promise.resolve([])];\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, qb.andWhereInIds(ids).getMany()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions.\n */\n EntityManager.prototype.findOne = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n var findOptions, options, metadata, alias, qb, passedId;\n return __generator(this, function (_a) {\n findOptions = undefined;\n if (FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions)) {\n findOptions = idOrOptionsOrConditions;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions)) {\n findOptions = maybeOptions;\n }\n options = undefined;\n if (idOrOptionsOrConditions instanceof Object && !FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions))\n options = idOrOptionsOrConditions;\n metadata = this.connection.getMetadata(entityClass);\n alias = metadata.name;\n if (findOptions && findOptions.join) {\n alias = findOptions.join.alias;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions) && maybeOptions.join) {\n alias = maybeOptions.join.alias;\n }\n qb = this.createQueryBuilder(entityClass, alias);\n if (!findOptions || findOptions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias.metadata);\n passedId = typeof idOrOptionsOrConditions === \"string\" || typeof idOrOptionsOrConditions === \"number\" || idOrOptionsOrConditions instanceof Date;\n if (!passedId) {\n findOptions = __assign(__assign({}, (findOptions || {})), { take: 1 });\n }\n FindOptionsUtils.applyOptionsToQueryBuilder(qb, findOptions);\n if (options) {\n qb.where(options);\n }\n else if (passedId) {\n qb.andWhereInIds(metadata.ensureEntityIdMap(idOrOptionsOrConditions));\n }\n return [2 /*return*/, qb.getOne()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n EntityManager.prototype.findOneOrFail = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.findOne(entityClass, idOrOptionsOrConditions, maybeOptions).then(function (value) {\n if (value === undefined) {\n return Promise.reject(new EntityNotFoundError(entityClass, idOrOptionsOrConditions));\n }\n return Promise.resolve(value);\n })];\n });\n });\n };\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n EntityManager.prototype.clear = function (entityClass) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, queryRunner.clearTable(metadata.tablePath)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!this.queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.increment = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" + \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.decrement = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" - \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getRepository = function (target) {\n // throw exception if there is no repository with this target registered\n if (!this.connection.hasMetadata(target))\n throw new RepositoryNotFoundError(this.connection.name, target);\n // find already created repository instance and return it if found\n var metadata = this.connection.getMetadata(target);\n var repository = this.repositories.find(function (repository) { return repository.metadata === metadata; });\n if (repository)\n return repository;\n // if repository was not found then create it, store its instance and return it\n var newRepository = new RepositoryFactory().create(this, metadata, this.queryRunner);\n this.repositories.push(newRepository);\n return newRepository;\n };\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getTreeRepository = function (target) {\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver);\n // check if repository is real tree repository\n var repository = this.getRepository(target);\n if (!(repository instanceof TreeRepository))\n throw new RepositoryNotTreeError(target);\n return repository;\n };\n /**\n * Gets mongodb repository for the given entity class.\n */\n EntityManager.prototype.getMongoRepository = function (target) {\n return this.connection.getMongoRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n EntityManager.prototype.getCustomRepository = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n var entityMetadata = entityRepositoryMetadataArgs.entity ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity) : undefined;\n var entityRepositoryInstance = new entityRepositoryMetadataArgs.target(this, entityMetadata);\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!entityRepositoryInstance[\"manager\"])\n entityRepositoryInstance[\"manager\"] = this;\n }\n if (entityRepositoryInstance instanceof Repository) {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n entityRepositoryInstance[\"manager\"] = this;\n entityRepositoryInstance[\"metadata\"] = entityMetadata;\n }\n return entityRepositoryInstance;\n };\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n EntityManager.prototype.release = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.queryRunner)\n throw new NoNeedToReleaseEntityManagerError();\n return [2 /*return*/, this.queryRunner.release()];\n });\n });\n };\n return EntityManager;\n}());\nexport { EntityManager };\n\n//# sourceMappingURL=EntityManager.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { EntityManager } from \"./EntityManager\";\n/**\n * A special EntityManager that includes import/export and load/save function\n * that are unique to Sql.js.\n */\nvar SqljsEntityManager = /** @class */ (function (_super) {\n __extends(SqljsEntityManager, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsEntityManager(connection, queryRunner) {\n var _this = _super.call(this, connection, queryRunner) || this;\n _this.driver = connection.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads either the definition from a file (Node.js) or localstorage (browser)\n * or uses the given definition to open a new database.\n */\n SqljsEntityManager.prototype.loadDatabase = function (fileNameOrLocalStorageOrData) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.load(fileNameOrLocalStorageOrData)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saves the current database to a file (Node.js) or localstorage (browser)\n * if fileNameOrLocalStorage is not set options.location is used.\n */\n SqljsEntityManager.prototype.saveDatabase = function (fileNameOrLocalStorage) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.save(fileNameOrLocalStorage)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database definition.\n */\n SqljsEntityManager.prototype.exportDatabase = function () {\n return this.driver.export();\n };\n return SqljsEntityManager;\n}(EntityManager));\nexport { SqljsEntityManager };\n\n//# sourceMappingURL=SqljsEntityManager.js.map\n","import { EntityManager } from \"./EntityManager\";\nimport { MongoEntityManager } from \"./MongoEntityManager\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqljsEntityManager } from \"./SqljsEntityManager\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\n/**\n * Helps to create entity managers.\n */\nvar EntityManagerFactory = /** @class */ (function () {\n function EntityManagerFactory() {\n }\n /**\n * Creates a new entity manager depend on a given connection's driver.\n */\n EntityManagerFactory.prototype.create = function (connection, queryRunner) {\n if (connection.driver instanceof MongoDriver)\n return new MongoEntityManager(connection);\n if (connection.driver instanceof SqljsDriver)\n return new SqljsEntityManager(connection, queryRunner);\n return new EntityManager(connection, queryRunner);\n };\n return EntityManagerFactory;\n}());\nexport { EntityManagerFactory };\n\n//# sourceMappingURL=EntityManagerFactory.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer specifies driver type that does not exist or supported.\n */\nvar MissingDriverError = /** @class */ (function (_super) {\n __extends(MissingDriverError, _super);\n function MissingDriverError(driverType) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDriverError\";\n Object.setPrototypeOf(_this, MissingDriverError.prototype);\n _this.message = \"Wrong driver: \\\"\" + driverType + \"\\\" given. Supported drivers are: \\\"cordova\\\", \\\"expo\\\", \\\"mariadb\\\", \\\"mongodb\\\", \\\"mssql\\\", \\\"mysql\\\", \\\"oracle\\\", \\\"postgres\\\", \\\"sqlite\\\", \\\"better-sqlite3\\\", \\\"sqljs\\\", \\\"react-native\\\", \\\"aurora-data-api\\\", \\\"aurora-data-api-pg\\\".\";\n return _this;\n }\n return MissingDriverError;\n}(Error));\nexport { MissingDriverError };\n\n//# sourceMappingURL=MissingDriverError.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar CordovaQueryRunner = /** @class */ (function (_super) {\n __extends(CordovaQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n CordovaQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n CordovaQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return CordovaQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { CordovaQueryRunner };\n\n//# sourceMappingURL=CordovaQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { CordovaQueryRunner } from \"./CordovaQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar CordovaDriver = /** @class */ (function (_super) {\n __extends(CordovaDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // this.connection = connection;\n // this.options = connection.options as CordovaConnectionOptions;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n CordovaDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n CordovaDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new CordovaQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n CordovaDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n CordovaDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = window.sqlitePlugin;\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"Cordova-SQLite\", \"cordova-sqlite-storage\");\n }\n };\n return CordovaDriver;\n}(AbstractSqliteDriver));\nexport { CordovaDriver };\n\n//# sourceMappingURL=CordovaDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ReactNativeQueryRunner = /** @class */ (function (_super) {\n __extends(ReactNativeQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n ReactNativeQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n ReactNativeQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return ReactNativeQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ReactNativeQueryRunner };\n\n//# sourceMappingURL=ReactNativeQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ReactNativeQueryRunner } from \"./ReactNativeQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar ReactNativeDriver = /** @class */ (function (_super) {\n __extends(ReactNativeDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ReactNativeDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ReactNativeDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ReactNativeQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ReactNativeDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n ReactNativeDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = require(\"react-native-sqlite-storage\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"React-Native\", \"react-native-sqlite-storage\");\n }\n };\n return ReactNativeDriver;\n}(AbstractSqliteDriver));\nexport { ReactNativeDriver };\n\n//# sourceMappingURL=ReactNativeDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ExpoQueryRunner = /** @class */ (function (_super) {\n __extends(ExpoQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n ExpoQueryRunner.prototype.startTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive && typeof this.transaction !== \"undefined\")\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n ExpoQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n ExpoQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n ExpoQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(function (transaction) {\n if (typeof _this.transaction === \"undefined\") {\n _this.startTransaction();\n _this.transaction = transaction;\n }\n _this.transaction.executeSql(query, parameters, function (t, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n }\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (t, err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n }, function (err) {\n _this.rollbackTransaction();\n }, function () {\n _this.isTransactionActive = false;\n _this.transaction = undefined;\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n return ExpoQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ExpoQueryRunner };\n\n//# sourceMappingURL=ExpoQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ExpoQueryRunner } from \"./ExpoQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nvar ExpoDriver = /** @class */ (function (_super) {\n __extends(ExpoDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.driver)\n throw new DriverOptionNotSetError(\"driver\");\n // load sqlite package\n _this.sqlite = _this.options.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ExpoDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection._db.close();\n _this.databaseConnection = undefined;\n ok();\n }\n catch (error) {\n fail(error);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ExpoDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ExpoQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ExpoDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n try {\n var databaseConnection_1 = _this.sqlite.openDatabase(_this.options.database);\n /*\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n */\n databaseConnection_1.transaction(function (tsx) {\n tsx.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (t, result) {\n ok(databaseConnection_1);\n }, function (t, err) {\n fail({ transaction: t, error: err });\n });\n }, function (err) {\n fail(err);\n });\n }\n catch (error) {\n fail(error);\n }\n });\n };\n return ExpoDriver;\n}(AbstractSqliteDriver));\nexport { ExpoDriver };\n\n//# sourceMappingURL=ExpoDriver.js.map\n","import { __awaiter, __extends, __generator, __read, __values } from \"tslib\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { TableExclusion } from \"../../schema-builder/table/TableExclusion\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { Query } from \"../Query\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single postgres database connection.\n */\nvar PostgresQueryRunner = /** @class */ (function (_super) {\n __extends(PostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function PostgresQueryRunner(driver, mode) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.mode = mode;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n PostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Releases used database connection.\n * You cannot use query runner methods once its released.\n */\n PostgresQueryRunner.prototype.release = function () {\n if (this.isReleased) {\n return Promise.resolve();\n }\n this.isReleased = true;\n if (this.releaseCallback)\n this.releaseCallback();\n var index = this.driver.connectedQueryRunners.indexOf(this);\n if (index !== -1)\n this.driver.connectedQueryRunners.splice(index);\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n PostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"START TRANSACTION\")];\n case 3:\n _a.sent();\n if (!isolationLevel) return [3 /*break*/, 5];\n return [4 /*yield*/, this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5:\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 7];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n PostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, result, maxQueryExecutionTime, queryEndTime, queryExecutionTime, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n queryStartTime = +new Date();\n return [4 /*yield*/, databaseConnection.query(query, parameters)];\n case 3:\n result = _a.sent();\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n switch (result.command) {\n case \"DELETE\":\n case \"UPDATE\":\n // for UPDATE and DELETE query additionally return number of affected rows\n return [2 /*return*/, [result.rows, result.rowCount]];\n break;\n default:\n return [2 /*return*/, result.rows];\n }\n return [3 /*break*/, 5];\n case 4:\n err_1 = _a.sent();\n this.driver.connection.logger.logQueryError(err_1, query, parameters, this);\n throw new QueryFailedError(query, parameters, err_1);\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n PostgresQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n var _this = this;\n var QueryStream = this.driver.loadStreamDependency();\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, stream, err_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n stream = databaseConnection.query(new QueryStream(query, parameters));\n if (onEnd)\n stream.on(\"end\", onEnd);\n if (onError)\n stream.on(\"error\", onError);\n ok(stream);\n return [3 /*break*/, 3];\n case 2:\n err_2 = _a.sent();\n fail(err_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Returns all available database names including system databases.\n */\n PostgresQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n PostgresQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n PostgresQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n PostgresQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM \\\"information_schema\\\".\\\"schemata\\\" WHERE \\\"schema_name\\\" = '\" + schema + \"'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName;\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n PostgresQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName + \" AND \\\"column_name\\\" = '\" + columnName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Creates a new database.\n * Postgres does not supports database creation inside a transaction block.\n */\n PostgresQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops database.\n * Postgres does not supports database drop inside a transaction block.\n */\n PostgresQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n PostgresQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n var up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n up = ifNotExist ? \"CREATE SCHEMA IF NOT EXISTS \\\"\" + schema + \"\\\"\" : \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n down = \"DROP SCHEMA \\\"\" + schema + \"\\\" CASCADE\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops table schema.\n */\n PostgresQueryRunner.prototype.dropSchema = function (schemaPath, ifExist, isCascade) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = schemaPath.indexOf(\".\") === -1 ? schemaPath : schemaPath.split(\".\")[0];\n up = ifExist ? \"DROP SCHEMA IF EXISTS \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\") : \"DROP SCHEMA \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\");\n down = \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new table.\n */\n PostgresQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _b.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n upQueries = [];\n downQueries = [];\n enumColumns = table.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n createdEnumTypes = [];\n _b.label = 3;\n case 3:\n _b.trys.push([3, 8, 9, 10]);\n enumColumns_1 = __values(enumColumns), enumColumns_1_1 = enumColumns_1.next();\n _b.label = 4;\n case 4:\n if (!!enumColumns_1_1.done) return [3 /*break*/, 7];\n column = enumColumns_1_1.value;\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 5:\n hasEnum = _b.sent();\n enumName = this.buildEnumName(table, column);\n // if enum with the same \"enumName\" is defined more then once, me must prevent double creation\n if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {\n createdEnumTypes.push(enumName);\n upQueries.push(this.createEnumTypeSql(table, column, enumName));\n downQueries.push(this.dropEnumTypeSql(table, column, enumName));\n }\n _b.label = 6;\n case 6:\n enumColumns_1_1 = enumColumns_1.next();\n return [3 /*break*/, 4];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (enumColumns_1_1 && !enumColumns_1_1.done && (_a = enumColumns_1.return)) _a.call(enumColumns_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n // if createForeignKeys is true, we must drop created foreign keys in down query.\n // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n if (createForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return downQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(table, index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n PostgresQueryRunner.prototype.dropTable = function (target, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, tableName, table, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(target)];\n case 1:\n isTableExist = _a.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n tableName = target instanceof Table ? target.name : target;\n return [4 /*yield*/, this.getCachedTable(tableName)];\n case 3:\n table = _a.sent();\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(table, index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n if (dropForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return upQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n upQueries.push(this.dropTableSql(table));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n PostgresQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 1:\n _b.apply(_a, [_e.sent()]);\n downQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _d.apply(_c, [_e.sent()]);\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n PostgresQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _e.sent();\n upQueries = [];\n downQueries = [];\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _b.apply(_a, [_e.sent()]);\n upQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 3:\n _d.apply(_c, [_e.sent()]);\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n PostgresQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, oldTable, _a, newTable, oldTableName, schemaName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_2_1;\n var e_2, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _c.sent();\n _c.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n oldTableName = oldTable.name.indexOf(\".\") === -1 ? oldTable.name : oldTable.name.split(\".\")[1];\n schemaName = oldTable.name.indexOf(\".\") === -1 ? undefined : oldTable.name.split(\".\")[0];\n newTable.name = schemaName ? schemaName + \".\" + newTableName : newTableName;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(oldTable) + \" RENAME TO \\\"\" + newTableName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME TO \\\"\" + oldTableName + \"\\\"\"));\n // rename column primary key constraint\n if (newTable.primaryColumns.length > 0) {\n columnNames = newTable.primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename sequences\n newTable.columns.map(function (col) {\n if (col.isGenerated && col.generationStrategy === \"increment\") {\n var seqName = _this.buildSequenceName(oldTable, col.name, undefined, true, true);\n var newSeqName = _this.buildSequenceName(newTable, col.name, undefined, true, true);\n var up = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n var down = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n });\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n // build new constraint name\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n newTable.indices.forEach(function (index) {\n // build new constraint name\n var schema = _this.extractSchema(newTable);\n var newIndexName = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n // build new constraint name\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n enumColumns = newTable.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n _c.label = 4;\n case 4:\n _c.trys.push([4, 9, 10, 11]);\n enumColumns_2 = __values(enumColumns), enumColumns_2_1 = enumColumns_2.next();\n _c.label = 5;\n case 5:\n if (!!enumColumns_2_1.done) return [3 /*break*/, 8];\n column = enumColumns_2_1.value;\n return [4 /*yield*/, this.getEnumTypeName(oldTable, column)];\n case 6:\n oldEnumType = _c.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(newTable, column, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(newTable, column) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _c.label = 7;\n case 7:\n enumColumns_2_1 = enumColumns_2.next();\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 11];\n case 9:\n e_2_1 = _c.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 11];\n case 10:\n try {\n if (enumColumns_2_1 && !enumColumns_2_1.done && (_b = enumColumns_2.return)) _b.call(enumColumns_2);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 12:\n _c.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 5];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) {\n upQueries.push(this.createEnumTypeSql(table, column));\n downQueries.push(this.dropEnumTypeSql(table, column));\n }\n _b.label = 5;\n case 5:\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n // create or update primary key constraint\n if (column.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if table already have primary key, me must drop it and recreate again\n if (primaryColumns.length > 0) {\n pkName_1 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_1 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_1 + \"\\\" PRIMARY KEY (\" + columnNames_1 + \")\"));\n }\n primaryColumns.push(column);\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n upQueries.push(this.createIndexSql(table, columnIndex));\n downQueries.push(this.dropIndexSql(table, columnIndex));\n }\n // create unique constraint\n if (column.isUnique) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + column.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n // create column's comment\n if (column.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n clonedTable.addColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_1, columns_1_1, column, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_1 = __values(columns), columns_1_1 = columns_1.next();\n _b.label = 1;\n case 1:\n if (!!columns_1_1.done) return [3 /*break*/, 4];\n column = columns_1_1.value;\n return [4 /*yield*/, this.addColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_1_1 = columns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n PostgresQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, defaultValueChanged, oldColumn, oldEnumType, primaryColumns, columnNames, oldPkName, newPkName, schema, seqName, newSeqName, up, down, oldTableColumn, arraySuffix, newEnumName, oldEnumName, oldEnumNameWithoutSchema, oldEnumNameWithSchema_old, oldEnumNameWithoutSchema_old, upType, downType, primaryColumns, pkName, columnNames, column, pkName, columnNames, primaryColumn, column, pkName, columnNames, uniqueConstraint, uniqueConstraint;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n defaultValueChanged = false;\n oldColumn = oldTableColumnOrName instanceof TableColumn\n ? oldTableColumnOrName\n : table.columns.find(function (column) { return column.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (!(oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length || newColumn.isArray !== oldColumn.isArray)) return [3 /*break*/, 6];\n // To avoid data conversion, we just recreate column\n return [4 /*yield*/, this.dropColumn(table, oldColumn)];\n case 4:\n // To avoid data conversion, we just recreate column\n _b.sent();\n return [4 /*yield*/, this.addColumn(table, newColumn)];\n case 5:\n _b.sent();\n // update cloned table\n clonedTable = table.clone();\n return [3 /*break*/, 10];\n case 6:\n if (!(oldColumn.name !== newColumn.name)) return [3 /*break*/, 9];\n // rename column\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + oldColumn.name + \"\\\" TO \\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + newColumn.name + \"\\\" TO \\\"\" + oldColumn.name + \"\\\"\"));\n if (!(oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")) return [3 /*break*/, 8];\n return [4 /*yield*/, this.getEnumTypeName(table, oldColumn)];\n case 7:\n oldEnumType = _b.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(table, newColumn, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(table, newColumn) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _b.label = 8;\n case 8:\n // rename column primary key constraint\n if (oldColumn.isPrimary === true) {\n primaryColumns = clonedTable.primaryColumns;\n columnNames = primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n // replace old column name with new column name\n columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n columnNames.push(newColumn.name);\n newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename column sequence\n if (oldColumn.isGenerated === true && newColumn.generationStrategy === \"increment\") {\n schema = this.extractSchema(table);\n seqName = this.buildSequenceName(table, oldColumn.name, undefined, true, true);\n newSeqName = this.buildSequenceName(table, newColumn.name, undefined, true, true);\n up = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n down = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n // rename unique constraints\n clonedTable.findColumnUniques(oldColumn).forEach(function (unique) {\n // build new constraint name\n unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n unique.columnNames.push(newColumn.name);\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n clonedTable.findColumnIndices(oldColumn).forEach(function (index) {\n // build new constraint name\n index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n index.columnNames.push(newColumn.name);\n var schema = _this.extractSchema(table);\n var newIndexName = _this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n clonedTable.findColumnForeignKeys(oldColumn).forEach(function (foreignKey) {\n // build new constraint name\n foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n foreignKey.columnNames.push(newColumn.name);\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n oldTableColumn = clonedTable.columns.find(function (column) { return column.name === oldColumn.name; });\n clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn)].name = newColumn.name;\n oldColumn.name = newColumn.name;\n _b.label = 9;\n case 9:\n if (newColumn.precision !== oldColumn.precision || newColumn.scale !== oldColumn.scale) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n if ((newColumn.type === \"enum\" || newColumn.type === \"simple-enum\")\n && (oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")\n && (!OrmUtils.isArraysEqual(newColumn.enum, oldColumn.enum) || newColumn.enumName !== oldColumn.enumName)) {\n arraySuffix = newColumn.isArray ? \"[]\" : \"\";\n newEnumName = this.buildEnumName(table, newColumn);\n oldEnumName = this.buildEnumName(table, oldColumn);\n oldEnumNameWithoutSchema = this.buildEnumName(table, oldColumn, false);\n oldEnumNameWithSchema_old = this.buildEnumName(table, oldColumn, true, false, true);\n oldEnumNameWithoutSchema_old = this.buildEnumName(table, oldColumn, false, false, true);\n // rename old ENUM\n upQueries.push(new Query(\"ALTER TYPE \" + oldEnumName + \" RENAME TO \" + oldEnumNameWithoutSchema_old));\n downQueries.push(new Query(\"ALTER TYPE \" + oldEnumNameWithSchema_old + \" RENAME TO \" + oldEnumNameWithoutSchema));\n // create new ENUM\n upQueries.push(this.createEnumTypeSql(table, newColumn, newEnumName));\n downQueries.push(this.dropEnumTypeSql(table, newColumn, newEnumName));\n // if column have default value, we must drop it to avoid issues with type casting\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n // mark default as changed to prevent double update\n defaultValueChanged = true;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n upType = \"\" + newEnumName + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + newEnumName + arraySuffix;\n downType = \"\" + oldEnumNameWithSchema_old + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + oldEnumNameWithSchema_old + arraySuffix;\n // update column to use new type\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + upType));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + downType));\n // restore column default or create new one\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n // remove old ENUM\n upQueries.push(this.dropEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n downQueries.push(this.createEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n }\n if (oldColumn.isNullable !== newColumn.isNullable) {\n if (newColumn.isNullable) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n }\n }\n if (oldColumn.comment !== newColumn.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + oldColumn.name + \"\\\" IS \" + this.escapeComment(newColumn.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\" IS \" + this.escapeComment(oldColumn.comment)));\n }\n if (newColumn.isPrimary !== oldColumn.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if primary column state changed, we must always drop existed constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n }\n if (newColumn.isPrimary === true) {\n primaryColumns.push(newColumn);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = true;\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n else {\n primaryColumn = primaryColumns.find(function (c) { return c.name === newColumn.name; });\n primaryColumns.splice(primaryColumns.indexOf(primaryColumn), 1);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = false;\n // if we have another primary keys, we must recreate constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n }\n }\n if (newColumn.isUnique !== oldColumn.isUnique) {\n if (newColumn.isUnique === true) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n columnNames: [newColumn.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n else {\n uniqueConstraint = clonedTable.uniques.find(function (unique) {\n return unique.columnNames.length === 1 && !!unique.columnNames.find(function (columnName) { return columnName === newColumn.name; });\n });\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint), 1);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n }\n }\n if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") {\n if (newColumn.isGenerated === true) {\n upQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n upQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n downQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n }\n }\n // the default might have changed when the enum changed\n if (newColumn.default !== oldColumn.default && !defaultValueChanged) {\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n else {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n }\n else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n }\n if ((newColumn.spatialFeatureType || \"\").toLowerCase() !== (oldColumn.spatialFeatureType || \"\").toLowerCase() || newColumn.srid !== oldColumn.srid) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n _b.label = 10;\n case 10: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_4_1;\n var e_4, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 5, 6, 7]);\n changedColumns_1 = __values(changedColumns), changedColumns_1_1 = changedColumns_1.next();\n _c.label = 1;\n case 1:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 4];\n _a = changedColumns_1_1.value, oldColumn = _a.oldColumn, newColumn = _a.newColumn;\n return [4 /*yield*/, this.changeColumn(tableOrName, oldColumn, newColumn)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_4_1 = _c.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_b = changedColumns_1.return)) _b.call(changedColumns_1);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n PostgresQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n // drop primary key constraint\n if (column.isPrimary) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n tableColumn = clonedTable.findColumnByName(column.name);\n tableColumn.isPrimary = false;\n // if primary key have multiple columns, we must recreate it without dropped column\n if (clonedTable.primaryColumns.length > 0) {\n pkName_2 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames_2 = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName_2 + \"\\\" PRIMARY KEY (\" + columnNames_2 + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName_2 + \"\\\"\"));\n }\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n upQueries.push(this.dropIndexSql(table, columnIndex));\n downQueries.push(this.createIndexSql(table, columnIndex));\n }\n columnCheck = clonedTable.checks.find(function (check) { return !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name; });\n if (columnCheck) {\n clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n }\n columnUnique = clonedTable.uniques.find(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (columnUnique) {\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n }\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 6];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) return [3 /*break*/, 6];\n return [4 /*yield*/, this.getEnumTypeName(table, column)];\n case 5:\n enumType = _b.sent();\n escapedEnumName = \"\\\"\" + enumType.enumTypeSchema + \"\\\".\\\"\" + enumType.enumTypeName + \"\\\"\";\n upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));\n downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));\n _b.label = 6;\n case 6: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 7:\n _b.sent();\n clonedTable.removeColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n PostgresQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_2, columns_2_1, column, e_5_1;\n var e_5, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_2 = __values(columns), columns_2_1 = columns_2.next();\n _b.label = 1;\n case 1:\n if (!!columns_2_1.done) return [3 /*break*/, 4];\n column = columns_2_1.value;\n return [4 /*yield*/, this.dropColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_2_1 = columns_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_5_1 = _b.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n PostgresQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n up = this.createPrimaryKeySql(table, columnNames);\n // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n clonedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n down = this.dropPrimaryKeySql(clonedTable);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n PostgresQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, columnNames, upQueries, downQueries, primaryColumns, pkName_3, columnNamesString_1, pkName, columnNamesString;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n columnNames = columns.map(function (column) { return column.name; });\n upQueries = [];\n downQueries = [];\n primaryColumns = clonedTable.primaryColumns;\n if (primaryColumns.length > 0) {\n pkName_3 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNamesString_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_3 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_3 + \"\\\" PRIMARY KEY (\" + columnNamesString_1 + \")\"));\n }\n // update columns in table.\n clonedTable.columns\n .filter(function (column) { return columnNames.indexOf(column.name) !== -1; })\n .forEach(function (column) { return column.isPrimary = true; });\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n PostgresQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n up = this.dropPrimaryKeySql(table);\n down = this.createPrimaryKeySql(table, table.primaryColumns.map(function (column) { return column.name; }));\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraint.\n */\n PostgresQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!uniqueConstraint.name)\n uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n up = this.createUniqueConstraintSql(table, uniqueConstraint);\n down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraints.\n */\n PostgresQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_6_1;\n var e_6, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_1 = __values(uniqueConstraints), uniqueConstraints_1_1 = uniqueConstraints_1.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_1_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_1_1.value;\n return [4 /*yield*/, this.createUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_1_1 = uniqueConstraints_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_6_1 = _b.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_1_1 && !uniqueConstraints_1_1.done && (_a = uniqueConstraints_1.return)) _a.call(uniqueConstraints_1);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraint.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n down = this.createUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraints.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_7_1;\n var e_7, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_2 = __values(uniqueConstraints), uniqueConstraints_2_1 = uniqueConstraints_2.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_2_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_2_1.value;\n return [4 /*yield*/, this.dropUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_2_1 = uniqueConstraints_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_7_1 = _b.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_2_1 && !uniqueConstraints_2_1.done && (_a = uniqueConstraints_2.return)) _a.call(uniqueConstraints_2);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n PostgresQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!checkConstraint.name)\n checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression);\n up = this.createCheckConstraintSql(table, checkConstraint);\n down = this.dropCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n PostgresQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.createCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n PostgresQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n up = this.dropCheckConstraintSql(table, checkConstraint);\n down = this.createCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n PostgresQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.dropCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraint.\n */\n PostgresQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!exclusionConstraint.name)\n exclusionConstraint.name = this.connection.namingStrategy.exclusionConstraintName(table.name, exclusionConstraint.expression);\n up = this.createExclusionConstraintSql(table, exclusionConstraint);\n down = this.dropExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraints.\n */\n PostgresQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.createExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, exclusionConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n exclusionConstraint = exclusionOrName instanceof TableExclusion ? exclusionOrName : table.exclusions.find(function (c) { return c.name === exclusionOrName; });\n if (!exclusionConstraint)\n throw new Error(\"Supplied exclusion constraint was not found in table \" + table.name);\n up = this.dropExclusionConstraintSql(table, exclusionConstraint);\n down = this.createExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.dropExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n PostgresQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new FK may be passed without name. In this case we generate FK name manually.\n if (!foreignKey.name)\n foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n up = this.createForeignKeySql(table, foreignKey);\n down = this.dropForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n PostgresQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_1, foreignKeys_1_1, foreignKey, e_8_1;\n var e_8, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_1 = __values(foreignKeys), foreignKeys_1_1 = foreignKeys_1.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_1_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_1_1.value;\n return [4 /*yield*/, this.createForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_1_1 = foreignKeys_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_8_1 = _b.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_1_1 && !foreignKeys_1_1.done && (_a = foreignKeys_1.return)) _a.call(foreignKeys_1);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n up = this.dropForeignKeySql(table, foreignKey);\n down = this.createForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_2, foreignKeys_2_1, foreignKey, e_9_1;\n var e_9, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_2 = __values(foreignKeys), foreignKeys_2_1 = foreignKeys_2.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_2_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_2_1.value;\n return [4 /*yield*/, this.dropForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_2_1 = foreignKeys_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_9_1 = _b.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_2_1 && !foreignKeys_2_1.done && (_a = foreignKeys_2.return)) _a.call(foreignKeys_2);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n PostgresQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n PostgresQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_1, indices_1_1, index, e_10_1;\n var e_10, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_1 = __values(indices), indices_1_1 = indices_1.next();\n _b.label = 1;\n case 1:\n if (!!indices_1_1.done) return [3 /*break*/, 4];\n index = indices_1_1.value;\n return [4 /*yield*/, this.createIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_1_1 = indices_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_10_1 = _b.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n PostgresQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(table, index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n PostgresQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_2, indices_2_1, index, e_11_1;\n var e_11, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_2 = __values(indices), indices_2_1 = indices_2.next();\n _b.label = 1;\n case 1:\n if (!!indices_2_1.done) return [3 /*break*/, 4];\n index = indices_2_1.value;\n return [4 /*yield*/, this.dropIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_2_1 = indices_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_11_1 = _b.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_2_1 && !indices_2_1.done && (_a = indices_2.return)) _a.call(indices_2);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n PostgresQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"TRUNCATE TABLE \" + this.escapePath(tableName))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n PostgresQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var schemas, schemaNamesString, selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schemas = [];\n this.connection.entityMetadatas\n .filter(function (metadata) { return metadata.schema; })\n .forEach(function (metadata) {\n var isSchemaExist = !!schemas.find(function (schema) { return schema === metadata.schema; });\n if (!isSchemaExist)\n schemas.push(metadata.schema);\n });\n schemas.push(this.driver.options.schema || \"current_schema()\");\n schemaNamesString = schemas.map(function (name) {\n return name === \"current_schema()\" ? name : \"'\" + name + \"'\";\n }).join(\", \");\n return [4 /*yield*/, this.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 9, , 14]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW IF EXISTS \\\"' || schemaname || '\\\".\\\"' || viewname || '\\\" CASCADE;' as \\\"query\\\" \" +\n (\"FROM \\\"pg_views\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"viewname\\\" NOT IN ('geography_columns', 'geometry_columns', 'raster_columns', 'raster_overviews')\");\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 3:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 4:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE IF EXISTS \\\"' || schemaname || '\\\".\\\"' || tablename || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_tables\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"tablename\\\" NOT IN ('spatial_ref_sys')\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 5:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.dropEnumTypes(schemaNamesString)];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 14];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n PostgresQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, currentSchemaQuery, currentSchema, viewsCondition, query, dbViews;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 2:\n currentSchemaQuery = _a.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewsCondition = viewNames.map(function (viewName) {\n var _a = __read(viewName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"t\\\".\\\"schema\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n query = \"SELECT \\\"t\\\".*, \\\"v\\\".\\\"check_option\\\" FROM \" + this.escapePath(this.getTypeormMetadataTableName()) + \" \\\"t\\\" \" +\n (\"INNER JOIN \\\"information_schema\\\".\\\"views\\\" \\\"v\\\" ON \\\"v\\\".\\\"table_schema\\\" = \\\"t\\\".\\\"schema\\\" AND \\\"v\\\".\\\"table_name\\\" = \\\"t\\\".\\\"name\\\" WHERE \\\"t\\\".\\\"type\\\" = 'VIEW' \" + (viewsCondition ? \"AND (\" + viewsCondition + \")\" : \"\"));\n return [4 /*yield*/, this.query(query)];\n case 3:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n var schema = dbView[\"schema\"] === currentSchema && !_this.driver.options.schema ? undefined : dbView[\"schema\"];\n view.name = _this.driver.buildTableName(dbView[\"name\"], schema);\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n PostgresQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, tablesCondition, tablesSql, columnsSql, constraintsCondition, constraintsSql, indicesSql, foreignKeysCondition, hasRelispartitionColumn, isPartitionCondition, foreignKeysSql, _a, dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n tablesCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n tablesSql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \" + tablesCondition;\n columnsSql = \"\\n SELECT columns.*,\\n pg_catalog.col_description(('\\\"' || table_catalog || '\\\".\\\"' || table_schema || '\\\".\\\"' || table_name || '\\\"')::regclass::oid, ordinal_position) AS description,\\n ('\\\"' || \\\"udt_schema\\\" || '\\\".\\\"' || \\\"udt_name\\\" || '\\\"')::\\\"regtype\\\" AS \\\"regtype\\\",\\n pg_catalog.format_type(\\\"col_attr\\\".\\\"atttypid\\\", \\\"col_attr\\\".\\\"atttypmod\\\") AS \\\"format_type\\\"\\n FROM \\\"information_schema\\\".\\\"columns\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_attribute\\\" AS \\\"col_attr\\\"\\n ON \\\"col_attr\\\".\\\"attname\\\" = \\\"columns\\\".\\\"column_name\\\"\\n AND \\\"col_attr\\\".\\\"attrelid\\\" = (\\n SELECT\\n \\\"cls\\\".\\\"oid\\\" FROM \\\"pg_catalog\\\".\\\"pg_class\\\" AS \\\"cls\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_namespace\\\" AS \\\"ns\\\"\\n ON \\\"ns\\\".\\\"oid\\\" = \\\"cls\\\".\\\"relnamespace\\\"\\n WHERE \\\"cls\\\".\\\"relname\\\" = \\\"columns\\\".\\\"table_name\\\"\\n AND \\\"ns\\\".\\\"nspname\\\" = \\\"columns\\\".\\\"table_schema\\\"\\n )\\n WHERE\\n \" + tablesCondition;\n constraintsCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n constraintsSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"cnst\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \" +\n \"pg_get_constraintdef(\\\"cnst\\\".\\\"oid\\\") AS \\\"expression\\\", \" +\n \"CASE \\\"cnst\\\".\\\"contype\\\" WHEN 'p' THEN 'PRIMARY' WHEN 'u' THEN 'UNIQUE' WHEN 'c' THEN 'CHECK' WHEN 'x' THEN 'EXCLUDE' END AS \\\"constraint_type\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\" \" +\n \"FROM \\\"pg_constraint\\\" \\\"cnst\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"conrelid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"connamespace\\\" \" +\n \"LEFT JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"cnst\\\".\\\"conrelid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"cnst\\\".\\\"conkey\\\") \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND (\" + constraintsCondition + \")\");\n indicesSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"i\\\".\\\"relname\\\" AS \\\"constraint_name\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"CASE \\\"ix\\\".\\\"indisunique\\\" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS \\\"is_unique\\\", pg_get_expr(\\\"ix\\\".\\\"indpred\\\", \\\"ix\\\".\\\"indrelid\\\") AS \\\"condition\\\", \" +\n \"\\\"types\\\".\\\"typname\\\" AS \\\"type_name\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_index\\\" \\\"ix\\\" ON \\\"ix\\\".\\\"indrelid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"t\\\".\\\"oid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"ix\\\".\\\"indkey\\\") \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"t\\\".\\\"relnamespace\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"i\\\" ON \\\"i\\\".\\\"oid\\\" = \\\"ix\\\".\\\"indexrelid\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"types\\\" ON \\\"types\\\".\\\"oid\\\" = \\\"a\\\".\\\"atttypid\\\" \" +\n \"LEFT JOIN \\\"pg_constraint\\\" \\\"cnst\\\" ON \\\"cnst\\\".\\\"conname\\\" = \\\"i\\\".\\\"relname\\\" \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND \\\"cnst\\\".\\\"contype\\\" IS NULL AND (\" + constraintsCondition + \")\");\n foreignKeysCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"cl\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n return [4 /*yield*/, this.hasSupportForPartitionedTables()];\n case 2:\n hasRelispartitionColumn = _b.sent();\n isPartitionCondition = hasRelispartitionColumn ? \" AND \\\"cl\\\".\\\"relispartition\\\" = 'f'\" : \"\";\n foreignKeysSql = \"SELECT \\\"con\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \\\"con\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"con\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"att2\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"\\\"ns\\\".\\\"nspname\\\" AS \\\"referenced_table_schema\\\", \\\"cl\\\".\\\"relname\\\" AS \\\"referenced_table_name\\\", \\\"att\\\".\\\"attname\\\" AS \\\"referenced_column_name\\\", \\\"con\\\".\\\"confdeltype\\\" AS \\\"on_delete\\\", \" +\n \"\\\"con\\\".\\\"confupdtype\\\" AS \\\"on_update\\\", \\\"con\\\".\\\"condeferrable\\\" AS \\\"deferrable\\\", \\\"con\\\".\\\"condeferred\\\" AS \\\"deferred\\\" \" +\n \"FROM ( \" +\n \"SELECT UNNEST (\\\"con1\\\".\\\"conkey\\\") AS \\\"parent\\\", UNNEST (\\\"con1\\\".\\\"confkey\\\") AS \\\"child\\\", \\\"con1\\\".\\\"confrelid\\\", \\\"con1\\\".\\\"conrelid\\\", \\\"con1\\\".\\\"conname\\\", \\\"con1\\\".\\\"contype\\\", \\\"ns\\\".\\\"nspname\\\", \" +\n \"\\\"cl\\\".\\\"relname\\\", \\\"con1\\\".\\\"condeferrable\\\", \" +\n \"CASE WHEN \\\"con1\\\".\\\"condeferred\\\" THEN 'INITIALLY DEFERRED' ELSE 'INITIALLY IMMEDIATE' END as condeferred, \" +\n \"CASE \\\"con1\\\".\\\"confdeltype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confdeltype\\\", \" +\n \"CASE \\\"con1\\\".\\\"confupdtype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confupdtype\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"cl\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_constraint\\\" \\\"con1\\\" ON \\\"con1\\\".\\\"conrelid\\\" = \\\"cl\\\".\\\"oid\\\" \" +\n (\"WHERE \\\"con1\\\".\\\"contype\\\" = 'f' AND (\" + foreignKeysCondition + \") \") +\n \") \\\"con\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att\\\" ON \\\"att\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"confrelid\\\" AND \\\"att\\\".\\\"attnum\\\" = \\\"con\\\".\\\"child\\\" \" +\n (\"INNER JOIN \\\"pg_class\\\" \\\"cl\\\" ON \\\"cl\\\".\\\"oid\\\" = \\\"con\\\".\\\"confrelid\\\" \" + isPartitionCondition) +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att2\\\" ON \\\"att2\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"conrelid\\\" AND \\\"att2\\\".\\\"attnum\\\" = \\\"con\\\".\\\"parent\\\"\";\n return [4 /*yield*/, Promise.all([\n this.query(tablesSql),\n this.query(columnsSql),\n this.query(constraintsSql),\n this.query(indicesSql),\n this.query(foreignKeysSql),\n ])];\n case 3:\n _a = __read.apply(void 0, [_b.sent(), 5]), dbTables = _a[0], dbColumns = _a[1], dbConstraints = _a[2], dbIndices = _a[3], dbForeignKeys = _a[4];\n // if tables were not found in the db, no need to proceed\n if (!dbTables.length)\n return [2 /*return*/, []];\n // create tables for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, getSchemaFromKey, schema, tableFullName, _a, tableUniqueConstraints, tableCheckConstraints, tableExclusionConstraints, tableForeignKeyConstraints, tableIndexConstraints;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = new Table();\n getSchemaFromKey = function (dbObject, key) { return dbObject[key] === currentSchema && !_this.driver.options.schema ? undefined : dbObject[key]; };\n schema = getSchemaFromKey(dbTable, \"table_schema\");\n table.name = this.driver.buildTableName(dbTable[\"table_name\"], schema);\n tableFullName = this.driver.buildTableName(dbTable[\"table_name\"], dbTable[\"table_schema\"]);\n // create columns from the loaded columns\n _a = table;\n return [4 /*yield*/, Promise.all(dbColumns\n .filter(function (dbColumn) { return _this.driver.buildTableName(dbColumn[\"table_name\"], dbColumn[\"table_schema\"]) === tableFullName; })\n .map(function (dbColumn) { return __awaiter(_this, void 0, void 0, function () {\n var columnConstraints, tableColumn, type, enumTypeName, builtEnumName, sql, results, geometryColumnSql, results, geographyColumnSql, results, length_1, match, uniqueConstraint, isConstraintComposite;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n columnConstraints = dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName && dbConstraint[\"column_name\"] === dbColumn[\"column_name\"];\n });\n tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"column_name\"];\n tableColumn.type = dbColumn[\"regtype\"].toLowerCase();\n if (tableColumn.type === \"numeric\" || tableColumn.type === \"decimal\" || tableColumn.type === \"float\") {\n // If one of these properties was set, and another was not, Postgres sets '0' in to unspecified property\n // we set 'undefined' in to unspecified property to avoid changing column on sync\n if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.precision = dbColumn[\"numeric_precision\"];\n }\n else if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.precision = undefined;\n }\n if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.scale = dbColumn[\"numeric_scale\"];\n }\n else if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.scale = undefined;\n }\n }\n if (dbColumn[\"data_type\"].toLowerCase() === \"array\") {\n tableColumn.isArray = true;\n type = tableColumn.type.replace(\"[]\", \"\");\n tableColumn.type = this.connection.driver.normalizeType({ type: type });\n }\n if (tableColumn.type === \"interval\"\n || tableColumn.type === \"time without time zone\"\n || tableColumn.type === \"time with time zone\"\n || tableColumn.type === \"timestamp without time zone\"\n || tableColumn.type === \"timestamp with time zone\") {\n tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"datetime_precision\"]) ? dbColumn[\"datetime_precision\"] : undefined;\n }\n if (!(tableColumn.type.indexOf(\"enum\") !== -1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.getEnumTypeName(table, tableColumn)];\n case 1:\n enumTypeName = (_a.sent()).enumTypeName;\n builtEnumName = this.buildEnumName(table, tableColumn, false, true);\n if (builtEnumName !== enumTypeName)\n tableColumn.enumName = enumTypeName;\n tableColumn.type = \"enum\";\n sql = \"SELECT \\\"e\\\".\\\"enumlabel\\\" AS \\\"value\\\" FROM \\\"pg_enum\\\" \\\"e\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"e\\\".\\\"enumtypid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = '\" + dbTable[\"table_schema\"] + \"' AND \\\"t\\\".\\\"typname\\\" = '\" + this.buildEnumName(table, tableColumn, false, true) + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 2:\n results = _a.sent();\n tableColumn.enum = results.map(function (result) { return result[\"value\"]; });\n _a.label = 3;\n case 3:\n if (!(tableColumn.type === \"geometry\")) return [3 /*break*/, 5];\n geometryColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geometry_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geometry_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geometryColumnSql)];\n case 4:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 5;\n case 5:\n if (!(tableColumn.type === \"geography\")) return [3 /*break*/, 7];\n geographyColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geography_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geography_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geographyColumnSql)];\n case 6:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 7;\n case 7:\n // check only columns that have length property\n if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1) {\n if (tableColumn.isArray) {\n match = /\\((\\d+)\\)/.exec(dbColumn[\"format_type\"]);\n length_1 = match ? match[1] : undefined;\n }\n else if (dbColumn[\"character_maximum_length\"]) {\n length_1 = dbColumn[\"character_maximum_length\"].toString();\n }\n if (length_1) {\n tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length_1) ? length_1 : \"\";\n }\n }\n tableColumn.isNullable = dbColumn[\"is_nullable\"] === \"YES\";\n tableColumn.isPrimary = !!columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"PRIMARY\"; });\n uniqueConstraint = columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"UNIQUE\"; });\n isConstraintComposite = uniqueConstraint\n ? !!dbConstraints.find(function (dbConstraint) { return dbConstraint[\"constraint_type\"] === \"UNIQUE\"\n && dbConstraint[\"constraint_name\"] === uniqueConstraint[\"constraint_name\"]\n && dbConstraint[\"column_name\"] !== dbColumn[\"column_name\"]; })\n : false;\n tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;\n if (dbColumn[\"column_default\"] !== null && dbColumn[\"column_default\"] !== undefined) {\n if (dbColumn[\"column_default\"].replace(/\"/gi, \"\") === \"nextval('\" + this.buildSequenceName(table, dbColumn[\"column_name\"], currentSchema, true) + \"'::regclass)\") {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"increment\";\n }\n else if (dbColumn[\"column_default\"] === \"gen_random_uuid()\" || /^uuid_generate_v\\d\\(\\)/.test(dbColumn[\"column_default\"])) {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"uuid\";\n }\n else {\n tableColumn.default = dbColumn[\"column_default\"].replace(/::.*/, \"\");\n tableColumn.default = tableColumn.default.replace(/^(-?\\d+)$/, \"'$1'\");\n }\n }\n tableColumn.comment = dbColumn[\"description\"] ? dbColumn[\"description\"] : undefined;\n if (dbColumn[\"character_set_name\"])\n tableColumn.charset = dbColumn[\"character_set_name\"];\n if (dbColumn[\"collation_name\"])\n tableColumn.collation = dbColumn[\"collation_name\"];\n return [2 /*return*/, tableColumn];\n }\n });\n }); }))];\n case 1:\n // create columns from the loaded columns\n _a.columns = _b.sent();\n tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"UNIQUE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.uniques = tableUniqueConstraints.map(function (constraint) {\n var uniques = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableUnique({\n name: constraint[\"constraint_name\"],\n columnNames: uniques.map(function (u) { return u[\"column_name\"]; })\n });\n });\n tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"CHECK\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.checks = tableCheckConstraints.map(function (constraint) {\n var checks = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableCheck({\n name: constraint[\"constraint_name\"],\n columnNames: checks.map(function (c) { return c[\"column_name\"]; }),\n expression: constraint[\"expression\"].replace(/^\\s*CHECK\\s*\\((.*)\\)\\s*$/i, \"$1\")\n });\n });\n tableExclusionConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"EXCLUDE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.exclusions = tableExclusionConstraints.map(function (constraint) {\n return new TableExclusion({\n name: constraint[\"constraint_name\"],\n expression: constraint[\"expression\"].substring(8) // trim EXCLUDE from start of expression\n });\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(function (dbForeignKey) {\n return _this.driver.buildTableName(dbForeignKey[\"table_name\"], dbForeignKey[\"table_schema\"]) === tableFullName;\n }), function (dbForeignKey) { return dbForeignKey[\"constraint_name\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (dbForeignKey) {\n var foreignKeys = dbForeignKeys.filter(function (dbFk) { return dbFk[\"constraint_name\"] === dbForeignKey[\"constraint_name\"]; });\n // if referenced table located in currently used schema, we don't need to concat schema name to table name.\n var schema = getSchemaFromKey(dbForeignKey, \"referenced_table_schema\");\n var referencedTableName = _this.driver.buildTableName(dbForeignKey[\"referenced_table_name\"], schema);\n return new TableForeignKey({\n name: dbForeignKey[\"constraint_name\"],\n columnNames: foreignKeys.map(function (dbFk) { return dbFk[\"column_name\"]; }),\n referencedTableName: referencedTableName,\n referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk[\"referenced_column_name\"]; }),\n onDelete: dbForeignKey[\"on_delete\"],\n onUpdate: dbForeignKey[\"on_update\"],\n deferrable: dbForeignKey[\"deferrable\"] ? dbForeignKey[\"deferred\"] : undefined,\n });\n });\n tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(function (dbIndex) {\n return _this.driver.buildTableName(dbIndex[\"table_name\"], dbIndex[\"table_schema\"]) === tableFullName;\n }), function (dbIndex) { return dbIndex[\"constraint_name\"]; });\n table.indices = tableIndexConstraints.map(function (constraint) {\n var indices = dbIndices.filter(function (index) {\n return index[\"table_schema\"] === constraint[\"table_schema\"]\n && index[\"table_name\"] === constraint[\"table_name\"]\n && index[\"constraint_name\"] === constraint[\"constraint_name\"];\n });\n return new TableIndex({\n table: table,\n name: constraint[\"constraint_name\"],\n columnNames: indices.map(function (i) { return i[\"column_name\"]; }),\n isUnique: constraint[\"is_unique\"] === \"TRUE\",\n where: constraint[\"condition\"],\n isSpatial: indices.every(function (i) { return _this.driver.spatialTypes.indexOf(i[\"type_name\"]) >= 0; }),\n isFulltext: false\n });\n });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n PostgresQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(table, column); }).join(\", \");\n var sql = \"CREATE TABLE \" + this.escapePath(table) + \" (\" + columnDefinitions;\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.exclusions.length > 0) {\n var exclusionsSql = table.exclusions.map(function (exclusion) {\n var exclusionName = exclusion.name ? exclusion.name : _this.connection.namingStrategy.exclusionConstraintName(table.name, exclusion.expression);\n return \"CONSTRAINT \\\"\" + exclusionName + \"\\\" EXCLUDE \" + exclusion.expression;\n }).join(\", \");\n sql += \", \" + exclusionsSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \" + _this.escapePath(fk.referencedTableName) + \" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n if (fk.deferrable)\n constraint += \" DEFERRABLE \" + fk.deferrable;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (primaryColumns.length > 0) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(function (column) { return column.name; }));\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n table.columns\n .filter(function (it) { return it.comment; })\n .forEach(function (it) { return sql += \"; COMMENT ON COLUMN \" + _this.escapePath(table) + \".\\\"\" + it.name + \"\\\" IS \" + _this.escapeComment(it.comment); });\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n PostgresQueryRunner.prototype.dropTableSql = function (tableOrPath) {\n return new Query(\"DROP TABLE \" + this.escapePath(tableOrPath));\n };\n PostgresQueryRunner.prototype.createViewSql = function (view) {\n var materializedClause = view.materialized ? \"MATERIALIZED \" : \"\";\n var viewName = this.escapePath(view);\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression(this.connection).getQuery());\n }\n };\n PostgresQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, splittedName, schema, name, expression, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n splittedName = view.name.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = view.name;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", schema: schema, name: name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Builds drop view sql.\n */\n PostgresQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n return new Query(\"DROP VIEW \" + this.escapePath(viewOrPath));\n };\n /**\n * Builds remove view sql.\n */\n PostgresQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, viewName, splittedName, schema, name, qb, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n splittedName = viewName.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = viewName;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n qb = this.connection.createQueryBuilder();\n _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"schema\") + \" = :schema\", { schema: schema })\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: name })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Extracts schema name from given Table object or table name string.\n */\n PostgresQueryRunner.prototype.extractSchema = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n return tableName.indexOf(\".\") === -1 ? this.driver.options.schema : tableName.split(\".\")[0];\n };\n /**\n * Drops ENUM type from given schemas.\n */\n PostgresQueryRunner.prototype.dropEnumTypes = function (schemaNames) {\n return __awaiter(this, void 0, void 0, function () {\n var selectDropsQuery, dropQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n selectDropsQuery = \"SELECT 'DROP TYPE IF EXISTS \\\"' || n.nspname || '\\\".\\\"' || t.typname || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_enum\\\" \\\"e\\\" ON \\\"e\\\".\\\"enumtypid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" IN (\" + schemaNames + \") GROUP BY \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\"\");\n return [4 /*yield*/, this.query(selectDropsQuery)];\n case 1:\n dropQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Checks if enum with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasEnumType = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, enumName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = this.parseTableName(table).schema;\n enumName = this.buildEnumName(table, column, false, true);\n sql = \"SELECT \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = \" + schema + \" AND \\\"t\\\".\\\"typname\\\" = '\" + enumName + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.createEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n var enumValues = column.enum.map(function (value) { return \"'\" + value.replace(\"'\", \"''\") + \"'\"; }).join(\", \");\n return new Query(\"CREATE TYPE \" + enumName + \" AS ENUM(\" + enumValues + \")\");\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.dropEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n return new Query(\"DROP TYPE \" + enumName);\n };\n /**\n * Builds create index sql.\n */\n PostgresQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \" + this.escapePath(table) + \" \" + (index.isSpatial ? \"USING GiST \" : \"\") + \"(\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n PostgresQueryRunner.prototype.dropIndexSql = function (table, indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n var schema = this.extractSchema(table);\n return schema ? new Query(\"DROP INDEX \\\"\" + schema + \"\\\".\\\"\" + indexName + \"\\\"\") : new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds create primary key sql.\n */\n PostgresQueryRunner.prototype.createPrimaryKeySql = function (table, columnNames) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n var columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\");\n };\n /**\n * Builds drop primary key sql.\n */\n PostgresQueryRunner.prototype.dropPrimaryKeySql = function (table) {\n var columnNames = table.primaryColumns.map(function (column) { return column.name; });\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + primaryKeyName + \"\\\"\");\n };\n /**\n * Builds create unique constraint sql.\n */\n PostgresQueryRunner.prototype.createUniqueConstraintSql = function (table, uniqueConstraint) {\n var columnNames = uniqueConstraint.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\" + columnNames + \")\");\n };\n /**\n * Builds drop unique constraint sql.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraintSql = function (table, uniqueOrName) {\n var uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueName + \"\\\"\");\n };\n /**\n * Builds create check constraint sql.\n */\n PostgresQueryRunner.prototype.createCheckConstraintSql = function (table, checkConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + checkConstraint.name + \"\\\" CHECK (\" + checkConstraint.expression + \")\");\n };\n /**\n * Builds drop check constraint sql.\n */\n PostgresQueryRunner.prototype.dropCheckConstraintSql = function (table, checkOrName) {\n var checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + checkName + \"\\\"\");\n };\n /**\n * Builds create exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.createExclusionConstraintSql = function (table, exclusionConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + exclusionConstraint.name + \"\\\" EXCLUDE \" + exclusionConstraint.expression);\n };\n /**\n * Builds drop exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraintSql = function (table, exclusionOrName) {\n var exclusionName = exclusionOrName instanceof TableExclusion ? exclusionOrName.name : exclusionOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + exclusionName + \"\\\"\");\n };\n /**\n * Builds create foreign key sql.\n */\n PostgresQueryRunner.prototype.createForeignKeySql = function (table, foreignKey) {\n var columnNames = foreignKey.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n var referencedColumnNames = foreignKey.referencedColumnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\",\");\n var sql = \"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + foreignKey.name + \"\\\" FOREIGN KEY (\" + columnNames + \") \" +\n (\"REFERENCES \" + this.escapePath(foreignKey.referencedTableName) + \"(\" + referencedColumnNames + \")\");\n if (foreignKey.onDelete)\n sql += \" ON DELETE \" + foreignKey.onDelete;\n if (foreignKey.onUpdate)\n sql += \" ON UPDATE \" + foreignKey.onUpdate;\n if (foreignKey.deferrable)\n sql += \" DEFERRABLE \" + foreignKey.deferrable;\n return new Query(sql);\n };\n /**\n * Builds drop foreign key sql.\n */\n PostgresQueryRunner.prototype.dropForeignKeySql = function (table, foreignKeyOrName) {\n var foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + foreignKeyName + \"\\\"\");\n };\n /**\n * Builds sequence name from given table and column.\n */\n PostgresQueryRunner.prototype.buildSequenceName = function (table, columnOrName, currentSchema, disableEscape, skipSchema) {\n var columnName = columnOrName instanceof TableColumn ? columnOrName.name : columnOrName;\n var schema = undefined;\n var tableName = undefined;\n if (table.name.indexOf(\".\") === -1) {\n tableName = table.name;\n }\n else {\n schema = table.name.split(\".\")[0];\n tableName = table.name.split(\".\")[1];\n }\n var seqName = tableName + \"_\" + columnName + \"_seq\";\n if (seqName.length > this.connection.driver.maxAliasLength) // note doesn't yet handle corner cases where .length differs from number of UTF-8 bytes\n seqName = tableName.substring(0, 29) + \"_\" + columnName.substring(0, Math.max(29, 63 - tableName.length - 5)) + \"_seq\";\n if (schema && schema !== currentSchema && !skipSchema) {\n return disableEscape ? schema + \".\" + seqName : \"\\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\"\";\n }\n else {\n return disableEscape ? \"\" + seqName : \"\\\"\" + seqName + \"\\\"\";\n }\n };\n /**\n * Builds ENUM type name from given table and column.\n */\n PostgresQueryRunner.prototype.buildEnumName = function (table, column, withSchema, disableEscape, toOld) {\n if (withSchema === void 0) { withSchema = true; }\n var schema = table.name.indexOf(\".\") === -1 ? this.driver.options.schema : table.name.split(\".\")[0];\n var tableName = table.name.indexOf(\".\") === -1 ? table.name : table.name.split(\".\")[1];\n var enumName = column.enumName ? column.enumName : tableName + \"_\" + column.name.toLowerCase() + \"_enum\";\n if (schema && withSchema)\n enumName = schema + \".\" + enumName;\n if (toOld)\n enumName = enumName + \"_old\";\n return enumName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n PostgresQueryRunner.prototype.getEnumTypeName = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, _a, schema, name, result, udtName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n _a = __read(table.name.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = this.driver.options.schema || currentSchema;\n }\n return [4 /*yield*/, this.query(\"SELECT \\\"udt_schema\\\", \\\"udt_name\\\" \" +\n (\"FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"' AND \\\"column_name\\\"='\" + column.name + \"'\"))];\n case 2:\n result = _b.sent();\n udtName = result[0][\"udt_name\"];\n if (udtName.indexOf(\"_\") === 0) {\n udtName = udtName.substr(1, udtName.length);\n }\n return [2 /*return*/, {\n enumTypeSchema: result[0][\"udt_schema\"],\n enumTypeName: udtName\n }];\n }\n });\n });\n };\n /**\n * Escapes a given comment so it's safe to include in a query.\n */\n PostgresQueryRunner.prototype.escapeComment = function (comment) {\n if (!comment || comment.length === 0) {\n return \"NULL\";\n }\n comment = comment\n .replace(/'/g, \"''\")\n .replace(\"\\0\", \"\"); // Null bytes aren't allowed in comments\n return \"'\" + comment + \"'\";\n };\n /**\n * Escapes given table or view path.\n */\n PostgresQueryRunner.prototype.escapePath = function (target, disableEscape) {\n var tableName = target instanceof Table || target instanceof View ? target.name : target;\n tableName = tableName.indexOf(\".\") === -1 && this.driver.options.schema ? this.driver.options.schema + \".\" + tableName : tableName;\n return tableName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n /**\n * Returns object with table schema and table name.\n */\n PostgresQueryRunner.prototype.parseTableName = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n if (tableName.indexOf(\".\") === -1) {\n return {\n schema: this.driver.options.schema ? \"'\" + this.driver.options.schema + \"'\" : \"current_schema()\",\n tableName: \"'\" + tableName + \"'\"\n };\n }\n else {\n return {\n schema: \"'\" + tableName.split(\".\")[0] + \"'\",\n tableName: \"'\" + tableName.split(\".\")[1] + \"'\"\n };\n }\n };\n /**\n * Builds a query for create column.\n */\n PostgresQueryRunner.prototype.buildCreateColumnSql = function (table, column) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column.isGenerated === true && column.generationStrategy !== \"uuid\") {\n if (column.type === \"integer\" || column.type === \"int\" || column.type === \"int4\")\n c += \" SERIAL\";\n if (column.type === \"smallint\" || column.type === \"int2\")\n c += \" SMALLSERIAL\";\n if (column.type === \"bigint\" || column.type === \"int8\")\n c += \" BIGSERIAL\";\n }\n if (column.type === \"enum\" || column.type === \"simple-enum\") {\n c += \" \" + this.buildEnumName(table, column);\n if (column.isArray)\n c += \" array\";\n }\n else if (!column.isGenerated || column.type === \"uuid\") {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.charset)\n c += \" CHARACTER SET \\\"\" + column.charset + \"\\\"\";\n if (column.collation)\n c += \" COLLATE \\\"\" + column.collation + \"\\\"\";\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT \" + column.default;\n if (column.isGenerated && column.generationStrategy === \"uuid\" && !column.default)\n c += \" DEFAULT \" + this.driver.uuidGenerator;\n return c;\n };\n /**\n * Checks if the PostgreSQL server has support for partitioned tables\n */\n PostgresQueryRunner.prototype.hasSupportForPartitionedTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT TRUE FROM information_schema.columns WHERE table_name = 'pg_class' and column_name = 'relispartition'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n return PostgresQueryRunner;\n}(BaseQueryRunner));\nexport { PostgresQueryRunner };\n\n//# sourceMappingURL=PostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { PostgresQueryRunner } from \"../postgres/PostgresQueryRunner\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nvar PostgresQueryRunnerWrapper = /** @class */ (function (_super) {\n __extends(PostgresQueryRunnerWrapper, _super);\n function PostgresQueryRunnerWrapper(driver, mode) {\n return _super.call(this, driver, mode) || this;\n }\n return PostgresQueryRunnerWrapper;\n}(PostgresQueryRunner));\n/**\n * Runs queries on a single postgres database connection.\n */\nvar AuroraDataApiPostgresQueryRunner = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresQueryRunner(driver, client, mode) {\n var _this = _super.call(this, driver, mode) || this;\n _this.client = client;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Starts transaction on the current connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.client.startTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.commitTransaction()];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.rollbackTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n AuroraDataApiPostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.client.query(query, parameters)];\n case 1:\n result = _a.sent();\n if (result.records) {\n return [2 /*return*/, result.records];\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n return AuroraDataApiPostgresQueryRunner;\n}(PostgresQueryRunnerWrapper));\nexport { AuroraDataApiPostgresQueryRunner };\n\n//# sourceMappingURL=AuroraDataApiPostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { PostgresDriver } from \"../postgres/PostgresDriver\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { AuroraDataApiPostgresQueryRunner } from \"../aurora-data-api-pg/AuroraDataApiPostgresQueryRunner\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\nvar PostgresWrapper = /** @class */ (function (_super) {\n __extends(PostgresWrapper, _super);\n function PostgresWrapper() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return PostgresWrapper;\n}(PostgresDriver));\nvar AuroraDataApiPostgresDriver = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresDriver(connection) {\n var _this = _super.call(this) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.isReplicated = false;\n // load data-api package\n _this.loadDependencies();\n _this.client = new _this.DataApiDriver(_this.options.region, _this.options.secretArn, _this.options.resourceArn, _this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, _this.options.serviceConfigOptions, _this.options.formatOptions);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n AuroraDataApiPostgresDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Closes connection with database.\n */\n AuroraDataApiPostgresDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n AuroraDataApiPostgresDriver.prototype.createQueryRunner = function (mode) {\n var _this = this;\n return new AuroraDataApiPostgresQueryRunner(this, new this.DataApiDriver(this.options.region, this.options.secretArn, this.options.resourceArn, this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, this.options.serviceConfigOptions, this.options.formatOptions), mode);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.preparePersistentValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n return this.client.preparePersistentValue(value, columnMetadata);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.prepareHydratedValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return this.client.prepareHydratedValue(value, columnMetadata);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AuroraDataApiPostgresDriver.prototype.loadDependencies = function () {\n var pg = PlatformTools.load(\"typeorm-aurora-data-api-driver\").pg;\n this.DataApiDriver = pg;\n };\n /**\n * Executes given query.\n */\n AuroraDataApiPostgresDriver.prototype.executeQuery = function (connection, query) {\n return this.connection.query(query);\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AuroraDataApiPostgresDriver.prototype.afterConnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var extensionsMetadata;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.checkMetadataForExtensions()];\n case 1:\n extensionsMetadata = _a.sent();\n if (!extensionsMetadata.hasExtensions) return [3 /*break*/, 3];\n return [4 /*yield*/, this.enableExtensions(extensionsMetadata, this.connection)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/, Promise.resolve()];\n }\n });\n });\n };\n return AuroraDataApiPostgresDriver;\n}(PostgresWrapper));\nexport { AuroraDataApiPostgresDriver };\n\n//# sourceMappingURL=AuroraDataApiPostgresDriver.js.map\n","import { MissingDriverError } from \"../error/MissingDriverError\";\nimport { CockroachDriver } from \"./cockroachdb/CockroachDriver\";\nimport { MongoDriver } from \"./mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"./sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"./oracle/OracleDriver\";\nimport { SqliteDriver } from \"./sqlite/SqliteDriver\";\nimport { CordovaDriver } from \"./cordova/CordovaDriver\";\nimport { ReactNativeDriver } from \"./react-native/ReactNativeDriver\";\nimport { NativescriptDriver } from \"./nativescript/NativescriptDriver\";\nimport { SqljsDriver } from \"./sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"./mysql/MysqlDriver\";\nimport { PostgresDriver } from \"./postgres/PostgresDriver\";\nimport { ExpoDriver } from \"./expo/ExpoDriver\";\nimport { AuroraDataApiDriver } from \"./aurora-data-api/AuroraDataApiDriver\";\nimport { AuroraDataApiPostgresDriver } from \"./aurora-data-api-pg/AuroraDataApiPostgresDriver\";\nimport { SapDriver } from \"./sap/SapDriver\";\nimport { BetterSqlite3Driver } from \"./better-sqlite3/BetterSqlite3Driver\";\n/**\n * Helps to create drivers.\n */\nvar DriverFactory = /** @class */ (function () {\n function DriverFactory() {\n }\n /**\n * Creates a new driver depend on a given connection's driver type.\n */\n DriverFactory.prototype.create = function (connection) {\n var type = connection.options.type;\n switch (type) {\n case \"mysql\":\n return new MysqlDriver(connection);\n case \"postgres\":\n return new PostgresDriver(connection);\n case \"cockroachdb\":\n return new CockroachDriver(connection);\n case \"sap\":\n return new SapDriver(connection);\n case \"mariadb\":\n return new MysqlDriver(connection);\n case \"sqlite\":\n return new SqliteDriver(connection);\n case \"better-sqlite3\":\n return new BetterSqlite3Driver(connection);\n case \"cordova\":\n return new CordovaDriver(connection);\n case \"nativescript\":\n return new NativescriptDriver(connection);\n case \"react-native\":\n return new ReactNativeDriver(connection);\n case \"sqljs\":\n return new SqljsDriver(connection);\n case \"oracle\":\n return new OracleDriver(connection);\n case \"mssql\":\n return new SqlServerDriver(connection);\n case \"mongodb\":\n return new MongoDriver(connection);\n case \"expo\":\n return new ExpoDriver(connection);\n case \"aurora-data-api\":\n return new AuroraDataApiDriver(connection);\n case \"aurora-data-api-pg\":\n return new AuroraDataApiPostgresDriver(connection);\n default:\n throw new MissingDriverError(type);\n }\n };\n return DriverFactory;\n}());\nexport { DriverFactory };\n\n//# sourceMappingURL=DriverFactory.js.map\n","/**\n * Dummy functions for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\n/**\n * Loads all exported classes from the given directory.\n */\nexport function importClassesFromDirectories(logger, directories, formats) {\n if (formats === void 0) { formats = [\".js\", \".cjs\", \".ts\"]; }\n return [];\n}\n/**\n * Loads all json files from the given directory.\n */\nexport function importJsonsFromDirectories(directories, format) {\n if (format === void 0) { format = \".json\"; }\n return [];\n}\n\n//# sourceMappingURL=BrowserDirectoryExportedClassesLoader.js.map\n","/**\n * Container to be used by this library for inversion control. If container was not implicitly set then by default\n * container simply creates a new instance of the given class.\n */\nvar defaultContainer = new (/** @class */ (function () {\n function class_1() {\n this.instances = [];\n }\n class_1.prototype.get = function (someClass) {\n var instance = this.instances.find(function (i) { return i.type === someClass; });\n if (!instance) {\n instance = { type: someClass, object: new someClass() };\n this.instances.push(instance);\n }\n return instance.object;\n };\n return class_1;\n}()))();\nvar userContainer;\nvar userContainerOptions;\n/**\n * Sets container to be used by this library.\n */\nexport function useContainer(iocContainer, options) {\n userContainer = iocContainer;\n userContainerOptions = options;\n}\n/**\n * Gets the IOC container used by this library.\n */\nexport function getFromContainer(someClass) {\n if (userContainer) {\n try {\n var instance = userContainer.get(someClass);\n if (instance)\n return instance;\n if (!userContainerOptions || !userContainerOptions.fallback)\n return instance;\n }\n catch (error) {\n if (!userContainerOptions || !userContainerOptions.fallbackOnErrors)\n throw error;\n }\n }\n return defaultContainer.get(someClass);\n}\n\n//# sourceMappingURL=container.js.map\n","/**\n * Index metadata contains all information about table's index.\n */\nvar IndexMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function IndexMetadata(options) {\n /**\n * Indicates if this index must be unique.\n */\n this.isUnique = false;\n /**\n * The SPATIAL modifier indexes the entire column and does not allow indexed columns to contain NULL values.\n * Works only in MySQL.\n */\n this.isSpatial = false;\n /**\n * The FULLTEXT modifier indexes the entire column and does not allow prefixing.\n * Works only in MySQL.\n */\n this.isFulltext = false;\n /**\n * Indicates if this index must synchronize with database index.\n */\n this.synchronize = true;\n /**\n * Indexed columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n if (options.args.synchronize !== null && options.args.synchronize !== undefined)\n this.synchronize = options.args.synchronize;\n this.isUnique = !!options.args.unique;\n this.isSpatial = !!options.args.spatial;\n this.isFulltext = !!options.args.fulltext;\n this.parser = options.args.parser;\n this.where = options.args.where;\n this.isSparse = options.args.sparse;\n this.isBackground = options.args.background;\n this.expireAfterSeconds = options.args.expireAfterSeconds;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend index properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n IndexMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n if (this.synchronize === false) {\n this.name = this.givenName;\n return this;\n }\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else { // todo: indices in embeds are not implemented in this syntax. deprecate this syntax?\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyPath) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyPath; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Index \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyPath);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.indexName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }), this.where);\n return this;\n };\n return IndexMetadata;\n}());\nexport { IndexMetadata };\n\n//# sourceMappingURL=IndexMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { EntityMetadata } from \"./EntityMetadata\";\n/**\n * Contains all information about some entity's relation.\n */\nvar RelationMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationMetadata(options) {\n /**\n * Indicates if this is a parent (can be only many-to-one relation) relation in the tree tables.\n */\n this.isTreeParent = false;\n /**\n * Indicates if this is a children (can be only one-to-many relation) relation in the tree tables.\n */\n this.isTreeChildren = false;\n /**\n * Indicates if this relation's column is a primary key.\n * Can be used only for many-to-one and owner one-to-one relations.\n */\n this.isPrimary = false;\n /**\n * Indicates if this relation is lazily loaded.\n */\n this.isLazy = false;\n /**\n * Indicates if this relation is eagerly loaded.\n */\n this.isEager = false;\n /**\n * Indicates if persistence is enabled for the relation.\n * By default its enabled, but if you want to avoid any changes in the relation to be reflected in the database you can disable it.\n * If its disabled you can only change a relation from inverse side of a relation or using relation query builder functionality.\n * This is useful for performance optimization since its disabling avoid multiple extra queries during entity save.\n */\n this.persistenceEnabled = true;\n /**\n * If set to true then related objects are allowed to be inserted to the database.\n */\n this.isCascadeInsert = false;\n /**\n * If set to true then related objects are allowed to be updated in the database.\n */\n this.isCascadeUpdate = false;\n /**\n * If set to true then related objects are allowed to be remove from the database.\n */\n this.isCascadeRemove = false;\n /**\n * If set to true then related objects are allowed to be soft-removed from the database.\n */\n this.isCascadeSoftRemove = false;\n /**\n * If set to true then related objects are allowed to be recovered from the database.\n */\n this.isCascadeRecover = false;\n /**\n * Indicates if relation column value can be nullable or not.\n */\n this.isNullable = true;\n /**\n * Indicates whether foreign key constraints will be created for join columns.\n * Can be used only for many-to-one and owner one-to-one relations.\n * Defaults to true.\n */\n this.createForeignKeyConstraints = true;\n /**\n * Indicates if this side is an owner of this relation.\n */\n this.isOwning = false;\n /**\n * Checks if this relation's type is \"one-to-one\".\n */\n this.isOneToOne = false;\n /**\n * Checks if this relation is owner side of the \"one-to-one\" relation.\n * Owner side means this side of relation has a join column in the table.\n */\n this.isOneToOneOwner = false;\n /**\n * Checks if this relation has a join column (e.g. is it many-to-one or one-to-one owner side).\n */\n this.isWithJoinColumn = false;\n /**\n * Checks if this relation is NOT owner side of the \"one-to-one\" relation.\n * NOT owner side means this side of relation does not have a join column in the table.\n */\n this.isOneToOneNotOwner = false;\n /**\n * Checks if this relation's type is \"one-to-many\".\n */\n this.isOneToMany = false;\n /**\n * Checks if this relation's type is \"many-to-one\".\n */\n this.isManyToOne = false;\n /**\n * Checks if this relation's type is \"many-to-many\".\n */\n this.isManyToMany = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is owner side of the relationship.\n * Owner side means this side of relation has a join table.\n */\n this.isManyToManyOwner = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is NOT owner side of the relationship.\n * Not owner side means this side of relation does not have a join table.\n */\n this.isManyToManyNotOwner = false;\n /**\n * Foreign keys created for this relation.\n */\n this.foreignKeys = [];\n /**\n * Join table columns.\n * Join columns can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be empty.\n * If this relation is a many-to-one/one-to-one then it takes join columns from the current entity.\n * If this relation is many-to-many then it takes all owner join columns from the junction entity.\n */\n this.joinColumns = [];\n /**\n * Inverse join table columns.\n * Inverse join columns are supported only for many-to-many relations\n * and can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be undefined.\n */\n this.inverseJoinColumns = [];\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n var args = options.args;\n this.target = args.target;\n this.propertyName = args.propertyName;\n this.relationType = args.relationType;\n if (args.inverseSideProperty)\n this.givenInverseSidePropertyFactory = args.inverseSideProperty;\n this.isLazy = args.isLazy || false;\n // this.isCascadeInsert = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"insert\") !== -1);\n // this.isCascadeUpdate = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"update\") !== -1);\n // this.isCascadeRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"remove\") !== -1);\n // this.isCascadeSoftRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n // this.isCascadeRecover = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isCascadeInsert = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"insert\") !== -1);\n this.isCascadeUpdate = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"update\") !== -1);\n this.isCascadeRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"remove\") !== -1);\n this.isCascadeSoftRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n this.isCascadeRecover = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isPrimary = args.options.primary || false;\n this.isNullable = args.options.nullable === false || this.isPrimary ? false : true;\n this.onDelete = args.options.onDelete;\n this.onUpdate = args.options.onUpdate;\n this.deferrable = args.options.deferrable;\n this.createForeignKeyConstraints = args.options.createForeignKeyConstraints === false ? false : true;\n this.isEager = args.options.eager || false;\n this.persistenceEnabled = args.options.persistence === false ? false : true;\n this.orphanedRowAction = args.options.orphanedRowAction || \"nullify\";\n this.isTreeParent = args.isTreeParent || false;\n this.isTreeChildren = args.isTreeChildren || false;\n this.type = args.type instanceof Function ? args.type() : args.type;\n this.isOneToOne = this.relationType === \"one-to-one\";\n this.isOneToMany = this.relationType === \"one-to-many\";\n this.isManyToOne = this.relationType === \"many-to-one\";\n this.isManyToMany = this.relationType === \"many-to-many\";\n this.isOneToOneNotOwner = this.isOneToOne ? true : false;\n this.isManyToManyNotOwner = this.isManyToMany ? true : false;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates join column ids map from the given related entity ids array.\n */\n RelationMetadata.prototype.getRelationIdMap = function (entity) {\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n // console.log(\"entity\", entity);\n // console.log(\"referencedColumns\", referencedColumns);\n return EntityMetadata.getValueMap(entity, referencedColumns);\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n RelationMetadata.prototype.ensureRelationIdMap = function (id) {\n if (id instanceof Object)\n return id;\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n if (referencedColumns.length > 1)\n throw new Error(\"Cannot create relation id map for a single value because relation contains multiple referenced columns.\");\n return referencedColumns[0].createValueMap(id);\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n RelationMetadata.prototype.getEntityValue = function (entity, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n if (entity === null || entity === undefined)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_1 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n if (value[propertyName]) {\n return extractEmbeddedColumnValue_1(propertyNames, value[propertyName]);\n }\n return undefined;\n }\n return value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_1(propertyNames, entity);\n if (this.isLazy) {\n if (embeddedObject[\"__\" + this.propertyName + \"__\"] !== undefined)\n return embeddedObject[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return embeddedObject[this.propertyName];\n return undefined;\n }\n return embeddedObject ? embeddedObject[this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName] : undefined;\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.isLazy) {\n if (entity[\"__\" + this.propertyName + \"__\"] !== undefined)\n return entity[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return entity[this.propertyName];\n return undefined;\n }\n return entity[this.propertyName];\n }\n };\n /**\n * Sets given entity's relation's value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n *\n * If merge is set to true, it merges given value into currently\n */\n RelationMetadata.prototype.setEntityValue = function (entity, value) {\n var propertyName = this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_2 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_2(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_2(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n entity[propertyName] = value;\n }\n };\n /**\n * Creates entity id map from the given entity ids array.\n */\n RelationMetadata.prototype.createValueMap = function (value) {\n var _a;\n var _this = this;\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_3 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_3(propertyNames, map[propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_3(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n return _a = {}, _a[this.propertyName] = value, _a;\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation metadata properties.\n * This builder method should be used only after embedded metadata tree was build.\n */\n RelationMetadata.prototype.build = function () {\n this.propertyPath = this.buildPropertyPath();\n };\n /**\n * Registers given foreign keys in the relation.\n * This builder method should be used to register foreign key in the relation.\n */\n RelationMetadata.prototype.registerForeignKeys = function () {\n var _a;\n var foreignKeys = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foreignKeys[_i] = arguments[_i];\n }\n (_a = this.foreignKeys).push.apply(_a, __spreadArray([], __read(foreignKeys)));\n };\n /**\n * Registers given join columns in the relation.\n * This builder method should be used to register join column in the relation.\n */\n RelationMetadata.prototype.registerJoinColumns = function (joinColumns, inverseJoinColumns) {\n if (joinColumns === void 0) { joinColumns = []; }\n if (inverseJoinColumns === void 0) { inverseJoinColumns = []; }\n this.joinColumns = joinColumns;\n this.inverseJoinColumns = inverseJoinColumns;\n this.isOwning = this.isManyToOne || ((this.isManyToMany || this.isOneToOne) && this.joinColumns.length > 0);\n this.isOneToOneOwner = this.isOneToOne && this.isOwning;\n this.isOneToOneNotOwner = this.isOneToOne && !this.isOwning;\n this.isManyToManyOwner = this.isManyToMany && this.isOwning;\n this.isManyToManyNotOwner = this.isManyToMany && !this.isOwning;\n this.isWithJoinColumn = this.isManyToOne || this.isOneToOneOwner;\n };\n /**\n * Registers a given junction entity metadata.\n * This builder method can be called after junction entity metadata for the many-to-many relation was created.\n */\n RelationMetadata.prototype.registerJunctionEntityMetadata = function (junctionEntityMetadata) {\n this.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n if (this.inverseRelation) {\n this.inverseRelation.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n }\n };\n /**\n * Builds inverse side property path based on given inverse side property factory.\n * This builder method should be used only after properties map of the inverse entity metadata was build.\n */\n RelationMetadata.prototype.buildInverseSidePropertyPath = function () {\n if (this.givenInverseSidePropertyFactory) {\n var ownerEntityPropertiesMap = this.inverseEntityMetadata.propertiesMap;\n if (typeof this.givenInverseSidePropertyFactory === \"function\")\n return this.givenInverseSidePropertyFactory(ownerEntityPropertiesMap);\n if (typeof this.givenInverseSidePropertyFactory === \"string\")\n return this.givenInverseSidePropertyFactory;\n }\n else if (this.isTreeParent && this.entityMetadata.treeChildrenRelation) {\n return this.entityMetadata.treeChildrenRelation.propertyName;\n }\n else if (this.isTreeChildren && this.entityMetadata.treeParentRelation) {\n return this.entityMetadata.treeParentRelation.propertyName;\n }\n return \"\";\n };\n /**\n * Builds relation's property path based on its embedded tree.\n */\n RelationMetadata.prototype.buildPropertyPath = function () {\n if (!this.embeddedMetadata || !this.embeddedMetadata.parentPropertyNames.length)\n return this.propertyName;\n return this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\" + this.propertyName;\n };\n return RelationMetadata;\n}());\nexport { RelationMetadata };\n\n//# sourceMappingURL=RelationMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Contains all information about entity's embedded property.\n */\nvar EmbeddedMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EmbeddedMetadata(options) {\n /**\n * Columns inside this embed.\n */\n this.columns = [];\n /**\n * Relations inside this embed.\n */\n this.relations = [];\n /**\n * Entity listeners inside this embed.\n */\n this.listeners = [];\n /**\n * Indices applied to the embed columns.\n */\n this.indices = [];\n /**\n * Uniques applied to the embed columns.\n */\n this.uniques = [];\n /**\n * Relation ids inside this embed.\n */\n this.relationIds = [];\n /**\n * Relation counts inside this embed.\n */\n this.relationCounts = [];\n /**\n * Nested embeddable in this embeddable (which has current embedded as parent embedded).\n */\n this.embeddeds = [];\n /**\n * Indicates if this embedded is in array mode.\n *\n * This option works only in mongodb.\n */\n this.isArray = false;\n /**\n * Returns array of property names of current embed and all its parent embeds.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * we need to get value of \"id\" column from the post real entity object.\n * this method will return [\"data\", \"information\", \"counters\"]\n */\n this.parentPropertyNames = [];\n /**\n * Returns array of prefixes of current embed and all its parent embeds.\n */\n this.parentPrefixes = [];\n /**\n * Returns embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.embeddedMetadataTree = [];\n /**\n * Embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.columnsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.relationsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.listenersFromTree = [];\n /**\n * Indices of this embed and all indices from its child embeds.\n */\n this.indicesFromTree = [];\n /**\n * Uniques of this embed and all uniques from its child embeds.\n */\n this.uniquesFromTree = [];\n /**\n * Relation ids of this embed and all relation ids from its child embeds.\n */\n this.relationIdsFromTree = [];\n /**\n * Relation counts of this embed and all relation counts from its child embeds.\n */\n this.relationCountsFromTree = [];\n this.entityMetadata = options.entityMetadata;\n this.type = options.args.type();\n this.propertyName = options.args.propertyName;\n this.customPrefix = options.args.prefix;\n this.isArray = options.args.isArray;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates a new embedded object.\n */\n EmbeddedMetadata.prototype.create = function () {\n return new this.type;\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.build = function (connection) {\n this.embeddeds.forEach(function (embedded) { return embedded.build(connection); });\n this.prefix = this.buildPrefix(connection);\n this.parentPropertyNames = this.buildParentPropertyNames();\n this.parentPrefixes = this.buildParentPrefixes();\n this.propertyPath = this.parentPropertyNames.join(\".\");\n this.embeddedMetadataTree = this.buildEmbeddedMetadataTree();\n this.columnsFromTree = this.buildColumnsFromTree();\n this.relationsFromTree = this.buildRelationsFromTree();\n this.listenersFromTree = this.buildListenersFromTree();\n this.indicesFromTree = this.buildIndicesFromTree();\n this.uniquesFromTree = this.buildUniquesFromTree();\n this.relationIdsFromTree = this.buildRelationIdsFromTree();\n this.relationCountsFromTree = this.buildRelationCountsFromTree();\n return this;\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.buildPartialPrefix = function () {\n // if prefix option was not set or explicitly set to true - default prefix\n if (this.customPrefix === undefined || this.customPrefix === true) {\n return [this.propertyName];\n }\n // if prefix option was set to empty string or explicity set to false - disable prefix\n if (this.customPrefix === \"\" || this.customPrefix === false) {\n return [];\n }\n // use custom prefix\n if (typeof this.customPrefix === \"string\") {\n return [this.customPrefix];\n }\n throw new Error(\"Invalid prefix option given for \" + this.entityMetadata.targetName + \"#\" + this.propertyName);\n };\n EmbeddedMetadata.prototype.buildPrefix = function (connection) {\n if (connection.driver instanceof MongoDriver)\n return this.propertyName;\n var prefixes = [];\n if (this.parentEmbeddedMetadata)\n prefixes.push(this.parentEmbeddedMetadata.buildPrefix(connection));\n prefixes.push.apply(prefixes, __spreadArray([], __read(this.buildPartialPrefix())));\n return prefixes.join(\"_\"); // todo: use naming strategy instead of \"_\" !!!\n };\n EmbeddedMetadata.prototype.buildParentPropertyNames = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPropertyNames().concat(this.propertyName) : [this.propertyName];\n };\n EmbeddedMetadata.prototype.buildParentPrefixes = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPrefixes().concat(this.buildPartialPrefix()) : this.buildPartialPrefix();\n };\n EmbeddedMetadata.prototype.buildEmbeddedMetadataTree = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildEmbeddedMetadataTree().concat(this) : [this];\n };\n EmbeddedMetadata.prototype.buildColumnsFromTree = function () {\n return this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.buildColumnsFromTree()); }, this.columns);\n };\n EmbeddedMetadata.prototype.buildRelationsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationsFromTree()); }, this.relations);\n };\n EmbeddedMetadata.prototype.buildListenersFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildListenersFromTree()); }, this.listeners);\n };\n EmbeddedMetadata.prototype.buildIndicesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildIndicesFromTree()); }, this.indices);\n };\n EmbeddedMetadata.prototype.buildUniquesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildUniquesFromTree()); }, this.uniques);\n };\n EmbeddedMetadata.prototype.buildRelationIdsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationIdsFromTree()); }, this.relationIds);\n };\n EmbeddedMetadata.prototype.buildRelationCountsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationCountsFromTree()); }, this.relationCounts);\n };\n return EmbeddedMetadata;\n}());\nexport { EmbeddedMetadata };\n\n//# sourceMappingURL=EmbeddedMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationIdMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationIdMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Sets relation id value from the given entity.\n *\n * todo: make it to work in embeds as well.\n */\n RelationIdMetadata.prototype.setValue = function (entity) {\n var _this = this;\n var inverseEntity = this.relation.getEntityValue(entity);\n if (Array.isArray(inverseEntity)) {\n entity[this.propertyName] = inverseEntity.map(function (item) {\n return _this.relation.inverseEntityMetadata.getEntityIdMixedMap(item);\n }).filter(function (item) { return item !== null && item !== undefined; });\n }\n else {\n var value = this.relation.inverseEntityMetadata.getEntityIdMixedMap(inverseEntity);\n if (value !== undefined)\n entity[this.propertyName] = value;\n }\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation id properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationIdMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationId decorator.\");\n this.relation = relation;\n };\n return RelationIdMetadata;\n}());\nexport { RelationIdMetadata };\n\n//# sourceMappingURL=RelationIdMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationCountMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationCountMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation count metadata properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationCountMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationCount decorator.\");\n this.relation = relation;\n };\n return RelationCountMetadata;\n}());\nexport { RelationCountMetadata };\n\n//# sourceMappingURL=RelationCountMetadata.js.map\n","/**\n * Provides a constants for each entity listener type.\n */\nvar EventListenerTypes = /** @class */ (function () {\n function EventListenerTypes() {\n }\n EventListenerTypes.AFTER_LOAD = \"after-load\";\n EventListenerTypes.BEFORE_INSERT = \"before-insert\";\n EventListenerTypes.AFTER_INSERT = \"after-insert\";\n EventListenerTypes.BEFORE_UPDATE = \"before-update\";\n EventListenerTypes.AFTER_UPDATE = \"after-update\";\n EventListenerTypes.BEFORE_REMOVE = \"before-remove\";\n EventListenerTypes.AFTER_REMOVE = \"after-remove\";\n return EventListenerTypes;\n}());\nexport { EventListenerTypes };\n\n//# sourceMappingURL=EventListenerTypes.js.map\n","/**\n * Metadata args utility functions.\n */\nvar MetadataUtils = /** @class */ (function () {\n function MetadataUtils() {\n }\n /**\n * Gets given's entity all inherited classes.\n * Gives in order from parents to children.\n * For example Post extends ContentModel which extends Unit it will give\n * [Unit, ContentModel, Post]\n */\n MetadataUtils.getInheritanceTree = function (entity) {\n var tree = [entity];\n var getPrototypeOf = function (object) {\n var proto = Object.getPrototypeOf(object);\n if (proto && proto.name) {\n tree.push(proto);\n getPrototypeOf(proto);\n }\n };\n getPrototypeOf(entity);\n return tree;\n };\n /**\n * Checks if this table is inherited from another table.\n */\n MetadataUtils.isInherited = function (target1, target2) {\n return target1.prototype instanceof target2;\n };\n /**\n * Filters given array of targets by a given classes.\n * If classes are not given, then it returns array itself.\n */\n MetadataUtils.filterByTarget = function (array, classes) {\n if (!classes)\n return array;\n return array.filter(function (item) { return item.target && classes.indexOf(item.target) !== -1; });\n };\n return MetadataUtils;\n}());\nexport { MetadataUtils };\n\n//# sourceMappingURL=MetadataUtils.js.map\n","/**\n * Contains all information about entity's foreign key.\n */\nvar ForeignKeyMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ForeignKeyMetadata(options) {\n /**\n * Array of columns of this foreign key.\n */\n this.columns = [];\n /**\n * Array of referenced columns.\n */\n this.referencedColumns = [];\n /**\n * Gets array of column names.\n */\n this.columnNames = [];\n /**\n * Gets array of referenced column names.\n */\n this.referencedColumnNames = [];\n this.entityMetadata = options.entityMetadata;\n this.referencedEntityMetadata = options.referencedEntityMetadata;\n this.columns = options.columns;\n this.referencedColumns = options.referencedColumns;\n this.onDelete = options.onDelete || \"NO ACTION\";\n this.onUpdate = options.onUpdate || \"NO ACTION\";\n this.deferrable = options.deferrable;\n if (options.namingStrategy)\n this.build(options.namingStrategy);\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend foreign key properties.\n * Must be called after all entity metadatas and their columns are built.\n */\n ForeignKeyMetadata.prototype.build = function (namingStrategy) {\n this.columnNames = this.columns.map(function (column) { return column.databaseName; });\n this.referencedColumnNames = this.referencedColumns.map(function (column) { return column.databaseName; });\n this.referencedTablePath = this.referencedEntityMetadata.tablePath;\n this.name = namingStrategy.foreignKeyName(this.entityMetadata.tablePath, this.columnNames, this.referencedTablePath, this.referencedColumnNames);\n };\n return ForeignKeyMetadata;\n}());\nexport { ForeignKeyMetadata };\n\n//# sourceMappingURL=ForeignKeyMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates EntityMetadata for junction tables.\n * Junction tables are tables generated by many-to-many relations.\n */\nvar JunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the junction of the given many-to-many relation.\n */\n JunctionEntityMetadataBuilder.prototype.build = function (relation, joinTable) {\n var _this = this;\n var referencedColumns = this.collectReferencedColumns(relation, joinTable);\n var inverseReferencedColumns = this.collectInverseReferencedColumns(relation, joinTable);\n var joinTableName = joinTable.name || this.connection.namingStrategy.joinTableName(relation.entityMetadata.tableNameWithoutPrefix, relation.inverseEntityMetadata.tableNameWithoutPrefix, relation.propertyPath, relation.inverseRelation ? relation.inverseRelation.propertyName : \"\");\n var entityMetadata = new EntityMetadata({\n connection: this.connection,\n args: {\n target: \"\",\n name: joinTableName,\n type: \"junction\",\n database: joinTable.database || relation.entityMetadata.database,\n schema: joinTable.schema || relation.entityMetadata.schema,\n }\n });\n entityMetadata.build();\n // create original side junction columns\n var junctionColumns = referencedColumns.map(function (referencedColumn) {\n var joinColumn = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.propertyName, referencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: referencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n name: columnName,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n type: referencedColumn.type,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.zerofill ? true : referencedColumn.unsigned,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n // create inverse side junction columns\n var inverseJunctionColumns = inverseReferencedColumns.map(function (inverseReferencedColumn) {\n var joinColumn = joinTable.inverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === inverseReferencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableInverseColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.propertyName, inverseReferencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: inverseReferencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n length: !inverseReferencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (inverseReferencedColumn.generationStrategy === \"uuid\" || inverseReferencedColumn.type === \"uuid\")\n ? \"36\"\n : inverseReferencedColumn.length,\n width: inverseReferencedColumn.width,\n type: inverseReferencedColumn.type,\n precision: inverseReferencedColumn.precision,\n scale: inverseReferencedColumn.scale,\n charset: inverseReferencedColumn.charset,\n collation: inverseReferencedColumn.collation,\n zerofill: inverseReferencedColumn.zerofill,\n unsigned: inverseReferencedColumn.zerofill ? true : inverseReferencedColumn.unsigned,\n enum: inverseReferencedColumn.enum,\n enumName: inverseReferencedColumn.enumName,\n name: columnName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n this.changeDuplicatedColumnNames(junctionColumns, inverseJunctionColumns);\n // set junction table columns\n entityMetadata.ownerColumns = junctionColumns;\n entityMetadata.inverseColumns = inverseJunctionColumns;\n entityMetadata.ownColumns = __spreadArray(__spreadArray([], __read(junctionColumns)), __read(inverseJunctionColumns));\n entityMetadata.ownColumns.forEach(function (column) { return column.relationMetadata = relation; });\n // create junction table foreign keys\n entityMetadata.foreignKeys = relation.createForeignKeyConstraints ? [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.entityMetadata,\n columns: junctionColumns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n columns: inverseJunctionColumns,\n referencedColumns: inverseReferencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n ] : [];\n // create junction table indices\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: junctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: inverseJunctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // finally return entity metadata\n return entityMetadata;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectReferencedColumns = function (relation, joinTable) {\n var hasAnyReferencedColumnName = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!joinTable.joinColumns || (joinTable.joinColumns && !hasAnyReferencedColumnName)) {\n return relation.entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n }\n else {\n return joinTable.joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.entityMetadata.columns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.entityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects inverse referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectInverseReferencedColumns = function (relation, joinTable) {\n var hasInverseJoinColumns = !!joinTable.inverseJoinColumns;\n var hasAnyInverseReferencedColumnName = hasInverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!hasInverseJoinColumns || (hasInverseJoinColumns && !hasAnyInverseReferencedColumnName)) {\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else {\n return joinTable.inverseJoinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n JunctionEntityMetadataBuilder.prototype.changeDuplicatedColumnNames = function (junctionColumns, inverseJunctionColumns) {\n var _this = this;\n junctionColumns.forEach(function (junctionColumn) {\n inverseJunctionColumns.forEach(function (inverseJunctionColumn) {\n if (junctionColumn.givenDatabaseName === inverseJunctionColumn.givenDatabaseName) {\n var junctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(junctionColumn.propertyName, 1);\n junctionColumn.propertyName = junctionColumnName;\n junctionColumn.givenDatabaseName = junctionColumnName;\n var inverseJunctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(inverseJunctionColumn.propertyName, 2);\n inverseJunctionColumn.propertyName = inverseJunctionColumnName;\n inverseJunctionColumn.givenDatabaseName = inverseJunctionColumnName;\n }\n });\n });\n };\n return JunctionEntityMetadataBuilder;\n}());\nexport { JunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=JunctionEntityMetadataBuilder.js.map\n","import { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\n/**\n * Creates EntityMetadata for junction tables of the closure entities.\n * Closure junction tables are tables generated by closure entities.\n */\nvar ClosureJunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureJunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the closure junction of the given closure entity.\n */\n ClosureJunctionEntityMetadataBuilder.prototype.build = function (parentClosureEntityMetadata) {\n var _this = this;\n // create entity metadata itself\n var entityMetadata = new EntityMetadata({\n parentClosureEntityMetadata: parentClosureEntityMetadata,\n connection: this.connection,\n args: {\n target: \"\",\n name: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.closureTableName ? parentClosureEntityMetadata.treeOptions.closureTableName : parentClosureEntityMetadata.tableNameWithoutPrefix,\n type: \"closure-junction\"\n }\n });\n entityMetadata.build();\n // create ancestor and descendant columns for new closure junction table\n parentClosureEntityMetadata.primaryColumns.forEach(function (primaryColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"ancestor\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.ancestorColumnName ? parentClosureEntityMetadata.treeOptions.ancestorColumnName(primaryColumn) : primaryColumn.propertyName + \"_ancestor\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"descendant\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.descendantColumnName ? parentClosureEntityMetadata.treeOptions.descendantColumnName(primaryColumn) : primaryColumn.propertyName + \"_descendant\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type,\n }\n }\n }));\n });\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // if tree level column was defined by a closure entity then add it to the junction columns as well\n if (parentClosureEntityMetadata.treeLevelColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: \"level\",\n options: {\n type: this.connection.driver.mappedDataTypes.treeLevel,\n }\n }\n }));\n }\n // create junction table foreign keys\n entityMetadata.foreignKeys = [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n ];\n return entityMetadata;\n };\n return ClosureJunctionEntityMetadataBuilder;\n}());\nexport { ClosureJunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=ClosureJunctionEntityMetadataBuilder.js.map\n","/**\n * Unique metadata contains all information about table's unique constraints.\n */\nvar UniqueMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function UniqueMetadata(options) {\n /**\n * Unique columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend unique constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n UniqueMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else {\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyName) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyName; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyName; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Unique constraint \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyName);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.uniqueConstraintName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }));\n return this;\n };\n return UniqueMetadata;\n}());\nexport { UniqueMetadata };\n\n//# sourceMappingURL=UniqueMetadata.js.map\n","import { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds join column for the many-to-one and one-to-one owner relations.\n *\n * Cases it should cover:\n * 1. when join column is set with custom name and without referenced column name\n * we need automatically set referenced column name - primary ids by default\n * @JoinColumn({ name: \"custom_name\" })\n *\n * 2. when join column is set with only referenced column name\n * we need automatically set join column name - relation name + referenced column name\n * @JoinColumn({ referencedColumnName: \"title\" })\n *\n * 3. when join column is set without both referenced column name and join column name\n * we need to automatically set both of them\n * @JoinColumn()\n *\n * 4. when join column is not set at all (as in case of @ManyToOne relation)\n * we need to create join column for it with proper referenced column name and join column name\n *\n * 5. when multiple join columns set none of referencedColumnName and name can be optional\n * both options are required\n * @JoinColumn([\n * { name: \"category_title\", referencedColumnName: \"type\" },\n * { name: \"category_title\", referencedColumnName: \"name\" },\n * ])\n *\n * Since for many-to-one relations having JoinColumn decorator is not required,\n * we need to go thought each many-to-one relation without join column decorator set\n * and create join column metadata args for them.\n */\nvar RelationJoinColumnBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationJoinColumnBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a foreign key of the many-to-one or one-to-one owner relations.\n */\n RelationJoinColumnBuilder.prototype.build = function (joinColumns, relation) {\n var referencedColumns = this.collectReferencedColumns(joinColumns, relation);\n var columns = this.collectColumns(joinColumns, relation, referencedColumns);\n if (!referencedColumns.length || !relation.createForeignKeyConstraints)\n return { foreignKey: undefined, columns: columns, uniqueConstraint: undefined }; // this case is possible for one-to-one non owning side and relations with createForeignKeyConstraints = false\n var foreignKey = new ForeignKeyMetadata({\n entityMetadata: relation.entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n namingStrategy: this.connection.namingStrategy,\n columns: columns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete,\n onUpdate: relation.onUpdate,\n deferrable: relation.deferrable,\n });\n // Oracle does not allow both primary and unique constraints on the same column\n if (this.connection.driver instanceof OracleDriver && columns.every(function (column) { return column.isPrimary; }))\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n // CockroachDB requires UNIQUE constraints on referenced columns\n if (referencedColumns.length > 0 && relation.isOneToOne) {\n var uniqueConstraint = new UniqueMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n name: this.connection.namingStrategy.relationConstraintName(relation.entityMetadata.tablePath, foreignKey.columns.map(function (c) { return c.databaseName; })),\n target: relation.entityMetadata.target,\n }\n });\n uniqueConstraint.build(this.connection.namingStrategy);\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: uniqueConstraint };\n }\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectReferencedColumns = function (joinColumns, relation) {\n var hasAnyReferencedColumnName = joinColumns.find(function (joinColumnArgs) { return !!joinColumnArgs.referencedColumnName; });\n var manyToOneWithoutJoinColumn = joinColumns.length === 0 && relation.isManyToOne;\n var hasJoinColumnWithoutAnyReferencedColumnName = joinColumns.length > 0 && !hasAnyReferencedColumnName;\n if (manyToOneWithoutJoinColumn || hasJoinColumnWithoutAnyReferencedColumnName) { // covers case3 and case1\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else { // cases with referenced columns defined\n return joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; }); // todo: can we also search in relations?\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectColumns = function (joinColumns, relation, referencedColumns) {\n var _this = this;\n return referencedColumns.map(function (referencedColumn) {\n // in the case if relation has join column with only name set we need this check\n var joinColumnMetadataArg = joinColumns.find(function (joinColumn) {\n return (!joinColumn.referencedColumnName || joinColumn.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumn.name;\n });\n var joinColumnName = joinColumnMetadataArg ? joinColumnMetadataArg.name : _this.connection.namingStrategy.joinColumnName(relation.propertyName, referencedColumn.propertyName);\n var relationalColumn = relation.entityMetadata.ownColumns.find(function (column) { return column.databaseName === joinColumnName; });\n if (!relationalColumn) {\n relationalColumn = new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: relation.entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: relation.propertyName,\n options: {\n name: joinColumnName,\n type: referencedColumn.type,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.unsigned,\n comment: referencedColumn.comment,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n primary: relation.isPrimary,\n nullable: relation.isNullable,\n }\n }\n });\n relation.entityMetadata.registerColumn(relationalColumn);\n }\n relationalColumn.referencedColumn = referencedColumn; // its important to set it here because we need to set referenced column for user defined join column\n relationalColumn.type = referencedColumn.type; // also since types of relational column and join column must be equal we override user defined column type\n relationalColumn.relationMetadata = relation;\n relationalColumn.build(_this.connection);\n return relationalColumn;\n });\n };\n return RelationJoinColumnBuilder;\n}());\nexport { RelationJoinColumnBuilder };\n\n//# sourceMappingURL=RelationJoinColumnBuilder.js.map\n","/**\n * This metadata contains all information about entity's listeners.\n */\nvar EntityListenerMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityListenerMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.type = options.args.type;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Checks if entity listener is allowed to be executed on the given entity.\n */\n EntityListenerMetadata.prototype.isAllowed = function (entity) {\n return this.entityMetadata.target === entity.constructor || // todo: .constructor won't work for entity schemas, but there are no entity listeners in schemas since there are no objects, right?\n (this.entityMetadata.target instanceof Function && entity.constructor.prototype instanceof this.entityMetadata.target); // todo: also need to implement entity schema inheritance\n };\n /**\n * Executes listener method of the given entity.\n */\n EntityListenerMetadata.prototype.execute = function (entity) {\n if (!this.embeddedMetadata)\n return entity[this.propertyName]();\n this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split(\".\"));\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Calls embedded entity listener method no matter how nested it is.\n */\n EntityListenerMetadata.prototype.callEntityEmbeddedMethod = function (entity, propertyPaths) {\n var propertyPath = propertyPaths.shift();\n if (!propertyPath || !entity[propertyPath])\n return;\n if (propertyPaths.length === 0) {\n entity[propertyPath][this.propertyName]();\n }\n else {\n if (entity[propertyPath])\n this.callEntityEmbeddedMethod(entity[propertyPath], propertyPaths);\n }\n };\n return EntityListenerMetadata;\n}());\nexport { EntityListenerMetadata };\n\n//# sourceMappingURL=EntityListenerMetadata.js.map\n","/**\n * Check metadata contains all information about table's check constraints.\n */\nvar CheckMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CheckMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend check constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n CheckMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.checkConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return CheckMetadata;\n}());\nexport { CheckMetadata };\n\n//# sourceMappingURL=CheckMetadata.js.map\n","/**\n * Exclusion metadata contains all information about table's exclusion constraints.\n */\nvar ExclusionMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ExclusionMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend exclusion constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n ExclusionMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.exclusionConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return ExclusionMetadata;\n}());\nexport { ExclusionMetadata };\n\n//# sourceMappingURL=ExclusionMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\nimport { EmbeddedMetadata } from \"../metadata/EmbeddedMetadata\";\nimport { RelationIdMetadata } from \"../metadata/RelationIdMetadata\";\nimport { RelationCountMetadata } from \"../metadata/RelationCountMetadata\";\nimport { EventListenerTypes } from \"../metadata/types/EventListenerTypes\";\nimport { MetadataUtils } from \"./MetadataUtils\";\nimport { JunctionEntityMetadataBuilder } from \"./JunctionEntityMetadataBuilder\";\nimport { ClosureJunctionEntityMetadataBuilder } from \"./ClosureJunctionEntityMetadataBuilder\";\nimport { RelationJoinColumnBuilder } from \"./RelationJoinColumnBuilder\";\nimport { EntityListenerMetadata } from \"../metadata/EntityListenerMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { CheckMetadata } from \"../metadata/CheckMetadata\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { ExclusionMetadata } from \"../metadata/ExclusionMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds EntityMetadata objects and all its sub-metadatas.\n */\nvar EntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityMetadataBuilder(connection, metadataArgsStorage) {\n this.connection = connection;\n this.metadataArgsStorage = metadataArgsStorage;\n this.junctionEntityMetadataBuilder = new JunctionEntityMetadataBuilder(connection);\n this.closureJunctionEntityMetadataBuilder = new ClosureJunctionEntityMetadataBuilder(connection);\n this.relationJoinColumnBuilder = new RelationJoinColumnBuilder(connection);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a complete entity metadatas for the given entity classes.\n */\n EntityMetadataBuilder.prototype.build = function (entityClasses) {\n var _this = this;\n // if entity classes to filter entities by are given then do filtering, otherwise use all\n var allTables = entityClasses ? this.metadataArgsStorage.filterTables(entityClasses) : this.metadataArgsStorage.tables;\n // filter out table metadata args for those we really create entity metadatas and tables in the db\n var realTables = allTables.filter(function (table) { return table.type === \"regular\" || table.type === \"closure\" || table.type === \"entity-child\" || table.type === \"view\"; });\n // create entity metadatas for a user defined entities (marked with @Entity decorator or loaded from entity schemas)\n var entityMetadatas = realTables.map(function (tableArgs) { return _this.createEntityMetadata(tableArgs); });\n // compute parent entity metadatas for table inheritance\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeParentEntityMetadata(entityMetadatas, entityMetadata); });\n // after all metadatas created we set child entity metadatas for table inheritance\n entityMetadatas.forEach(function (metadata) {\n metadata.childEntityMetadatas = entityMetadatas.filter(function (childMetadata) {\n return metadata.target instanceof Function\n && childMetadata.target instanceof Function\n && MetadataUtils.isInherited(childMetadata.target, metadata.target);\n });\n });\n // build entity metadata (step0), first for non-single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // build entity metadata (step0), now for single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // compute entity metadata columns, relations, etc. first for the regular, non-single-table-inherited entity metadatas\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // then do it for single table inheritance children (since they are depend on their parents to be built)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // calculate entity metadata computed properties and all its sub-metadatas\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeEntityMetadataStep2(entityMetadata); });\n // calculate entity metadata's inverse properties\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeInverseProperties(entityMetadata, entityMetadatas); });\n // go through all entity metadatas and create foreign keys / junction entity metadatas for their relations\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) {\n // create entity's relations join columns (for many-to-one and one-to-one owner)\n entityMetadata.relations.filter(function (relation) { return relation.isOneToOne || relation.isManyToOne; }).forEach(function (relation) {\n var joinColumns = _this.metadataArgsStorage.filterJoinColumns(relation.target, relation.propertyName);\n var _a = _this.relationJoinColumnBuilder.build(joinColumns, relation), foreignKey = _a.foreignKey, columns = _a.columns, uniqueConstraint = _a.uniqueConstraint; // create a foreign key based on its metadata args\n if (foreignKey) {\n relation.registerForeignKeys(foreignKey); // push it to the relation and thus register there a join column\n entityMetadata.foreignKeys.push(foreignKey);\n }\n if (columns) {\n relation.registerJoinColumns(columns);\n }\n if (uniqueConstraint) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver\n || _this.connection.driver instanceof SqlServerDriver || _this.connection.driver instanceof SapDriver) {\n var index = new IndexMetadata({\n entityMetadata: uniqueConstraint.entityMetadata,\n columns: uniqueConstraint.columns,\n args: {\n target: uniqueConstraint.target,\n name: uniqueConstraint.name,\n unique: true,\n synchronize: true\n }\n });\n if (_this.connection.driver instanceof SqlServerDriver) {\n index.where = index.columns.map(function (column) {\n return _this.connection.driver.escape(column.databaseName) + \" IS NOT NULL\";\n }).join(\" AND \");\n }\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n else {\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.uniques.push(uniqueConstraint);\n }\n else {\n relation.entityMetadata.ownUniques.push(uniqueConstraint);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n }\n if (foreignKey && _this.connection.driver instanceof CockroachDriver) {\n var index = new IndexMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n target: relation.entityMetadata.target,\n synchronize: true\n }\n });\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n // create junction entity metadatas for entity many-to-many relations\n entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; }).forEach(function (relation) {\n var joinTable = _this.metadataArgsStorage.findJoinTable(relation.target, relation.propertyName);\n if (!joinTable)\n return; // no join table set - no need to do anything (it means this is many-to-many inverse side)\n // here we create a junction entity metadata for a new junction table of many-to-many relation\n var junctionEntityMetadata = _this.junctionEntityMetadataBuilder.build(relation, joinTable);\n relation.registerForeignKeys.apply(relation, __spreadArray([], __read(junctionEntityMetadata.foreignKeys)));\n relation.registerJoinColumns(junctionEntityMetadata.ownIndices[0].columns, junctionEntityMetadata.ownIndices[1].columns);\n relation.registerJunctionEntityMetadata(junctionEntityMetadata);\n // compute new entity metadata properties and push it to entity metadatas pool\n _this.computeEntityMetadataStep2(junctionEntityMetadata);\n _this.computeInverseProperties(junctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(junctionEntityMetadata);\n });\n });\n // update entity metadata depend properties\n entityMetadatas\n .forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns = entityMetadata.relations.filter(function (relation) { return relation.isWithJoinColumn; });\n entityMetadata.hasNonNullableRelations = entityMetadata.relationsWithJoinColumns.some(function (relation) { return !relation.isNullable || relation.isPrimary; });\n });\n // generate closure junction tables for all closure tables\n entityMetadatas\n .filter(function (metadata) { return metadata.treeType === \"closure-table\"; })\n .forEach(function (entityMetadata) {\n var closureJunctionEntityMetadata = _this.closureJunctionEntityMetadataBuilder.build(entityMetadata);\n entityMetadata.closureJunctionTable = closureJunctionEntityMetadata;\n _this.computeEntityMetadataStep2(closureJunctionEntityMetadata);\n _this.computeInverseProperties(closureJunctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(closureJunctionEntityMetadata);\n });\n // generate keys for tables with single-table inheritance\n entityMetadatas\n .filter(function (metadata) { return metadata.inheritancePattern === \"STI\" && metadata.discriminatorColumn; })\n .forEach(function (entityMetadata) { return _this.createKeysForTableInheritance(entityMetadata); });\n // build all indices (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.indices.forEach(function (index) { return index.build(_this.connection.namingStrategy); });\n });\n // build all unique constraints (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.uniques.forEach(function (unique) { return unique.build(_this.connection.namingStrategy); });\n });\n // build all check constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.checks.forEach(function (check) { return check.build(_this.connection.namingStrategy); });\n });\n // build all exclusion constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.exclusions.forEach(function (exclusion) { return exclusion.build(_this.connection.namingStrategy); });\n });\n // add lazy initializer for entity relations\n entityMetadatas\n .filter(function (metadata) { return metadata.target instanceof Function; })\n .forEach(function (entityMetadata) {\n entityMetadata.relations\n .filter(function (relation) { return relation.isLazy; })\n .forEach(function (relation) {\n _this.connection.relationLoader.enableLazyLoad(relation, entityMetadata.target.prototype);\n });\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.columns.forEach(function (column) {\n // const target = column.embeddedMetadata ? column.embeddedMetadata.type : column.target;\n var generated = _this.metadataArgsStorage.findGenerated(column.target, column.propertyName);\n if (generated) {\n column.isGenerated = true;\n column.generationStrategy = generated.strategy;\n if (generated.strategy === \"uuid\") {\n column.type = \"uuid\";\n }\n else if (generated.strategy === \"rowid\") {\n column.type = \"int\";\n }\n else {\n column.type = column.type || Number;\n }\n column.build(_this.connection);\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n });\n return entityMetadatas;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates entity metadata from the given table args.\n * Creates column, relation, etc. metadatas for everything this entity metadata owns.\n */\n EntityMetadataBuilder.prototype.createEntityMetadata = function (tableArgs) {\n // we take all \"inheritance tree\" from a target entity to collect all stored metadata args\n // (by decorators or inside entity schemas). For example for target Post < ContentModel < Unit\n // it will be an array of [Post, ContentModel, Unit] and we can then get all metadata args of those classes\n var inheritanceTree = tableArgs.target instanceof Function\n ? MetadataUtils.getInheritanceTree(tableArgs.target)\n : [tableArgs.target]; // todo: implement later here inheritance for string-targets\n var tableInheritance = this.metadataArgsStorage.findInheritanceType(tableArgs.target);\n var tableTree = this.metadataArgsStorage.findTree(tableArgs.target);\n // if single table inheritance used, we need to copy all children columns in to parent table\n var singleTableChildrenTargets;\n if ((tableInheritance && tableInheritance.pattern === \"STI\") || tableArgs.type === \"entity-child\") {\n singleTableChildrenTargets = this.metadataArgsStorage\n .filterSingleTableChildren(tableArgs.target)\n .map(function (args) { return args.target; })\n .filter(function (target) { return target instanceof Function; });\n inheritanceTree.push.apply(inheritanceTree, __spreadArray([], __read(singleTableChildrenTargets)));\n }\n return new EntityMetadata({\n connection: this.connection,\n args: tableArgs,\n inheritanceTree: inheritanceTree,\n tableTree: tableTree,\n inheritancePattern: tableInheritance ? tableInheritance.pattern : undefined\n });\n };\n EntityMetadataBuilder.prototype.computeParentEntityMetadata = function (allEntityMetadatas, entityMetadata) {\n // after all metadatas created we set parent entity metadata for table inheritance\n if (entityMetadata.tableType === \"entity-child\") {\n entityMetadata.parentEntityMetadata = allEntityMetadatas.find(function (allEntityMetadata) {\n return allEntityMetadata.inheritanceTree.indexOf(entityMetadata.target) !== -1 && allEntityMetadata.inheritancePattern === \"STI\";\n });\n }\n };\n EntityMetadataBuilder.prototype.computeEntityMetadataStep1 = function (allEntityMetadatas, entityMetadata) {\n var _a, _b, _c;\n var _this = this;\n var entityInheritance = this.metadataArgsStorage.findInheritanceType(entityMetadata.target);\n var discriminatorValue = this.metadataArgsStorage.findDiscriminatorValue(entityMetadata.target);\n if (typeof discriminatorValue !== \"undefined\") {\n entityMetadata.discriminatorValue = discriminatorValue.value;\n }\n else {\n entityMetadata.discriminatorValue = entityMetadata.target.name;\n }\n // if single table inheritance is used, we need to mark all embedded columns as nullable\n entityMetadata.embeddeds = this.createEmbeddedsRecursively(entityMetadata, this.metadataArgsStorage.filterEmbeddeds(entityMetadata.inheritanceTree))\n .map(function (embedded) {\n if (entityMetadata.inheritancePattern === \"STI\") {\n embedded.columns = embedded.columns.map(function (column) {\n column.isNullable = true;\n return column;\n });\n }\n return embedded;\n });\n entityMetadata.ownColumns = this.metadataArgsStorage\n .filterColumns(entityMetadata.inheritanceTree)\n .map(function (args) {\n // for single table children we reuse columns created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.propertyName === args.propertyName; });\n var column = new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, args: args });\n // if single table inheritance used, we need to mark all inherit table columns as nullable\n var columnInSingleTableInheritedChild = allEntityMetadatas.find(function (otherEntityMetadata) { return otherEntityMetadata.tableType === \"entity-child\" && otherEntityMetadata.target === args.target; });\n if (columnInSingleTableInheritedChild)\n column.isNullable = true;\n return column;\n });\n // for table inheritance we need to add a discriminator column\n //\n if (entityInheritance && entityInheritance.column) {\n var discriminatorColumnName_1 = entityInheritance.column && entityInheritance.column.name ? entityInheritance.column.name : \"type\";\n var discriminatorColumn = entityMetadata.ownColumns.find(function (column) { return column.propertyName === discriminatorColumnName_1; });\n if (!discriminatorColumn) {\n discriminatorColumn = new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: discriminatorColumnName_1,\n options: entityInheritance.column || {\n name: discriminatorColumnName_1,\n type: \"varchar\",\n nullable: false\n }\n }\n });\n discriminatorColumn.isVirtual = true;\n discriminatorColumn.isDiscriminator = true;\n entityMetadata.ownColumns.push(discriminatorColumn);\n }\n else {\n discriminatorColumn.isDiscriminator = true;\n }\n }\n // add discriminator column to the child entity metadatas\n // discriminator column will not be there automatically since we are creating it in the code above\n if (entityMetadata.tableType === \"entity-child\") {\n var discriminatorColumn_1 = entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.isDiscriminator; });\n if (discriminatorColumn_1 && !entityMetadata.ownColumns.find(function (column) { return column === discriminatorColumn_1; })) {\n entityMetadata.ownColumns.push(discriminatorColumn_1);\n }\n }\n var namingStrategy = this.connection.namingStrategy;\n // check if tree is used then we need to add extra columns for specific tree types\n if (entityMetadata.treeType === \"materialized-path\") {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n materializedPath: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: \"mpath\",\n options: /*tree.column || */ {\n name: namingStrategy.materializedPathColumnName,\n type: \"varchar\",\n nullable: true,\n default: \"\"\n }\n }\n }));\n }\n else if (entityMetadata.treeType === \"nested-set\") {\n var _d = namingStrategy.nestedSetColumnNames, left = _d.left, right = _d.right;\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetLeft: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: left,\n options: /*tree.column || */ {\n name: left,\n type: \"integer\",\n nullable: false,\n default: 1\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetRight: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: right,\n options: /*tree.column || */ {\n name: right,\n type: \"integer\",\n nullable: false,\n default: 2\n }\n }\n }));\n }\n entityMetadata.ownRelations = this.metadataArgsStorage.filterRelations(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relations created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownRelations.find(function (relation) { return relation.propertyName === args.propertyName; });\n return new RelationMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationIds = this.metadataArgsStorage.filterRelationIds(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation ids created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationIds.find(function (relationId) { return relationId.propertyName === args.propertyName; });\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationCounts = this.metadataArgsStorage.filterRelationCounts(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation counts created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationCounts.find(function (relationCount) { return relationCount.propertyName === args.propertyName; });\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.ownListeners = this.metadataArgsStorage.filterListeners(entityMetadata.inheritanceTree).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.checks = this.metadataArgsStorage.filterChecks(entityMetadata.inheritanceTree).map(function (args) {\n return new CheckMetadata({ entityMetadata: entityMetadata, args: args });\n });\n // Only PostgreSQL supports exclusion constraints.\n if (this.connection.driver instanceof PostgresDriver) {\n entityMetadata.exclusions = this.metadataArgsStorage.filterExclusions(entityMetadata.inheritanceTree).map(function (args) {\n return new ExclusionMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n if (this.connection.driver instanceof CockroachDriver) {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return !args.unique; })\n .map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n var uniques = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return args.unique; })\n .map(function (args) {\n return new UniqueMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n }\n });\n });\n (_a = entityMetadata.ownUniques).push.apply(_a, __spreadArray([], __read(uniques)));\n }\n else {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n // Mysql and SAP HANA stores unique constraints as unique indices.\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n var indices = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n unique: true,\n synchronize: true\n }\n });\n });\n (_b = entityMetadata.ownIndices).push.apply(_b, __spreadArray([], __read(indices)));\n }\n else {\n var uniques = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, args: args });\n });\n (_c = entityMetadata.ownUniques).push.apply(_c, __spreadArray([], __read(uniques)));\n }\n };\n /**\n * Creates from the given embedded metadata args real embedded metadatas with its columns and relations,\n * and does the same for all its sub-embeddeds (goes recursively).\n */\n EntityMetadataBuilder.prototype.createEmbeddedsRecursively = function (entityMetadata, embeddedArgs) {\n var _this = this;\n return embeddedArgs.map(function (embeddedArgs) {\n var embeddedMetadata = new EmbeddedMetadata({ entityMetadata: entityMetadata, args: embeddedArgs });\n var targets = MetadataUtils.getInheritanceTree(embeddedMetadata.type);\n embeddedMetadata.columns = _this.metadataArgsStorage.filterColumns(targets).map(function (args) {\n return new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relations = _this.metadataArgsStorage.filterRelations(targets).map(function (args) {\n return new RelationMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.listeners = _this.metadataArgsStorage.filterListeners(targets).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.indices = _this.metadataArgsStorage.filterIndices(targets).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.uniques = _this.metadataArgsStorage.filterUniques(targets).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relationIds = _this.metadataArgsStorage.filterRelationIds(targets).map(function (args) {\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.relationCounts = _this.metadataArgsStorage.filterRelationCounts(targets).map(function (args) {\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.embeddeds = _this.createEmbeddedsRecursively(entityMetadata, _this.metadataArgsStorage.filterEmbeddeds(targets));\n embeddedMetadata.embeddeds.forEach(function (subEmbedded) { return subEmbedded.parentEmbeddedMetadata = embeddedMetadata; });\n entityMetadata.allEmbeddeds.push(embeddedMetadata);\n return embeddedMetadata;\n });\n };\n /**\n * Computes all entity metadata's computed properties, and all its sub-metadatas (relations, columns, embeds, etc).\n */\n EntityMetadataBuilder.prototype.computeEntityMetadataStep2 = function (entityMetadata) {\n var _this = this;\n entityMetadata.embeddeds.forEach(function (embedded) { return embedded.build(_this.connection); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.columnsFromTree.forEach(function (column) { return column.build(_this.connection); });\n embedded.relationsFromTree.forEach(function (relation) { return relation.build(); });\n });\n entityMetadata.ownColumns.forEach(function (column) { return column.build(_this.connection); });\n entityMetadata.ownRelations.forEach(function (relation) { return relation.build(); });\n entityMetadata.relations = entityMetadata.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.relationsFromTree); }, entityMetadata.ownRelations);\n entityMetadata.eagerRelations = entityMetadata.relations.filter(function (relation) { return relation.isEager; });\n entityMetadata.lazyRelations = entityMetadata.relations.filter(function (relation) { return relation.isLazy; });\n entityMetadata.oneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOne; });\n entityMetadata.oneToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToMany; });\n entityMetadata.manyToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToOne; });\n entityMetadata.manyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; });\n entityMetadata.ownerOneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOneOwner; });\n entityMetadata.ownerManyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToManyOwner; });\n entityMetadata.treeParentRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeParent; });\n entityMetadata.treeChildrenRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeChildren; });\n entityMetadata.columns = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, entityMetadata.ownColumns);\n entityMetadata.listeners = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.listenersFromTree); }, entityMetadata.ownListeners);\n entityMetadata.afterLoadListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_LOAD; });\n entityMetadata.afterInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_INSERT; });\n entityMetadata.afterUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_UPDATE; });\n entityMetadata.afterRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_REMOVE; });\n entityMetadata.beforeInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_INSERT; });\n entityMetadata.beforeUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_UPDATE; });\n entityMetadata.beforeRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_REMOVE; });\n entityMetadata.indices = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.indicesFromTree); }, entityMetadata.ownIndices);\n entityMetadata.uniques = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.uniquesFromTree); }, entityMetadata.ownUniques);\n entityMetadata.primaryColumns = entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n entityMetadata.nonVirtualColumns = entityMetadata.columns.filter(function (column) { return !column.isVirtual; });\n entityMetadata.ancestorColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"ancestor\"; });\n entityMetadata.descendantColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"descendant\"; });\n entityMetadata.hasMultiplePrimaryKeys = entityMetadata.primaryColumns.length > 1;\n entityMetadata.generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.isObjectId; });\n entityMetadata.hasUUIDGeneratedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n entityMetadata.createDateColumn = entityMetadata.columns.find(function (column) { return column.isCreateDate; });\n entityMetadata.updateDateColumn = entityMetadata.columns.find(function (column) { return column.isUpdateDate; });\n entityMetadata.deleteDateColumn = entityMetadata.columns.find(function (column) { return column.isDeleteDate; });\n entityMetadata.versionColumn = entityMetadata.columns.find(function (column) { return column.isVersion; });\n entityMetadata.discriminatorColumn = entityMetadata.columns.find(function (column) { return column.isDiscriminator; });\n entityMetadata.treeLevelColumn = entityMetadata.columns.find(function (column) { return column.isTreeLevel; });\n entityMetadata.nestedSetLeftColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetLeft; });\n entityMetadata.nestedSetRightColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetRight; });\n entityMetadata.materializedPathColumn = entityMetadata.columns.find(function (column) { return column.isMaterializedPath; });\n entityMetadata.objectIdColumn = entityMetadata.columns.find(function (column) { return column.isObjectId; });\n entityMetadata.foreignKeys.forEach(function (foreignKey) { return foreignKey.build(_this.connection.namingStrategy); });\n entityMetadata.propertiesMap = entityMetadata.createPropertiesMap();\n entityMetadata.relationIds.forEach(function (relationId) { return relationId.build(); });\n entityMetadata.relationCounts.forEach(function (relationCount) { return relationCount.build(); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.relationIdsFromTree.forEach(function (relationId) { return relationId.build(); });\n embedded.relationCountsFromTree.forEach(function (relationCount) { return relationCount.build(); });\n });\n };\n /**\n * Computes entity metadata's relations inverse side properties.\n */\n EntityMetadataBuilder.prototype.computeInverseProperties = function (entityMetadata, entityMetadatas) {\n entityMetadata.relations.forEach(function (relation) {\n // compute inverse side (related) entity metadatas for all relation metadatas\n var inverseEntityMetadata = entityMetadatas.find(function (m) { return m.target === relation.type || (typeof relation.type === \"string\" && (m.targetName === relation.type || m.givenTableName === relation.type)); });\n if (!inverseEntityMetadata)\n throw new Error(\"Entity metadata for \" + entityMetadata.name + \"#\" + relation.propertyPath + \" was not found. Check if you specified a correct entity object and if it's connected in the connection options.\");\n relation.inverseEntityMetadata = inverseEntityMetadata;\n relation.inverseSidePropertyPath = relation.buildInverseSidePropertyPath();\n // and compute inverse relation and mark if it has such\n relation.inverseRelation = inverseEntityMetadata.relations.find(function (foundRelation) { return foundRelation.propertyPath === relation.inverseSidePropertyPath; });\n });\n };\n /**\n * Creates indices for the table of single table inheritance.\n */\n EntityMetadataBuilder.prototype.createKeysForTableInheritance = function (entityMetadata) {\n entityMetadata.indices.push(new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.discriminatorColumn],\n args: {\n target: entityMetadata.target,\n unique: false\n }\n }));\n };\n return EntityMetadataBuilder;\n}());\nexport { EntityMetadataBuilder };\n\n//# sourceMappingURL=EntityMetadataBuilder.js.map\n","import { MetadataUtils } from \"../metadata-builder/MetadataUtils\";\n/**\n * Storage all metadatas args of all available types: tables, columns, subscribers, relations, etc.\n * Each metadata args represents some specifications of what it represents.\n * MetadataArgs used to create a real Metadata objects.\n */\nvar MetadataArgsStorage = /** @class */ (function () {\n function MetadataArgsStorage() {\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n this.tables = [];\n this.trees = [];\n this.entityRepositories = [];\n this.transactionEntityManagers = [];\n this.transactionRepositories = [];\n this.namingStrategies = [];\n this.entitySubscribers = [];\n this.indices = [];\n this.uniques = [];\n this.checks = [];\n this.exclusions = [];\n this.columns = [];\n this.generations = [];\n this.relations = [];\n this.joinColumns = [];\n this.joinTables = [];\n this.entityListeners = [];\n this.relationCounts = [];\n this.relationIds = [];\n this.embeddeds = [];\n this.inheritances = [];\n this.discriminatorValues = [];\n }\n MetadataArgsStorage.prototype.filterTables = function (target) {\n return this.filterByTarget(this.tables, target);\n };\n MetadataArgsStorage.prototype.filterColumns = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.columns, target);\n };\n MetadataArgsStorage.prototype.findGenerated = function (target, propertyName) {\n return this.generations.find(function (generated) {\n return (Array.isArray(target) ? target.indexOf(generated.target) !== -1 : generated.target === target) && generated.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.findTree = function (target) {\n return this.trees.find(function (tree) {\n return (Array.isArray(target) ? target.indexOf(tree.target) !== -1 : tree.target === target);\n });\n };\n MetadataArgsStorage.prototype.filterRelations = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relations, target);\n };\n MetadataArgsStorage.prototype.filterRelationIds = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationIds, target);\n };\n MetadataArgsStorage.prototype.filterRelationCounts = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationCounts, target);\n };\n MetadataArgsStorage.prototype.filterIndices = function (target) {\n // todo: implement parent-entity overrides?\n return this.indices.filter(function (index) {\n return Array.isArray(target) ? target.indexOf(index.target) !== -1 : index.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterUniques = function (target) {\n return this.uniques.filter(function (unique) {\n return Array.isArray(target) ? target.indexOf(unique.target) !== -1 : unique.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterChecks = function (target) {\n return this.checks.filter(function (check) {\n return Array.isArray(target) ? target.indexOf(check.target) !== -1 : check.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterExclusions = function (target) {\n return this.exclusions.filter(function (exclusion) {\n return Array.isArray(target) ? target.indexOf(exclusion.target) !== -1 : exclusion.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterListeners = function (target) {\n return this.filterByTarget(this.entityListeners, target);\n };\n MetadataArgsStorage.prototype.filterEmbeddeds = function (target) {\n return this.filterByTargetAndWithoutDuplicateEmbeddedProperties(this.embeddeds, target);\n };\n MetadataArgsStorage.prototype.findJoinTable = function (target, propertyName) {\n return this.joinTables.find(function (joinTable) {\n return joinTable.target === target && joinTable.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterJoinColumns = function (target, propertyName) {\n // todo: implement parent-entity overrides?\n return this.joinColumns.filter(function (joinColumn) {\n return joinColumn.target === target && joinColumn.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSubscribers = function (target) {\n return this.filterByTarget(this.entitySubscribers, target);\n };\n MetadataArgsStorage.prototype.filterNamingStrategies = function (target) {\n return this.filterByTarget(this.namingStrategies, target);\n };\n MetadataArgsStorage.prototype.filterTransactionEntityManagers = function (target, propertyName) {\n return this.transactionEntityManagers.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterTransactionRepository = function (target, propertyName) {\n return this.transactionRepositories.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSingleTableChildren = function (target) {\n return this.tables.filter(function (table) {\n return table.target instanceof Function\n && target instanceof Function\n && MetadataUtils.isInherited(table.target, target)\n && table.type === \"entity-child\";\n });\n };\n MetadataArgsStorage.prototype.findInheritanceType = function (target) {\n return this.inheritances.find(function (inheritance) { return inheritance.target === target; });\n };\n MetadataArgsStorage.prototype.findDiscriminatorValue = function (target) {\n return this.discriminatorValues.find(function (discriminatorValue) { return discriminatorValue.target === target; });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Filters given array by a given target or targets.\n */\n MetadataArgsStorage.prototype.filterByTarget = function (array, target) {\n return array.filter(function (table) {\n return Array.isArray(target) ? target.indexOf(table.target) !== -1 : table.target === target;\n });\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n if (!newArray.find(function (newItem) { return newItem.propertyName === item.propertyName; }))\n newArray.push(item);\n }\n });\n return newArray;\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate embedded property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateEmbeddedProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n var isDuplicateEmbeddedProperty = newArray.find(function (newItem) {\n return newItem.prefix === item.prefix && newItem.propertyName === item.propertyName;\n });\n if (!isDuplicateEmbeddedProperty)\n newArray.push(item);\n }\n });\n return newArray;\n };\n return MetadataArgsStorage;\n}());\nexport { MetadataArgsStorage };\n\n//# sourceMappingURL=MetadataArgsStorage.js.map\n","import { __values } from \"tslib\";\nimport { MetadataArgsStorage } from \"../metadata-args/MetadataArgsStorage\";\n/**\n * Transforms entity schema into metadata args storage.\n * The result will be just like entities read from decorators.\n */\nvar EntitySchemaTransformer = /** @class */ (function () {\n function EntitySchemaTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Transforms entity schema into new metadata args storage object.\n */\n EntitySchemaTransformer.prototype.transform = function (schemas) {\n var metadataArgsStorage = new MetadataArgsStorage();\n schemas.forEach(function (entitySchema) {\n var options = entitySchema.options;\n // add table metadata args from the schema\n var tableMetadata = {\n target: options.target || options.name,\n name: options.tableName,\n database: options.database,\n schema: options.schema,\n type: options.type || \"regular\",\n orderBy: options.orderBy,\n synchronize: options.synchronize,\n expression: options.expression\n };\n metadataArgsStorage.tables.push(tableMetadata);\n // add columns metadata args from the schema\n Object.keys(options.columns).forEach(function (columnName) {\n var column = options.columns[columnName];\n var mode = \"regular\";\n if (column.createDate)\n mode = \"createDate\";\n if (column.updateDate)\n mode = \"updateDate\";\n if (column.deleteDate)\n mode = \"deleteDate\";\n if (column.version)\n mode = \"version\";\n if (column.treeChildrenCount)\n mode = \"treeChildrenCount\";\n if (column.treeLevel)\n mode = \"treeLevel\";\n if (column.objectId)\n mode = \"objectId\";\n var columnAgrs = {\n target: options.target || options.name,\n mode: mode,\n propertyName: columnName,\n options: {\n type: column.type,\n name: column.objectId ? \"_id\" : column.name,\n length: column.length,\n width: column.width,\n nullable: column.nullable,\n readonly: column.readonly,\n update: column.update,\n select: column.select,\n insert: column.insert,\n primary: column.primary,\n unique: column.unique,\n comment: column.comment,\n default: column.default,\n onUpdate: column.onUpdate,\n precision: column.precision,\n scale: column.scale,\n zerofill: column.zerofill,\n unsigned: column.unsigned,\n charset: column.charset,\n collation: column.collation,\n enum: column.enum,\n asExpression: column.asExpression,\n generatedType: column.generatedType,\n hstoreType: column.hstoreType,\n array: column.array,\n transformer: column.transformer,\n spatialFeatureType: column.spatialFeatureType,\n srid: column.srid\n }\n };\n metadataArgsStorage.columns.push(columnAgrs);\n if (column.generated) {\n var generationArgs = {\n target: options.target || options.name,\n propertyName: columnName,\n strategy: typeof column.generated === \"string\" ? column.generated : \"increment\"\n };\n metadataArgsStorage.generations.push(generationArgs);\n }\n if (column.unique)\n metadataArgsStorage.uniques.push({ target: options.target || options.name, columns: [columnName] });\n });\n // add relation metadata args from the schema\n if (options.relations) {\n Object.keys(options.relations).forEach(function (relationName) {\n var e_1, _a;\n var relationSchema = options.relations[relationName];\n var relation = {\n target: options.target || options.name,\n propertyName: relationName,\n relationType: relationSchema.type,\n isLazy: relationSchema.lazy || false,\n type: relationSchema.target,\n inverseSideProperty: relationSchema.inverseSide,\n isTreeParent: relationSchema.treeParent,\n isTreeChildren: relationSchema.treeChildren,\n options: {\n eager: relationSchema.eager || false,\n cascade: relationSchema.cascade,\n nullable: relationSchema.nullable,\n onDelete: relationSchema.onDelete,\n onUpdate: relationSchema.onUpdate,\n deferrable: relationSchema.deferrable,\n primary: relationSchema.primary,\n persistence: relationSchema.persistence\n }\n };\n metadataArgsStorage.relations.push(relation);\n // add join column\n if (relationSchema.joinColumn) {\n if (typeof relationSchema.joinColumn === \"boolean\") {\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n else {\n var joinColumnsOptions = Array.isArray(relationSchema.joinColumn) ? relationSchema.joinColumn : [relationSchema.joinColumn];\n try {\n for (var joinColumnsOptions_1 = __values(joinColumnsOptions), joinColumnsOptions_1_1 = joinColumnsOptions_1.next(); !joinColumnsOptions_1_1.done; joinColumnsOptions_1_1 = joinColumnsOptions_1.next()) {\n var joinColumnOption = joinColumnsOptions_1_1.value;\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName,\n name: joinColumnOption.name,\n referencedColumnName: joinColumnOption.referencedColumnName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (joinColumnsOptions_1_1 && !joinColumnsOptions_1_1.done && (_a = joinColumnsOptions_1.return)) _a.call(joinColumnsOptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n }\n // add join table\n if (relationSchema.joinTable) {\n if (typeof relationSchema.joinTable === \"boolean\") {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n else {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName,\n name: relationSchema.joinTable.name,\n database: relationSchema.joinTable.database,\n schema: relationSchema.joinTable.schema,\n joinColumns: (relationSchema.joinTable.joinColumn ? [relationSchema.joinTable.joinColumn] : relationSchema.joinTable.joinColumns),\n inverseJoinColumns: (relationSchema.joinTable.inverseJoinColumn ? [relationSchema.joinTable.inverseJoinColumn] : relationSchema.joinTable.inverseJoinColumns),\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n }\n });\n }\n // add index metadata args from the schema\n if (options.indices) {\n options.indices.forEach(function (index) {\n var indexAgrs = {\n target: options.target || options.name,\n name: index.name,\n unique: index.unique === true ? true : false,\n spatial: index.spatial === true ? true : false,\n fulltext: index.fulltext === true ? true : false,\n parser: index.parser,\n synchronize: index.synchronize === false ? false : true,\n where: index.where,\n sparse: index.sparse,\n columns: index.columns\n };\n metadataArgsStorage.indices.push(indexAgrs);\n });\n }\n // add unique metadata args from the schema\n if (options.uniques) {\n options.uniques.forEach(function (unique) {\n var uniqueAgrs = {\n target: options.target || options.name,\n name: unique.name,\n columns: unique.columns\n };\n metadataArgsStorage.uniques.push(uniqueAgrs);\n });\n }\n // add check metadata args from the schema\n if (options.checks) {\n options.checks.forEach(function (check) {\n var checkAgrs = {\n target: options.target || options.name,\n name: check.name,\n expression: check.expression\n };\n metadataArgsStorage.checks.push(checkAgrs);\n });\n }\n // add exclusion metadata args from the schema\n if (options.exclusions) {\n options.exclusions.forEach(function (exclusion) {\n var exclusionArgs = {\n target: options.target || options.name,\n name: exclusion.name,\n expression: exclusion.expression\n };\n metadataArgsStorage.exclusions.push(exclusionArgs);\n });\n }\n });\n return metadataArgsStorage;\n };\n return EntitySchemaTransformer;\n}());\nexport { EntitySchemaTransformer };\n\n//# sourceMappingURL=EntitySchemaTransformer.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { importClassesFromDirectories } from \"../util/DirectoryExportedClassesLoader\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { getFromContainer } from \"../container\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { EntityMetadataBuilder } from \"../metadata-builder/EntityMetadataBuilder\";\nimport { EntitySchemaTransformer } from \"../entity-schema/EntitySchemaTransformer\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Builds migration instances, subscriber instances and entity metadatas for the given classes.\n */\nvar ConnectionMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ConnectionMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds migration instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildMigrations = function (migrations) {\n var _a = __read(OrmUtils.splitClassesAndStrings(migrations), 2), migrationClasses = _a[0], migrationDirectories = _a[1];\n var allMigrationClasses = __spreadArray(__spreadArray([], __read(migrationClasses)), __read(importClassesFromDirectories(this.connection.logger, migrationDirectories)));\n return allMigrationClasses.map(function (migrationClass) { return getFromContainer(migrationClass); });\n };\n /**\n * Builds subscriber instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildSubscribers = function (subscribers) {\n var _a = __read(OrmUtils.splitClassesAndStrings(subscribers || []), 2), subscriberClasses = _a[0], subscriberDirectories = _a[1];\n var allSubscriberClasses = __spreadArray(__spreadArray([], __read(subscriberClasses)), __read(importClassesFromDirectories(this.connection.logger, subscriberDirectories)));\n return getMetadataArgsStorage()\n .filterSubscribers(allSubscriberClasses)\n .map(function (metadata) { return getFromContainer(metadata.target); });\n };\n /**\n * Builds entity metadatas for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildEntityMetadatas = function (entities) {\n // todo: instead we need to merge multiple metadata args storages\n var _a = __read(OrmUtils.splitClassesAndStrings(entities || []), 2), entityClassesOrSchemas = _a[0], entityDirectories = _a[1];\n var entityClasses = entityClassesOrSchemas.filter(function (entityClass) { return (entityClass instanceof EntitySchema) === false; });\n var entitySchemas = entityClassesOrSchemas.filter(function (entityClass) { return entityClass instanceof EntitySchema; });\n var allEntityClasses = __spreadArray(__spreadArray([], __read(entityClasses)), __read(importClassesFromDirectories(this.connection.logger, entityDirectories)));\n allEntityClasses.forEach(function (entityClass) {\n if (entityClass instanceof EntitySchema) {\n entitySchemas.push(entityClass);\n allEntityClasses.slice(allEntityClasses.indexOf(entityClass), 1);\n }\n });\n var decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);\n var metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);\n var schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();\n return __spreadArray(__spreadArray([], __read(decoratorEntityMetadatas)), __read(schemaEntityMetadatas));\n };\n return ConnectionMetadataBuilder;\n}());\nexport { ConnectionMetadataBuilder };\n\n//# sourceMappingURL=ConnectionMetadataBuilder.js.map\n","/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and does not use syntax highlighting.\n */\nvar SimpleConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SimpleConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n SimpleConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query\" + \": \" + sql);\n }\n };\n /**\n * Logs query that is failed.\n */\n SimpleConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query failed: \" + sql);\n console.log(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n SimpleConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query is slow: \" + sql);\n console.log(\"execution time: \" + time);\n };\n /**\n * Logs events from the schema build process.\n */\n SimpleConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n console.log(message);\n }\n };\n /**\n * Logs events from the migrations run process.\n */\n SimpleConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n console.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n SimpleConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n console.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n console.info(message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(message);\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n SimpleConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return SimpleConsoleLogger;\n}());\nexport { SimpleConsoleLogger };\n\n//# sourceMappingURL=SimpleConsoleLogger.js.map\n","import { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and use syntax highlighting.\n */\nvar AdvancedConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AdvancedConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n AdvancedConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logInfo(\"query:\", PlatformTools.highlightSql(sql));\n }\n };\n /**\n * Logs query that is failed.\n */\n AdvancedConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logError(\"query failed:\", PlatformTools.highlightSql(sql));\n PlatformTools.logError(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n AdvancedConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logWarn(\"query is slow:\", PlatformTools.highlightSql(sql));\n PlatformTools.logWarn(\"execution time:\", time);\n };\n /**\n * Logs events from the schema build process.\n */\n AdvancedConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n PlatformTools.log(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n AdvancedConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n PlatformTools.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n AdvancedConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n PlatformTools.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n PlatformTools.logInfo(\"INFO:\", message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(PlatformTools.warn(message));\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n AdvancedConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return AdvancedConsoleLogger;\n}());\nexport { AdvancedConsoleLogger };\n\n//# sourceMappingURL=AdvancedConsoleLogger.js.map\n","import { __extends } from \"tslib\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger logs everything into ormlogs.log file.\n */\nvar DummyLogger = /** @class */ (function () {\n function DummyLogger() {\n }\n /**\n * Logs query and parameters used in it.\n */\n DummyLogger.prototype.logQuery = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is failed.\n */\n DummyLogger.prototype.logQueryError = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is slow.\n */\n DummyLogger.prototype.logQuerySlow = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the schema build process.\n */\n DummyLogger.prototype.logSchemaBuild = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the migrations run process.\n */\n DummyLogger.prototype.logMigration = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n DummyLogger.prototype.log = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n return DummyLogger;\n}());\nexport { DummyLogger };\nvar FileLogger = /** @class */ (function (_super) {\n __extends(FileLogger, _super);\n function FileLogger() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FileLogger;\n}(DummyLogger));\nexport { FileLogger };\n\n//# sourceMappingURL=BrowserFileLoggerDummy.js.map\n","import debug from \"debug\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM via debug library.\n */\nvar DebugLogger = /** @class */ (function () {\n function DebugLogger() {\n this.debugQueryLog = debug(\"typeorm:query:log\");\n this.debugQueryError = debug(\"typeorm:query:error\");\n this.debugQuerySlow = debug(\"typeorm:query:slow\");\n this.debugSchemaBuild = debug(\"typeorm:schema\");\n this.debugMigration = debug(\"typeorm:migration\");\n this.debugLog = debug(\"typeorm:log\");\n this.debugInfo = debug(\"typeorm:info\");\n this.debugWarn = debug(\"typeorm:warn\");\n }\n /**\n * Logs query and parameters used in it.\n */\n DebugLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.debugQueryLog.enabled) {\n this.debugQueryLog(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryLog(\"parameters:\", parameters);\n }\n }\n };\n /**\n * Logs query that failed.\n */\n DebugLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.debugQueryError.enabled) {\n this.debugQueryError(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryError(\"parameters:\", parameters);\n }\n this.debugQueryError(\"error: \", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n DebugLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n if (this.debugQuerySlow.enabled) {\n this.debugQuerySlow(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQuerySlow(\"parameters:\", parameters);\n }\n this.debugQuerySlow(\"execution time:\", time);\n }\n };\n /**\n * Logs events from the schema build process.\n */\n DebugLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.debugSchemaBuild.enabled) {\n this.debugSchemaBuild(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n DebugLogger.prototype.logMigration = function (message, queryRunner) {\n if (this.debugMigration.enabled) {\n this.debugMigration(message);\n }\n };\n /**\n * Perform logging using given logger.\n * Log has its own level and message.\n */\n DebugLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.debugLog.enabled) {\n this.debugLog(message);\n }\n break;\n case \"info\":\n if (this.debugInfo.enabled) {\n this.debugInfo(message);\n }\n break;\n case \"warn\":\n if (this.debugWarn.enabled) {\n this.debugWarn(message);\n }\n break;\n }\n };\n return DebugLogger;\n}());\nexport { DebugLogger };\n\n//# sourceMappingURL=DebugLogger.js.map\n","import { SimpleConsoleLogger } from \"./SimpleConsoleLogger\";\nimport { AdvancedConsoleLogger } from \"./AdvancedConsoleLogger\";\nimport { FileLogger } from \"./FileLogger\";\nimport { DebugLogger } from \"./DebugLogger\";\n/**\n * Helps to create logger instances.\n */\nvar LoggerFactory = /** @class */ (function () {\n function LoggerFactory() {\n }\n /**\n * Creates a new logger depend on a given connection's driver.\n */\n LoggerFactory.prototype.create = function (logger, options) {\n if (logger instanceof Object)\n return logger;\n if (logger) {\n switch (logger) {\n case \"simple-console\":\n return new SimpleConsoleLogger(options);\n case \"file\":\n return new FileLogger(options);\n case \"advanced-console\":\n return new AdvancedConsoleLogger(options);\n case \"debug\":\n return new DebugLogger();\n }\n }\n return new AdvancedConsoleLogger(options);\n };\n return LoggerFactory;\n}());\nexport { LoggerFactory };\n\n//# sourceMappingURL=LoggerFactory.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Caches query result into Redis database.\n */\nvar RedisQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RedisQueryResultCache(connection, clientType) {\n this.connection = connection;\n this.clientType = clientType;\n this.redis = this.loadRedis();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n RedisQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var cacheOptions;\n return __generator(this, function (_a) {\n cacheOptions = this.connection.options.cache;\n if (this.clientType === \"redis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = this.redis.createClient(cacheOptions.options);\n }\n else {\n this.client = this.redis.createClient();\n }\n }\n else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options);\n }\n else {\n this.client = new this.redis();\n }\n }\n else if (this.clientType === \"ioredis/cluster\") {\n if (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {\n this.client = new this.redis.Cluster(cacheOptions.options);\n }\n else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {\n this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);\n }\n else {\n throw new Error(\"options.startupNodes required for \" + this.clientType + \".\");\n }\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects the connection\n */\n RedisQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.quit(function (err, result) {\n if (err)\n return fail(err);\n ok();\n _this.client = undefined;\n });\n })];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n RedisQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n RedisQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n var _this = this;\n return new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.get(options.identifier, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else if (options.query) {\n _this.client.get(options.query, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else {\n ok(undefined);\n }\n });\n };\n /**\n * Checks if cache is expired or not.\n */\n RedisQueryResultCache.prototype.isExpired = function (savedCache) {\n return (savedCache.time + savedCache.duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n RedisQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.set(options.identifier, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n else if (options.query) {\n _this.client.set(options.query, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n })];\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n RedisQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.flushdb(function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n })];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n RedisQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n return _this.deleteKey(identifier);\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes a single key from redis database.\n */\n RedisQueryResultCache.prototype.deleteKey = function (key) {\n var _this = this;\n return new Promise(function (ok, fail) {\n _this.client.del(key, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n });\n };\n /**\n * Loads redis dependency.\n */\n RedisQueryResultCache.prototype.loadRedis = function () {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\");\n }\n else {\n return PlatformTools.load(this.clientType);\n }\n }\n catch (e) {\n throw new Error(\"Cannot use cache because \" + this.clientType + \" is not installed. Please run \\\"npm i \" + this.clientType + \" --save\\\".\");\n }\n };\n return RedisQueryResultCache;\n}());\nexport { RedisQueryResultCache };\n\n//# sourceMappingURL=RedisQueryResultCache.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nvar DbQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DbQueryResultCache(connection) {\n this.connection = connection;\n var options = this.connection.driver.options;\n var cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n var cacheTableName = cacheOptions.tableName || \"query-result-cache\";\n this.queryResultCacheTable = this.connection.driver.buildTableName(cacheTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n DbQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects with given cache provider.\n */\n DbQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n DbQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var driver, tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n driver = this.connection.driver;\n return [4 /*yield*/, queryRunner.hasTable(this.queryResultCacheTable)];\n case 1:\n tableExist = _a.sent();\n if (tableExist)\n return [2 /*return*/];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheId }),\n generationStrategy: \"increment\",\n isGenerated: true\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheIdentifier }),\n isNullable: true\n },\n {\n name: \"time\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheTime }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"duration\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheDuration }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"query\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheQuery }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"result\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheResult }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n DbQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n queryRunner = this.getQueryRunner(queryRunner);\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\");\n if (options.identifier) {\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"identifier\") + \" = :identifier\")\n .setParameters({ identifier: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.identifier, \"nvarchar\") : options.identifier })\n .getRawOne();\n }\n else if (options.query) {\n if (this.connection.driver instanceof OracleDriver) {\n return qb\n .where(\"dbms_lob.compare(\" + qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \", :query) = 0\", { query: options.query })\n .getRawOne();\n }\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \" = :query\")\n .setParameters({ query: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.query, \"nvarchar\") : options.query })\n .getRawOne();\n }\n return Promise.resolve(undefined);\n };\n /**\n * Checks if cache is expired or not.\n */\n DbQueryResultCache.prototype.isExpired = function (savedCache) {\n var duration = typeof savedCache.duration === \"string\" ? parseInt(savedCache.duration) : savedCache.duration;\n return ((typeof savedCache.time === \"string\" ? parseInt(savedCache.time) : savedCache.time) + duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n DbQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var insertedValues, qb, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n insertedValues = options;\n if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n };\n }\n if (!(savedCache && savedCache.identifier)) return [3 /*break*/, 2];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n qb.where(qb.escape(\"identifier\") + \" = :condition\", { condition: insertedValues.identifier });\n return [4 /*yield*/, qb.execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 6];\n case 2:\n if (!(savedCache && savedCache.query)) return [3 /*break*/, 4];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n if (this.connection.driver instanceof OracleDriver) {\n qb.where(\"dbms_lob.compare(\\\"query\\\", :condition) = 0\", { condition: insertedValues.query });\n }\n else {\n qb.where(qb.escape(\"query\") + \" = :condition\", { condition: insertedValues.query });\n }\n return [4 /*yield*/, qb.execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 6];\n case 4: // otherwise insert\n return [4 /*yield*/, queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n DbQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.getQueryRunner(queryRunner).clearTable(this.queryResultCacheTable)];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n DbQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n var qb = _this.getQueryRunner(queryRunner).manager.createQueryBuilder();\n return qb.delete()\n .from(_this.queryResultCacheTable)\n .where(qb.escape(\"identifier\") + \" = :identifier\", { identifier: identifier })\n .execute();\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets a query runner to work with.\n */\n DbQueryResultCache.prototype.getQueryRunner = function (queryRunner) {\n if (queryRunner)\n return queryRunner;\n return this.connection.createQueryRunner();\n };\n return DbQueryResultCache;\n}());\nexport { DbQueryResultCache };\n\n//# sourceMappingURL=DbQueryResultCache.js.map\n","import { RedisQueryResultCache } from \"./RedisQueryResultCache\";\nimport { DbQueryResultCache } from \"./DbQueryResultCache\";\n/**\n * Caches query result into Redis database.\n */\nvar QueryResultCacheFactory = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryResultCacheFactory(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query result cache based on connection options.\n */\n QueryResultCacheFactory.prototype.create = function () {\n if (!this.connection.options.cache)\n throw new Error(\"To use cache you need to enable it in connection options by setting cache: true or providing some caching options. Example: { host: ..., username: ..., cache: true }\");\n var cache = this.connection.options.cache;\n if (cache.provider && typeof cache.provider === \"function\") {\n return cache.provider(this.connection);\n }\n if (cache.type === \"redis\" || cache.type === \"ioredis\" || cache.type === \"ioredis/cluster\") {\n return new RedisQueryResultCache(this.connection, cache.type);\n }\n else {\n return new DbQueryResultCache(this.connection);\n }\n };\n return QueryResultCacheFactory;\n}());\nexport { QueryResultCacheFactory };\n\n//# sourceMappingURL=QueryResultCacheFactory.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nvar RelationLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationLoader(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation data for the given entity and its relation.\n */\n RelationLoader.prototype.load = function (relation, entityOrEntities, queryRunner) {\n if (queryRunner && queryRunner.isReleased)\n queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n }\n else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n };\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n RelationLoader.prototype.loadManyToOneOrOneToOneOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var columns = relation.entityMetadata.primaryColumns;\n var joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation.joinColumns;\n var conditions = joinColumns.map(function (joinColumn) {\n return relation.entityMetadata.name + \".\" + joinColumn.propertyName + \" = \" + relation.propertyName + \".\" + joinColumn.referencedColumn.propertyName;\n }).join(\" AND \");\n var joinAliasName = relation.entityMetadata.name;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target, joinAliasName, conditions);\n if (columns.length === 1) {\n qb.where(joinAliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (joinAliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n RelationLoader.prototype.loadOneToManyOrOneToOneNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var aliasName = relation.propertyName;\n var columns = relation.inverseRelation.joinColumns;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation.entityMetadata.target, aliasName);\n if (columns.length === 1) {\n qb.where(aliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (aliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n RelationLoader.prototype.loadManyToManyOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" IN (:...\" + joinColumn.propertyName + \")\";\n });\n var inverseJoinColumnConditions = relation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \"=\" + mainAlias + \".\" + inverseJoinColumn.referencedColumn.propertyName;\n });\n var parameters = relation.joinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n RelationLoader.prototype.loadManyToManyNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" = \" + mainAlias + \".\" + joinColumn.referencedColumn.propertyName;\n });\n var inverseJoinColumnConditions = relation.inverseRelation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \" IN (:...\" + inverseJoinColumn.propertyName + \")\";\n });\n var parameters = relation.inverseRelation.inverseJoinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n RelationLoader.prototype.enableLazyLoad = function (relation, entity, queryRunner) {\n var relationLoader = this;\n var dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n var promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n var resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n var setData = function (entity, value) {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n var setPromise = function (entity, value) {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n function (result) { return entity[promiseIndex] === value ? setData(entity, result) : result; });\n return value;\n };\n Object.defineProperty(entity, relation.propertyName, {\n get: function () {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n var loader = relationLoader.load(relation, this, queryRunner).then(function (result) { return relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result; });\n return setPromise(this, loader);\n },\n set: function (value) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n }\n else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n };\n return RelationLoader;\n}());\nexport { RelationLoader };\n\n//# sourceMappingURL=RelationLoader.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\n/**\n * Loads relation ids for the given entities.\n */\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection) {\n this.connection = connection;\n }\n /**\n * Loads relation ids of the given entity or entities.\n */\n RelationIdLoader.prototype.load = function (relationOrTarget, relationNameOrEntities, entitiesOrRelatedEntities, maybeRelatedEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, entities, relatedEntities, entityMetadata;\n return __generator(this, function (_a) {\n if (relationOrTarget instanceof RelationMetadata) {\n relation = relationOrTarget;\n entities = Array.isArray(relationNameOrEntities) ? relationNameOrEntities : [relationNameOrEntities];\n relatedEntities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : (entitiesOrRelatedEntities ? [entitiesOrRelatedEntities] : undefined);\n }\n else {\n entityMetadata = this.connection.getMetadata(relationOrTarget);\n relation = entityMetadata.findRelationWithPropertyPath(relationNameOrEntities);\n if (!relation)\n throw new Error(\"Relation \\\"\" + relation + \"\\\" was not found in \\\"\" + entityMetadata.name + \"\\\".\");\n entities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : [entitiesOrRelatedEntities];\n relatedEntities = Array.isArray(maybeRelatedEntities) ? maybeRelatedEntities : (maybeRelatedEntities ? [maybeRelatedEntities] : undefined);\n }\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return [2 /*return*/, this.loadForManyToMany(relation, entities, relatedEntities)];\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return [2 /*return*/, this.loadForManyToOneAndOneToOneOwner(relation, entities, relatedEntities)];\n }\n else { // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return [2 /*return*/, this.loadForOneToManyAndOneToOneNotOwner(relation, entities, relatedEntities)];\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n RelationIdLoader.prototype.loadManyToManyRelationIdsAndGroup = function (relation, entitiesOrEntities, relatedEntityOrEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var isMany, entities, relationIds, relatedEntities, columns, inverseColumns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isMany = relation.isManyToMany || relation.isOneToMany;\n entities = Array.isArray(entitiesOrEntities) ? entitiesOrEntities : [entitiesOrEntities];\n if (!!relatedEntityOrEntities) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.relationLoader.load(relation, entitiesOrEntities)];\n case 1:\n relatedEntityOrEntities = _a.sent();\n if (!relatedEntityOrEntities.length)\n return [2 /*return*/, entities.map(function (entity) { return ({ entity: entity, related: isMany ? [] : undefined }); })];\n _a.label = 2;\n case 2: return [4 /*yield*/, this.load(relation, entitiesOrEntities, relatedEntityOrEntities)];\n case 3:\n relationIds = _a.sent();\n relatedEntities = Array.isArray(relatedEntityOrEntities) ? relatedEntityOrEntities : [relatedEntityOrEntities];\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.entityMetadata.primaryColumns;\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.entityMetadata.primaryColumns;\n inverseColumns = relation.inverseRelation.joinColumns.map(function (column) { return column.referencedColumn; });\n }\n else {\n }\n return [2 /*return*/, entities.map(function (entity) {\n var group = { entity: entity, related: isMany ? [] : undefined };\n relationIds.forEach(function (relationId) {\n var entityMatched = inverseColumns.every(function (column) {\n return column.getEntityValue(entity) === relationId[column.entityMetadata.name + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (entityMatched) {\n relatedEntities.forEach(function (relatedEntity) {\n var relatedEntityMatched = columns.every(function (column) {\n return column.getEntityValue(relatedEntity) === relationId[column.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (relatedEntityMatched) {\n if (isMany) {\n group.related.push(relatedEntity);\n }\n else {\n group.related = relatedEntity;\n }\n }\n });\n }\n });\n return group;\n })];\n }\n });\n });\n };\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise {\n\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation ids for the many-to-many relation.\n */\n RelationIdLoader.prototype.loadForManyToMany = function (relation, entities, relatedEntities) {\n var junctionMetadata = relation.junctionEntityMetadata;\n var mainAlias = junctionMetadata.name;\n var columns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n var inverseColumns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n var qb = this.connection.createQueryBuilder();\n // select all columns from junction table\n junctionMetadata.ownerColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n junctionMetadata.inverseColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add conditions for the given entities\n var condition1 = \"\";\n if (columns.length === 1) {\n qb.setParameter(\"values1\", entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n condition1 = mainAlias + \".\" + columns[0].propertyPath + \" IN (:...values1)\"; // todo: use ANY for postgres\n }\n else {\n condition1 = \"(\" + entities.map(function (entity, entityIndex) {\n return columns.map(function (column) {\n var paramName = \"entity1_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n // add conditions for the given inverse entities\n var condition2 = \"\";\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n qb.setParameter(\"values2\", relatedEntities.map(function (entity) { return inverseColumns[0].referencedColumn.getEntityValue(entity); }));\n condition2 = mainAlias + \".\" + inverseColumns[0].propertyPath + \" IN (:...values2)\"; // todo: use ANY for postgres\n }\n else {\n condition2 = \"(\" + relatedEntities.map(function (entity, entityIndex) {\n return inverseColumns.map(function (column) {\n var paramName = \"entity2_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n }\n // execute query\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"))\n .getRawMany();\n };\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n RelationIdLoader.prototype.loadForManyToOneAndOneToOneOwner = function (relation, entities, relatedEntities) {\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.entityMetadata.primaryColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.entityMetadata.primaryColumns[0].getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.entityMetadata.primaryColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n RelationIdLoader.prototype.loadForOneToManyAndOneToOneNotOwner = function (relation, entities, relatedEntities) {\n relation = relation.inverseRelation;\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + relation.inverseRelation.propertyPath.replace(\".\", \"_\") + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.joinColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.joinColumns[0].referencedColumn.getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.joinColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.joinColumns.map(function (joinColumn, joinColumnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + joinColumnIndex;\n qb.setParameter(paramName, joinColumn.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + joinColumn.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { DefaultNamingStrategy } from \"../naming-strategy/DefaultNamingStrategy\";\nimport { CannotExecuteNotConnectedError } from \"../error/CannotExecuteNotConnectedError\";\nimport { CannotConnectAlreadyConnectedError } from \"../error/CannotConnectAlreadyConnectedError\";\nimport { EntityMetadataNotFoundError } from \"../error/EntityMetadataNotFoundError\";\nimport { MigrationExecutor } from \"../migration/MigrationExecutor\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoEntityManager } from \"../entity-manager/MongoEntityManager\";\nimport { EntityMetadataValidator } from \"../metadata-builder/EntityMetadataValidator\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { EntityManagerFactory } from \"../entity-manager/EntityManagerFactory\";\nimport { DriverFactory } from \"../driver/DriverFactory\";\nimport { ConnectionMetadataBuilder } from \"./ConnectionMetadataBuilder\";\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\";\nimport { LoggerFactory } from \"../logger/LoggerFactory\";\nimport { QueryResultCacheFactory } from \"../cache/QueryResultCacheFactory\";\nimport { SqljsEntityManager } from \"../entity-manager/SqljsEntityManager\";\nimport { RelationLoader } from \"../query-builder/RelationLoader\";\nimport { RelationIdLoader } from \"../query-builder/RelationIdLoader\";\nimport { EntitySchema } from \"../\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\n/**\n * Connection is a single database ORM connection to a specific database.\n * Its not required to be a database connection, depend on database type it can create connection pool.\n * You can have multiple connections to multiple databases in your application.\n */\nvar Connection = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Connection(options) {\n /**\n * Migration instances that are registered for this connection.\n */\n this.migrations = [];\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n this.subscribers = [];\n /**\n * All entity metadatas that are registered for this connection.\n */\n this.entityMetadatas = [];\n this.name = options.name || \"default\";\n this.options = options;\n this.logger = new LoggerFactory().create(this.options.logger, this.options.logging);\n this.driver = new DriverFactory().create(this);\n this.manager = this.createEntityManager();\n this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();\n this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;\n this.relationLoader = new RelationLoader(this);\n this.relationIdLoader = new RelationIdLoader(this);\n this.isConnected = false;\n }\n Object.defineProperty(Connection.prototype, \"mongoManager\", {\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n */\n get: function () {\n if (!(this.manager instanceof MongoEntityManager))\n throw new Error(\"MongoEntityManager is only available for MongoDB databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Connection.prototype, \"sqljsManager\", {\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n */\n get: function () {\n if (!(this.manager instanceof SqljsEntityManager))\n throw new Error(\"SqljsEntityManager is only available for Sqljs databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n Connection.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isConnected)\n throw new CannotConnectAlreadyConnectedError(this.name);\n // connect to the database via its driver\n return [4 /*yield*/, this.driver.connect()];\n case 1:\n // connect to the database via its driver\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.connect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n // set connected status for the current connection\n ObjectUtils.assign(this, { isConnected: true });\n _a.label = 4;\n case 4:\n _a.trys.push([4, 12, , 14]);\n // build all metadatas registered in the current connection\n this.buildMetadatas();\n return [4 /*yield*/, this.driver.afterConnect()];\n case 5:\n _a.sent();\n if (!this.options.dropSchema) return [3 /*break*/, 7];\n return [4 /*yield*/, this.dropDatabase()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7:\n if (!this.options.synchronize) return [3 /*break*/, 9];\n return [4 /*yield*/, this.synchronize()];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!this.options.migrationsRun) return [3 /*break*/, 11];\n return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 14];\n case 12:\n error_1 = _a.sent();\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n return [4 /*yield*/, this.close()];\n case 13:\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n _a.sent();\n throw error_1;\n case 14: return [2 /*return*/, this];\n }\n });\n });\n };\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n Connection.prototype.close = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n return [4 /*yield*/, this.driver.disconnect()];\n case 1:\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.disconnect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n ObjectUtils.assign(this, { isConnected: false });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n Connection.prototype.synchronize = function (dropBeforeSync) {\n if (dropBeforeSync === void 0) { dropBeforeSync = false; }\n return __awaiter(this, void 0, void 0, function () {\n var schemaBuilder;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n if (!dropBeforeSync) return [3 /*break*/, 2];\n return [4 /*yield*/, this.dropDatabase()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n schemaBuilder = this.driver.createSchemaBuilder();\n return [4 /*yield*/, schemaBuilder.build()];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n Connection.prototype.dropDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, databases_2, databases_1, databases_1_1, database, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.createQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 13, 15]);\n if (!(this.driver instanceof SqlServerDriver || this.driver instanceof MysqlDriver || this.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 10];\n databases_2 = this.driver.database ? [this.driver.database] : [];\n this.entityMetadatas.forEach(function (metadata) {\n if (metadata.database && databases_2.indexOf(metadata.database) === -1)\n databases_2.push(metadata.database);\n });\n _b.label = 2;\n case 2:\n _b.trys.push([2, 7, 8, 9]);\n databases_1 = __values(databases_2), databases_1_1 = databases_1.next();\n _b.label = 3;\n case 3:\n if (!!databases_1_1.done) return [3 /*break*/, 6];\n database = databases_1_1.value;\n return [4 /*yield*/, queryRunner.clearDatabase(database)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n databases_1_1 = databases_1.next();\n return [3 /*break*/, 3];\n case 6: return [3 /*break*/, 9];\n case 7:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 9];\n case 8:\n try {\n if (databases_1_1 && !databases_1_1.done && (_a = databases_1.return)) _a.call(databases_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 9: return [3 /*break*/, 12];\n case 10: return [4 /*yield*/, queryRunner.clearDatabase()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [3 /*break*/, 15];\n case 13: return [4 /*yield*/, queryRunner.release()];\n case 14:\n _b.sent();\n return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.runMigrations = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor, successMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.executePendingMigrations()];\n case 1:\n successMigrations = _a.sent();\n return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.undoLastMigration = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.undoLastMigration()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n Connection.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected) {\n throw new CannotExecuteNotConnectedError(this.name);\n }\n migrationExecutor = new MigrationExecutor(this);\n return [4 /*yield*/, migrationExecutor.showMigrations()];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n */\n Connection.prototype.hasMetadata = function (target) {\n return !!this.findMetadata(target);\n };\n /**\n * Gets entity metadata for the given entity class or schema name.\n */\n Connection.prototype.getMetadata = function (target) {\n var metadata = this.findMetadata(target);\n if (!metadata)\n throw new EntityMetadataNotFoundError(target);\n return metadata;\n };\n /**\n * Gets repository for the given entity.\n */\n Connection.prototype.getRepository = function (target) {\n return this.manager.getRepository(target);\n };\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.\n */\n Connection.prototype.getTreeRepository = function (target) {\n return this.manager.getTreeRepository(target);\n };\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n */\n Connection.prototype.getMongoRepository = function (target) {\n if (!(this.driver instanceof MongoDriver))\n throw new Error(\"You can use getMongoRepository only for MongoDB connections.\");\n return this.manager.getRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n Connection.prototype.getCustomRepository = function (customRepository) {\n return this.manager.getCustomRepository(customRepository);\n };\n Connection.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.manager.transaction(isolationOrRunInTransaction, runInTransactionParam)];\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n Connection.prototype.query = function (query, parameters, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var usedQueryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this instanceof MongoEntityManager)\n throw new Error(\"Queries aren't supported by MongoDB.\");\n if (queryRunner && queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n usedQueryRunner = queryRunner || this.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, usedQueryRunner.query(query, parameters)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, usedQueryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Connection.prototype.createQueryBuilder = function (entityOrRunner, alias, queryRunner) {\n if (this instanceof MongoEntityManager)\n throw new Error(\"Query Builder is not supported by MongoDB.\");\n if (alias) {\n var metadata = this.getMetadata(entityOrRunner);\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias);\n }\n else {\n return new SelectQueryBuilder(this, entityOrRunner);\n }\n };\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n */\n Connection.prototype.createQueryRunner = function (mode) {\n if (mode === void 0) { mode = \"master\"; }\n var queryRunner = this.driver.createQueryRunner(mode);\n var manager = this.createEntityManager(queryRunner);\n Object.assign(queryRunner, { manager: manager });\n return queryRunner;\n };\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n */\n Connection.prototype.getManyToManyMetadata = function (entityTarget, relationPropertyPath) {\n var relationMetadata = this.getMetadata(entityTarget).findRelationWithPropertyPath(relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \\\"\" + relationPropertyPath + \"\\\" was not found in \" + entityTarget + \" entity.\");\n if (!relationMetadata.isManyToMany)\n throw new Error(\"Relation \\\"\" + entityTarget + \"#\" + relationPropertyPath + \"\\\" does not have a many-to-many relationship.\" +\n \"You can use this method only on many-to-many relations.\");\n return relationMetadata.junctionEntityMetadata;\n };\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n */\n Connection.prototype.createEntityManager = function (queryRunner) {\n return new EntityManagerFactory().create(this, queryRunner);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n */\n Connection.prototype.findMetadata = function (target) {\n return this.entityMetadatas.find(function (metadata) {\n if (metadata.target === target)\n return true;\n if (target instanceof EntitySchema) {\n return metadata.name === target.options.name;\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n return metadata.tablePath === target;\n }\n else {\n return metadata.name === target || metadata.tableName === target;\n }\n }\n return false;\n });\n };\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n Connection.prototype.buildMetadatas = function () {\n var connectionMetadataBuilder = new ConnectionMetadataBuilder(this);\n var entityMetadataValidator = new EntityMetadataValidator();\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n var subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);\n ObjectUtils.assign(this, { subscribers: subscribers });\n // build entity metadatas\n var entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);\n ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });\n // create migration instances\n var migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);\n ObjectUtils.assign(this, { migrations: migrations });\n this.driver.database = this.getDatabaseName();\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== \"view\"; }), this.driver);\n };\n // This database name property is nested for replication configs.\n Connection.prototype.getDatabaseName = function () {\n var options = this.options;\n switch (options.type) {\n case \"mysql\":\n case \"mariadb\":\n case \"postgres\":\n case \"cockroachdb\":\n case \"mssql\":\n case \"oracle\":\n return DriverUtils.buildDriverOptions(options.replication ? options.replication.master : options).database;\n case \"mongodb\":\n return DriverUtils.buildMongoDBDriverOptions(options).database;\n default:\n return DriverUtils.buildDriverOptions(options).database;\n }\n };\n return Connection;\n}());\nexport { Connection };\n\n//# sourceMappingURL=Connection.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to get connection that does not exist.\n */\nvar ConnectionNotFoundError = /** @class */ (function (_super) {\n __extends(ConnectionNotFoundError, _super);\n function ConnectionNotFoundError(name) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionNotFoundError\";\n Object.setPrototypeOf(_this, ConnectionNotFoundError.prototype);\n _this.message = \"Connection \\\"\" + name + \"\\\" was not found.\";\n return _this;\n }\n return ConnectionNotFoundError;\n}(Error));\nexport { ConnectionNotFoundError };\n\n//# sourceMappingURL=ConnectionNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to recreate connection with the same name, but previous connection was not closed yet.\n */\nvar AlreadyHasActiveConnectionError = /** @class */ (function (_super) {\n __extends(AlreadyHasActiveConnectionError, _super);\n function AlreadyHasActiveConnectionError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"AlreadyHasActiveConnectionError\";\n Object.setPrototypeOf(_this, AlreadyHasActiveConnectionError.prototype);\n _this.message = \"Cannot create a new connection named \\\"\" + connectionName + \"\\\", because connection with such name \" +\n \"already exist and it now has an active connection session.\";\n return _this;\n }\n return AlreadyHasActiveConnectionError;\n}(Error));\nexport { AlreadyHasActiveConnectionError };\n\n//# sourceMappingURL=AlreadyHasActiveConnectionError.js.map\n","import { Connection } from \"./Connection\";\nimport { ConnectionNotFoundError } from \"../error/ConnectionNotFoundError\";\nimport { AlreadyHasActiveConnectionError } from \"../error/AlreadyHasActiveConnectionError\";\n/**\n * ConnectionManager is used to store and manage multiple orm connections.\n * It also provides useful factory methods to simplify connection creation.\n */\nvar ConnectionManager = /** @class */ (function () {\n function ConnectionManager() {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * List of connections registered in this connection manager.\n */\n this.connections = [];\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if connection with the given name exist in the manager.\n */\n ConnectionManager.prototype.has = function (name) {\n return !!this.connections.find(function (connection) { return connection.name === name; });\n };\n /**\n * Gets registered connection with the given name.\n * If connection name is not given then it will get a default connection.\n * Throws error if connection with the given name was not found.\n */\n ConnectionManager.prototype.get = function (name) {\n if (name === void 0) { name = \"default\"; }\n var connection = this.connections.find(function (connection) { return connection.name === name; });\n if (!connection)\n throw new ConnectionNotFoundError(name);\n return connection;\n };\n /**\n * Creates a new connection based on the given connection options and registers it in the manager.\n * Connection won't be established, you'll need to manually call connect method to establish connection.\n */\n ConnectionManager.prototype.create = function (options) {\n // check if such connection is already registered\n var existConnection = this.connections.find(function (connection) { return connection.name === (options.name || \"default\"); });\n if (existConnection) {\n // if connection is registered and its not closed then throw an error\n if (existConnection.isConnected)\n throw new AlreadyHasActiveConnectionError(options.name || \"default\");\n // if its registered but closed then simply remove it from the manager\n this.connections.splice(this.connections.indexOf(existConnection), 1);\n }\n // create a new connection\n var connection = new Connection(options);\n this.connections.push(connection);\n return connection;\n };\n return ConnectionManager;\n}());\nexport { ConnectionManager };\n\n//# sourceMappingURL=ConnectionManager.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsEnvReader = /** @class */ (function () {\n function ConnectionOptionsEnvReader() {\n }\n ConnectionOptionsEnvReader.prototype.read = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsEnvReader;\n}());\nexport { ConnectionOptionsEnvReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsXmlReader = /** @class */ (function () {\n function ConnectionOptionsXmlReader() {\n }\n ConnectionOptionsXmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsXmlReader;\n}());\nexport { ConnectionOptionsXmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsYmlReader = /** @class */ (function () {\n function ConnectionOptionsYmlReader() {\n }\n ConnectionOptionsYmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsYmlReader;\n}());\nexport { ConnectionOptionsYmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsReader = /** @class */ (function () {\n function ConnectionOptionsReader() {\n }\n ConnectionOptionsReader.prototype.all = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.get = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.has = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsReader;\n}());\nexport { ConnectionOptionsReader };\n\n//# sourceMappingURL=BrowserConnectionOptionsReaderDummy.js.map\n","export {};\n\n//# sourceMappingURL=EntityTarget.js.map\n","export {};\n\n//# sourceMappingURL=ObjectType.js.map\n","export {};\n\n//# sourceMappingURL=ObjectLiteral.js.map\n","export {};\n\n//# sourceMappingURL=DeepPartial.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get method parameter's type.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar CannotReflectMethodParameterTypeError = /** @class */ (function (_super) {\n __extends(CannotReflectMethodParameterTypeError, _super);\n function CannotReflectMethodParameterTypeError(target, methodName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotReflectMethodParameterTypeError\";\n Object.setPrototypeOf(_this, CannotReflectMethodParameterTypeError.prototype);\n _this.message = \"Cannot get reflected type for a \\\"\" + methodName + \"\\\" method's parameter of \\\"\" + target.name + \"\\\" class. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application.\";\n return _this;\n }\n return CannotReflectMethodParameterTypeError;\n}(Error));\nexport { CannotReflectMethodParameterTypeError };\n\n//# sourceMappingURL=CannotReflectMethodParameterTypeError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to execute operation that requires connection to be established.\n */\nvar ConnectionIsNotSetError = /** @class */ (function (_super) {\n __extends(ConnectionIsNotSetError, _super);\n function ConnectionIsNotSetError(dbType) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionIsNotSetError\";\n Object.setPrototypeOf(_this, ConnectionIsNotSetError.prototype);\n _this.message = \"Connection with \" + dbType + \" database is not established. Check connection configuration.\";\n return _this;\n }\n return ConnectionIsNotSetError;\n}(Error));\nexport { ConnectionIsNotSetError };\n\n//# sourceMappingURL=ConnectionIsNotSetError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataAlreadyExistsError, _super);\n function MetadataAlreadyExistsError(metadataType, constructor, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata already exists for the class constructor \" + JSON.stringify(constructor) +\n (propertyName ? \" on property \" + propertyName : \". If you previously renamed or moved entity class, make sure\" +\n \" that compiled version of old entity class source wasn't left in the compiler output directory.\");\n return _this;\n }\n return MetadataAlreadyExistsError;\n}(Error));\nexport { MetadataAlreadyExistsError };\n\n//# sourceMappingURL=MetadataAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\nvar PrimaryColumnCannotBeNullableError = /** @class */ (function (_super) {\n __extends(PrimaryColumnCannotBeNullableError, _super);\n function PrimaryColumnCannotBeNullableError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"PrimaryColumnCannotBeNullableError\";\n Object.setPrototypeOf(_this, PrimaryColumnCannotBeNullableError.prototype);\n _this.message = \"Primary column \" + object.constructor.name + \"#\" + propertyName + \" cannot be nullable. \" +\n \"Its not allowed for primary keys. Try to remove nullable option.\";\n return _this;\n }\n return PrimaryColumnCannotBeNullableError;\n}(Error));\nexport { PrimaryColumnCannotBeNullableError };\n\n//# sourceMappingURL=PrimaryColumnCannotBeNullableError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access repository before connection is established.\n */\nvar NoConnectionForRepositoryError = /** @class */ (function (_super) {\n __extends(NoConnectionForRepositoryError, _super);\n function NoConnectionForRepositoryError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NoConnectionForRepositoryError\";\n Object.setPrototypeOf(_this, NoConnectionForRepositoryError.prototype);\n _this.message = \"Cannot get a Repository for \\\"\" + connectionName + \" connection, because connection with the database \" +\n \"is not established yet. Call connection#connect method to establish connection.\";\n return _this;\n }\n return NoConnectionForRepositoryError;\n}(Error));\nexport { NoConnectionForRepositoryError };\n\n//# sourceMappingURL=NoConnectionForRepositoryError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableIsNotAllowedError, _super);\n function UsingJoinTableIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableIsNotAllowedError.prototype);\n _this.message = \"Using JoinTable on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n (entityMetadata.name + \"#\" + relation.propertyName + \" has \" + relation.relationType + \" relation, \") +\n \"however you can use JoinTable only on many-to-many relations.\";\n return _this;\n }\n return UsingJoinTableIsNotAllowedError;\n}(Error));\nexport { UsingJoinTableIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinTableIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinColumnError = /** @class */ (function (_super) {\n __extends(MissingJoinColumnError, _super);\n function MissingJoinColumnError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinColumnError\";\n Object.setPrototypeOf(_this, MissingJoinColumnError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinColumn is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" one-to-one relationship. \") +\n \"You need to put JoinColumn decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinColumn is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" one-to-one relationship. \" +\n \"You need to put JoinColumn decorator on it.\";\n }\n return _this;\n }\n return MissingJoinColumnError;\n}(Error));\nexport { MissingJoinColumnError };\n\n//# sourceMappingURL=MissingJoinColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access entity manager before connection is established.\n */\nvar CannotGetEntityManagerNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotGetEntityManagerNotConnectedError, _super);\n function CannotGetEntityManagerNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotGetEntityManagerNotConnectedError\";\n Object.setPrototypeOf(_this, CannotGetEntityManagerNotConnectedError.prototype);\n _this.message = \"Cannot get entity manager for \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotGetEntityManagerNotConnectedError;\n}(Error));\nexport { CannotGetEntityManagerNotConnectedError };\n\n//# sourceMappingURL=CannotGetEntityManagerNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataWithSuchNameAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataWithSuchNameAlreadyExistsError, _super);\n function MetadataWithSuchNameAlreadyExistsError(metadataType, name) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataWithSuchNameAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataWithSuchNameAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata with such name \" + name + \" already exists. \" +\n \"Do you apply decorator twice? Or maybe try to change a name?\";\n return _this;\n }\n return MetadataWithSuchNameAlreadyExistsError;\n}(Error));\nexport { MetadataWithSuchNameAlreadyExistsError };\n\n//# sourceMappingURL=MetadataWithSuchNameAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use naming strategy that does not exist.\n */\nvar NamingStrategyNotFoundError = /** @class */ (function (_super) {\n __extends(NamingStrategyNotFoundError, _super);\n function NamingStrategyNotFoundError(strategyName, connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NamingStrategyNotFoundError\";\n Object.setPrototypeOf(_this, NamingStrategyNotFoundError.prototype);\n var name = strategyName instanceof Function ? strategyName.name : strategyName;\n _this.message = \"Naming strategy \\\"\" + name + \"\\\" was not found. Looks like this naming strategy does not \" +\n (\"exist or it was not registered in current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return NamingStrategyNotFoundError;\n}(Error));\nexport { NamingStrategyNotFoundError };\n\n//# sourceMappingURL=NamingStrategyNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinTableError = /** @class */ (function (_super) {\n __extends(MissingJoinTableError, _super);\n function MissingJoinTableError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinTableError\";\n Object.setPrototypeOf(_this, MissingJoinTableError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinTable is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" many-to-many relationship. \") +\n \"You need to put decorator decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinTable is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" many-to-many relationship. \" +\n \"You need to put JoinTable decorator on it.\";\n }\n return _this;\n }\n return MissingJoinTableError;\n}(Error));\nexport { MissingJoinTableError };\n\n//# sourceMappingURL=MissingJoinTableError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnOnlyOnOneSideAllowedError, _super);\n function UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinColumn is allowed only on one side of the one-to-one relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinTable decorator only on it.\";\n return _this;\n }\n return UsingJoinColumnOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinColumnOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableOnlyOnOneSideAllowedError, _super);\n function UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinTable is allowed only on one side of the many-to-many relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinColumn decorator only on it.\";\n return _this;\n }\n return UsingJoinTableOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinTableOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinTableOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown . Theoretically can't be thrown.\n */\nvar PersistedEntityNotFoundError = /** @class */ (function (_super) {\n __extends(PersistedEntityNotFoundError, _super);\n function PersistedEntityNotFoundError() {\n var _this = _super.call(this) || this;\n _this.name = \"PersistedEntityNotFoundError\";\n Object.setPrototypeOf(_this, PersistedEntityNotFoundError.prototype);\n _this.message = \"Internal error. Persisted entity was not found in the list of prepared operated entities.\";\n return _this;\n }\n return PersistedEntityNotFoundError;\n}(Error));\nexport { PersistedEntityNotFoundError };\n\n//# sourceMappingURL=PersistedEntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnIsNotAllowedError, _super);\n function UsingJoinColumnIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnIsNotAllowedError.prototype);\n _this.message = \"Using JoinColumn on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n \"You can use JoinColumn only on one-to-one and many-to-one relations.\";\n return _this;\n }\n return UsingJoinColumnIsNotAllowedError;\n}(Error));\nexport { UsingJoinColumnIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get column's type automatically.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar ColumnTypeUndefinedError = /** @class */ (function (_super) {\n __extends(ColumnTypeUndefinedError, _super);\n function ColumnTypeUndefinedError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"ColumnTypeUndefinedError\";\n Object.setPrototypeOf(_this, ColumnTypeUndefinedError.prototype);\n _this.message = \"Column type for \" + object.constructor.name + \"#\" + propertyName + \" is not defined and cannot be guessed. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application (before any entity imported).\" +\n \"If you are using JavaScript instead of TypeScript you must explicitly provide a column type.\";\n return _this;\n }\n return ColumnTypeUndefinedError;\n}(Error));\nexport { ColumnTypeUndefinedError };\n\n//# sourceMappingURL=ColumnTypeUndefinedError.js.map\n","export * from \"./CannotReflectMethodParameterTypeError\";\nexport * from \"./AlreadyHasActiveConnectionError\";\nexport * from \"./SubjectWithoutIdentifierError\";\nexport * from \"./CannotConnectAlreadyConnectedError\";\nexport * from \"./LockNotSupportedOnGivenDriverError\";\nexport * from \"./ConnectionIsNotSetError\";\nexport * from \"./CannotCreateEntityIdMapError\";\nexport * from \"./MetadataAlreadyExistsError\";\nexport * from \"./CannotDetermineEntityError\";\nexport * from \"./UpdateValuesMissingError\";\nexport * from \"./TreeRepositoryNotSupportedError\";\nexport * from \"./CustomRepositoryNotFoundError\";\nexport * from \"./TransactionNotStartedError\";\nexport * from \"./TransactionAlreadyStartedError\";\nexport * from \"./EntityNotFoundError\";\nexport * from \"./EntityMetadataNotFoundError\";\nexport * from \"./MustBeEntityError\";\nexport * from \"./OptimisticLockVersionMismatchError\";\nexport * from \"./LimitOnUpdateNotSupportedError\";\nexport * from \"./PrimaryColumnCannotBeNullableError\";\nexport * from \"./CustomRepositoryCannotInheritRepositoryError\";\nexport * from \"./QueryRunnerProviderAlreadyReleasedError\";\nexport * from \"./CannotAttachTreeChildrenEntityError\";\nexport * from \"./CustomRepositoryDoesNotHaveEntityError\";\nexport * from \"./MissingDeleteDateColumnError\";\nexport * from \"./NoConnectionForRepositoryError\";\nexport * from \"./CircularRelationsError\";\nexport * from \"./ReturningStatementNotSupportedError\";\nexport * from \"./UsingJoinTableIsNotAllowedError\";\nexport * from \"./MissingJoinColumnError\";\nexport * from \"./MissingPrimaryColumnError\";\nexport * from \"./EntityColumnNotFound\";\nexport * from \"./MissingDriverError\";\nexport * from \"./DriverPackageNotInstalledError\";\nexport * from \"./CannotGetEntityManagerNotConnectedError\";\nexport * from \"./ConnectionNotFoundError\";\nexport * from \"./NoVersionOrUpdateDateColumnError\";\nexport * from \"./InsertValuesMissingError\";\nexport * from \"./OptimisticLockCanNotBeUsedError\";\nexport * from \"./MetadataWithSuchNameAlreadyExistsError\";\nexport * from \"./DriverOptionNotSetError\";\nexport * from \"./FindRelationsNotFoundError\";\nexport * from \"./RepositoryNotFoundError\";\nexport * from \"./NamingStrategyNotFoundError\";\nexport * from \"./PessimisticLockTransactionRequiredError\";\nexport * from \"./RepositoryNotTreeError\";\nexport * from \"./DataTypeNotSupportedError\";\nexport * from \"./InitializedRelationError\";\nexport * from \"./MissingJoinTableError\";\nexport * from \"./QueryFailedError\";\nexport * from \"./NoNeedToReleaseEntityManagerError\";\nexport * from \"./UsingJoinColumnOnlyOnOneSideAllowedError\";\nexport * from \"./UsingJoinTableOnlyOnOneSideAllowedError\";\nexport * from \"./SubjectRemovedAndUpdatedError\";\nexport * from \"./PersistedEntityNotFoundError\";\nexport * from \"./UsingJoinColumnIsNotAllowedError\";\nexport * from \"./ColumnTypeUndefinedError\";\nexport * from \"./QueryRunnerAlreadyReleasedError\";\nexport * from \"./OffsetWithoutLimitNotSupportedError\";\nexport * from \"./CannotExecuteNotConnectedError\";\nexport * from \"./NoConnectionOptionError\";\n\n//# sourceMappingURL=index.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n */\nexport function Column(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\" || typeOrOptions instanceof Function) {\n type = typeOrOptions;\n }\n else if (typeOrOptions) {\n options = typeOrOptions;\n type = typeOrOptions.type;\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType) // if type is not given explicitly then try to guess it\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // specify HSTORE type if column is HSTORE\n if (options.type === \"hstore\" && !options.hstoreType)\n options.hstoreType = reflectMetadataType === Object ? \"object\" : \"string\";\n if (typeOrOptions instanceof Function) { // register an embedded\n getMetadataArgsStorage().embeddeds.push({\n target: object.constructor,\n propertyName: propertyName,\n isArray: reflectMetadataType === Array || options.array === true,\n prefix: options.prefix !== undefined ? options.prefix : undefined,\n type: typeOrOptions\n });\n }\n else { // register a regular column\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // create unique\n if (options.unique === true)\n getMetadataArgsStorage().uniques.push({ target: object.constructor, columns: [propertyName] });\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n }\n };\n}\n\n//# sourceMappingURL=Column.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a creation date of the inserted object.\n * Creation date is generated and inserted only once,\n * at the first time when you create an object, the value is inserted into the table, and is never touched again.\n */\nexport function CreateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"createDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=CreateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a delete date of the soft-deleted object.\n * This date is being updated each time you soft-delete the object.\n */\nexport function DeleteDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"deleteDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=DeleteDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * This column creates an integer PRIMARY COLUMN with generated set to true.\n */\nexport function PrimaryGeneratedColumn(strategyOrOptions, maybeOptions) {\n // normalize parameters\n var options = {};\n var strategy;\n if (strategyOrOptions) {\n if (typeof strategyOrOptions === \"string\")\n strategy = strategyOrOptions;\n if (strategyOrOptions instanceof Object) {\n strategy = \"increment\";\n Object.assign(options, strategyOrOptions);\n }\n }\n else {\n strategy = \"increment\";\n }\n if (maybeOptions instanceof Object)\n Object.assign(options, maybeOptions);\n return function (object, propertyName) {\n // if column type is not explicitly set then determine it based on generation strategy\n if (!options.type) {\n if (strategy === \"increment\") {\n options.type = Number;\n }\n else if (strategy === \"uuid\") {\n options.type = \"uuid\";\n }\n else if (strategy === \"rowid\") {\n options.type = \"int\";\n }\n }\n // explicitly set a primary and generated to column options\n options.primary = true;\n // register column metadata args\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n // register generated metadata args\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=PrimaryGeneratedColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\nimport { PrimaryColumnCannotBeNullableError } from \"../../error/PrimaryColumnCannotBeNullableError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * Primary columns also creates a PRIMARY KEY for this column in a db.\n */\nexport function PrimaryColumn(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\") {\n type = typeOrOptions;\n }\n else {\n options = Object.assign({}, typeOrOptions);\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType)\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // check if column is not nullable, because we cannot allow a primary key to be nullable\n if (options.nullable)\n throw new PrimaryColumnCannotBeNullableError(object, propertyName);\n // explicitly set a primary to column options\n options.primary = true;\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n };\n}\n\n//# sourceMappingURL=PrimaryColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store an update date of the updated object.\n * This date is being updated each time you persist the object.\n */\nexport function UpdateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"updateDate\",\n options: options ? options : {}\n });\n };\n}\n\n//# sourceMappingURL=UpdateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a number - version of the entity.\n * Every time your entity will be persisted, this number will be increased by one -\n * so you can organize visioning and update strategies of your entity.\n */\nexport function VersionColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"version\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=VersionColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * ViewColumn decorator is used to mark a specific class property as a view column.\n */\nexport function ViewColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=ViewColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of column that is available only for MongoDB database.\n * Marks your entity's column to be an object id.\n */\nexport function ObjectIdColumn(options) {\n return function (object, propertyName) {\n // if column options are not given then create a new empty options\n if (!options)\n options = {};\n options.primary = true;\n if (!options.name)\n options.name = \"_id\";\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"objectId\",\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ObjectIdColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity insertion.\n */\nexport function AfterInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_INSERT\n });\n };\n}\n\n//# sourceMappingURL=AfterInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after entity is loaded.\n */\nexport function AfterLoad() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_LOAD\n });\n };\n}\n\n//# sourceMappingURL=AfterLoad.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity removal.\n */\nexport function AfterRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=AfterRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity update.\n */\nexport function AfterUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=AfterUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity insertion.\n */\nexport function BeforeInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_INSERT\n });\n };\n}\n\n//# sourceMappingURL=BeforeInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity removal.\n */\nexport function BeforeRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=BeforeRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity update.\n */\nexport function BeforeUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=BeforeUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Classes decorated with this decorator will listen to ORM events and their methods will be triggered when event\n * occurs. Those classes must implement EventSubscriberInterface interface.\n */\nexport function EventSubscriber() {\n return function (target) {\n getMetadataArgsStorage().entitySubscribers.push({\n target: target\n });\n };\n}\n\n//# sourceMappingURL=EventSubscriber.js.map\n","export {};\n\n//# sourceMappingURL=ColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=IndexOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinTableOptions.js.map\n","export {};\n\n//# sourceMappingURL=RelationOptions.js.map\n","export {};\n\n//# sourceMappingURL=EntityOptions.js.map\n","export {};\n\n//# sourceMappingURL=ValueTransformer.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(optionsOrOptionsArray) {\n return function (object, propertyName) {\n var options = Array.isArray(optionsOrOptionsArray) ? optionsOrOptionsArray : [optionsOrOptionsArray || {}];\n options.forEach(function (options) {\n getMetadataArgsStorage().joinColumns.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n referencedColumnName: options.referencedColumnName\n });\n });\n };\n}\n\n//# sourceMappingURL=JoinColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(options) {\n return function (object, propertyName) {\n options = options || {};\n getMetadataArgsStorage().joinTables.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n joinColumns: (options && options.joinColumn ? [options.joinColumn] : options.joinColumns),\n inverseJoinColumns: (options && options.inverseJoinColumn ? [options.inverseJoinColumn] : options.inverseJoinColumns),\n schema: options && options.schema ? options.schema : undefined,\n database: options && options.database ? options.database : undefined,\n });\n };\n}\n\n//# sourceMappingURL=JoinTable.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options.lazy === true;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-many\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // Normalize parameters.\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-one\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A one-to-many relation allows creating the type of relation where Entity1 can have multiple instances of Entity2,\n * but Entity2 has only one Entity1. Entity2 is the owner of the relationship, and stores the id of Entity1 on its\n * side of the relation.\n */\nexport function OneToMany(typeFunctionOrTarget, inverseSide, options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSide,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-one\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Holds a number of children in the closure table of the column.\n *\n * @deprecated Do not use this decorator, it may be removed in the future versions\n */\nexport function RelationCount(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationCounts.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationCount.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special decorator used to extract relation id into separate entity property.\n *\n * @experimental\n */\nexport function RelationId(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationIds.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationId.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity (table or document depend on database type).\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function Entity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n type: \"regular\",\n orderBy: options.orderBy ? options.orderBy : undefined,\n engine: options.engine ? options.engine : undefined,\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize,\n withoutRowid: options.withoutRowid\n });\n };\n}\n\n//# sourceMappingURL=Entity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of the table used in the single-table inherited tables.\n */\nexport function ChildEntity(discriminatorValue) {\n return function (target) {\n // register a table metadata\n getMetadataArgsStorage().tables.push({\n target: target,\n type: \"entity-child\",\n });\n // register discriminator value if it was provided\n if (typeof discriminatorValue !== 'undefined') {\n getMetadataArgsStorage().discriminatorValues.push({\n target: target,\n value: discriminatorValue\n });\n }\n };\n}\n\n//# sourceMappingURL=ChildEntity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Sets for entity to use table inheritance pattern.\n */\nexport function TableInheritance(options) {\n return function (target) {\n getMetadataArgsStorage().inheritances.push({\n target: target,\n pattern: options && options.pattern ? options.pattern : \"STI\",\n column: options && options.column ? typeof options.column === \"string\" ? { name: options.column } : options.column : undefined\n });\n };\n}\n\n//# sourceMappingURL=TableInheritance.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity view.\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function ViewEntity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n expression: options.expression,\n type: \"view\",\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize === false ? false : true,\n materialized: !!options.materialized\n });\n };\n}\n\n//# sourceMappingURL=ViewEntity.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { getConnection, getMetadataArgsStorage, MongoRepository, Repository, TreeRepository } from \"../../\";\nexport function Transaction(connectionOrOptions) {\n return function (target, methodName, descriptor) {\n // save original method - we gonna need it\n var originalMethod = descriptor.value;\n // override method descriptor with proxy method\n descriptor.value = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var connectionName = \"default\";\n var isolationLevel = undefined;\n if (connectionOrOptions) {\n if (typeof connectionOrOptions === \"string\") {\n connectionName = connectionOrOptions;\n }\n else {\n if (connectionOrOptions.connectionName) {\n connectionName = connectionOrOptions.connectionName;\n }\n if (connectionOrOptions.isolation) {\n isolationLevel = connectionOrOptions.isolation;\n }\n }\n }\n var transactionCallback = function (entityManager) {\n var argsWithInjectedTransactionManagerAndRepositories;\n // filter all @TransactionManager() and @TransactionRepository() decorator usages for this method\n var transactionEntityManagerMetadatas = getMetadataArgsStorage()\n .filterTransactionEntityManagers(target.constructor, methodName)\n .reverse();\n var transactionRepositoryMetadatas = getMetadataArgsStorage()\n .filterTransactionRepository(target.constructor, methodName)\n .reverse();\n // if there are @TransactionManager() decorator usages the inject them\n if (transactionEntityManagerMetadatas.length > 0) {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n // replace method params with injection of transactionEntityManager\n transactionEntityManagerMetadatas.forEach(function (metadata) {\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, entityManager);\n });\n }\n else if (transactionRepositoryMetadatas.length === 0) { // otherwise if there's no transaction repositories in use, inject it as a first parameter\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([entityManager], __read(args));\n }\n else {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n }\n // for every usage of @TransactionRepository decorator\n transactionRepositoryMetadatas.forEach(function (metadata) {\n var repositoryInstance;\n // detect type of the repository and get instance from transaction entity manager\n switch (metadata.repositoryType) {\n case Repository:\n repositoryInstance = entityManager.getRepository(metadata.entityType);\n break;\n case MongoRepository:\n repositoryInstance = entityManager.getMongoRepository(metadata.entityType);\n break;\n case TreeRepository:\n repositoryInstance = entityManager.getTreeRepository(metadata.entityType);\n break;\n // if not the TypeORM's ones, there must be custom repository classes\n default:\n repositoryInstance = entityManager.getCustomRepository(metadata.repositoryType);\n }\n // replace method param with injection of repository instance\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, repositoryInstance);\n });\n return originalMethod.apply(_this, argsWithInjectedTransactionManagerAndRepositories);\n };\n if (isolationLevel) {\n return getConnection(connectionName).manager.transaction(isolationLevel, transactionCallback);\n }\n else {\n return getConnection(connectionName).manager.transaction(transactionCallback);\n }\n };\n };\n}\n\n//# sourceMappingURL=Transaction.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Injects transaction's entity manager into the method wrapped with @Transaction decorator.\n */\nexport function TransactionManager() {\n return function (object, methodName, index) {\n getMetadataArgsStorage().transactionEntityManagers.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n });\n };\n}\n\n//# sourceMappingURL=TransactionManager.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { CannotReflectMethodParameterTypeError } from \"../../error/CannotReflectMethodParameterTypeError\";\n/**\n * Injects transaction's repository into the method wrapped with @Transaction decorator.\n */\nexport function TransactionRepository(entityType) {\n return function (object, methodName, index) {\n // get repository type\n var repositoryType;\n try {\n repositoryType = Reflect.getOwnMetadata(\"design:paramtypes\", object, methodName)[index];\n }\n catch (err) {\n throw new CannotReflectMethodParameterTypeError(object.constructor, methodName);\n }\n getMetadataArgsStorage().transactionRepositories.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n repositoryType: repositoryType,\n entityType: entityType,\n });\n };\n}\n\n//# sourceMappingURL=TransactionRepository.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Creates a \"level\"/\"length\" column to the table that holds a closure table.\n */\nexport function TreeLevelColumn() {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"treeLevel\",\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeLevelColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a parent of the tree.\n * \"Tree parent\" indicates who owns (is a parent) of this entity in tree structure.\n */\nexport function TreeParent() {\n return function (object, propertyName) {\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n getMetadataArgsStorage().relations.push({\n isTreeParent: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"many-to-one\",\n type: function () { return object.constructor; },\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeParent.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a children of the tree.\n * \"Tree children\" will contain all children (bind) of this entity.\n */\nexport function TreeChildren(options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n // add one-to-many relation for this\n getMetadataArgsStorage().relations.push({\n isTreeChildren: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: function () { return object.constructor; },\n options: options\n });\n };\n}\n\n//# sourceMappingURL=TreeChildren.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks entity to work like a tree.\n * Tree pattern that will be used for the tree entity should be specified.\n * @TreeParent decorator must be used in tree entities.\n * TreeRepository can be used to manipulate with tree entities.\n */\nexport function Tree(type, options) {\n return function (target) {\n getMetadataArgsStorage().trees.push({\n target: target,\n type: type,\n options: type === \"closure-table\" ? options : undefined\n });\n };\n}\n\n//# sourceMappingURL=Tree.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database index.\n * Can be used on entity property or on entity.\n * Can create indices with composite columns when used on entity.\n */\nexport function Index(nameOrFieldsOrOptions, maybeFieldsOrOptions, maybeOptions) {\n // normalize parameters\n var name = typeof nameOrFieldsOrOptions === \"string\" ? nameOrFieldsOrOptions : undefined;\n var fields = typeof nameOrFieldsOrOptions === \"string\" ? maybeFieldsOrOptions : nameOrFieldsOrOptions;\n var options = (typeof nameOrFieldsOrOptions === \"object\" && !Array.isArray(nameOrFieldsOrOptions)) ? nameOrFieldsOrOptions : maybeOptions;\n if (!options)\n options = (typeof maybeFieldsOrOptions === \"object\" && !Array.isArray(maybeFieldsOrOptions)) ? maybeFieldsOrOptions : maybeOptions;\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().indices.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: propertyName ? [propertyName] : fields,\n synchronize: options && options.synchronize === false ? false : true,\n where: options ? options.where : undefined,\n unique: options && options.unique ? true : false,\n spatial: options && options.spatial ? true : false,\n fulltext: options && options.fulltext ? true : false,\n parser: options ? options.parser : undefined,\n sparse: options && options.sparse ? true : false,\n background: options && options.background ? true : false,\n expireAfterSeconds: options ? options.expireAfterSeconds : undefined\n });\n };\n}\n\n//# sourceMappingURL=Index.js.map\n","import { getMetadataArgsStorage } from \"../index\";\n/**\n * Composite unique constraint must be set on entity classes and must specify entity's fields to be unique.\n */\nexport function Unique(nameOrFields, maybeFields) {\n var name = typeof nameOrFields === \"string\" ? nameOrFields : undefined;\n var fields = typeof nameOrFields === \"string\" ? maybeFields : nameOrFields;\n return function (clsOrObject, propertyName) {\n var columns = fields;\n if (propertyName !== undefined) {\n switch (typeof (propertyName)) {\n case \"string\":\n columns = [propertyName];\n break;\n case \"symbol\":\n columns = [propertyName.toString()];\n break;\n }\n }\n var args = {\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: columns,\n };\n getMetadataArgsStorage().uniques.push(args);\n };\n}\n\n//# sourceMappingURL=Unique.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database check.\n * Can be used on entity property or on entity.\n * Can create checks with composite columns when used on entity.\n */\nexport function Check(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Check expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().checks.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Check.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database exclusion.\n * Can be used on entity.\n * Can create exclusions with composite columns when used on entity.\n */\nexport function Exclusion(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Exclusion expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().exclusions.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Exclusion.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Marks a column to generate a value on entity insertion.\n * There are three types of generation strategy - increment, uuid and rowid (cockroachdb only).\n * Increment uses a number which increases by one on each insertion.\n * Uuid generates a special UUID token.\n * Rowid supports only in CockroachDB and uses `unique_rowid()` function\n *\n * Note, some databases do not support non-primary generation columns.\n */\nexport function Generated(strategy) {\n if (strategy === void 0) { strategy = \"increment\"; }\n return function (object, propertyName) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=Generated.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Used to declare a class as a custom repository.\n * Custom repository can manage some specific entity or just be generic.\n * Custom repository optionally can extend AbstractRepository, Repository or TreeRepository.\n */\nexport function EntityRepository(entity) {\n return function (target) {\n getMetadataArgsStorage().entityRepositories.push({\n target: target,\n entity: entity,\n });\n };\n}\n\n//# sourceMappingURL=EntityRepository.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Any([...]) }\n */\nexport function Any(value) {\n return new FindOperator(\"any\", value);\n}\n\n//# sourceMappingURL=Any.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Between(x, y) }\n */\nexport function Between(from, to) {\n return new FindOperator(\"between\", [from, to], true, true);\n}\n\n//# sourceMappingURL=Between.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Equal(\"value\") }\n */\nexport function Equal(value) {\n return new FindOperator(\"equal\", value);\n}\n\n//# sourceMappingURL=Equal.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: IsNull() }\n */\nexport function IsNull() {\n return new FindOperator(\"isNull\", undefined, false);\n}\n\n//# sourceMappingURL=IsNull.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThan(10) }\n */\nexport function LessThan(value) {\n return new FindOperator(\"lessThan\", value);\n}\n\n//# sourceMappingURL=LessThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThanOrEqual(10) }\n */\nexport function LessThanOrEqual(value) {\n return new FindOperator(\"lessThanOrEqual\", value);\n}\n\n//# sourceMappingURL=LessThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: ILike(\"%SOME string%\") }\n */\nexport function ILike(value) {\n return new FindOperator(\"ilike\", value);\n}\n\n//# sourceMappingURL=ILike.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Like(\"%some sting%\") }\n */\nexport function Like(value) {\n return new FindOperator(\"like\", value);\n}\n\n//# sourceMappingURL=Like.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThan(10) }\n */\nexport function MoreThan(value) {\n return new FindOperator(\"moreThan\", value);\n}\n\n//# sourceMappingURL=MoreThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThanOrEqual(10) }\n */\nexport function MoreThanOrEqual(value) {\n return new FindOperator(\"moreThanOrEqual\", value);\n}\n\n//# sourceMappingURL=MoreThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Used to negotiate expression.\n * Example: { title: not(\"hello\") } will return entities where title not equal to \"hello\".\n */\nexport function Not(value) {\n return new FindOperator(\"not\", value);\n}\n\n//# sourceMappingURL=Not.js.map\n","import { FindOperator } from \"../FindOperator\";\nexport function Raw(valueOrSqlGenerator, sqlGeneratorParameters) {\n if (typeof valueOrSqlGenerator !== 'function') {\n return new FindOperator(\"raw\", valueOrSqlGenerator, false);\n }\n return new FindOperator(\"raw\", [], true, true, valueOrSqlGenerator, sqlGeneratorParameters);\n}\n\n//# sourceMappingURL=Raw.js.map\n","export {};\n\n//# sourceMappingURL=FindConditions.js.map\n","export {};\n\n//# sourceMappingURL=FindManyOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOneOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOperatorType.js.map\n","export {};\n\n//# sourceMappingURL=JoinOptions.js.map\n","export {};\n\n//# sourceMappingURL=OrderByCondition.js.map\n","export {};\n\n//# sourceMappingURL=Logger.js.map\n","export {};\n\n//# sourceMappingURL=LoggerOptions.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getConnection } from \"../index\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nvar BaseEntity = /** @class */ (function () {\n function BaseEntity() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.prototype.hasId = function () {\n return this.constructor.getRepository().hasId(this);\n };\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n BaseEntity.prototype.save = function (options) {\n return this.constructor.getRepository().save(this, options);\n };\n /**\n * Removes current entity from the database.\n */\n BaseEntity.prototype.remove = function (options) {\n return this.constructor.getRepository().remove(this, options);\n };\n /**\n * Records the delete date of current entity.\n */\n BaseEntity.prototype.softRemove = function (options) {\n return this.constructor.getRepository().softRemove(this, options);\n };\n /**\n * Recovers a given entity in the database.\n */\n BaseEntity.prototype.recover = function (options) {\n return this.constructor.getRepository().recover(this, options);\n };\n /**\n * Reloads entity data from the database.\n */\n BaseEntity.prototype.reload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var base, newestEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n base = this.constructor;\n return [4 /*yield*/, base.getRepository().findOneOrFail(base.getId(this))];\n case 1:\n newestEntity = _a.sent();\n ObjectUtils.assign(this, newestEntity);\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Sets connection to be used by entity.\n */\n BaseEntity.useConnection = function (connection) {\n this.usedConnection = connection;\n };\n /**\n * Gets current entity's Repository.\n */\n BaseEntity.getRepository = function () {\n var connection = this.usedConnection || getConnection();\n return connection.getRepository(this);\n };\n Object.defineProperty(BaseEntity, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.getRepository().target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.hasId = function (entity) {\n return this.getRepository().hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n BaseEntity.getId = function (entity) {\n return this.getRepository().getId(entity);\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n BaseEntity.createQueryBuilder = function (alias) {\n return this.getRepository().createQueryBuilder(alias);\n };\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n BaseEntity.create = function (entityOrEntities) {\n return this.getRepository().create(entityOrEntities);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n BaseEntity.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.getRepository()).merge.apply(_a, __spreadArray([mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n BaseEntity.preload = function (entityLike) {\n return this.getRepository().preload(entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n BaseEntity.save = function (entityOrEntities, options) {\n return this.getRepository().save(entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n BaseEntity.remove = function (entityOrEntities, options) {\n return this.getRepository().remove(entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n BaseEntity.softRemove = function (entityOrEntities, options) {\n return this.getRepository().softRemove(entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n BaseEntity.insert = function (entity, options) {\n return this.getRepository().insert(entity, options);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.update = function (criteria, partialEntity, options) {\n return this.getRepository().update(criteria, partialEntity, options);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.delete = function (criteria, options) {\n return this.getRepository().delete(criteria, options);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n BaseEntity.count = function (optionsOrConditions) {\n return this.getRepository().count(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n BaseEntity.find = function (optionsOrConditions) {\n return this.getRepository().find(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n BaseEntity.findAndCount = function (optionsOrConditions) {\n return this.getRepository().findAndCount(optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n BaseEntity.findByIds = function (ids, optionsOrConditions) {\n return this.getRepository().findByIds(ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOne = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOne(optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOneOrFail(optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n BaseEntity.query = function (query, parameters) {\n return this.getRepository().query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n BaseEntity.clear = function () {\n return this.getRepository().clear();\n };\n return BaseEntity;\n}());\nexport { BaseEntity };\n\n//# sourceMappingURL=BaseEntity.js.map\n","export {};\n\n//# sourceMappingURL=RemoveOptions.js.map\n","export {};\n\n//# sourceMappingURL=SaveOptions.js.map\n","import { EventEmitter, Readable, Writable } from \"../../platform/PlatformTools\";\n\n//# sourceMappingURL=typings.js.map\n","export {};\n\n//# sourceMappingURL=DatabaseType.js.map\n","export {};\n\n//# sourceMappingURL=ReplicationMode.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/*!\n */\nimport \"reflect-metadata\";\nimport { ConnectionManager } from \"./connection/ConnectionManager\";\nimport { MetadataArgsStorage } from \"./metadata-args/MetadataArgsStorage\";\nimport { getFromContainer } from \"./container\";\nimport { PlatformTools } from \"./platform/PlatformTools\";\nimport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\n// -------------------------------------------------------------------------\n// Commonly Used exports\n// -------------------------------------------------------------------------\nexport * from \"./container\";\nexport * from \"./common/EntityTarget\";\nexport * from \"./common/ObjectType\";\nexport * from \"./common/ObjectLiteral\";\nexport * from \"./common/DeepPartial\";\nexport * from \"./error\";\nexport * from \"./decorator/columns/Column\";\nexport * from \"./decorator/columns/CreateDateColumn\";\nexport * from \"./decorator/columns/DeleteDateColumn\";\nexport * from \"./decorator/columns/PrimaryGeneratedColumn\";\nexport * from \"./decorator/columns/PrimaryColumn\";\nexport * from \"./decorator/columns/UpdateDateColumn\";\nexport * from \"./decorator/columns/VersionColumn\";\nexport * from \"./decorator/columns/ViewColumn\";\nexport * from \"./decorator/columns/ObjectIdColumn\";\nexport * from \"./decorator/listeners/AfterInsert\";\nexport * from \"./decorator/listeners/AfterLoad\";\nexport * from \"./decorator/listeners/AfterRemove\";\nexport * from \"./decorator/listeners/AfterUpdate\";\nexport * from \"./decorator/listeners/BeforeInsert\";\nexport * from \"./decorator/listeners/BeforeRemove\";\nexport * from \"./decorator/listeners/BeforeUpdate\";\nexport * from \"./decorator/listeners/EventSubscriber\";\nexport * from \"./decorator/options/ColumnOptions\";\nexport * from \"./decorator/options/IndexOptions\";\nexport * from \"./decorator/options/JoinColumnOptions\";\nexport * from \"./decorator/options/JoinTableOptions\";\nexport * from \"./decorator/options/RelationOptions\";\nexport * from \"./decorator/options/EntityOptions\";\nexport * from \"./decorator/options/ValueTransformer\";\nexport * from \"./decorator/relations/JoinColumn\";\nexport * from \"./decorator/relations/JoinTable\";\nexport * from \"./decorator/relations/ManyToMany\";\nexport * from \"./decorator/relations/ManyToOne\";\nexport * from \"./decorator/relations/OneToMany\";\nexport * from \"./decorator/relations/OneToOne\";\nexport * from \"./decorator/relations/RelationCount\";\nexport * from \"./decorator/relations/RelationId\";\nexport * from \"./decorator/entity/Entity\";\nexport * from \"./decorator/entity/ChildEntity\";\nexport * from \"./decorator/entity/TableInheritance\";\nexport * from \"./decorator/entity-view/ViewEntity\";\nexport * from \"./decorator/transaction/Transaction\";\nexport * from \"./decorator/transaction/TransactionManager\";\nexport * from \"./decorator/transaction/TransactionRepository\";\nexport * from \"./decorator/tree/TreeLevelColumn\";\nexport * from \"./decorator/tree/TreeParent\";\nexport * from \"./decorator/tree/TreeChildren\";\nexport * from \"./decorator/tree/Tree\";\nexport * from \"./decorator/Index\";\nexport * from \"./decorator/Unique\";\nexport * from \"./decorator/Check\";\nexport * from \"./decorator/Exclusion\";\nexport * from \"./decorator/Generated\";\nexport * from \"./decorator/EntityRepository\";\nexport * from \"./find-options/operator/Any\";\nexport * from \"./find-options/operator/Between\";\nexport * from \"./find-options/operator/Equal\";\nexport * from \"./find-options/operator/In\";\nexport * from \"./find-options/operator/IsNull\";\nexport * from \"./find-options/operator/LessThan\";\nexport * from \"./find-options/operator/LessThanOrEqual\";\nexport * from \"./find-options/operator/ILike\";\nexport * from \"./find-options/operator/Like\";\nexport * from \"./find-options/operator/MoreThan\";\nexport * from \"./find-options/operator/MoreThanOrEqual\";\nexport * from \"./find-options/operator/Not\";\nexport * from \"./find-options/operator/Raw\";\nexport * from \"./find-options/FindConditions\";\nexport * from \"./find-options/FindManyOptions\";\nexport * from \"./find-options/FindOneOptions\";\nexport * from \"./find-options/FindOperator\";\nexport * from \"./find-options/FindOperatorType\";\nexport * from \"./find-options/JoinOptions\";\nexport * from \"./find-options/OrderByCondition\";\nexport * from \"./find-options/FindOptionsUtils\";\nexport * from \"./logger/Logger\";\nexport * from \"./logger/LoggerOptions\";\nexport * from \"./logger/AdvancedConsoleLogger\";\nexport * from \"./logger/SimpleConsoleLogger\";\nexport * from \"./logger/FileLogger\";\nexport * from \"./metadata/EntityMetadata\";\nexport * from \"./entity-manager/EntityManager\";\nexport * from \"./repository/AbstractRepository\";\nexport * from \"./repository/Repository\";\nexport * from \"./repository/BaseEntity\";\nexport * from \"./repository/TreeRepository\";\nexport * from \"./repository/MongoRepository\";\nexport * from \"./repository/RemoveOptions\";\nexport * from \"./repository/SaveOptions\";\nexport * from \"./schema-builder/table/TableCheck\";\nexport * from \"./schema-builder/table/TableColumn\";\nexport * from \"./schema-builder/table/TableExclusion\";\nexport * from \"./schema-builder/table/TableForeignKey\";\nexport * from \"./schema-builder/table/TableIndex\";\nexport * from \"./schema-builder/table/TableUnique\";\nexport * from \"./schema-builder/table/Table\";\nexport * from \"./driver/mongodb/typings\";\nexport * from \"./driver/types/DatabaseType\";\nexport * from \"./driver/types/ReplicationMode\";\nexport * from \"./driver/sqlserver/MssqlParameter\";\nexport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\nexport { Connection } from \"./connection/Connection\";\nexport { ConnectionManager } from \"./connection/ConnectionManager\";\nexport { QueryBuilder } from \"./query-builder/QueryBuilder\";\nexport { SelectQueryBuilder } from \"./query-builder/SelectQueryBuilder\";\nexport { DeleteQueryBuilder } from \"./query-builder/DeleteQueryBuilder\";\nexport { InsertQueryBuilder } from \"./query-builder/InsertQueryBuilder\";\nexport { UpdateQueryBuilder } from \"./query-builder/UpdateQueryBuilder\";\nexport { RelationQueryBuilder } from \"./query-builder/RelationQueryBuilder\";\nexport { Brackets } from \"./query-builder/Brackets\";\nexport { InsertResult } from \"./query-builder/result/InsertResult\";\nexport { UpdateResult } from \"./query-builder/result/UpdateResult\";\nexport { DeleteResult } from \"./query-builder/result/DeleteResult\";\nexport { MongoEntityManager } from \"./entity-manager/MongoEntityManager\";\nexport { Migration } from \"./migration/Migration\";\nexport { MigrationExecutor } from \"./migration/MigrationExecutor\";\nexport { DefaultNamingStrategy } from \"./naming-strategy/DefaultNamingStrategy\";\nexport { EntitySchema } from \"./entity-schema/EntitySchema\";\n// -------------------------------------------------------------------------\n// Deprecated\n// -------------------------------------------------------------------------\n// -------------------------------------------------------------------------\n// Commonly used functionality\n// -------------------------------------------------------------------------\n/**\n * Gets metadata args storage.\n */\nexport function getMetadataArgsStorage() {\n // we should store metadata storage in a global variable otherwise it brings too much problems\n // one of the problem is that if any entity (or any other) will be imported before consumer will call\n // useContainer method with his own container implementation, that entity will be registered in the\n // old old container (default one post probably) and consumer will his entity.\n // calling useContainer before he imports any entity (or any other) is not always convenient.\n // another reason is that when we run migrations typeorm is being called from a global package\n // and it may load entities which register decorators in typeorm of local package\n // this leads to impossibility of usage of entities in migrations and cli related operations\n var globalScope = PlatformTools.getGlobalVariable();\n if (!globalScope.typeormMetadataArgsStorage)\n globalScope.typeormMetadataArgsStorage = new MetadataArgsStorage();\n return globalScope.typeormMetadataArgsStorage;\n}\n/**\n * Reads connection options stored in ormconfig configuration file.\n */\nexport function getConnectionOptions(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new ConnectionOptionsReader().get(connectionName)];\n });\n });\n}\n/**\n * Gets a ConnectionManager which creates connections.\n */\nexport function getConnectionManager() {\n return getFromContainer(ConnectionManager);\n}\n/**\n * Creates a new connection and registers it in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * Only one connection from ormconfig will be created (name \"default\" or connection without name).\n */\nexport function createConnection(optionsOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var connectionName, options, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n connectionName = typeof optionsOrName === \"string\" ? optionsOrName : \"default\";\n if (!(optionsOrName instanceof Object)) return [3 /*break*/, 1];\n _a = optionsOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, getConnectionOptions(connectionName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n options = _a;\n return [2 /*return*/, getConnectionManager().create(options).connect()];\n }\n });\n });\n}\n/**\n * Creates new connections and registers them in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * All connections from the ormconfig will be created.\n */\nexport function createConnections(options) {\n return __awaiter(this, void 0, void 0, function () {\n var connections;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!options) return [3 /*break*/, 2];\n return [4 /*yield*/, new ConnectionOptionsReader().all()];\n case 1:\n options = _a.sent();\n _a.label = 2;\n case 2:\n connections = options.map(function (options) { return getConnectionManager().create(options); });\n return [2 /*return*/, Promise.all(connections.map(function (connection) { return connection.connect(); }))];\n }\n });\n });\n}\n/**\n * Gets connection from the connection manager.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getConnection(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName);\n}\n/**\n * Gets entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets MongoDB entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getMongoManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets Sqljs entity manager from connection name.\n * \"default\" connection is used, when no name is specified.\n * Only works when Sqljs driver is used.\n */\nexport function getSqljsManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets repository for the given entity class.\n */\nexport function getRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getTreeRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getTreeRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getCustomRepository(customRepository, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getCustomRepository(customRepository);\n}\n/**\n * Gets mongodb repository for the given entity class or name.\n */\nexport function getMongoRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getMongoRepository(entityClass);\n}\n/**\n * Creates a new query builder.\n */\nexport function createQueryBuilder(entityClass, alias, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n if (entityClass) {\n return getRepository(entityClass, connectionName).createQueryBuilder(alias);\n }\n return getConnection(connectionName).createQueryBuilder();\n}\n\n//# sourceMappingURL=index.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Foreign key from the database stored in this class.\n */\nvar TableForeignKey = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableForeignKey(options) {\n /**\n * Column names which included by this foreign key.\n */\n this.columnNames = [];\n /**\n * Column names which included by this foreign key.\n */\n this.referencedColumnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.referencedColumnNames = options.referencedColumnNames;\n this.referencedTableName = options.referencedTableName;\n this.onDelete = options.onDelete;\n this.onUpdate = options.onUpdate;\n this.deferrable = options.deferrable;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this foreign key with exactly same properties.\n */\n TableForeignKey.prototype.clone = function () {\n return new TableForeignKey({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n referencedColumnNames: __spreadArray([], __read(this.referencedColumnNames)),\n referencedTableName: this.referencedTableName,\n onDelete: this.onDelete,\n onUpdate: this.onUpdate,\n deferrable: this.deferrable,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new table foreign key from the given foreign key metadata.\n */\n TableForeignKey.create = function (metadata) {\n return new TableForeignKey({\n name: metadata.name,\n columnNames: metadata.columnNames,\n referencedColumnNames: metadata.referencedColumnNames,\n referencedTableName: metadata.referencedTablePath,\n onDelete: metadata.onDelete,\n onUpdate: metadata.onUpdate,\n deferrable: metadata.deferrable,\n });\n };\n return TableForeignKey;\n}());\nexport { TableForeignKey };\n\n//# sourceMappingURL=TableForeignKey.js.map\n","import shajs from \"sha.js\";\n/**\n * Converts string into camelCase.\n *\n * @see http://stackoverflow.com/questions/2970525/converting-any-string-into-camel-case\n */\nexport function camelCase(str, firstCapital) {\n if (firstCapital === void 0) { firstCapital = false; }\n return str.replace(/^([A-Z])|[\\s-_](\\w)/g, function (match, p1, p2, offset) {\n if (firstCapital === true && offset === 0)\n return p1;\n if (p2)\n return p2.toUpperCase();\n return p1.toLowerCase();\n });\n}\n/**\n * Converts string into snake_case.\n *\n * @see https://regex101.com/r/QeSm2I/1\n */\nexport function snakeCase(str) {\n return str.replace(/(?:([a-z])([A-Z]))|(?:((?!^)[A-Z])([a-z]))/g, \"$1_$3$2$4\").toLowerCase();\n}\n/**\n * Converts string into Title Case.\n *\n * @see http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript\n */\nexport function titleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });\n}\n/**\n * Builds abbreviated string from given string;\n */\nexport function abbreviate(str, abbrLettersCount) {\n if (abbrLettersCount === void 0) { abbrLettersCount = 1; }\n var words = str.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0\\xDF])/g, \"$1 $2\").split(\" \");\n return words.reduce(function (res, word) {\n res += word.substr(0, abbrLettersCount);\n return res;\n }, \"\");\n}\n/**\n * Shorten a given `input`. Useful for RDBMS imposing a limit on the\n * maximum length of aliases and column names in SQL queries.\n *\n * @param input String to be shortened.\n * @param options Default to `4` for segments length, `2` for terms length, `'__'` as a separator.\n *\n * @return Shortened `input`.\n *\n * @example\n * // returns: \"UsShCa__orde__mark__dire\"\n * shorten('UserShoppingCart__order__market__director')\n *\n * // returns: \"cat_wit_ver_lon_nam_pos_wit_ver_lon_nam_pos_wit_ver_lon_nam\"\n * shorten(\n * 'category_with_very_long_name_posts_with_very_long_name_post_with_very_long_name',\n * { separator: '_', segmentLength: 3 }\n * )\n *\n * // equals: UsShCa__orde__mark_market_id\n * `${shorten('UserShoppingCart__order__market')}_market_id`\n */\nexport function shorten(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.segmentLength, segmentLength = _a === void 0 ? 4 : _a, _b = options.separator, separator = _b === void 0 ? \"__\" : _b, _c = options.termLength, termLength = _c === void 0 ? 2 : _c;\n var segments = input.split(separator);\n var shortSegments = segments.reduce(function (acc, val) {\n // split the given segment into many terms based on an eventual camel cased name\n var segmentTerms = val.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0-\\xDF])/g, \"$1 $2\").split(\" \");\n // \"OrderItemList\" becomes \"OrItLi\", while \"company\" becomes \"comp\"\n var length = segmentTerms.length > 1 ? termLength : segmentLength;\n var shortSegment = segmentTerms.map(function (term) { return term.substr(0, length); }).join(\"\");\n acc.push(shortSegment);\n return acc;\n }, []);\n return shortSegments.join(separator);\n}\n/**\n * Returns a hashed input.\n *\n * @param input String to be hashed.\n * @param options.length Optionally, shorten the output to desired length.\n */\nexport function hash(input, options) {\n if (options === void 0) { options = {}; }\n var hashFunction = shajs(\"sha256\");\n hashFunction.update(input, \"utf8\");\n var hashedInput = hashFunction.digest(\"hex\");\n if (options.length) {\n return hashedInput.slice(0, options.length);\n }\n return hashedInput;\n}\n\n//# sourceMappingURL=StringUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Helper utility functions for QueryBuilder.\n */\nvar QueryBuilderUtils = /** @class */ (function () {\n function QueryBuilderUtils() {\n }\n /**\n * Checks if given value is a string representation of alias property,\n * e.g. \"post.category\" or \"post.id\".\n */\n QueryBuilderUtils.isAliasProperty = function (str) {\n // alias property must be a string and must have a dot separator\n if (typeof str !== \"string\" || str.indexOf(\".\") === -1)\n return false;\n // extra alias and its property relation\n var _a = __read(str.split(\".\"), 2), aliasName = _a[0], propertyName = _a[1]; // todo: what about relations in embedded?\n if (!aliasName || !propertyName)\n return false;\n // alias and property must be represented in a special format\n // const aliasNameRegexp = /^[a-zA-Z0-9_-]+$/;\n // if (!aliasNameRegexp.test(aliasName) || !aliasNameRegexp.test(propertyName))\n // return false;\n // make sure string is not a subquery\n if (str.indexOf(\"(\") !== -1 || str.indexOf(\")\") !== -1)\n return false;\n return true;\n };\n return QueryBuilderUtils;\n}());\nexport { QueryBuilderUtils };\n\n//# sourceMappingURL=QueryBuilderUtils.js.map\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nvar Broadcaster = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Broadcaster(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Broadcasts \"BEFORE_INSERT\" event.\n * Before insert event is executed before entity is being inserted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.beforeInsertListeners.length) {\n metadata.beforeInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeInsert) {\n var executionResult = subscriber.beforeInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_UPDATE\" event.\n * Before update event is executed before entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.beforeUpdateListeners.length) {\n metadata.beforeUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeUpdate) {\n var executionResult = subscriber.beforeUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_REMOVE\" event.\n * Before remove event is executed before entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.beforeRemoveListeners.length) {\n metadata.beforeRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRemove) {\n var executionResult = subscriber.beforeRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_INSERT\" event.\n * After insert event is executed after entity is being persisted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.afterInsertListeners.length) {\n metadata.afterInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterInsert) {\n var executionResult = subscriber.afterInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionStart) {\n var executionResult = subscriber.beforeTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionStart) {\n var executionResult = subscriber.afterTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionCommit) {\n var executionResult = subscriber.beforeTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionCommit) {\n var executionResult = subscriber.afterTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionRollback) {\n var executionResult = subscriber.beforeTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionRollback) {\n var executionResult = subscriber.afterTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_UPDATE\" event.\n * After update event is executed after entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.afterUpdateListeners.length) {\n metadata.afterUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterUpdate) {\n var executionResult = subscriber.afterUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_REMOVE\" event.\n * After remove event is executed after entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.afterRemoveListeners.length) {\n metadata.afterRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRemove) {\n var executionResult = subscriber.afterRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_LOAD\" event for all given entities, and their sub-entities.\n * After load event is executed after entity has been loaded from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastLoadEventsForAll = function (result, metadata, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n if (entity instanceof Promise) // todo: check why need this?\n return;\n // collect load events for all children entities that were loaded with the main entity\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))\n return;\n var value = relation.getEntityValue(entity);\n if (value instanceof Object)\n _this.broadcastLoadEventsForAll(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);\n });\n }\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (_this.queryRunner.connection.subscribers.length) {\n _this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad) {\n var executionResult = subscriber.afterLoad(entity, {\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if subscriber's methods can be executed by checking if its don't listen to the particular entity,\n * or listens our entity.\n */\n Broadcaster.prototype.isAllowedSubscriber = function (subscriber, target) {\n return !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target);\n };\n return Broadcaster;\n}());\nexport { Broadcaster };\n\n//# sourceMappingURL=Broadcaster.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Matomo = void 0;\nconst js_helper_1 = require(\"js-helper\");\nconst NativeStoragePromise_1 = require(\"../NativeStoragePromise\");\nclass Matomo {\n static init() {\n Matomo.isTrackingPromise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let shouldTrack = yield NativeStoragePromise_1.NativeStoragePromise.getItem(Matomo.LOCAL_STORAGE_KEY, \"1\");\n if (js_helper_1.Helper.isNull(shouldTrack)) {\n shouldTrack = yield Matomo._askIsTracking();\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);\n }\n else {\n shouldTrack = (shouldTrack === \"1\");\n yield Matomo.setTrack(shouldTrack);\n }\n resolve(shouldTrack);\n }));\n Matomo.isTrackingPromise.then(() => {\n Matomo.push(['trackPageView'], true);\n Matomo.push(['enableLinkTracking'], true);\n Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php'], true);\n Matomo.push(['setSiteId', Matomo.SIDE_ID + \"\"], true);\n let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.defer = true;\n g.src = Matomo.TRACK_SITE + '/piwik.js';\n s.appendChild(g);\n });\n }\n static update(title) {\n if (js_helper_1.Helper.nonNull(Matomo.currentUrl)) {\n Matomo.push(['setReferrerUrl', Matomo.currentUrl]);\n }\n Matomo.currentUrl = window.location.pathname + window.location.search;\n Matomo.push(['setCustomUrl', Matomo.currentUrl]);\n Matomo.push(['setDocumentTitle', title]);\n // remove all previously assigned custom variables, requires Matomo (formerly Piwik) 3.0.2\n Matomo.push(['deleteCustomVariables', 'page']);\n Matomo.push(['setGenerationTimeMs', 0]);\n Matomo.push(['trackPageView']);\n // make Matomo aware of newly added content\n var content = document.getElementById('site-content');\n Matomo.push(['MediaAnalytics::scanForMedia', content]);\n Matomo.push(['FormAnalytics::scanForForms', content]);\n Matomo.push(['trackContentImpressionsWithinNode', content]);\n Matomo.push(['enableLinkTracking']);\n }\n static _askIsTracking() {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = new Promise(resolve => {\n Matomo.push([function () {\n resolve(!this[\"isUserOptedOut\"]());\n }]);\n });\n return Matomo.isTrackingPromise;\n });\n }\n static query(method) {\n return __awaiter(this, void 0, void 0, function* () {\n return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {\n \"mode\": \"cors\",\n \"credentials\": \"include\",\n }).then(res => res.text()).then(text => (new window[\"DOMParser\"]()).parseFromString(text, \"text/xml\"));\n });\n }\n static getTrackingPromise() {\n return Matomo.isTrackingPromise;\n }\n static setTrack(shouldTrack) {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = Promise.resolve(shouldTrack);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? \"1\" : \"0\");\n if (shouldTrack) {\n yield Matomo.push([\"forgetUserOptOut\"], true);\n }\n else {\n yield Matomo.push([\"optUserOut\"], true);\n }\n });\n }\n static trackEvent(event, name, label, value) {\n return __awaiter(this, void 0, void 0, function* () {\n let ev = [\"trackEvent\", event, name];\n if (js_helper_1.Helper.isNotNull(label)) {\n ev.push(label);\n }\n if (js_helper_1.Helper.isNotNull(value) && !isNaN(parseFloat(value)) && isFinite(value)) {\n ev.push(value);\n }\n return this.push(ev);\n });\n }\n //TODO Matomo\n static push(arr, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // if (!Array.isArray(arr)) {\n // arr = [arr];\n // }\n // window[\"_paq\"].push(arr);\n });\n }\n}\nexports.Matomo = Matomo;\nMatomo.LOCAL_STORAGE_KEY = \"matomoShouldTrack\";\nMatomo.TRACK_SITE = \"\";\nMatomo.BASE_PATH = \"\";\nMatomo.SIDE_ID = \"1\";\nMatomo.currentUrl = null;\nMatomo.isTrackingPromise = null;\n//# sourceMappingURL=Matomo.js.map","/**\n * View in the database represented in this class.\n */\nvar View = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function View(options) {\n if (options) {\n this.name = options.name;\n this.expression = options.expression;\n this.materialized = !!options.materialized;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n View.prototype.clone = function () {\n return new View({\n name: this.name,\n expression: this.expression,\n materialized: this.materialized,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates view from a given entity metadata.\n */\n View.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n expression: entityMetadata.expression,\n materialized: entityMetadata.tableMetadataArgs.materialized\n };\n return new View(options);\n };\n return View;\n}());\nexport { View };\n\n//# sourceMappingURL=View.js.map\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewInflater = void 0;\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst DataManager_1 = require(\"./DataManager\");\n/**\n * Singleton-Klasse genutzt zum laden von Views\n */\nclass ViewInflater {\n constructor() {\n this.loadingPromises = {};\n }\n /**\n * Statische Funktion, um die Singleton-Instanz zu holen\n *\n * @returns {ViewInflater}\n */\n static getInstance() {\n if (shared_1.Helper.isNull(ViewInflater.instance)) {\n ViewInflater.instance = new ViewInflater();\n }\n return ViewInflater.instance;\n }\n /**\n * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views\n *\n * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann\n *\n * @param viewUrl\n * @param parentUrls\n * @returns {*}\n */\n load(viewUrl, parentUrls) {\n //Kopiere Elemente, damit originale parentURLS nicht verändert werden\n parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, []));\n //Detektiert eine Schleife in den Views\n if (parentUrls.indexOf(viewUrl) !== -1) {\n //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View\n return Promise.reject(\"views are in a circuit! cannot resolve view for url \" + parentUrls[0] + \"! url \" + viewUrl + \" is in stack before!\");\n }\n parentUrls.push(viewUrl);\n //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden\n if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) {\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n let t;\n let resultPromise = Promise.resolve(t);\n if (viewUrl instanceof Element) {\n resultPromise = Promise.resolve(viewUrl);\n }\n else {\n resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(htmlText => {\n let doc = (new DOMParser()).parseFromString(htmlText, \"text/html\");\n //Parsing hat nicht geklappt, also per innerHTML\n if (shared_1.Helper.isNull(doc)) {\n doc = document.implementation.createHTMLDocument('');\n doc.body.innerHTML = htmlText;\n }\n //Wrappe Elemente mit einem Span\n let spanElem = document.createElement(\"span\");\n spanElem.classList.add(\"injected-span\");\n return ViewInflater.moveChildren(doc.body, spanElem);\n });\n }\n this.loadingPromises[viewUrl] = resultPromise.then(parentElement => {\n let promises = [];\n let childViews = parentElement.querySelectorAll(\"[data-view]\");\n //lade Kinder-Views\n childViews.forEach(childView => {\n promises.push(ViewInflater.getInstance().load(childView.dataset[\"view\"], parentUrls).then(element => {\n childView.replaceWith(element);\n ViewInflater.replaceWithChildren(element);\n }));\n });\n return Promise.all(promises).then(function () {\n return parentElement;\n });\n }).catch(e => {\n console.error(e);\n this.loadingPromises[viewUrl] = null;\n throw e;\n });\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n /**\n * Statische Funktion, um Elemente aus einem String zu kreieren\n *\n * @param string\n * @returns {NodeListOf}\n */\n static inflateElementsFromString(string) {\n let template = document.createElement('template');\n template.innerHTML = string;\n return template.content.childNodes;\n }\n /**\n * Kreiert ein Ladesymbol. Evtl entfernen\n *\n * @returns {HTMLDivElement}\n */\n static createLoadingSymbol(loaderClass) {\n let svgNS = \"http://www.w3.org/2000/svg\";\n let loader = document.createElement(\"div\");\n loader.classList.add('loader');\n //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt\n if (loaderClass) {\n loader.classList.add(loaderClass);\n }\n let svg = document.createElementNS(svgNS, \"svg\");\n svg.setAttribute('viewBox', \"0 0 32 32\");\n svg.setAttribute(\"width\", \"32\");\n svg.setAttribute(\"height\", \"32\");\n let circle = document.createElementNS(svgNS, \"circle\");\n circle.setAttribute(\"class\", \"spinner\");\n circle.setAttribute(\"cx\", \"16\");\n circle.setAttribute(\"cy\", \"16\");\n circle.setAttribute(\"r\", \"14\");\n circle.setAttribute(\"fill\", \"none\");\n svg.appendChild(circle);\n loader.appendChild(svg);\n // let loader = document.createElement(\"div\");\n // loader.appendChild(document.createTextNode(\"LOADING...\"));\n return loader;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n return client_1.ViewHelper.moveChildren(from, to);\n }\n /**\n * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen)\n * @param element\n */\n static replaceWithChildren(element) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n element.childNodes.forEach(child => {\n children.push(child);\n });\n let parent = element.parentElement;\n children.forEach(child => {\n element.removeChild(child);\n parent.insertBefore(child, element);\n });\n element.remove();\n }\n}\nexports.ViewInflater = ViewInflater;\nViewInflater.instance = null;\n//# sourceMappingURL=ViewInflater.js.map","/**\n * Database's table exclusion constraint stored in this class.\n */\nvar TableExclusion = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableExclusion(options) {\n this.name = options.name;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableExclusion.prototype.clone = function () {\n return new TableExclusion({\n name: this.name,\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates exclusions from the exclusion metadata object.\n */\n TableExclusion.create = function (exclusionMetadata) {\n return new TableExclusion({\n name: exclusionMetadata.name,\n expression: exclusionMetadata.expression\n });\n };\n return TableExclusion;\n}());\nexport { TableExclusion };\n\n//# sourceMappingURL=TableExclusion.js.map\n","var ApplyValueTransformers = /** @class */ (function () {\n function ApplyValueTransformers() {\n }\n ApplyValueTransformers.transformFrom = function (transformer, databaseValue) {\n if (Array.isArray(transformer)) {\n var reverseTransformers = transformer.slice().reverse();\n return reverseTransformers.reduce(function (transformedValue, _transformer) {\n return _transformer.from(transformedValue);\n }, databaseValue);\n }\n return transformer.from(databaseValue);\n };\n ApplyValueTransformers.transformTo = function (transformer, entityValue) {\n if (Array.isArray(transformer)) {\n return transformer.reduce(function (transformedValue, _transformer) {\n return _transformer.to(transformedValue);\n }, entityValue);\n }\n return transformer.to(entityValue);\n };\n return ApplyValueTransformers;\n}());\nexport { ApplyValueTransformers };\n\n//# sourceMappingURL=ApplyValueTransformers.js.map\n","var RandomGenerator = /** @class */ (function () {\n function RandomGenerator() {\n }\n /**\n * discuss at: http://locutus.io/php/sha1/\n * original by: Webtoolkit.info (http://www.webtoolkit.info/)\n * improved by: Michael White (http://getsprink.com)\n * improved by: Kevin van Zonneveld (http://kvz.io)\n * input by: Brett Zamir (http://brett-zamir.me)\n * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then\n * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly\n * note 1: in a steaming fashion for faster and more efficient hashing\n * example 1: sha1('Kevin van Zonneveld')\n * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'\n */\n RandomGenerator.sha1 = function (str) {\n var _rotLeft = function (n, s) {\n var t4 = (n << s) | (n >>> (32 - s));\n return t4;\n };\n var _cvtHex = function (val) {\n var str = \"\";\n var i;\n var v;\n for (i = 7; i >= 0; i--) {\n v = (val >>> (i * 4)) & 0x0f;\n str += v.toString(16);\n }\n return str;\n };\n var blockstart;\n var i, j;\n var W = new Array(80);\n var H0 = 0x67452301;\n var H1 = 0xEFCDAB89;\n var H2 = 0x98BADCFE;\n var H3 = 0x10325476;\n var H4 = 0xC3D2E1F0;\n var A, B, C, D, E;\n var temp;\n // utf8_encode\n str = /*unescape*/ (encodeURIComponent(str));\n var strLen = str.length;\n var wordArray = [];\n for (i = 0; i < strLen - 3; i += 4) {\n j = str.charCodeAt(i) << 24 |\n str.charCodeAt(i + 1) << 16 |\n str.charCodeAt(i + 2) << 8 |\n str.charCodeAt(i + 3);\n wordArray.push(j);\n }\n switch (strLen % 4) {\n case 0:\n i = 0x080000000;\n break;\n case 1:\n i = str.charCodeAt(strLen - 1) << 24 | 0x0800000;\n break;\n case 2:\n i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000;\n break;\n case 3:\n i = str.charCodeAt(strLen - 3) << 24 |\n str.charCodeAt(strLen - 2) << 16 |\n str.charCodeAt(strLen - 1) <<\n 8 | 0x80;\n break;\n }\n wordArray.push(i);\n while ((wordArray.length % 16) !== 14) {\n wordArray.push(0);\n }\n wordArray.push(strLen >>> 29);\n wordArray.push((strLen << 3) & 0x0ffffffff);\n for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {\n for (i = 0; i < 16; i++) {\n W[i] = wordArray[blockstart + i];\n }\n for (i = 16; i <= 79; i++) {\n W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n }\n A = H0;\n B = H1;\n C = H2;\n D = H3;\n E = H4;\n for (i = 0; i <= 19; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 20; i <= 39; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 40; i <= 59; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 60; i <= 79; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n H0 = (H0 + A) & 0x0ffffffff;\n H1 = (H1 + B) & 0x0ffffffff;\n H2 = (H2 + C) & 0x0ffffffff;\n H3 = (H3 + D) & 0x0ffffffff;\n H4 = (H4 + E) & 0x0ffffffff;\n }\n temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4);\n return temp.toLowerCase();\n };\n /**\n * RFC4122 compliant UUID v4 generator.\n */\n RandomGenerator.uuid4 = function () {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c === \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return RandomGenerator;\n}());\nexport { RandomGenerator };\n\n//# sourceMappingURL=RandomGenerator.js.map\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst NotOnlineError_1 = require(\"./DataManager/NotOnlineError\");\n/**\n * Ein Manager, welches das Laden von Resourcen übernimmt.\n */\nclass DataManager {\n /**\n * Diese Funktion sollte anstelle von dem nativen \"fetch\" verwendet werden!\n * Das native Fetch kann keine file://, welches von Cordova unter Android (und whs iOS) verwendet wird\n * Daher wird heir auf XMLHttpRequest zurückgegriffen\n *\n * @param url\n * @param useArrayBuffer\n * @returns {Promise<*>}\n */\n static fetch(url, useArrayBuffer) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n useArrayBuffer = Helper_1.Helper.nonNull(useArrayBuffer, false);\n if (useArrayBuffer) {\n xhr.responseType = \"arraybuffer\";\n }\n xhr.onload = function () {\n resolve(new Response(useArrayBuffer ? xhr.response : xhr.responseText, { status: (xhr.status === 0) ? 200 : xhr.status }));\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n static fetchBlob(url) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n xhr.onload = function (e) {\n resolve(xhr.response);\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n xhr.responseType = \"blob\";\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET die angegebene URL und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @param useBasePath\n * @returns {Promise<* | void>}\n */\n static load(url, format, useBasePath) {\n return __awaiter(this, void 0, void 0, function* () {\n format = Helper_1.Helper.nonNull(format, true);\n if (format === true) {\n format = \"json\";\n }\n else if (format === false) {\n format = \"text\";\n }\n else if (format !== \"json\" && format !== \"text\") {\n format = \"raw\";\n }\n useBasePath = Helper_1.Helper.nonNull(useBasePath, true);\n if (useBasePath === true) {\n useBasePath = DataManager._basePath;\n }\n else if (typeof useBasePath !== \"string\") {\n useBasePath = \"\";\n }\n url = DataManager.basePath(url, useBasePath);\n return DataManager.fetch(url, format === \"raw\").catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw new NotOnlineError_1.NotOnlineError(e, url);\n }).then(function (res) {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n if (format === \"json\") {\n return res.json();\n }\n else if (format === \"text\") {\n return res.text();\n }\n else {\n return res;\n }\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET das angegebene Asset und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @returns {Promise<* | void>}\n */\n static loadAsset(url, format) {\n return __awaiter(this, void 0, void 0, function* () {\n let assetPath = DataManager._assetBasePath;\n if (!url.startsWith(\"/\") && assetPath.length > 0 && !assetPath.endsWith(\"/\")) {\n assetPath += \"/\";\n }\n return this.load(url, Helper_1.Helper.nonNull(format, \"text\"), assetPath);\n });\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQuery(values) {\n let queryStrings = [];\n for (let k in values) {\n queryStrings.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(values[k]));\n }\n return \"?\" + queryStrings.join(\"&\");\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQueryWithoutNullValues(values) {\n let queryValues = {};\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(values[k])) {\n queryValues[k] = values[k];\n }\n }\n return this.buildQuery(queryValues);\n }\n static send(url, params) {\n return __awaiter(this, void 0, void 0, function* () {\n url = DataManager.basePath(url);\n let headers = {};\n if (!(params instanceof FormData) && typeof params === \"object\") {\n params = JSON.stringify(params);\n headers = {\n \"Content-Type\": \"application/json\"\n };\n }\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n headers[header] = DataManager._additionalHeaders[header];\n });\n return fetch(url, {\n \"credentials\": \"same-origin\",\n \"method\": \"POST\",\n \"headers\": headers,\n \"body\": params,\n }).then(function (res) {\n return res.json();\n }).catch(function (e) {\n debugger;\n console.error(\"error\", e);\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n return {\n \"success\": false,\n \"errors\": [\n \"not-online\"\n ]\n };\n });\n });\n }\n static basePath(url, basePath) {\n basePath = Helper_1.Helper.nonNull(basePath, DataManager._basePath);\n return basePath + ((url) ? url : \"\");\n }\n static setHeader(header, value) {\n DataManager._additionalHeaders[header] = value;\n }\n}\nexports.DataManager = DataManager;\nDataManager.onlineCallback = null;\nDataManager._additionalHeaders = {};\nDataManager._basePath = \"\";\nDataManager._assetBasePath = \"\";\n//# sourceMappingURL=DataManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst defaultMenuTemplate = require(\"../../html/siteTemplates/menuSite.html\");\nconst NavbarFragment_1 = require(\"./Menu/NavbarFragment\");\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Seite benutzt das menuTemplate, welches das ContainerTemplate includiert.\n *\n * Außerdem beinhaltet die MenuSite ein NavbarFragment, wo Menüelemente hinzugefügt werden können\n */\nclass MenuSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für eine MenuSite\n *\n * @param siteManager\n * @param view\n * @param menuTemplate\n */\n constructor(siteManager, view, menuTemplate) {\n super(siteManager, view, Helper_1.Helper.nonNull(menuTemplate, defaultMenuTemplate), \"#site-content\");\n this._navbarFragment = new NavbarFragment_1.NavbarFragment(this);\n this.addFragment(\"#navbar-fragment\", this._navbarFragment);\n }\n getNavbarFragment() {\n return this._navbarFragment;\n }\n /**\n * Während des onConstructs werden die Menüelemente hinzugefügt => aufrufen des onCreateMenu\n *\n * @param constructParameters\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = yield _super.onConstruct.call(this, constructParameters);\n this.onCreateMenu(this._navbarFragment);\n return res;\n });\n }\n onMenuPressed() {\n this._navbarFragment.openMenu();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._navbarFragment.setScrollWidget(this.findBy(\"#main-content-container\"));\n return res;\n });\n }\n /**\n * Überschreibt updateTtle, um Element in der Statusbar zu setzen\n *\n * @protected\n */\n _updateTitle() {\n super._updateTitle();\n if (this._title.element && this._state === Context_1.Context.STATE_RUNNING) {\n this._navbarFragment.setTitleElement(this._title.element);\n }\n }\n /**\n * Überschreiben durch Kinder-Klassen, um ein Menü zu erstellen\n *\n * @param {NavbarFragment} navbar\n */\n onCreateMenu(navbar) { }\n}\nexports.MenuSite = MenuSite;\n//# sourceMappingURL=MenuSite.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is already started and user tries to run it again.\n */\nvar TransactionAlreadyStartedError = /** @class */ (function (_super) {\n __extends(TransactionAlreadyStartedError, _super);\n function TransactionAlreadyStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionAlreadyStartedError\";\n Object.setPrototypeOf(_this, TransactionAlreadyStartedError.prototype);\n _this.message = \"Transaction already started for the given connection, commit current transaction before starting a new one.\";\n return _this;\n }\n return TransactionAlreadyStartedError;\n}(Error));\nexport { TransactionAlreadyStartedError };\n\n//# sourceMappingURL=TransactionAlreadyStartedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when required driver's package is not installed.\n */\nvar DriverPackageNotInstalledError = /** @class */ (function (_super) {\n __extends(DriverPackageNotInstalledError, _super);\n function DriverPackageNotInstalledError(driverName, packageName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverPackageNotInstalledError\";\n Object.setPrototypeOf(_this, DriverPackageNotInstalledError.prototype);\n _this.message = driverName + \" package has not been found installed. Try to install it: npm install \" + packageName + \" --save\";\n return _this;\n }\n return DriverPackageNotInstalledError;\n}(Error));\nexport { DriverPackageNotInstalledError };\n\n//# sourceMappingURL=DriverPackageNotInstalledError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build a query with RETURNING / OUTPUT statement,\n * but used database does not support it.\n */\nvar ReturningStatementNotSupportedError = /** @class */ (function (_super) {\n __extends(ReturningStatementNotSupportedError, _super);\n function ReturningStatementNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"ReturningStatementNotSupportedError\";\n Object.setPrototypeOf(_this, ReturningStatementNotSupportedError.prototype);\n _this.message = \"OUTPUT or RETURNING clause only supported by Microsoft SQL Server or PostgreSQL databases.\";\n return _this;\n }\n return ReturningStatementNotSupportedError;\n}(Error));\nexport { ReturningStatementNotSupportedError };\n\n//# sourceMappingURL=ReturningStatementNotSupportedError.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nimport { Query } from \"../Query\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar AbstractSqliteQueryRunner = /** @class */ (function (_super) {\n __extends(AbstractSqliteQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteQueryRunner() {\n return _super.call(this) || this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AbstractSqliteQueryRunner.prototype.connect = function () {\n return Promise.resolve(this.driver.databaseConnection);\n };\n /**\n * Releases used database connection.\n * We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.\n */\n AbstractSqliteQueryRunner.prototype.release = function () {\n this.loadedTables = [];\n this.clearSqlMemory();\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n AbstractSqliteQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n if (!isolationLevel) return [3 /*break*/, 4];\n if (isolationLevel !== \"READ UNCOMMITTED\" && isolationLevel !== \"SERIALIZABLE\") {\n throw new Error(\"SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation\");\n }\n if (!(isolationLevel === \"READ UNCOMMITTED\")) return [3 /*break*/, 2];\n return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = true\")];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = false\")];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 6];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"BEGIN TRANSACTION\")];\n case 7:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 9];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n AbstractSqliteQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n throw new Error(\"Stream is not supported by sqlite driver.\");\n };\n /**\n * Returns all available database names including system databases.\n */\n AbstractSqliteQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n AbstractSqliteQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"This driver does not support table schemas\");\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n AbstractSqliteQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" = '\" + tableName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n AbstractSqliteQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, columns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"PRAGMA table_info(\\\"\" + tableName + \"\\\")\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n columns = _a.sent();\n return [2 /*return*/, !!columns.find(function (column) { return column[\"name\"] === columnName; })];\n }\n });\n });\n };\n /**\n * Creates a new database.\n */\n AbstractSqliteQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops database.\n */\n AbstractSqliteQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n AbstractSqliteQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops table schema.\n */\n AbstractSqliteQueryRunner.prototype.dropSchema = function (schemaPath, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table.\n */\n AbstractSqliteQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, isTableExist;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _a.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n AbstractSqliteQueryRunner.prototype.dropTable = function (tableOrName, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, table, _a, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(tableOrName)];\n case 1:\n isTableExist = _b.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 3];\n _a = tableOrName;\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 4:\n _a = _b.sent();\n _b.label = 5;\n case 5:\n table = _a;\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n upQueries.push(this.dropTableSql(table, ifExist));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n AbstractSqliteQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n upQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.dropViewSql(view));\n downQueries.push(this.deleteViewDefinitionSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n AbstractSqliteQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _a.sent();\n upQueries = [];\n downQueries = [];\n upQueries.push(this.deleteViewDefinitionSql(view));\n upQueries.push(this.dropViewSql(view));\n downQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var oldTable, _a, newTable, up, down;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n newTable.name = newTableName;\n up = new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTableName + \"\\\"\");\n down = new Query(\"ALTER TABLE \\\"\" + newTableName + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\");\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n // rename old table;\n oldTable.name = newTable.name;\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n foreignKey.name = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n });\n // rename indices\n newTable.indices.forEach(function (index) {\n index.name = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n });\n // recreate table with new constraint names\n return [4 /*yield*/, this.recreateTable(newTable, oldTable)];\n case 5:\n // recreate table with new constraint names\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n return [2 /*return*/, this.addColumns(table, [column])];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) { return changedTable.addColumn(column); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n newColumn = undefined;\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n AbstractSqliteQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n return [4 /*yield*/, this.changeColumns(table, [{ oldColumn: oldColumn, newColumn: newColumn }])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n * Changed column looses all its keys in the db.\n */\n AbstractSqliteQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedColumns.forEach(function (changedColumnSet) {\n if (changedColumnSet.newColumn.name !== changedColumnSet.oldColumn.name) {\n changedTable.findColumnUniques(changedColumnSet.oldColumn).forEach(function (unique) {\n unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n unique.columnNames.push(changedColumnSet.newColumn.name);\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);\n });\n changedTable.findColumnForeignKeys(changedColumnSet.oldColumn).forEach(function (fk) {\n fk.columnNames.splice(fk.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n fk.columnNames.push(changedColumnSet.newColumn.name);\n fk.name = _this.connection.namingStrategy.foreignKeyName(changedTable, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n });\n changedTable.findColumnIndices(changedColumnSet.oldColumn).forEach(function (index) {\n index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n index.columnNames.push(changedColumnSet.newColumn.name);\n index.name = _this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);\n });\n }\n var originalColumn = changedTable.columns.find(function (column) { return column.name === changedColumnSet.oldColumn.name; });\n if (originalColumn)\n changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this.dropColumns(table, [column])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) {\n changedTable.removeColumn(column);\n changedTable.findColumnUniques(column).forEach(function (unique) { return changedTable.removeUniqueConstraint(unique); });\n changedTable.findColumnIndices(column).forEach(function (index) { return changedTable.removeIndex(index); });\n changedTable.findColumnForeignKeys(column).forEach(function (fk) { return changedTable.removeForeignKey(fk); });\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // remove column and its constraints from original table.\n columns.forEach(function (column) {\n table.removeColumn(column);\n table.findColumnUniques(column).forEach(function (unique) { return table.removeUniqueConstraint(unique); });\n table.findColumnIndices(column).forEach(function (index) { return table.removeIndex(index); });\n table.findColumnForeignKeys(column).forEach(function (fk) { return table.removeForeignKey(fk); });\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n AbstractSqliteQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark columns as primary in original table\n table.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n AbstractSqliteQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n AbstractSqliteQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark primary columns as non-primary in original table\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createUniqueConstraints(tableOrName, [uniqueConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.addUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropUniqueConstraints(table, [uniqueConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates an unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.removeUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createCheckConstraints(tableOrName, [checkConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.addCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropCheckConstraints(table, [checkConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.removeCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createForeignKeys(tableOrName, [foreignKey])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.addForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n return [4 /*yield*/, this.dropForeignKeys(tableOrName, [foreignKey])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.removeForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n AbstractSqliteQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n AbstractSqliteQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.createIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.dropIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n AbstractSqliteQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"DELETE FROM \\\"\" + tableName + \"\\\"\")];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n AbstractSqliteQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = OFF;\")];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.startTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n _a.trys.push([3, 9, 14, 16]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'view'\";\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 4:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 5:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" != 'sqlite_sequence'\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 6:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 16];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = ON;\")];\n case 15:\n _a.sent();\n return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n AbstractSqliteQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, viewNamesString, query, dbViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n viewNamesString = viewNames.map(function (name) { return \"'\" + name + \"'\"; }).join(\", \");\n query = \"SELECT \\\"t\\\".* FROM \\\"\" + this.getTypeormMetadataTableName() + \"\\\" \\\"t\\\" INNER JOIN \\\"sqlite_master\\\" s ON \\\"s\\\".\\\"name\\\" = \\\"t\\\".\\\"name\\\" AND \\\"s\\\".\\\"type\\\" = 'view' WHERE \\\"t\\\".\\\"type\\\" = 'VIEW'\";\n if (viewNamesString.length > 0)\n query += \" AND \\\"t\\\".\\\"name\\\" IN (\" + viewNamesString + \")\";\n return [4 /*yield*/, this.query(query)];\n case 2:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n view.name = dbView[\"name\"];\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n AbstractSqliteQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var tableNamesString, dbTables, dbIndicesDef;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n tableNamesString = tableNames.map(function (tableName) { return \"'\" + tableName + \"'\"; }).join(\", \");\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" IN (\" + tableNamesString + \")\")];\n case 1:\n dbTables = _a.sent();\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'index' AND \\\"tbl_name\\\" IN (\" + tableNamesString + \")\")];\n case 2:\n dbIndicesDef = _a.sent();\n // if tables were not found in the db, no need to proceed\n if (!dbTables || !dbTables.length)\n return [2 /*return*/, []];\n // create table schemas for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, sql, _a, dbColumns, dbIndices, dbForeignKeys, autoIncrementColumnName, tableSql, autoIncrementIndex, comma, bracket, tableForeignKeyConstraints, tableUniquePromises, _b, result, regexp, indicesPromises, indices;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n table = new Table({ name: dbTable[\"name\"] });\n sql = dbTable[\"sql\"];\n return [4 /*yield*/, Promise.all([\n this.query(\"PRAGMA table_info(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA index_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA foreign_key_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n ])];\n case 1:\n _a = __read.apply(void 0, [_c.sent(), 3]), dbColumns = _a[0], dbIndices = _a[1], dbForeignKeys = _a[2];\n autoIncrementColumnName = undefined;\n tableSql = dbTable[\"sql\"];\n autoIncrementIndex = tableSql.toUpperCase().indexOf(\"AUTOINCREMENT\");\n if (autoIncrementIndex !== -1) {\n autoIncrementColumnName = tableSql.substr(0, autoIncrementIndex);\n comma = autoIncrementColumnName.lastIndexOf(\",\");\n bracket = autoIncrementColumnName.lastIndexOf(\"(\");\n if (comma !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(comma);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n else if (bracket !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(bracket);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n }\n // create columns from the loaded columns\n table.columns = dbColumns.map(function (dbColumn) {\n var tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"name\"];\n tableColumn.type = dbColumn[\"type\"].toLowerCase();\n tableColumn.default = dbColumn[\"dflt_value\"] !== null && dbColumn[\"dflt_value\"] !== undefined ? dbColumn[\"dflt_value\"] : undefined;\n tableColumn.isNullable = dbColumn[\"notnull\"] === 0;\n // primary keys are numbered starting with 1, columns that aren't primary keys are marked with 0\n tableColumn.isPrimary = dbColumn[\"pk\"] > 0;\n tableColumn.comment = \"\"; // SQLite does not support column comments\n tableColumn.isGenerated = autoIncrementColumnName === dbColumn[\"name\"];\n if (tableColumn.isGenerated) {\n tableColumn.generationStrategy = \"increment\";\n }\n if (tableColumn.type === \"varchar\") {\n // Check if this is an enum\n var enumMatch = sql.match(new RegExp(\"\\\"(\" + tableColumn.name + \")\\\" varchar CHECK\\\\s*\\\\(\\\\s*\\\\1\\\\s+IN\\\\s*\\\\(('[^']+'(?:\\\\s*,\\\\s*'[^']+')+)\\\\s*\\\\)\\\\s*\\\\)\"));\n if (enumMatch) {\n // This is an enum\n tableColumn.enum = enumMatch[2].substr(1, enumMatch[2].length - 2).split(\"','\");\n }\n }\n // parse datatype and attempt to retrieve length, precision and scale\n var pos = tableColumn.type.indexOf(\"(\");\n if (pos !== -1) {\n var fullType = tableColumn.type;\n var dataType_1 = fullType.substr(0, pos);\n if (!!_this.driver.withLengthColumnTypes.find(function (col) { return col === dataType_1; })) {\n var len = parseInt(fullType.substring(pos + 1, fullType.length - 1));\n if (len) {\n tableColumn.length = len.toString();\n tableColumn.type = dataType_1; // remove the length part from the datatype\n }\n }\n if (!!_this.driver.withPrecisionColumnTypes.find(function (col) { return col === dataType_1; })) {\n var re = new RegExp(\"^\" + dataType_1 + \"\\\\((\\\\d+),?\\\\s?(\\\\d+)?\\\\)\");\n var matches = fullType.match(re);\n if (matches && matches[1]) {\n tableColumn.precision = +matches[1];\n }\n if (!!_this.driver.withScaleColumnTypes.find(function (col) { return col === dataType_1; })) {\n if (matches && matches[2]) {\n tableColumn.scale = +matches[2];\n }\n }\n tableColumn.type = dataType_1; // remove the precision/scale part from the datatype\n }\n }\n return tableColumn;\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, function (dbForeignKey) { return dbForeignKey[\"id\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (foreignKey) {\n var ownForeignKeys = dbForeignKeys.filter(function (dbForeignKey) { return dbForeignKey[\"id\"] === foreignKey[\"id\"] && dbForeignKey[\"table\"] === foreignKey[\"table\"]; });\n var columnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"from\"]; });\n var referencedColumnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"to\"]; });\n // build foreign key name, because we can not get it directly.\n var fkName = _this.connection.namingStrategy.foreignKeyName(table, columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n return new TableForeignKey({\n name: fkName,\n columnNames: columnNames,\n referencedTableName: foreignKey[\"table\"],\n referencedColumnNames: referencedColumnNames,\n onDelete: foreignKey[\"on_delete\"],\n onUpdate: foreignKey[\"on_update\"]\n });\n });\n tableUniquePromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"u\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; })\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var dbIndex, indexInfos, indexColumns, column;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n if (indexColumns.length === 1) {\n column = table.columns.find(function (column) {\n return !!indexColumns.find(function (indexColumn) { return indexColumn === column.name; });\n });\n if (column)\n column.isUnique = true;\n }\n // Sqlite does not store unique constraint name, so we generate its name manually.\n return [2 /*return*/, new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table, indexColumns),\n columnNames: indexColumns\n })];\n }\n });\n }); });\n _b = table;\n return [4 /*yield*/, Promise.all(tableUniquePromises)];\n case 2:\n _b.uniques = (_c.sent());\n regexp = /CONSTRAINT \"([^\"]*)\" CHECK (\\(.*?\\))([,]|[)]$)/g;\n while (((result = regexp.exec(sql)) !== null)) {\n table.checks.push(new TableCheck({ name: result[1], expression: result[2] }));\n }\n indicesPromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"c\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; }) // unqiue\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var indexDef, condition, dbIndex, indexInfos, indexColumns, isUnique;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n indexDef = dbIndicesDef.find(function (dbIndexDef) { return dbIndexDef[\"name\"] === dbIndexName; });\n condition = /WHERE (.*)/.exec(indexDef[\"sql\"]);\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n isUnique = dbIndex[\"unique\"] === \"1\" || dbIndex[\"unique\"] === 1;\n return [2 /*return*/, new TableIndex({\n table: table,\n name: dbIndex[\"name\"],\n columnNames: indexColumns,\n isUnique: isUnique,\n where: condition ? condition[1] : undefined\n })];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(indicesPromises)];\n case 3:\n indices = _c.sent();\n table.indices = indices.filter(function (index) { return !!index; });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n AbstractSqliteQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n var hasAutoIncrement = primaryColumns.find(function (column) { return column.isGenerated && column.generationStrategy === \"increment\"; });\n var skipPrimary = primaryColumns.length > 1;\n if (skipPrimary && hasAutoIncrement)\n throw new Error(\"Sqlite does not support AUTOINCREMENT on composite primary key\");\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(column, skipPrimary); }).join(\", \");\n var sql = \"CREATE TABLE \\\"\" + table.name + \"\\\" (\" + columnDefinitions;\n // need for `addColumn()` method, because it recreates table.\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \\\"\" + fk.referencedTableName + \"\\\" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n if (primaryColumns.length > 1) {\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n var tableMetadata = this.connection.entityMetadatas.find(function (metadata) { return metadata.tableName === table.name; });\n if (tableMetadata && tableMetadata.withoutRowid) {\n sql += \" WITHOUT ROWID\";\n }\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n AbstractSqliteQueryRunner.prototype.dropTableSql = function (tableOrName, ifExist) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var query = ifExist ? \"DROP TABLE IF EXISTS \\\"\" + tableName + \"\\\"\" : \"DROP TABLE \\\"\" + tableName + \"\\\"\";\n return new Query(query);\n };\n AbstractSqliteQueryRunner.prototype.createViewSql = function (view) {\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression(this.connection).getQuery());\n }\n };\n AbstractSqliteQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n var expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n var _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", name: view.name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds drop view sql.\n */\n AbstractSqliteQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n return new Query(\"DROP VIEW \\\"\" + viewName + \"\\\"\");\n };\n /**\n * Builds remove view sql.\n */\n AbstractSqliteQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n var qb = this.connection.createQueryBuilder();\n var _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: viewName })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds create index sql.\n */\n AbstractSqliteQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \\\"\" + table.name + \"\\\" (\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n AbstractSqliteQueryRunner.prototype.dropIndexSql = function (indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n return new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds a query for create column.\n */\n AbstractSqliteQueryRunner.prototype.buildCreateColumnSql = function (column, skipPrimary) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column instanceof ColumnMetadata) {\n c += \" \" + this.driver.normalizeType(column);\n }\n else {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.enum)\n c += \" CHECK( \" + column.name + \" IN (\" + column.enum.map(function (val) { return \"'\" + val + \"'\"; }).join(\",\") + \") )\";\n if (column.isPrimary && !skipPrimary)\n c += \" PRIMARY KEY\";\n if (column.isGenerated === true && column.generationStrategy === \"increment\") // don't use skipPrimary here since updates can update already exist primary without auto inc.\n c += \" AUTOINCREMENT\";\n if (column.collation)\n c += \" COLLATE \" + column.collation;\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT (\" + column.default + \")\";\n return c;\n };\n AbstractSqliteQueryRunner.prototype.recreateTable = function (newTable, oldTable, migrateData) {\n if (migrateData === void 0) { migrateData = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, newColumnNames, oldColumnNames;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n // drop old table indices\n oldTable.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(oldTable, index));\n });\n // change table name into 'temporary_table'\n newTable.name = \"temporary_\" + newTable.name;\n // create new table\n upQueries.push(this.createTableSql(newTable, true));\n downQueries.push(this.dropTableSql(newTable));\n // migrate all data from the old table into new table\n if (migrateData) {\n newColumnNames = newTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n oldColumnNames = oldTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n if (oldTable.columns.length < newTable.columns.length) {\n newColumnNames = newTable.columns.filter(function (column) {\n return oldTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n else if (oldTable.columns.length > newTable.columns.length) {\n oldColumnNames = oldTable.columns.filter(function (column) {\n return newTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n upQueries.push(new Query(\"INSERT INTO \\\"\" + newTable.name + \"\\\"(\" + newColumnNames + \") SELECT \" + oldColumnNames + \" FROM \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"INSERT INTO \\\"\" + oldTable.name + \"\\\"(\" + oldColumnNames + \") SELECT \" + newColumnNames + \" FROM \\\"\" + newTable.name + \"\\\"\"));\n }\n // drop old table\n upQueries.push(this.dropTableSql(oldTable));\n downQueries.push(this.createTableSql(oldTable, true));\n // rename old table\n upQueries.push(new Query(\"ALTER TABLE \\\"\" + newTable.name + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTable.name + \"\\\"\"));\n newTable.name = oldTable.name;\n // recreate table indices\n newTable.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(newTable.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(newTable, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n this.replaceCachedTable(oldTable, newTable);\n return [2 /*return*/];\n }\n });\n });\n };\n return AbstractSqliteQueryRunner;\n}(BaseQueryRunner));\nexport { AbstractSqliteQueryRunner };\n\n//# sourceMappingURL=AbstractSqliteQueryRunner.js.map\n","/**\n * Interface for entity metadata mappings stored inside \"schemas\" instead of models decorated by decorators.\n */\nvar EntitySchema = /** @class */ (function () {\n function EntitySchema(options) {\n this.options = options;\n }\n return EntitySchema;\n}());\nexport { EntitySchema };\n\n//# sourceMappingURL=EntitySchema.js.map\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncBaseModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass EasySyncBaseModel extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this._delegate = null;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.version = 1;\n this.deleted = false;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n obj[attribute] = this[attribute];\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"createdAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"updatedAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"version\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n };\n columns[\"deleted\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN\n };\n return columns;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (shared_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version && jsonObject.version !== 0) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns(entities[index]);\n this._handleRelations(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n static prepareSync(entities) {\n return entities;\n }\n}\nexports.EasySyncBaseModel = EasySyncBaseModel;\nEasySyncBaseModel.delegateClass = null;\nEasySyncBaseModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncBaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractFragment = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Ein Fragment ist ein TeilView einer Ansicht.\n */\nclass AbstractFragment extends Context_1.Context {\n /**\n * Erstellt ein neues Fragment\n *\n * @param site\n * @param view\n */\n constructor(site, view) {\n super(view);\n this._site = site;\n this._viewQuery = null;\n this._active = true;\n }\n /**\n * Gibt die zugehörige Seite zurück\n *\n * @returns\n */\n getSite() {\n if (this._site instanceof AbstractFragment) {\n return this._site.getSite();\n }\n return this._site;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.startSite(site, args);\n });\n }\n /**\n * Gibt zurück, ob das Fragment aktiv ist. Wenn nicht, wird es in der Seite nicht angezeigt\n *\n * @returns {boolean}\n */\n isActive() {\n return this._active;\n }\n setViewQuery(query) {\n this._viewQuery = query;\n }\n getViewQuery() {\n return this._viewQuery;\n }\n setActive(active) {\n this._active = active;\n if (Helper_1.Helper.isNotNull(this._view)) {\n if (active) {\n this._view.classList.remove(\"hidden\");\n }\n else {\n this._view.classList.add(\"hidden\");\n }\n }\n }\n}\nexports.AbstractFragment = AbstractFragment;\n//# sourceMappingURL=AbstractFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuAction = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Container für verschiedene Eigenschaften\n */\nclass MenuAction {\n /**\n * Erstellt eine MenuAction.\n * Außer name und action ist alles mit Default-werten vorbelegt\n *\n * @param name\n * @param action\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(name, action, showFor, order, icon) {\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._copies = [];\n this._menu = null;\n this._name = name;\n this._action = action;\n this._showFor = Helper_1.Helper.nonNull(showFor, MenuAction.SHOW_FOR_MEDIUM);\n this._order = Helper_1.Helper.nonNull(order, 1000);\n this._icon = icon;\n this._id = MenuAction.lastId++;\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._menu = null;\n this._copies = [];\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new MenuAction());\n copiedAction._name = this._name;\n copiedAction._action = this._action;\n copiedAction._showFor = this._showFor;\n copiedAction._order = this._order;\n copiedAction._liClass = this._liClass;\n copiedAction._shouldTranslate = this._shouldTranslate;\n copiedAction._visible = this._visible;\n copiedAction._activated = this._activated;\n copiedAction._icon = this._icon;\n copiedAction._id = MenuAction.lastId++;\n this._copies.push(copiedAction);\n return copiedAction;\n // return new MenuActionSlave(this);\n }\n // _triggerCopies(fn, args){\n // this._copies.forEach(copy => {\n // copy[fn].apply(copy, args);\n // })\n // }\n /**\n * Sorgt dafür, dass die Action neu gezeichnet wird\n */\n redraw() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.redrawAction(this);\n }\n this._copies.forEach(copy => copy.redraw());\n }\n /**\n * Sorgt dafür, dass die ActionElemente geupdatet wird\n */\n update() {\n this._menu.updateAction(this);\n this._copies.forEach(copy => copy.update());\n }\n /**\n * Gibt die Order der MenuAction zurück. Die Order bestimmt die Reihenfolge in der die Elemente angezeigt werden.\n * Je kleiner die Order, desto weiter rechts/oben werden diese angezeigt\n *\n * @returns {*}\n */\n getOrder() {\n return this._order;\n }\n /**\n * Gibt zurück, ob die MenuAction aktiv ist\n *\n * @returns {boolean}\n */\n isActivated() {\n return this._activated;\n }\n /**\n * Gibt an, ob der Name übersetzt werden soll\n *\n * @returns {boolean}\n */\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n setShouldTranslate(shouldTranslate) {\n this._shouldTranslate = (shouldTranslate === true);\n this.redraw();\n }\n setVisibility(visibility) {\n this._visible = visibility;\n this.redraw();\n this._copies.forEach(copy => copy.setVisibility(visibility));\n }\n /**\n * Gibt an, ob die MenuAction sichtbar ist\n *\n * @returns {boolean}\n */\n isVisible() {\n return this._visible;\n }\n /**\n * Gibt den Namen zurück\n *\n * @returns {*}\n */\n getName() {\n return this._name;\n }\n setName(name) {\n this._name = name;\n this.redraw();\n }\n /**\n * Gibt die Action, welche beim Click ausgeführt werden soll zurück\n * @returns {string|function}\n */\n getAction() {\n return this._action;\n }\n /**\n * Gibt die ID der MenuAction zurück\n * @returns {number}\n */\n getId() {\n return this._id;\n }\n /**\n * Gibt das Icon der MenuAction zurück\n * @returns {string|null}\n */\n getIcon() {\n return this._icon;\n }\n setIcon(icon) {\n this._icon = icon;\n this.redraw();\n }\n /**\n * Gibt die View-Klasse der Action zurück\n * @returns {string}\n */\n getShowFor() {\n return this._showFor;\n }\n /**\n * Gibt eine odder mehrere extra Klasse zurück, die dem li-Element der Action hinzugefügt werden kann\n * @returns {string}\n */\n getLiClass() {\n return this._liClass;\n }\n setLiClass(cssClass) {\n this._liClass = cssClass;\n this._copies.forEach(c => c.setLiClass(cssClass));\n this.redraw();\n }\n /**\n * Gibt das zugehörige Menu zurück\n *\n * @returns {null}\n */\n getMenu() {\n return this._menu;\n }\n /**\n * Setzt das zugehörige Menu\n *\n * @param menu\n */\n setMenu(menu) {\n this._menu = menu;\n }\n}\nexports.MenuAction = MenuAction;\n/**\n * Letzte ID, die vergeben wurde. Wird beim Erstellen einer Acton um eins erhöht\n * @type {number}\n */\nMenuAction.lastId = 0;\n/**\n * Die SHOW_ALWAYS-Visibility-Klasse\n * Das Element wird bei jeder Größe in der NavBar angezeigt\n *\n * @type {string}\n */\nMenuAction.SHOW_ALWAYS = \"always\";\n/**\n * Die SHOW_FOR_SMEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"SMedium\" (zwischen Small und Medium) hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_SMEDIUM = \"smedium\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Medium\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_MEDIUM = \"medium\";\n/**\n * Die SHOW_FOR_LARGE-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Large\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_LARGE = \"large\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird nie in der NavBar angezeigt, sondern immer nur im aufklapbaren Menu\n *\n * @type {string}\n */\nMenuAction.SHOW_NEVER = \"never\";\n//# sourceMappingURL=MenuAction.js.map","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dialog = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nclass Dialog {\n constructor(content, title) {\n this._resolver = null;\n this._content = null;\n this._backgroundElement = null;\n this._cancelable = true;\n this._title = Helper_1.Helper.nonNull(title, \"\");\n this._translatable = true;\n this._additionalClasses = \"\";\n this._buttons = [];\n this._result = null;\n this._contentPromise = null;\n this._addedToDomePromise = new Promise(r => {\n this._addedToDomePromiseResolver = r;\n });\n if (Helper_1.Helper.isNotNull(content)) {\n this.setContent(content);\n }\n }\n setTitle(title) {\n this._title = title;\n return this;\n }\n setTranslatable(translatable) {\n this._translatable = translatable;\n }\n setAdditionalClasses(classes) {\n this._additionalClasses = classes;\n }\n getTitle() {\n return this._title;\n }\n setCancelable(cancelable) {\n this._cancelable = (cancelable === true);\n return this;\n }\n setContent(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof content === \"string\" && content.endsWith(\".html\")) {\n content = ViewInflater_1.ViewInflater.getInstance().load(content);\n }\n this._contentPromise = Promise.resolve(content);\n this._content = yield this._contentPromise;\n return this;\n });\n }\n addButton(elementOrText, listenerOrResult, shouldClose) {\n shouldClose = Helper_1.Helper.nonNull(shouldClose, true);\n let button = null;\n if (typeof elementOrText === \"string\") {\n button = document.createElement(\"button\");\n button.classList.add(\"button\");\n button.classList.add(\"right\");\n button.appendChild(Translator_1.Translator.makePersistentTranslation(elementOrText));\n }\n else {\n button = elementOrText;\n }\n let self = this;\n if (typeof listenerOrResult !== \"function\") {\n let result = listenerOrResult;\n listenerOrResult = function () {\n self._result = result;\n };\n }\n let callback = null;\n if (shouldClose) {\n callback = function (e) {\n if (Helper_1.Helper.isNotNull(listenerOrResult)) {\n listenerOrResult(e);\n }\n self.close();\n };\n }\n else {\n callback = listenerOrResult;\n }\n if (Helper_1.Helper.isNotNull(callback)) {\n button.addEventListener(\"click\", callback);\n }\n this._buttons.push(button);\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._contentPromise;\n this._backgroundElement = this.createModalDialogElement();\n this._backgroundElement.addEventListener(\"keyup\", e => {\n if (e.key === \"Escape\" && this._cancelable) {\n this.close();\n }\n });\n document.body.appendChild(this._backgroundElement);\n yield Translator_1.Translator.getInstance().updateTranslations();\n this._addedToDomePromiseResolver();\n return new Promise((resolve) => {\n this._resolver = resolve;\n });\n });\n }\n createModalDialogElement() {\n let titleElement = document.createElement(\"span\");\n titleElement.classList.add(\"title\");\n if (this._translatable && this._title !== \"\") {\n titleElement.appendChild(Translator_1.Translator.makePersistentTranslation(this._title));\n }\n else {\n titleElement.innerHTML = this._title;\n }\n let titleBar = document.createElement(\"div\");\n titleBar.appendChild(titleElement);\n let contentContainer = document.createElement(\"div\");\n contentContainer.classList.add(\"content-container\");\n let modalDialog = document.createElement(\"div\");\n modalDialog.className = this._additionalClasses;\n modalDialog.classList.add(\"modal\");\n modalDialog.appendChild(titleBar);\n modalDialog.appendChild(contentContainer);\n let buttonBar = document.createElement(\"div\");\n buttonBar.classList.add(\"modal-button-container\");\n for (let i = 0, n = this._buttons.length; i < n; i++) {\n buttonBar.appendChild(this._buttons[i]);\n }\n if (!(this._content instanceof Node)) {\n this._content = (this._translatable) ? Translator_1.Translator.makePersistentTranslation(this._content) : document.createTextNode(this._content);\n }\n contentContainer.appendChild(this._content);\n this._backgroundElement = document.createElement(\"div\");\n this._backgroundElement.classList.add(\"background\");\n this._backgroundElement.style.display = \"block\";\n this._backgroundElement.appendChild(modalDialog);\n this._backgroundElement.querySelector(\".modal\").appendChild(buttonBar);\n if (this._cancelable) {\n let closeButton = document.createElement(\"span\");\n closeButton.classList.add(\"close\");\n closeButton.innerHTML = \"×\";\n titleBar.appendChild(closeButton);\n closeButton.addEventListener(\"click\", () => {\n this.close();\n });\n window.addEventListener(\"click\", (e) => {\n if (e.target === this._backgroundElement) {\n this.close();\n }\n });\n }\n return this._backgroundElement;\n }\n waitForAddedToDom() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._addedToDomePromise;\n });\n }\n close() {\n this.waitForAddedToDom().then(() => {\n if (Helper_1.Helper.isNotNull(this._backgroundElement)) {\n this._backgroundElement.style.display = \"none\";\n this._backgroundElement.remove();\n this._backgroundElement = null;\n }\n });\n if (Helper_1.Helper.isNotNull(this._resolver)) {\n this._resolver(this._result);\n }\n }\n}\nexports.Dialog = Dialog;\n//# sourceMappingURL=Dialog.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when selected sql driver does not supports locking.\n */\nvar LockNotSupportedOnGivenDriverError = /** @class */ (function (_super) {\n __extends(LockNotSupportedOnGivenDriverError, _super);\n function LockNotSupportedOnGivenDriverError() {\n var _this = _super.call(this) || this;\n _this.name = \"LockNotSupportedOnGivenDriverError\";\n Object.setPrototypeOf(_this, LockNotSupportedOnGivenDriverError.prototype);\n _this.message = \"Locking not supported on given driver.\";\n return _this;\n }\n return LockNotSupportedOnGivenDriverError;\n}(Error));\nexport { LockNotSupportedOnGivenDriverError };\n\n//# sourceMappingURL=LockNotSupportedOnGivenDriverError.js.map\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenSubmenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Action, welche ein Untermenü öffnet\n */\nclass OpenSubmenuAction extends MenuAction_1.MenuAction {\n /**\n * Bekommt ein submenu anstelle einer Action übergeben.\n * Erstellt automatisch die action zum öffnen/schließen des Menüs\n *\n * @param title\n * @param menu\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(title, menu, showFor, order, icon) {\n //Erstellt die action zum schließen/öffnen des Submenüs\n super(title, action => {\n action.getSubmenu().toggle();\n action.update();\n }, showFor, order, icon);\n this._submenu = menu;\n menu.setParentAction(this);\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n * und das Submenu, welches ebenfalls kopiert wird\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n action = Helper_1.Helper.nonNull(action, new OpenSubmenuAction(null, this._submenu.copy()));\n action = super.copy(action);\n action._submenu.setParentAction(action);\n return action;\n }\n /**\n * Gibt das Submenu zurück\n *\n * @returns {*}\n */\n getSubmenu() {\n return this._submenu;\n }\n}\nexports.OpenSubmenuAction = OpenSubmenuAction;\n//# sourceMappingURL=OpenSubmenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserManager = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nclass UserManager {\n constructor() {\n this._defaultUserData = {\n id: null,\n loggedIn: false,\n online: false,\n username: null,\n email: null,\n accesses: UserManager.OFFLINE_ACCESSES,\n };\n this._userData = this._defaultUserData;\n this._lastLoginChangeCallbackId = -1;\n this._loginChangeCallbacks = {};\n this._getMePromise = null;\n }\n addLoginChangeCallback(callback, callImmediately) {\n this._lastLoginChangeCallbackId++;\n this._loginChangeCallbacks[this._lastLoginChangeCallbackId] = callback;\n if (client_1.Helper.nonNull(callImmediately, false)) {\n callback(this._userData.loggedIn, this);\n }\n return this._lastLoginChangeCallbackId;\n }\n hasAccess(access) {\n return (this._userData.accesses.indexOf(access) !== -1);\n }\n _checkChangedLogin(before) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._userData.loggedIn !== before.loggedIn || (this._userData.loggedIn === true && this._userData.id !== before.id)) {\n yield this._callLoginChangeCallbacks();\n }\n });\n }\n _callLoginChangeCallbacks() {\n return __awaiter(this, void 0, void 0, function* () {\n yield client_1.Helper.asyncForEach(Object.keys(this._loginChangeCallbacks), callbackId => {\n this._loginChangeCallbacks[callbackId](this._userData.loggedIn, this);\n }, true);\n });\n }\n getUserData() {\n return this._userData;\n }\n getMe() {\n return __awaiter(this, void 0, void 0, function* () {\n this._getMePromise = new Promise((r) => __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doGetMe();\n yield this._checkChangedLogin(before);\n r(res);\n }));\n return this._getMePromise;\n });\n }\n waitForGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._getMePromise === null) {\n this.getMe();\n }\n yield this._getMePromise;\n });\n }\n login(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogin(email, password, saveLogin);\n //do it after the result is returned\n setTimeout(() => {\n this._checkChangedLogin(before);\n }, 1);\n return res;\n });\n }\n logout() {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogout();\n yield this._checkChangedLogin(before);\n if (!this._userData.loggedIn) {\n yield new client_1.Toast(\"goodbye\").show();\n }\n return res;\n });\n }\n register(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doRegister(email, username, password);\n yield this._checkChangedLogin(before);\n return res;\n });\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager.updateHeaders();\n let data = yield client_1.DataManager.load(\"user\");\n if (client_1.Helper.isSet(data, \"userData\")) {\n yield client_1.NativeStoragePromise.setItem(\"user-data\", data.userData);\n this._userData = data.userData;\n }\n else {\n this._userData = this._defaultUserData;\n }\n this._updateAccessClasses();\n if (client_1.Helper.isSet(data, \"token\")) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n if (client_1.Helper.isNotNull(yield client_1.NativeStoragePromise.getItem(\"auth-token\"))) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n }\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/login\", {\n \"email\": email,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n if (saveLogin) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield this._doGetMe();\n return true;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/register\", {\n \"email\": email,\n \"username\": username,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n /**\n * @returns {UserManager}\n */\n static getInstance() {\n if (!UserManager._instance) {\n UserManager._instance = new UserManager();\n }\n return UserManager._instance;\n }\n static updateHeaders() {\n return __awaiter(this, void 0, void 0, function* () {\n let token = client_1.Helper.nonNull(sessionStorage.getItem(\"auth-token\"), yield client_1.NativeStoragePromise.getItem(\"auth-token\"));\n if (token) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + token);\n }\n });\n }\n _updateAccessClasses() {\n document.body.classList.forEach(cl => {\n if (cl.startsWith(UserManager.ACCESS_CLASS_PREFIX)) {\n document.body.classList.remove(cl);\n }\n });\n this._userData.accesses.forEach(access => {\n document.body.classList.add(UserManager.ACCESS_CLASS_PREFIX + access);\n });\n }\n hasOfflineAccess(access) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isOnline()) {\n return false;\n }\n let offlineData = client_1.Helper.nonNull(yield client_1.NativeStoragePromise.getItem(\"user-data\"), { accesses: UserManager.OFFLINE_ACCESSES });\n return (offlineData.accesses.indexOf(access) !== -1);\n });\n }\n sendForgotPasswordEmail(email) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW\", { email: email });\n return data.success;\n });\n }\n resetPassword(token, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW/2\", { token: token, password: password });\n return data.success;\n });\n }\n isOnline() {\n return this._userData.online;\n }\n isLoggedIn() {\n return this._userData.loggedIn;\n }\n static syncParamFor(model) {\n return {\n model: model,\n where: {\n user: { id: this.getInstance().getUserData().id }\n }\n };\n }\n static userSyncParam() {\n return {\n model: User_1.User,\n where: {\n id: this.getInstance().getUserData().id\n }\n };\n }\n}\nexports.UserManager = UserManager;\nUserManager.ACCESS_CLASS_PREFIX = \"access-\";\nUserManager.OFFLINE_ACCESSES = [\n \"offline\"\n];\n//# sourceMappingURL=UserManager.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to update using QueryBuilder but do not specify what to update.\n */\nvar UpdateValuesMissingError = /** @class */ (function (_super) {\n __extends(UpdateValuesMissingError, _super);\n function UpdateValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"UpdateValuesMissingError\";\n Object.setPrototypeOf(_this, UpdateValuesMissingError.prototype);\n _this.message = \"Cannot perform update query because update values are not defined. Call \\\"qb.set(...)\\\" method to specify updated values.\";\n return _this;\n }\n return UpdateValuesMissingError;\n}(Error));\nexport { UpdateValuesMissingError };\n\n//# sourceMappingURL=UpdateValuesMissingError.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Toast = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ToastManager_1 = require(\"./ToastManager\");\nclass Toast {\n constructor(message, duration, shouldTranslateOrTranslationArgs) {\n this._message = message;\n this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION);\n this._shouldTranslate = shouldTranslateOrTranslationArgs !== false;\n this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []);\n this._id = Toast.LAST_ID++;\n this._toastElement = null;\n }\n getId() {\n return this._id;\n }\n getMessage() {\n return this._message;\n }\n getDuration() {\n return this._duration;\n }\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n getTranslationArgs() {\n return this._translationArgs;\n }\n setToastElement(element) {\n this._toastElement = element;\n }\n getToastElement() {\n return this._toastElement;\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().showToast(this);\n });\n }\n hide() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().hideToast(this);\n });\n }\n}\nexports.Toast = Toast;\nToast.LAST_ID = 0;\nToast.DEFAULT_DURATION = 2500;\n//# sourceMappingURL=Toast.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when an optimistic lock cannot be used in query builder.\n */\nvar OptimisticLockCanNotBeUsedError = /** @class */ (function (_super) {\n __extends(OptimisticLockCanNotBeUsedError, _super);\n function OptimisticLockCanNotBeUsedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockCanNotBeUsedError\";\n Object.setPrototypeOf(_this, OptimisticLockCanNotBeUsedError.prototype);\n _this.message = \"The optimistic lock can be used only with getOne() method.\";\n return _this;\n }\n return OptimisticLockCanNotBeUsedError;\n}(Error));\nexport { OptimisticLockCanNotBeUsedError };\n\n//# sourceMappingURL=OptimisticLockCanNotBeUsedError.js.map\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\n/**\n * Basis-Klasse für Seiten und Fragmente\n */\nclass Context {\n /**\n * Erstellt einen neuen Context. Erwartet den Link zu einem HTML-File, welches vom ViewInflater geladen werden kann.\n * Im Constructor sollten fragmente hinzugefügt werden (nachdem super.constructor(<>) aufgerufen wurde)\n *\n * @param view\n */\n constructor(view) {\n this.onViewLoadedCalled = false;\n this._pauseParameters = [];\n this._view = null;\n this._fragments = [];\n this._state = Context.STATE_CREATED;\n this._viewLoadedPromise = Helper_1.Helper.newPromiseWithResolve();\n this._viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then((siteContent) => {\n this._view = siteContent;\n return siteContent;\n }).catch(e => {\n // @ts-ignore\n this._viewLoadedPromise.reject(e);\n });\n }\n getState() {\n return this._state;\n }\n /**\n * Wird von SiteManager aufgerufen, wenn Klasse erstellt wird. Das ViewPromise ist noch nicht zwangsweise geladen!\n * Gibt ein Promise zurück. onViewLoaded wird erst aufgerufen, wenn onConstruct-Promise und view-Promise fullfilled sind.\n *\n * @param constructParameters, Object|Null\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_CONSTRUCTED;\n this.constructParameters = constructParameters;\n let onConstructPromises = [];\n for (let k in this._fragments) {\n onConstructPromises.push(this._fragments[k].onConstruct.apply(this._fragments[k], [constructParameters]));\n onConstructPromises.push(this._fragments[k]._viewPromise);\n }\n return Promise.all(onConstructPromises);\n });\n }\n callOnViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.onViewLoadedCalled) {\n this.onViewLoadedCalled = true;\n const res = yield this.onViewLoaded();\n // @ts-ignore\n this._viewLoadedPromise.resolve(res);\n }\n return this._viewLoadedPromise;\n });\n }\n /**\n * Methode wird aufgerufen, sobald onConstruct-Promise und view-Promise fullfilled sind.\n * View ist hier noch nicht im Dokument hinzugefügt.\n *\n * Benutze diese Methode, um die View beim starten zu manipulieren.\n */\n onViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_VIEW_LOADED;\n let onViewLoadedPromises = [];\n for (let k in this._fragments) {\n onViewLoadedPromises.push(this._fragments[k]._viewPromise.then(() => this._fragments[k].callOnViewLoaded()).then(() => this._fragments[k]._viewLoadedPromise.resolve()));\n }\n return Promise.all(onViewLoadedPromises);\n });\n }\n /**\n * onViewLoaded-Promise ist erfüllt => View wird dem Document hinzugefügt => onStart wird aufgerufen\n *\n * Seite wird pausiert => onPause wird aufgerufen => View wird aus dem Document entfernt => - etwas passiert -\n * => Seite wird fortgesetzt => View wird dem Document hinzugefügt => onStart wird mit dem Rückgabewert von onPause ausgeführt\n *\n * Zurückgegebenes Promise wird ignoriert!\n * @param pauseArguments, Object|NULL\n */\n onStart(pauseArguments) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_RUNNING;\n for (let k in this._fragments) {\n let fragment = this._fragments[k];\n fragment.onStart.apply(this._fragments[k], [yield this._fragments[k]._pauseParameters]);\n this._fragments[k]._viewPromise.then(function (fragmentView) {\n if (fragment.isActive()) {\n fragmentView.classList.remove(\"hidden\");\n }\n else {\n fragmentView.classList.add(\"hidden\");\n }\n });\n }\n });\n }\n /**\n * Seite wird pausiet => onPause wird ausgeführt => View wird aus dem Document entfernt\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird als Pause-Parameter gespeichert und wird beim Fortsetzen der Seite ausgeführt\n * @returns {Promise}\n */\n onPause(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_PAUSED;\n for (let k in this._fragments) {\n let pauseParameters = this._fragments[k].onPause.apply(this._fragments[k], args);\n this._fragments[k].setPauseParameters(pauseParameters);\n }\n });\n }\n /**\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird ignoriert\n */\n onDestroy(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_DESTROYED;\n for (let k in this._fragments) {\n this._fragments[k].onDestroy.apply(this._fragments[k], args);\n }\n });\n }\n isShowing() {\n return this._state === Context.STATE_RUNNING;\n }\n /**\n * Fügt ein neues Fragment hinzu.\n *\n * @param viewQuery\n * @param fragment\n */\n addFragment(viewQuery, fragment) {\n this._fragments.push(fragment);\n fragment.setViewQuery(viewQuery);\n this._viewPromise = Promise.all([this._viewPromise, fragment._viewPromise]).then(res => {\n res[0].querySelector(viewQuery).appendChild(res[1]);\n return res[0];\n }).catch(e => console.error(e));\n if (this._state >= Context.STATE_CONSTRUCTED) {\n fragment.onConstruct(this.constructParameters);\n }\n if (this._state >= Context.STATE_VIEW_LOADED) {\n Promise.all([this._viewLoadedPromise, fragment.getViewPromise()]).then(() => fragment.callOnViewLoaded());\n }\n if (this._state >= Context.STATE_RUNNING) {\n fragment._viewLoadedPromise.then(() => {\n if (this._state >= Context.STATE_RUNNING) {\n fragment.onStart();\n }\n });\n }\n }\n /**\n * Entfernt ein Fragment.\n *\n * @param fragment\n */\n removeFragment(fragment) {\n const index = this._fragments.indexOf(fragment);\n if (index !== -1) {\n this._fragments.splice(index, 1);\n }\n fragment._viewPromise.then(res => res.remove());\n this._fragments.push(fragment);\n if (this._state < Context.STATE_PAUSED) {\n fragment.onPause();\n }\n if (this._state < Context.STATE_DESTROYING) {\n fragment.onDestroy();\n }\n }\n /**\n * Findet ein Element anhand eines Selectors\n *\n * Wenn all = true, werden alle gefundenen Elemente zurückgegeben\n *\n * Wenn asPromise = true, wird das Ergebnis als Promise zurückgegeben. Hier wird gewartet, bis das _viewPromise fullfilled ist\n * Nutze das, um die View in onConstruct zu manipulieren. Evtl entfernen\n *\n * @param query\n * @param all\n * @param asPromise\n * @returns {*}\n */\n findBy(query, all, asPromise) {\n all = Helper_1.Helper.nonNull(all, false);\n asPromise = Helper_1.Helper.nonNull(asPromise, false);\n let getVal = function (root) {\n let res = null;\n if (all) {\n res = root.querySelectorAll(query);\n if (root.matches(query)) {\n res.push(root);\n }\n }\n else {\n if (root.matches(query)) {\n res = root;\n }\n else {\n res = root.querySelector(query);\n }\n }\n return res;\n };\n if (asPromise) {\n return this._viewPromise.then(function (rootView) {\n return getVal(rootView);\n });\n }\n return getVal(this._view);\n }\n find(selector) {\n if (this._view.matches(selector)) {\n return this._view;\n }\n else {\n return this._view.querySelector(selector);\n }\n }\n findAll(selector) {\n const res = this._view.querySelectorAll(selector);\n if (this._view.matches(selector)) {\n res.push(this._view);\n }\n return res;\n }\n /**\n * Setzt die PauseParameters\n * @param pauseParameters\n */\n setPauseParameters(pauseParameters) {\n this._pauseParameters = pauseParameters;\n }\n /**\n * Gibt das ViewPromise zurück\n * @returns {*}\n */\n getViewPromise() {\n return this._viewPromise;\n }\n}\nexports.Context = Context;\nContext.STATE_CREATED = 0;\nContext.STATE_CONSTRUCTED = 1;\nContext.STATE_VIEW_LOADED = 2;\nContext.STATE_RUNNING = 3;\nContext.STATE_PAUSED = 4;\nContext.STATE_DESTROYING = 5;\nContext.STATE_DESTROYED = 6;\n//# sourceMappingURL=Context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.User = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Role_1 = require(\"./Role\");\nclass User extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.username = null;\n this.email = null;\n this.password = null;\n this.roles = null;\n this.activated = false;\n this.blocked = false;\n this.salt = null;\n }\n toJSON() {\n return {\n id: this.id,\n username: this.username,\n };\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"username\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"email\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"password\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"activated\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"blocked\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"salt\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"roles\"] = {\n target: Role_1.Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"userRole\"\n },\n cascade: false\n };\n return relations;\n }\n static prepareSync(entities) {\n let jsonEntities = [];\n entities.forEach(entity => {\n let jsonEntity = {};\n jsonEntity.id = entity.id;\n jsonEntity.createdAt = new Date();\n jsonEntity.updatedAt = new Date();\n jsonEntity.username = \"\";\n jsonEntity.email = \"\";\n jsonEntity.password = \"\";\n jsonEntity.salt = \"\";\n jsonEntity.activated = 1;\n jsonEntity.blocked = 1;\n jsonEntity.version = 1;\n jsonEntity.deleted = 0;\n jsonEntities.push(jsonEntity);\n });\n return jsonEntities;\n }\n}\nexports.User = User;\ncordova_sites_database_1.BaseDatabase.addModel(User);\n//# sourceMappingURL=User.js.map","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when no result could be found in methods which are not allowed to return undefined or an empty set.\n */\nvar EntityNotFoundError = /** @class */ (function (_super) {\n __extends(EntityNotFoundError, _super);\n function EntityNotFoundError(entityClass, criteria) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityNotFound\";\n Object.setPrototypeOf(_this, EntityNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n var criteriaString = _this.stringifyCriteria(criteria);\n _this.message = \"Could not find any entity of type \\\"\" + targetName + \"\\\" matching: \" + criteriaString;\n return _this;\n }\n EntityNotFoundError.prototype.stringifyCriteria = function (criteria) {\n try {\n return JSON.stringify(criteria, null, 4);\n }\n catch (e) { }\n return \"\" + criteria;\n };\n return EntityNotFoundError;\n}(Error));\nexport { EntityNotFoundError };\n\n//# sourceMappingURL=EntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n *\n */\nvar EntityColumnNotFound = /** @class */ (function (_super) {\n __extends(EntityColumnNotFound, _super);\n function EntityColumnNotFound(propertyPath) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityColumnNotFound\";\n Object.setPrototypeOf(_this, EntityColumnNotFound.prototype);\n _this.message = \"No entity column \\\"\" + propertyPath + \"\\\" was found.\";\n return _this;\n }\n return EntityColumnNotFound;\n}(Error));\nexport { EntityColumnNotFound };\n\n//# sourceMappingURL=EntityColumnNotFound.js.map\n","/**\n * Result object returned by UpdateQueryBuilder execution.\n */\nvar UpdateResult = /** @class */ (function () {\n function UpdateResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n // identifier: ObjectLiteral[] = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return UpdateResult;\n}());\nexport { UpdateResult };\n\n//# sourceMappingURL=UpdateResult.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build an UPDATE query with LIMIT but the database does not support it.\n*/\nvar LimitOnUpdateNotSupportedError = /** @class */ (function (_super) {\n __extends(LimitOnUpdateNotSupportedError, _super);\n function LimitOnUpdateNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"LimitOnUpdateNotSupportedError\";\n Object.setPrototypeOf(_this, LimitOnUpdateNotSupportedError.prototype);\n _this.message = \"Your database does not support LIMIT on UPDATE statements.\";\n return _this;\n }\n return LimitOnUpdateNotSupportedError;\n}(Error));\nexport { LimitOnUpdateNotSupportedError };\n\n//# sourceMappingURL=LimitOnUpdateNotSupportedError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection, queryRunner, relationIdAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationIdAttributes = relationIdAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n promises = this.relationIdAttributes.map(function (relationIdAttr) { return __awaiter(_this, void 0, void 0, function () {\n var duplicates_1, results, relation_1, joinColumns_1, table, tableName, tableAlias_1, duplicates_2, parameters_1, condition, qb_1, results, relation, joinColumns_2, inverseJoinColumns_1, junctionAlias_1, inverseSideTableName, inverseSideTableAlias_1, junctionTableName, mappedColumns, parameters_2, duplicates_3, joinColumnConditions, inverseJoinColumnCondition_1, condition, qb_2, results;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner)) return [3 /*break*/, 1];\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n if (relationIdAttr.queryBuilderFactory)\n throw new Error(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n duplicates_1 = [];\n results = rawEntities.map(function (rawEntity) {\n var result = {};\n var duplicateParts = [];\n relationIdAttr.relation.joinColumns.forEach(function (joinColumn) {\n result[joinColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn);\n var duplicatePart = joinColumn.databaseName + \":\" + result[joinColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n result[primaryColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n var duplicatePart = primaryColumn.databaseName + \":\" + result[primaryColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_1.indexOf(duplicate) !== -1) {\n return null;\n }\n duplicates_1.push(duplicate);\n return result;\n }).filter(function (v) { return v; });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 1:\n if (!(relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner)) return [3 /*break*/, 3];\n relation_1 = relationIdAttr.relation;\n joinColumns_1 = relation_1.isOwning ? relation_1.joinColumns : relation_1.inverseRelation.joinColumns;\n table = relation_1.inverseEntityMetadata.target;\n tableName = relation_1.inverseEntityMetadata.tableName;\n tableAlias_1 = relationIdAttr.alias || tableName;\n duplicates_2 = [];\n parameters_1 = {};\n condition = rawEntities.map(function (rawEntity, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = joinColumns_1.map(function (joinColumn) {\n var parameterName = joinColumn.databaseName + index;\n var parameterValue = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n var duplicatePart = tableAlias_1 + \":\" + joinColumn.propertyPath + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias_1 + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(function (v) { return v; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_2.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_2.push(duplicate);\n Object.assign(parameters_1, parameterParts);\n return queryPart;\n }).filter(function (v) { return v; }).map(function (condition) { return \"(\" + condition + \")\"; })\n .join(\" OR \");\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n qb_1 = this.connection.createQueryBuilder(this.queryRunner);\n joinColumns_1.forEach(function (joinColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n qb_1.from(table, tableAlias_1)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters_1);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_1);\n return [4 /*yield*/, qb_1.getRawMany()];\n case 2:\n results = _a.sent();\n results.forEach(function (result) {\n joinColumns_1.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 3:\n relation = relationIdAttr.relation;\n joinColumns_2 = relation.isOwning ? relation.joinColumns : relation.inverseRelation.inverseJoinColumns;\n inverseJoinColumns_1 = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation.joinColumns;\n junctionAlias_1 = relationIdAttr.junctionAlias;\n inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias_1 = relationIdAttr.alias || inverseSideTableName;\n junctionTableName = relation.isOwning ? relation.junctionEntityMetadata.tableName : relation.inverseRelation.junctionEntityMetadata.tableName;\n mappedColumns = rawEntities.map(function (rawEntity) {\n return joinColumns_2.reduce(function (map, joinColumn) {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n return map;\n }, {});\n });\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n parameters_2 = {};\n duplicates_3 = [];\n joinColumnConditions = mappedColumns.map(function (mappedColumn, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = Object.keys(mappedColumn).map(function (key) {\n var parameterName = key + index;\n var parameterValue = mappedColumn[key];\n var duplicatePart = junctionAlias_1 + \":\" + key + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias_1 + \".\" + key + \" = :\" + parameterName;\n }).filter(function (s) { return s; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_3.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_3.push(duplicate);\n Object.assign(parameters_2, parameterParts);\n return queryPart;\n }).filter(function (s) { return s; });\n inverseJoinColumnCondition_1 = inverseJoinColumns_1.map(function (joinColumn) {\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias_1 + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n condition = joinColumnConditions.map(function (condition) {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition_1 + \")\";\n }).join(\" OR \");\n qb_2 = this.connection.createQueryBuilder(this.queryRunner);\n inverseJoinColumns_1.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n joinColumns_2.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n qb_2.from(inverseSideTableName, inverseSideTableAlias_1)\n .innerJoin(junctionTableName, junctionAlias_1, condition)\n .setParameters(parameters_2);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_2);\n return [4 /*yield*/, qb_2.getRawMany()];\n case 4:\n results = _a.sent();\n results.forEach(function (result) {\n __spreadArray(__spreadArray([], __read(joinColumns_2)), __read(inverseJoinColumns_1)).forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { RelationIdAttribute } from \"./RelationIdAttribute\";\nvar RelationIdMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation id:\n // @RelationId(post => post.categories) categoryIds\n // category has relation id\n // @RelationId(category => category.images) imageIds\n // we load post and join category\n // we expect post.categoryIds and post.category.imageIds to have relation ids\n var _this = this;\n // first create relation id attributes for all relation id metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n }\n // second create relation id attributes for all relation id metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation id can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationId) {\n return new RelationIdAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationId.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationId.propertyName,\n alias: relationId.alias,\n queryBuilderFactory: relationId.queryBuilderFactory\n });\n };\n return RelationIdMetadataToAttributeTransformer;\n}());\nexport { RelationIdMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationIdMetadataToAttributeTransformer.js.map\n","import { __awaiter, __generator } from \"tslib\";\nvar RelationCountLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountLoader(connection, queryRunner, relationCountAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationCountAttributes = relationCountAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var onlyUnique, promises;\n var _this = this;\n return __generator(this, function (_a) {\n onlyUnique = function (value, index, self) {\n return self.indexOf(value) === index;\n };\n promises = this.relationCountAttributes.map(function (relationCountAttr) { return __awaiter(_this, void 0, void 0, function () {\n var relation, inverseRelation, referenceColumnName_1, inverseSideTable, inverseSideTableName, inverseSideTableAlias, inverseSidePropertyName, referenceColumnValues, qb, joinTableColumnName_1, inverseJoinColumnName, firstJunctionColumn, secondJunctionColumn, referenceColumnValues, junctionAlias, inverseSideTableName, inverseSideTableAlias, junctionTableName, condition, qb;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!relationCountAttr.relation.isOneToMany) return [3 /*break*/, 2];\n relation = relationCountAttr.relation;\n inverseRelation = relation.inverseRelation;\n referenceColumnName_1 = inverseRelation.joinColumns[0].referencedColumn.propertyName;\n inverseSideTable = relation.inverseEntityMetadata.target;\n inverseSideTableName = relation.inverseEntityMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n inverseSidePropertyName = inverseRelation.propertyName;\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + referenceColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(inverseSideTableAlias + \".\" + inverseSidePropertyName, \"parentId\")\n .addSelect(\"COUNT(*)\", \"cnt\")\n .from(inverseSideTable, inverseSideTableAlias)\n .where(inverseSideTableAlias + \".\" + inverseSidePropertyName + \" IN (:...ids)\")\n .addGroupBy(inverseSideTableAlias + \".\" + inverseSidePropertyName)\n .setParameter(\"ids\", referenceColumnValues);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _a = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 1: return [2 /*return*/, (_a.results = _c.sent(),\n _a)];\n case 2:\n inverseJoinColumnName = void 0;\n firstJunctionColumn = void 0;\n secondJunctionColumn = void 0;\n if (relationCountAttr.relation.isOwning) { // todo fix joinColumns[0] and inverseJoinColumns[0].\n joinTableColumnName_1 = relationCountAttr.relation.joinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseJoinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n }\n else {\n joinTableColumnName_1 = relationCountAttr.relation.inverseRelation.inverseJoinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n }\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + joinTableColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n junctionAlias = relationCountAttr.junctionAlias;\n inverseSideTableName = relationCountAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n junctionTableName = relationCountAttr.relation.junctionEntityMetadata.tableName;\n condition = junctionAlias + \".\" + firstJunctionColumn.propertyName + \" IN (\" + referenceColumnValues.map(function (vals) { return isNaN(vals) ? \"'\" + vals + \"'\" : vals; }) + \")\" +\n \" AND \" + junctionAlias + \".\" + secondJunctionColumn.propertyName + \" = \" + inverseSideTableAlias + \".\" + inverseJoinColumnName;\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(junctionAlias + \".\" + firstJunctionColumn.propertyName, \"parentId\")\n .addSelect(\"COUNT(\" + qb.escape(inverseSideTableAlias) + \".\" + qb.escape(inverseJoinColumnName) + \")\", \"cnt\")\n .from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .addGroupBy(junctionAlias + \".\" + firstJunctionColumn.propertyName);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _b = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 3: return [2 /*return*/, (_b.results = _c.sent(),\n _b)];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationCountLoader;\n}());\nexport { RelationCountLoader };\n\n//# sourceMappingURL=RelationCountLoader.js.map\n","import { RelationCountAttribute } from \"./RelationCountAttribute\";\nvar RelationCountMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation count:\n // @RelationCount(post => post.categories) categoryCount\n // category has relation count\n // @RelationCount(category => category.images) imageCount\n // we load post and join category\n // we expect post.categoryCount and post.category.imageCount to have relation counts\n var _this = this;\n // first create relation count attributes for all relation count metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n }\n // second create relation count attributes for all relation count metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation count can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationCount) {\n return new RelationCountAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationCount.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationCount.propertyName,\n alias: relationCount.alias,\n queryBuilderFactory: relationCount.queryBuilderFactory\n });\n };\n return RelationCountMetadataToAttributeTransformer;\n}());\nexport { RelationCountMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationCountMetadataToAttributeTransformer.js.map\n","import { __awaiter, __extends, __generator, __read, __spreadArray } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { RawSqlResultsToEntityTransformer } from \"./transformer/RawSqlResultsToEntityTransformer\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PessimisticLockTransactionRequiredError } from \"../error/PessimisticLockTransactionRequiredError\";\nimport { NoVersionOrUpdateDateColumnError } from \"../error/NoVersionOrUpdateDateColumnError\";\nimport { OptimisticLockVersionMismatchError } from \"../error/OptimisticLockVersionMismatchError\";\nimport { OptimisticLockCanNotBeUsedError } from \"../error/OptimisticLockCanNotBeUsedError\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\nimport { RelationIdLoader } from \"./relation-id/RelationIdLoader\";\nimport { RelationIdMetadataToAttributeTransformer } from \"./relation-id/RelationIdMetadataToAttributeTransformer\";\nimport { RelationCountLoader } from \"./relation-count/RelationCountLoader\";\nimport { RelationCountMetadataToAttributeTransformer } from \"./relation-count/RelationCountMetadataToAttributeTransformer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { LockNotSupportedOnGivenDriverError } from \"../error/LockNotSupportedOnGivenDriverError\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { OffsetWithoutLimitNotSupportedError } from \"../error/OffsetWithoutLimitNotSupportedError\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SelectQueryBuilder = /** @class */ (function (_super) {\n __extends(SelectQueryBuilder, _super);\n function SelectQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SelectQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createSelectExpression();\n sql += this.createJoinExpression();\n sql += this.createWhereExpression();\n sql += this.createGroupByExpression();\n sql += this.createHavingExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitOffsetExpression();\n sql += this.createLockExpression();\n sql = sql.trim();\n if (this.expressionMap.subQuery)\n sql = \"(\" + sql + \")\";\n return sql;\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a subquery - query that can be used inside other queries.\n */\n SelectQueryBuilder.prototype.subQuery = function () {\n var qb = this.createQueryBuilder();\n qb.expressionMap.subQuery = true;\n qb.expressionMap.parentQueryBuilder = this;\n return qb;\n };\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n SelectQueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n return this;\n };\n /**\n * Adds new selection to the SELECT query.\n */\n SelectQueryBuilder.prototype.addSelect = function (selection, selectionAliasName) {\n if (!selection)\n return this;\n if (Array.isArray(selection)) {\n this.expressionMap.selects = this.expressionMap.selects.concat(selection.map(function (selection) { return ({ selection: selection }); }));\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects.push({ selection: selection, aliasName: selectionAliasName });\n }\n return this;\n };\n /**\n * Sets whether the selection is DISTINCT.\n */\n SelectQueryBuilder.prototype.distinct = function (distinct) {\n if (distinct === void 0) { distinct = true; }\n this.expressionMap.selectDistinct = distinct;\n return this;\n };\n /**\n * Sets the distinct on clause for Postgres.\n */\n SelectQueryBuilder.prototype.distinctOn = function (distinctOn) {\n this.expressionMap.selectDistinctOn = distinctOn;\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n * Removes all previously set from-s.\n */\n SelectQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SelectQueryBuilder.prototype.addFrom = function (entityTarget, aliasName) {\n var alias = this.createFromAlias(entityTarget, aliasName);\n if (!this.expressionMap.mainAlias)\n this.expressionMap.setMainAlias(alias);\n return this;\n };\n /**\n * INNER JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.innerJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.leftJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs relation id and maps it into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationIdAndMap = function (mapToProperty, relationName, aliasNameOrOptions, queryBuilderFactory) {\n var relationIdAttribute = new RelationIdAttribute(this.expressionMap);\n relationIdAttribute.mapToProperty = mapToProperty;\n relationIdAttribute.relationName = relationName;\n if (typeof aliasNameOrOptions === \"string\")\n relationIdAttribute.alias = aliasNameOrOptions;\n if (aliasNameOrOptions instanceof Object && aliasNameOrOptions.disableMixedMap)\n relationIdAttribute.disableMixedMap = true;\n relationIdAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationIdAttributes.push(relationIdAttribute);\n if (relationIdAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationIdAttribute.junctionAlias,\n metadata: relationIdAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Counts number of entities of entity's relation and maps the value into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationCountAndMap = function (mapToProperty, relationName, aliasName, queryBuilderFactory) {\n var relationCountAttribute = new RelationCountAttribute(this.expressionMap);\n relationCountAttribute.mapToProperty = mapToProperty;\n relationCountAttribute.relationName = relationName;\n relationCountAttribute.alias = aliasName;\n relationCountAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationCountAttributes.push(relationCountAttribute);\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias\n });\n if (relationCountAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias,\n metadata: relationCountAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Loads all relation ids for all relations of the selected entity.\n * All relation ids will be mapped to relation property themself.\n * If array of strings is given then loads only relation ids of the given properties.\n */\n SelectQueryBuilder.prototype.loadAllRelationIds = function (options) {\n var _this = this;\n this.expressionMap.mainAlias.metadata.relations.forEach(function (relation) {\n if (options !== undefined && options.relations !== undefined && options.relations.indexOf(relation.propertyPath) === -1)\n return;\n _this.loadRelationIdAndMap(_this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, _this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, options);\n });\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Sets HAVING condition in the query builder.\n * If you had previously HAVING expression defined,\n * calling this function will override previously set HAVING conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.having = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"simple\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"and\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"or\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Sets GROUP BY condition in the query builder.\n * If you had previously GROUP BY expression defined,\n * calling this function will override previously set GROUP BY conditions.\n */\n SelectQueryBuilder.prototype.groupBy = function (groupBy) {\n if (groupBy) {\n this.expressionMap.groupBys = [groupBy];\n }\n else {\n this.expressionMap.groupBys = [];\n }\n return this;\n };\n /**\n * Adds GROUP BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addGroupBy = function (groupBy) {\n this.expressionMap.groupBys.push(groupBy);\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SelectQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Set's LIMIT - maximum number of rows to be selected.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead take method instead.\n */\n SelectQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = this.normalizeNumber(limit);\n if (this.expressionMap.limit !== undefined && isNaN(this.expressionMap.limit))\n throw new Error(\"Provided \\\"limit\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Set's OFFSET - selection offset.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead skip method instead.\n */\n SelectQueryBuilder.prototype.offset = function (offset) {\n this.expressionMap.offset = this.normalizeNumber(offset);\n if (this.expressionMap.offset !== undefined && isNaN(this.expressionMap.offset))\n throw new Error(\"Provided \\\"offset\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets maximal number of entities to take.\n */\n SelectQueryBuilder.prototype.take = function (take) {\n this.expressionMap.take = this.normalizeNumber(take);\n if (this.expressionMap.take !== undefined && isNaN(this.expressionMap.take))\n throw new Error(\"Provided \\\"take\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets number of entities to skip.\n */\n SelectQueryBuilder.prototype.skip = function (skip) {\n this.expressionMap.skip = this.normalizeNumber(skip);\n if (this.expressionMap.skip !== undefined && isNaN(this.expressionMap.skip))\n throw new Error(\"Provided \\\"skip\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets locking mode.\n */\n SelectQueryBuilder.prototype.setLock = function (lockMode, lockVersion, lockTables) {\n this.expressionMap.lockMode = lockMode;\n this.expressionMap.lockVersion = lockVersion;\n this.expressionMap.lockTables = lockTables;\n return this;\n };\n /**\n * Disables the global condition of \"non-deleted\" for the entity with delete date columns.\n */\n SelectQueryBuilder.prototype.withDeleted = function () {\n this.expressionMap.withDeleted = true;\n return this;\n };\n /**\n * Gets first raw result returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawMany()];\n case 1: return [2 /*return*/, (_a.sent())[0]];\n }\n });\n });\n };\n /**\n * Gets all raw results returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n this.expressionMap.queryEntity = false;\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_1 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_1;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.getRawAndEntities = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_2;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets single entity returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results, result, metadata, actualVersion, actualVersion;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n result = results.entities[0];\n if (result && this.expressionMap.lockMode === \"optimistic\" && this.expressionMap.lockVersion) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (this.expressionMap.lockVersion instanceof Date) {\n actualVersion = metadata.updateDateColumn.getEntityValue(result);\n if (actualVersion.getTime() !== this.expressionMap.lockVersion.getTime())\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n else {\n actualVersion = metadata.versionColumn.getEntityValue(result);\n if (actualVersion !== this.expressionMap.lockVersion)\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Gets the first entity returned by execution of generated query builder sql or rejects the returned promise on error.\n */\n SelectQueryBuilder.prototype.getOneOrFail = function () {\n return __awaiter(this, void 0, void 0, function () {\n var entity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getOne()];\n case 1:\n entity = _a.sent();\n if (!entity) {\n throw new EntityNotFoundError(this.expressionMap.mainAlias.target, this);\n }\n return [2 /*return*/, entity];\n }\n });\n });\n };\n /**\n * Gets entities returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n return [2 /*return*/, results.entities];\n }\n });\n });\n };\n /**\n * Gets count - number of entities selected by sql generated by this query builder.\n * Count excludes all limitations set by setFirstResult and setMaxResults methods call.\n */\n SelectQueryBuilder.prototype.getCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_3, rollbackError_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_3 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_3 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_3;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns entities and overall entities count (without limitation).\n * This method is useful to build pagination.\n */\n SelectQueryBuilder.prototype.getManyAndCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, entitiesAndRaw, count, results, error_4, rollbackError_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n entitiesAndRaw = _a.sent();\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 5:\n count = _a.sent();\n results = [entitiesAndRaw.entities, count];\n if (!transactionStartedByUs) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/, results];\n case 8:\n error_4 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_4 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw error_4;\n case 13:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns raw data stream.\n */\n SelectQueryBuilder.prototype.stream = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, releaseFn, results, error_5, rollbackError_5;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.expressionMap.queryEntity = false;\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, , 11]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n releaseFn = function () {\n if (queryRunner !== _this.queryRunner) // means we created our own query runner\n return queryRunner.release();\n return;\n };\n results = queryRunner.stream(sql, parameters, releaseFn, releaseFn);\n if (!transactionStartedByUs) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n case 6:\n error_5 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n _b.label = 7;\n case 7:\n _b.trys.push([7, 9, , 10]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 8:\n _b.sent();\n return [3 /*break*/, 10];\n case 9:\n rollbackError_5 = _b.sent();\n return [3 /*break*/, 10];\n case 10: throw error_5;\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Enables or disables query result caching.\n */\n SelectQueryBuilder.prototype.cache = function (enabledOrMillisecondsOrId, maybeMilliseconds) {\n if (typeof enabledOrMillisecondsOrId === \"boolean\") {\n this.expressionMap.cache = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheDuration = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"string\" || typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheId = enabledOrMillisecondsOrId;\n }\n if (maybeMilliseconds) {\n this.expressionMap.cacheDuration = maybeMilliseconds;\n }\n return this;\n };\n /**\n * Sets extra options that can be used to configure how query builder works.\n */\n SelectQueryBuilder.prototype.setOption = function (option) {\n this.expressionMap.options.push(option);\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n SelectQueryBuilder.prototype.join = function (direction, entityOrProperty, aliasName, condition, parameters, mapToProperty, isMappingMany) {\n this.setParameters(parameters || {});\n var joinAttribute = new JoinAttribute(this.connection, this.expressionMap);\n joinAttribute.direction = direction;\n joinAttribute.mapToProperty = mapToProperty;\n joinAttribute.isMappingMany = isMappingMany;\n joinAttribute.entityOrProperty = entityOrProperty; // relationName\n joinAttribute.condition = condition; // joinInverseSideCondition\n // joinAttribute.junctionAlias = joinAttribute.relation.isOwning ? parentAlias + \"_\" + destinationTableAlias : destinationTableAlias + \"_\" + parentAlias;\n this.expressionMap.joinAttributes.push(joinAttribute);\n if (joinAttribute.metadata) {\n if (joinAttribute.metadata.deleteDateColumn && !this.expressionMap.withDeleted) {\n var conditionDeleteColumn = aliasName + \".\" + joinAttribute.metadata.deleteDateColumn.propertyName + \" IS NULL\";\n joinAttribute.condition += joinAttribute.condition ? \" AND \" + conditionDeleteColumn : \"\" + conditionDeleteColumn;\n }\n // todo: find and set metadata right there?\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n metadata: joinAttribute.metadata\n });\n if (joinAttribute.relation && joinAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"join\",\n name: joinAttribute.junctionAlias,\n metadata: joinAttribute.relation.junctionEntityMetadata\n });\n }\n }\n else {\n var subQuery = \"\";\n if (entityOrProperty instanceof Function) {\n var subQueryBuilder = entityOrProperty(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n subQuery = subQueryBuilder.getQuery();\n }\n else {\n subQuery = entityOrProperty;\n }\n var isSubQuery = entityOrProperty instanceof Function || entityOrProperty.substr(0, 1) === \"(\" && entityOrProperty.substr(-1) === \")\";\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n tablePath: isSubQuery === false ? entityOrProperty : undefined,\n subQuery: isSubQuery === true ? subQuery : undefined,\n });\n }\n };\n /**\n * Creates \"SELECT FROM\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectExpression = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Cannot build query because main alias is not set (call qb#from method)\");\n // todo throw exception if selects or from is missing\n var allSelects = [];\n var excludedSelects = [];\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n allSelects.push.apply(allSelects, __spreadArray([], __read(this.buildEscapedEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(this.findEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n }\n // add selects from joins\n this.expressionMap.joinAttributes\n .forEach(function (join) {\n if (join.metadata) {\n allSelects.push.apply(allSelects, __spreadArray([], __read(_this.buildEscapedEntityColumnSelects(join.alias.name, join.metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(_this.findEntityColumnSelects(join.alias.name, join.metadata))));\n }\n else {\n var hasMainAlias = _this.expressionMap.selects.some(function (select) { return select.selection === join.alias.name; });\n if (hasMainAlias) {\n allSelects.push({ selection: _this.escape(join.alias.name) + \".*\" });\n var excludedSelect = _this.expressionMap.selects.find(function (select) { return select.selection === join.alias.name; });\n excludedSelects.push(excludedSelect);\n }\n }\n });\n // add all other selects\n this.expressionMap.selects\n .filter(function (select) { return excludedSelects.indexOf(select) === -1; })\n .forEach(function (select) { return allSelects.push({ selection: _this.replacePropertyNames(select.selection), aliasName: select.aliasName }); });\n // if still selection is empty, then simply set it to all (*)\n if (allSelects.length === 0)\n allSelects.push({ selection: \"*\" });\n var lock = \"\";\n if (this.connection.driver instanceof SqlServerDriver) {\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n lock = \" WITH (HOLDLOCK, ROWLOCK)\";\n break;\n case \"pessimistic_write\":\n lock = \" WITH (UPDLOCK, ROWLOCK)\";\n break;\n case \"dirty_read\":\n lock = \" WITH (NOLOCK)\";\n break;\n }\n }\n // create a selection query\n var froms = this.expressionMap.aliases\n .filter(function (alias) { return alias.type === \"from\" && (alias.tablePath || alias.subQuery); })\n .map(function (alias) {\n if (alias.subQuery)\n return alias.subQuery + \" \" + _this.escape(alias.name);\n return _this.getTableName(alias.tablePath) + \" \" + _this.escape(alias.name);\n });\n var select = this.createSelectDistinctExpression();\n var selection = allSelects.map(function (select) { return select.selection + (select.aliasName ? \" AS \" + _this.escape(select.aliasName) : \"\"); }).join(\", \");\n return select + selection + \" FROM \" + froms.join(\", \") + lock;\n };\n /**\n * Creates select | select distinct part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectDistinctExpression = function () {\n var _this = this;\n var _a = this.expressionMap, selectDistinct = _a.selectDistinct, selectDistinctOn = _a.selectDistinctOn;\n var driver = this.connection.driver;\n var select = \"SELECT \";\n if (driver instanceof PostgresDriver && selectDistinctOn.length > 0) {\n var selectDistinctOnMap = selectDistinctOn.map(function (on) { return _this.replacePropertyNames(on); }).join(\", \");\n select = \"SELECT DISTINCT ON (\" + selectDistinctOnMap + \") \";\n }\n else if (selectDistinct) {\n select = \"SELECT DISTINCT \";\n }\n return select;\n };\n /**\n * Creates \"JOIN\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createJoinExpression = function () {\n // examples:\n // select from owning side\n // qb.select(\"post\")\n // .leftJoinAndSelect(\"post.category\", \"category\");\n // select from non-owning side\n // qb.select(\"category\")\n // .leftJoinAndSelect(\"category.post\", \"post\");\n var _this = this;\n var joins = this.expressionMap.joinAttributes.map(function (joinAttr) {\n var relation = joinAttr.relation;\n var destinationTableName = joinAttr.tablePath;\n var destinationTableAlias = joinAttr.alias.name;\n var appendedCondition = joinAttr.condition ? \" AND (\" + joinAttr.condition + \")\" : \"\";\n var parentAlias = joinAttr.parentAlias;\n // if join was build without relation (e.g. without \"post.category\") then it means that we have direct\n // table to join, without junction table involved. This means we simply join direct table.\n if (!parentAlias || !relation) {\n var destinationJoin = joinAttr.alias.subQuery ? joinAttr.alias.subQuery : _this.getTableName(destinationTableName);\n return \" \" + joinAttr.direction + \" JOIN \" + destinationJoin + \" \" + _this.escape(destinationTableAlias) +\n (joinAttr.condition ? \" ON \" + _this.replacePropertyNames(joinAttr.condition) : \"\");\n }\n // if real entity relation is involved\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n // JOIN `category` `category` ON `category`.`id` = `post`.`categoryId`\n var condition = relation.joinColumns.map(function (joinColumn) {\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n // JOIN `post` `post` ON `post`.`categoryId` = `category`.`id`\n var condition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n if (relation.inverseEntityMetadata.tableType === \"entity-child\" && relation.inverseEntityMetadata.discriminatorColumn) {\n appendedCondition += \" AND \" + destinationTableAlias + \".\" + relation.inverseEntityMetadata.discriminatorColumn.databaseName + \"='\" + relation.inverseEntityMetadata.discriminatorValue + \"'\";\n }\n return destinationTableAlias + \".\" + relation.inverseRelation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else { // means many-to-many\n var junctionTableName = relation.junctionEntityMetadata.tablePath;\n var junctionAlias_1 = joinAttr.junctionAlias;\n var junctionCondition = \"\", destinationCondition = \"\";\n if (relation.isOwning) {\n junctionCondition = relation.joinColumns.map(function (joinColumn) {\n // `post_category`.`postId` = `post`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseJoinColumns.map(function (joinColumn) {\n // `category`.`id` = `post_category`.`categoryId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n else {\n junctionCondition = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) {\n // `post_category`.`categoryId` = `category`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n // `post`.`id` = `post_category`.`postId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(junctionTableName) + \" \" + _this.escape(junctionAlias_1) + \" ON \" + _this.replacePropertyNames(junctionCondition) +\n \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(destinationCondition + appendedCondition);\n }\n });\n return joins.join(\" \");\n };\n /**\n * Creates \"GROUP BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createGroupByExpression = function () {\n if (!this.expressionMap.groupBys || !this.expressionMap.groupBys.length)\n return \"\";\n return \" GROUP BY \" + this.replacePropertyNames(this.expressionMap.groupBys.join(\", \"));\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.allOrderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" and \"OFFSET\" parts of SQL query.\n */\n SelectQueryBuilder.prototype.createLimitOffsetExpression = function () {\n // in the case if nothing is joined in the query builder we don't need to make two requests to get paginated results\n // we can use regular limit / offset, that's why we add offset and limit construction here based on skip and take values\n var offset = this.expressionMap.offset, limit = this.expressionMap.limit;\n if (!offset && !limit && this.expressionMap.joinAttributes.length === 0) {\n offset = this.expressionMap.skip;\n limit = this.expressionMap.take;\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // Due to a limitation in SQL Server's parser implementation it does not support using\n // OFFSET or FETCH NEXT without an ORDER BY clause being provided. In cases where the\n // user does not request one we insert a dummy ORDER BY that does nothing and should\n // have no effect on the query planner or on the order of the results returned.\n // https://dba.stackexchange.com/a/193799\n var prefix = \"\";\n if ((limit || offset) && Object.keys(this.expressionMap.allOrderBys).length <= 0) {\n prefix = \" ORDER BY (SELECT NULL)\";\n }\n if (limit && offset)\n return prefix + \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return prefix + \" OFFSET 0 ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return prefix + \" OFFSET \" + offset + \" ROWS\";\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n throw new OffsetWithoutLimitNotSupportedError();\n }\n else if (this.connection.driver instanceof AbstractSqliteDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" LIMIT -1 OFFSET \" + offset;\n }\n else if (this.connection.driver instanceof OracleDriver) {\n if (limit && offset)\n return \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return \" FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return \" OFFSET \" + offset + \" ROWS\";\n }\n else {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" OFFSET \" + offset;\n }\n return \"\";\n };\n /**\n * Creates \"LOCK\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createLockExpression = function () {\n var driver = this.connection.driver;\n var lockTablesClause = \"\";\n if (this.expressionMap.lockTables) {\n if (!(driver instanceof PostgresDriver)) {\n throw new Error(\"Lock tables not supported in selected driver\");\n }\n if (this.expressionMap.lockTables.length < 1) {\n throw new Error(\"lockTables cannot be an empty array\");\n }\n lockTablesClause = \" OF \" + this.expressionMap.lockTables.join(\", \");\n }\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n return \" LOCK IN SHARE MODE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR SHARE\" + lockTablesClause;\n }\n else if (driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver || driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause;\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_partial_write\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" SKIP LOCKED\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE SKIP LOCKED\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write_or_fail\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" NOWAIT\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE NOWAIT\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"for_no_key_update\":\n if (driver instanceof PostgresDriver) {\n return \" FOR NO KEY UPDATE\" + lockTablesClause;\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n default:\n return \"\";\n }\n };\n /**\n * Creates \"HAVING\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createHavingExpression = function () {\n var _this = this;\n if (!this.expressionMap.havings || !this.expressionMap.havings.length)\n return \"\";\n var conditions = this.expressionMap.havings.map(function (having, index) {\n switch (having.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(having.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(having.condition);\n default:\n return _this.replacePropertyNames(having.condition);\n }\n }).join(\" \");\n if (!conditions.length)\n return \"\";\n return \" HAVING \" + conditions;\n };\n SelectQueryBuilder.prototype.buildEscapedEntityColumnSelects = function (aliasName, metadata) {\n var _this = this;\n var hasMainAlias = this.expressionMap.selects.some(function (select) { return select.selection === aliasName; });\n var columns = [];\n if (hasMainAlias) {\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) { return column.isSelect === true; }))));\n }\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) {\n return _this.expressionMap.selects.some(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n }))));\n // if user used partial selection and did not select some primary columns which are required to be selected\n // we select those primary columns and mark them as \"virtual\". Later virtual column values will be removed from final entity\n // to make entity contain exactly what user selected\n if (columns.length === 0) // however not in the case when nothing (even partial) was selected from this target (for example joins without selection)\n return [];\n var nonSelectedPrimaryColumns = this.expressionMap.queryEntity ? metadata.primaryColumns.filter(function (primaryColumn) { return columns.indexOf(primaryColumn) === -1; }) : [];\n var allColumns = __spreadArray(__spreadArray([], __read(columns)), __read(nonSelectedPrimaryColumns));\n return allColumns.map(function (column) {\n var selection = _this.expressionMap.selects.find(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n var selectionPath = _this.escape(aliasName) + \".\" + _this.escape(column.databaseName);\n if (_this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var asText = useLegacy ? \"AsText\" : \"ST_AsText\";\n selectionPath = asText + \"(\" + selectionPath + \")\";\n }\n if (_this.connection.driver instanceof PostgresDriver)\n // cast to JSON to trigger parsing in the driver\n if (column.precision) {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \", \" + column.precision + \")::json\";\n }\n else {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \")::json\";\n }\n if (_this.connection.driver instanceof SqlServerDriver)\n selectionPath = selectionPath + \".ToString()\";\n }\n return {\n selection: selectionPath,\n aliasName: selection && selection.aliasName ? selection.aliasName : DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName),\n // todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!\n virtual: selection ? selection.virtual === true : (hasMainAlias ? false : true),\n };\n });\n };\n SelectQueryBuilder.prototype.findEntityColumnSelects = function (aliasName, metadata) {\n var mainSelect = this.expressionMap.selects.find(function (select) { return select.selection === aliasName; });\n if (mainSelect)\n return [mainSelect];\n return this.expressionMap.selects.filter(function (select) {\n return metadata.columns.some(function (column) { return select.selection === aliasName + \".\" + column.propertyPath; });\n });\n };\n SelectQueryBuilder.prototype.computeCountExpression = function () {\n var _this = this;\n var mainAlias = this.expressionMap.mainAlias.name; // todo: will this work with \"fromTableName\"?\n var metadata = this.expressionMap.mainAlias.metadata;\n var primaryColumns = metadata.primaryColumns;\n var distinctAlias = this.escape(mainAlias);\n // If we aren't doing anything that will create a join, we can use a simpler `COUNT` instead\n // so we prevent poor query patterns in the most likely cases\n if (this.expressionMap.joinAttributes.length === 0 &&\n this.expressionMap.relationIdAttributes.length === 0 &&\n this.expressionMap.relationCountAttributes.length === 0) {\n return \"COUNT(1)\";\n }\n // For everything else, we'll need to do some hackery to get the correct count values.\n if (this.connection.driver instanceof CockroachDriver || this.connection.driver instanceof PostgresDriver) {\n // Postgres and CockroachDB can pass multiple parameters to the `DISTINCT` function\n // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-DISTINCT\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \"))\";\n }\n if (this.connection.driver instanceof MysqlDriver) {\n // MySQL & MariaDB can pass multiple parameters to the `DISTINCT` language construct\n // https://mariadb.com/kb/en/count-distinct/\n return \"COUNT(DISTINCT \" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \")\";\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // SQL Server has gotta be different from everyone else. They don't support\n // distinct counting multiple columns & they don't have the same operator\n // characteristic for concatenating, so we gotta use the `CONCAT` function.\n // However, If it's exactly 1 column we can omit the `CONCAT` for better performance.\n var columnsExpression = primaryColumns.map(function (primaryColumn) { return distinctAlias + \".\" + _this.escape(primaryColumn.databaseName); }).join(\", '|;|', \");\n if (primaryColumns.length === 1) {\n return \"COUNT(DISTINCT(\" + columnsExpression + \"))\";\n }\n return \"COUNT(DISTINCT(CONCAT(\" + columnsExpression + \")))\";\n }\n // If all else fails, fall back to a `COUNT` and `DISTINCT` across all the primary columns concatenated.\n // Per the SQL spec, this is the canonical string concatenation mechanism which is most\n // likely to work across servers implementing the SQL standard.\n // Please note, if there is only one primary column that the concatenation does not occur in this\n // query and the query is a standard `COUNT DISTINCT` in that case.\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\" || '|;|' || \") +\n \"))\";\n };\n SelectQueryBuilder.prototype.executeCountQuery = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var countSql, results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n countSql = this.computeCountExpression();\n return [4 /*yield*/, this.clone()\n .orderBy()\n .groupBy()\n .offset(undefined)\n .limit(undefined)\n .skip(undefined)\n .take(undefined)\n .select(countSql, \"cnt\")\n .setOption(\"disable-global-order\")\n .loadRawResults(queryRunner)];\n case 1:\n results = _a.sent();\n if (!results || !results[0] || !results[0][\"cnt\"])\n return [2 /*return*/, 0];\n return [2 /*return*/, parseInt(results[0][\"cnt\"])];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.executeEntitiesAndRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, relationIdLoader, relationCountLoader, relationIdMetadataTransformer, relationCountMetadataTransformer, rawResults, entities, _a, selects, orderBys_1, metadata_1, mainAliasName_1, querySelects, condition, parameters_1, alias_1, ids, areAllNumbers, rawRelationIdResults, rawRelationCountResults, transformer, broadcastResult;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Alias is not set. Use \\\"from\\\" method to set an alias.\");\n if ((this.expressionMap.lockMode === \"pessimistic_read\" || this.expressionMap.lockMode === \"pessimistic_write\" || this.expressionMap.lockMode === \"pessimistic_partial_write\" || this.expressionMap.lockMode === \"pessimistic_write_or_fail\" || this.expressionMap.lockMode === \"for_no_key_update\") && !queryRunner.isTransactionActive)\n throw new PessimisticLockTransactionRequiredError();\n if (this.expressionMap.lockMode === \"optimistic\") {\n metadata = this.expressionMap.mainAlias.metadata;\n if (!metadata.versionColumn && !metadata.updateDateColumn)\n throw new NoVersionOrUpdateDateColumnError(metadata.name);\n }\n relationIdLoader = new RelationIdLoader(this.connection, queryRunner, this.expressionMap.relationIdAttributes);\n relationCountLoader = new RelationCountLoader(this.connection, queryRunner, this.expressionMap.relationCountAttributes);\n relationIdMetadataTransformer = new RelationIdMetadataToAttributeTransformer(this.expressionMap);\n relationIdMetadataTransformer.transform();\n relationCountMetadataTransformer = new RelationCountMetadataToAttributeTransformer(this.expressionMap);\n relationCountMetadataTransformer.transform();\n rawResults = [], entities = [];\n if (!((this.expressionMap.skip || this.expressionMap.take) && this.expressionMap.joinAttributes.length > 0)) return [3 /*break*/, 4];\n _a = __read(this.createOrderByCombinedWithSelectExpression(\"distinctAlias\"), 2), selects = _a[0], orderBys_1 = _a[1];\n metadata_1 = this.expressionMap.mainAlias.metadata;\n mainAliasName_1 = this.expressionMap.mainAlias.name;\n querySelects = metadata_1.primaryColumns.map(function (primaryColumn) {\n var distinctAlias = _this.escape(\"distinctAlias\");\n var columnAlias = _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, mainAliasName_1, primaryColumn.databaseName));\n if (!orderBys_1[columnAlias]) // make sure we aren't overriding user-defined order in inverse direction\n orderBys_1[columnAlias] = \"ASC\";\n var alias = DriverUtils.buildColumnAlias(_this.connection.driver, \"ids_\" + mainAliasName_1, primaryColumn.databaseName);\n return distinctAlias + \".\" + columnAlias + \" as \\\"\" + alias + \"\\\"\";\n });\n return [4 /*yield*/, new SelectQueryBuilder(this.connection, queryRunner)\n .select(\"DISTINCT \" + querySelects.join(\", \"))\n .addSelect(selects)\n .from(\"(\" + this.clone().orderBy().getQuery() + \")\", \"distinctAlias\")\n .offset(this.expressionMap.skip)\n .limit(this.expressionMap.take)\n .orderBy(orderBys_1)\n .cache(this.expressionMap.cache ? this.expressionMap.cache : this.expressionMap.cacheId, this.expressionMap.cacheDuration)\n .setParameters(this.getParameters())\n .setNativeParameters(this.expressionMap.nativeParameters)\n .getRawMany()];\n case 1:\n rawResults = _b.sent();\n if (!(rawResults.length > 0)) return [3 /*break*/, 3];\n condition = \"\";\n parameters_1 = {};\n if (metadata_1.hasMultiplePrimaryKeys) {\n condition = rawResults.map(function (result, index) {\n return metadata_1.primaryColumns.map(function (primaryColumn) {\n var paramKey = \"orm_distinct_ids_\" + index + \"_\" + primaryColumn.databaseName;\n parameters_1[paramKey] = result[\"ids_\" + mainAliasName_1 + \"_\" + primaryColumn.databaseName];\n return mainAliasName_1 + \".\" + primaryColumn.propertyPath + \"=:\" + paramKey;\n }).join(\" AND \");\n }).join(\" OR \");\n }\n else {\n alias_1 = DriverUtils.buildColumnAlias(this.connection.driver, \"ids_\" + mainAliasName_1, metadata_1.primaryColumns[0].databaseName);\n ids = rawResults.map(function (result) { return result[alias_1]; });\n areAllNumbers = ids.every(function (id) { return typeof id === \"number\"; });\n if (areAllNumbers) {\n // fixes #190. if all numbers then its safe to perform query without parameter\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (\" + ids.join(\", \") + \")\";\n }\n else {\n parameters_1[\"orm_distinct_ids\"] = ids;\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (:...orm_distinct_ids)\";\n }\n }\n return [4 /*yield*/, this.clone()\n .mergeExpressionMap({ extraAppendedAndWhereCondition: condition })\n .setParameters(parameters_1)\n .loadRawResults(queryRunner)];\n case 2:\n rawResults = _b.sent();\n _b.label = 3;\n case 3: return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 5:\n rawResults = _b.sent();\n _b.label = 6;\n case 6:\n if (!(rawResults.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, relationIdLoader.load(rawResults)];\n case 7:\n rawRelationIdResults = _b.sent();\n return [4 /*yield*/, relationCountLoader.load(rawResults)];\n case 8:\n rawRelationCountResults = _b.sent();\n transformer = new RawSqlResultsToEntityTransformer(this.expressionMap, this.connection.driver, rawRelationIdResults, rawRelationCountResults, this.queryRunner);\n entities = transformer.transform(rawResults, this.expressionMap.mainAlias);\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastLoadEventsForAll(broadcastResult, this.expressionMap.mainAlias.metadata, entities);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, {\n raw: rawResults,\n entities: entities,\n }];\n }\n });\n });\n };\n SelectQueryBuilder.prototype.createOrderByCombinedWithSelectExpression = function (parentAlias) {\n var _this = this;\n // if table has a default order then apply it\n var orderBys = this.expressionMap.allOrderBys;\n var selectString = Object.keys(orderBys)\n .map(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n return _this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName));\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; }))\n return _this.escape(parentAlias) + \".\" + orderCriteria;\n return \"\";\n }\n })\n .join(\", \");\n var orderByObject = {};\n Object.keys(orderBys).forEach(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n orderByObject[_this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName))] = orderBys[orderCriteria];\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; })) {\n orderByObject[_this.escape(parentAlias) + \".\" + orderCriteria] = orderBys[orderCriteria];\n }\n else {\n orderByObject[orderCriteria] = orderBys[orderCriteria];\n }\n }\n });\n return [selectString, orderByObject];\n };\n /**\n * Loads raw results from the database.\n */\n SelectQueryBuilder.prototype.loadRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryId, cacheOptions, savedQueryResultCacheOptions, results;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryId = sql + \" -- PARAMETERS: \" + JSON.stringify(parameters);\n cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n savedQueryResultCacheOptions = undefined;\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.queryResultCache.getFromCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000\n }, queryRunner)];\n case 1:\n savedQueryResultCacheOptions = _b.sent();\n if (savedQueryResultCacheOptions && !this.connection.queryResultCache.isExpired(savedQueryResultCacheOptions))\n return [2 /*return*/, JSON.parse(savedQueryResultCacheOptions.result)];\n _b.label = 2;\n case 2: return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 3:\n results = _b.sent();\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 5];\n return [4 /*yield*/, this.connection.queryResultCache.storeInCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n time: new Date().getTime(),\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000,\n result: JSON.stringify(results)\n }, savedQueryResultCacheOptions, queryRunner)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n }\n });\n });\n };\n /**\n * Merges into expression map given expression map properties.\n */\n SelectQueryBuilder.prototype.mergeExpressionMap = function (expressionMap) {\n ObjectUtils.assign(this.expressionMap, expressionMap);\n return this;\n };\n /**\n * Normalizes a give number - converts to int if possible.\n */\n SelectQueryBuilder.prototype.normalizeNumber = function (num) {\n if (typeof num === \"number\" || num === undefined || num === null)\n return num;\n return Number(num);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n SelectQueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner(\"slave\");\n };\n return SelectQueryBuilder;\n}(QueryBuilder));\nexport { SelectQueryBuilder };\n\n//# sourceMappingURL=SelectQueryBuilder.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\n/**\n * Stores all join relation id attributes which will be used to build a JOIN query.\n */\nvar RelationIdAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdAttribute(queryExpressionMap, relationIdAttribute) {\n this.queryExpressionMap = queryExpressionMap;\n /**\n * Indicates if relation id should NOT be loaded as id map.\n */\n this.disableMixedMap = false;\n ObjectUtils.assign(this, relationIdAttribute || {});\n }\n Object.defineProperty(RelationIdAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(0, this.relationName.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(this.relationName.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n var relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + this.relationPropertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rid\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionMetadata\", {\n /**\n * Metadata of the joined entity.\n * If extra condition without entity was joined, then it will return undefined.\n */\n get: function () {\n return this.relation.junctionEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n return this.mapToProperty.substr(0, this.mapToProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyPropertyPath\", {\n get: function () {\n return this.mapToProperty.substr(this.mapToProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n return RelationIdAttribute;\n}());\nexport { RelationIdAttribute };\n\n//# sourceMappingURL=RelationIdAttribute.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\nvar RelationCountAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountAttribute(expressionMap, relationCountAttribute) {\n this.expressionMap = expressionMap;\n ObjectUtils.assign(this, relationCountAttribute || {});\n }\n Object.defineProperty(RelationCountAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relationProperty\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n return this.relationName.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"junctionAlias\", {\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rc\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], propertyPath = _a[1];\n var relationOwnerSelection = this.expressionMap.findAliasByName(parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + propertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var parentAlias = this.relationName.split(\".\")[0];\n var selection = this.expressionMap.findAliasByName(parentAlias);\n return selection.metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return RelationCountAttribute;\n}());\nexport { RelationCountAttribute };\n\n//# sourceMappingURL=RelationCountAttribute.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Updates entity with returning results in the entity insert and update operations.\n */\nvar ReturningResultsEntityUpdator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReturningResultsEntityUpdator(queryRunner, expressionMap) {\n this.queryRunner = queryRunner;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Updates entities with a special columns after updation query execution.\n */\n ReturningResultsEntityUpdator.prototype.update = function (updateResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n return [4 /*yield*/, Promise.all(entities.map(function (entity, entityIndex) { return __awaiter(_this, void 0, void 0, function () {\n var result, returningColumns, updationColumns, entityId, loadedReturningColumns;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.queryRunner.connection.driver.isReturningSqlSupported()) return [3 /*break*/, 1];\n if (this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(updateResult.raw) && this.expressionMap.extraReturningColumns.length > 0) {\n updateResult.raw = updateResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n result = Array.isArray(updateResult.raw) ? updateResult.raw[entityIndex] : updateResult.raw;\n returningColumns = this.queryRunner.connection.driver.createGeneratedMap(metadata, result);\n if (returningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, returningColumns);\n updateResult.generatedMaps.push(returningColumns);\n }\n return [3 /*break*/, 3];\n case 1:\n updationColumns = this.getUpdationReturningColumns();\n if (!(updationColumns.length > 0)) return [3 /*break*/, 3];\n entityId = this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(this.getUpdationReturningColumns().map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityId)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getOne()];\n case 2:\n loadedReturningColumns = _a.sent();\n if (loadedReturningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, loadedReturningColumns);\n updateResult.generatedMaps.push(loadedReturningColumns);\n }\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates entities with a special columns after insertion query execution.\n */\n ReturningResultsEntityUpdator.prototype.insert = function (insertResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, insertionColumns, generatedMaps, entityIds, returningResult_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n insertionColumns = this.getInsertionReturningColumns();\n generatedMaps = entities.map(function (entity, entityIndex) {\n if (_this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(insertResult.raw) && _this.expressionMap.extraReturningColumns.length > 0) {\n insertResult.raw = insertResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n // get all values generated by a database for us\n var result = Array.isArray(insertResult.raw) ? insertResult.raw[entityIndex] : insertResult.raw;\n var generatedMap = _this.queryRunner.connection.driver.createGeneratedMap(metadata, result, entityIndex, entities.length) || {};\n // if database does not support uuid generation we need to get uuid values\n // generated by orm and set them to the generatedMap\n if (_this.queryRunner.connection.driver.isUUIDGenerationSupported() === false) {\n metadata.generatedColumns.forEach(function (generatedColumn) {\n if (generatedColumn.generationStrategy === \"uuid\") {\n // uuid can be defined by user in a model, that's why first we get it\n var uuid = generatedColumn.getEntityValue(entity);\n if (!uuid) // if it was not defined by a user then InsertQueryBuilder generates it by its own, get this generated uuid value\n uuid = _this.expressionMap.nativeParameters[\"uuid_\" + generatedColumn.databaseName + entityIndex];\n OrmUtils.mergeDeep(generatedMap, generatedColumn.createValueMap(uuid));\n }\n });\n }\n _this.queryRunner.manager.merge(metadata.target, entity, generatedMap); // todo: this should not be here, but problem with below line\n return generatedMap;\n });\n if (!(this.queryRunner.connection.driver.isReturningSqlSupported() === false && insertionColumns.length > 0)) return [3 /*break*/, 2];\n entityIds = entities.map(function (entity) {\n var entityId = metadata.getEntityIdMap(entity);\n // We have to check for an empty `entityId` - if we don't, the query against the database\n // effectively drops the `where` clause entirely and the first record will be returned -\n // not what we want at all.\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return entityId;\n });\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(insertionColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityIds)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getMany()];\n case 1:\n returningResult_1 = _a.sent();\n entities.forEach(function (entity, entityIndex) {\n _this.queryRunner.manager.merge(metadata.target, generatedMaps[entityIndex], returningResult_1[entityIndex]);\n });\n _a.label = 2;\n case 2:\n entities.forEach(function (entity, entityIndex) {\n var entityId = metadata.getEntityIdMap(entity);\n insertResult.identifiers.push(entityId);\n insertResult.generatedMaps.push(generatedMaps[entityIndex]);\n _this.queryRunner.manager.merge(_this.expressionMap.mainAlias.metadata.target, entity, generatedMaps[entityIndex], generatedMaps[entityIndex]); // todo: why twice?!\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Columns we need to be returned from the database when we insert entity.\n */\n ReturningResultsEntityUpdator.prototype.getInsertionReturningColumns = function () {\n // for databases which support returning statement we need to return extra columns like id\n // for other databases we don't need to return id column since its returned by a driver already\n var needToCheckGenerated = this.queryRunner.connection.driver.isReturningSqlSupported();\n // filter out the columns of which we need database inserted values to update our entity\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.default !== undefined ||\n (needToCheckGenerated && column.isGenerated) ||\n column.isCreateDate ||\n column.isUpdateDate ||\n column.isDeleteDate ||\n column.isVersion;\n });\n };\n /**\n * Columns we need to be returned from the database when we update entity.\n */\n ReturningResultsEntityUpdator.prototype.getUpdationReturningColumns = function () {\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.isUpdateDate || column.isVersion;\n });\n };\n return ReturningResultsEntityUpdator;\n}());\nexport { ReturningResultsEntityUpdator };\n\n//# sourceMappingURL=ReturningResultsEntityUpdator.js.map\n","var TableUtils = /** @class */ (function () {\n function TableUtils() {\n }\n TableUtils.createTableColumnOptions = function (columnMetadata, driver) {\n return {\n name: columnMetadata.databaseName,\n length: columnMetadata.length,\n width: columnMetadata.width,\n charset: columnMetadata.charset,\n collation: columnMetadata.collation,\n precision: columnMetadata.precision,\n scale: columnMetadata.scale,\n zerofill: columnMetadata.zerofill,\n unsigned: columnMetadata.unsigned,\n asExpression: columnMetadata.asExpression,\n generatedType: columnMetadata.generatedType,\n default: driver.normalizeDefault(columnMetadata),\n onUpdate: columnMetadata.onUpdate,\n comment: columnMetadata.comment,\n isGenerated: columnMetadata.isGenerated,\n generationStrategy: columnMetadata.generationStrategy,\n isNullable: columnMetadata.isNullable,\n type: driver.normalizeType(columnMetadata),\n isPrimary: columnMetadata.isPrimary,\n isUnique: driver.normalizeIsUnique(columnMetadata),\n isArray: columnMetadata.isArray || false,\n enum: columnMetadata.enum ? columnMetadata.enum.map(function (val) { return val + \"\"; }) : columnMetadata.enum,\n enumName: columnMetadata.enumName,\n spatialFeatureType: columnMetadata.spatialFeatureType,\n srid: columnMetadata.srid\n };\n };\n return TableUtils;\n}());\nexport { TableUtils };\n\n//# sourceMappingURL=TableUtils.js.map\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSite = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"../Site/LoginSite\");\nconst NotAllowedSite_1 = require(\"../Site/NotAllowedSite\");\nclass UserSite extends client_1.DelegateSite {\n constructor(site, access, allowOfflineAccess) {\n super(site);\n this._access = access;\n this._allowOfflineAccess = shared_1.Helper.nonNull(allowOfflineAccess, false);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().waitForGetMe();\n if (yield this._checkRights()) {\n let res = yield _super.onConstruct.call(this, constructParameters);\n UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => __awaiter(this, void 0, void 0, function* () {\n yield this._checkRights();\n }), false);\n return res;\n }\n });\n }\n _checkRights() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(UserManager_1.UserManager.getInstance().hasAccess(this._access) || (this._allowOfflineAccess && (yield UserManager_1.UserManager.getInstance().hasOfflineAccess(this._access))))) {\n // if (this.isShowing() && !this.isDestroying()) {\n // await this.startSite(NotAllowedSite);\n // }\n if (UserManager_1.UserManager.getInstance().isOnline() && !UserManager_1.UserManager.getInstance().isLoggedIn() && !(this._site instanceof LoginSite_1.LoginSite)) {\n this.startSite(LoginSite_1.LoginSite, {\n deepLink: this._site._siteManager.getDeepLinkFor(this._site),\n args: this._site.getParameters()\n });\n }\n else if (this._site._siteManager.getCurrentSite() === this._site && !this.isDestroying()) {\n new client_1.Toast(\"wrong rights\").show();\n yield this.startSite(NotAllowedSite_1.NotAllowedSite);\n }\n if (!this.isDestroying()) {\n yield this.finish();\n }\n return false;\n }\n return true;\n });\n }\n onStart(args) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (yield this._checkRights()) {\n yield _super.onStart.call(this, args);\n }\n });\n }\n}\nexports.UserSite = UserSite;\n//# sourceMappingURL=UserSite.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Translator\"), exports);\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncClientDb = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst ClientModel_1 = require(\"./ClientModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst ClientPartialModel_1 = require(\"./ClientPartialModel\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass EasySyncClientDb extends cordova_sites_database_1.BaseDatabase {\n constructor(dbName) {\n super(dbName || \"EasySync\");\n }\n _createConnectionOptions(database) {\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel, ClientModel_1.ClientModel);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel, ClientPartialModel_1.ClientPartialModel);\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel.prototype, ClientModel_1.ClientModel.prototype);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel.prototype, ClientPartialModel_1.ClientPartialModel.prototype);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium, ClientFileMedium_1.ClientFileMedium);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium.prototype, ClientFileMedium_1.ClientFileMedium.prototype);\n let options = super._createConnectionOptions(database);\n options[\"migrationsTableName\"] = \"migrations\";\n return options;\n }\n}\nexports.EasySyncClientDb = EasySyncClientDb;\nEasySyncClientDb.BASE_MODEL = null;\nclient_1.App.addInitialization(() => __awaiter(void 0, void 0, void 0, function* () {\n yield EasySyncClientDb.getInstance()._connectionPromise.catch(function (e) {\n if (typeof EasySyncClientDb.errorListener === \"function\") {\n return EasySyncClientDb.errorListener(...arguments);\n }\n else {\n throw (e);\n }\n });\n}));\n//# sourceMappingURL=EasySyncClientDb.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LastSyncDates = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass LastSyncDates extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this.model = \"\";\n this.lastSynced = 0;\n this.where = {};\n }\n getModel() {\n return this.model;\n }\n setModel(model) {\n this.model = model;\n }\n getLastSynced() {\n return this.lastSynced;\n }\n setLastSynced(lastSynced) {\n this.lastSynced = lastSynced;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"model\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, nullable: true };\n columns[\"lastSynced\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER, nullable: true };\n columns[\"where\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON };\n return columns;\n }\n}\nexports.LastSyncDates = LastSyncDates;\nLastSyncDates.SCHEMA_NAME = \"easy-sync-last-sync-dates\";\ncordova_sites_database_1.BaseDatabase.addModel(LastSyncDates);\n//# sourceMappingURL=LastSyncDates.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when a version check on an object that uses optimistic locking through a version field fails.\n */\nvar OptimisticLockVersionMismatchError = /** @class */ (function (_super) {\n __extends(OptimisticLockVersionMismatchError, _super);\n function OptimisticLockVersionMismatchError(entity, expectedVersion, actualVersion) {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockVersionMismatchError\";\n Object.setPrototypeOf(_this, OptimisticLockVersionMismatchError.prototype);\n _this.message = \"The optimistic lock on entity \" + entity + \" failed, version \" + expectedVersion + \" was expected, but is actually \" + actualVersion + \".\";\n return _this;\n }\n return OptimisticLockVersionMismatchError;\n}(Error));\nexport { OptimisticLockVersionMismatchError };\n\n//# sourceMappingURL=OptimisticLockVersionMismatchError.js.map\n","/**\n * Result object returned by InsertQueryBuilder execution.\n */\nvar InsertResult = /** @class */ (function () {\n function InsertResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n this.identifiers = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return InsertResult;\n}());\nexport { InsertResult };\n\n//# sourceMappingURL=InsertResult.js.map\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractSite = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Basisklasse für eine Seite\n */\nclass AbstractSite extends Context_1.Context {\n /**\n * Construktor für eine Seite, sollte überladen werden und view sollte definiert werden. Seitenkonstruktoren bekommen NUR den siteManager übergebn\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(view);\n this._isDestroying = false;\n this._isDestroying = false;\n //Promise und Resolver, welches erfüllt wird, wenn Seite beendet wird\n this._finishPromiseResolver = {\n resolve: null,\n reject: null\n };\n this._finishPromise = new Promise((resolve, reject) => {\n this._finishPromiseResolver = { resolve: resolve, reject: reject };\n });\n //Promise, welches erfüllt wird, wenn onConstruct-Promsise erfüllt wurde. Wird für onDestroy gebraucht\n this._onConstructPromise = null;\n this._parameters = {};\n this._result = null;\n this._siteManager = siteManager;\n this._title = {\n element: null,\n text: null\n };\n this._loadingSymbol = null;\n //Wird zum speichern der zugehörigen HistoryID genutzt\n this._historyId = null;\n }\n getTitle() {\n return this._title;\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n this.setParameters(Helper_1.Helper.nonNull(constructParameters, {}));\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_CONSTRUCT, {\n site: this, params: constructParameters\n });\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n this._updateTitle();\n this.updateUrl(this._parameters);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_START, {\n site: this, params: pauseArguments\n });\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_VIEW_LOADED, {\n site: this\n });\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_PAUSE, {\n site: this\n });\n return res;\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onDestroy.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_DESTROY, {\n site: this\n });\n return res;\n });\n }\n /**\n * Setzt den Titel der Website\n *\n * @param titleElement\n * @param title\n */\n setTitle(titleElement, title) {\n if (typeof titleElement === \"string\") {\n let args = title;\n title = titleElement;\n titleElement = Translator_1.Translator.makePersistentTranslation(title, args);\n }\n title = Helper_1.Helper.nonNull(title, titleElement.textContent);\n this._title = {\n element: titleElement,\n text: title\n };\n this._updateTitle();\n }\n setParameter(name, value) {\n this._parameters[name] = value;\n this.updateUrl(this._parameters);\n }\n setParameters(parameters) {\n this._parameters = parameters;\n this.updateUrl(this._parameters);\n }\n getParameters() {\n return this._parameters;\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._loadingSymbol)) {\n this._loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n let view = yield this.getViewPromise();\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n view.appendChild(this._loadingSymbol);\n }\n }\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n this._loadingSymbol.remove();\n this._loadingSymbol = null;\n }\n });\n }\n onBeforeUnload(e) {\n return null;\n }\n /**\n * Updatet den Title der Webseite\n * @protected\n */\n _updateTitle() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateTitle(this._title.text);\n }\n }\n updateUrl(args) {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateUrl(this, args);\n }\n }\n /**\n * Startet eine andere Seite mit den angegebenen Parametern\n *\n * @param site\n * @param args\n * @returns {*|Promise<*>}\n */\n startSite(site, args) {\n return this._siteManager.startSite(site, args);\n }\n /**\n * Alias für\n * this.startSite(...);\n * this.finish(...);\n *\n * @param site\n * @param args\n * @param result\n * @returns {*|Promise<*>}\n */\n finishAndStartSite(site, args, result) {\n let res = this.startSite(site, args);\n this.finish(result);\n return res;\n }\n /**\n * Beendet die aktuelle Seite. Kann ein Ergebnis setzen\n *\n * @param result\n */\n finish(result) {\n if (!(this._isDestroying || this._state === Context_1.Context.STATE_DESTROYED)) {\n this._isDestroying = true;\n if (Helper_1.Helper.isNotNull(result)) {\n this.setResult(result);\n }\n return this._siteManager.endSite(this);\n }\n }\n goBack() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.goBack();\n }\n }\n /**\n * Wird aufgerufen, falls zurück gedrückt wird. Gib false zurück, um das beenden der Seite zu verhindern\n */\n onBackPressed() {\n }\n /**\n * TODO Einbauen\n */\n onMenuPressed() {\n }\n /**\n * TODO Einbauen\n */\n onSearchPressed() {\n }\n /**\n * Gibt das FinishPromise zurück\n * @returns {Promise}\n */\n getFinishPromise() {\n return this._finishPromise;\n }\n /**\n * Setzt das Resultat. Letztes Setzen gilt\n * @param result\n */\n setResult(result) {\n this._result = result;\n }\n /**\n * Gibt den FinishResolver zurück. Genutzt, um FinishPromise zu resolven order rejecten\n * @returns {*}\n */\n getFinishResolver() {\n return this._finishPromiseResolver;\n }\n addEventListener(siteEvent, listener) {\n return EventManager_1.EventManager.getInstance().addListener(siteEvent, data => {\n if (data.site && data.site instanceof this.constructor) {\n listener(data);\n }\n });\n }\n isDestroying() {\n return this._isDestroying;\n }\n}\nexports.AbstractSite = AbstractSite;\nAbstractSite.EVENT = {\n ON_CONSTRUCT: \"abstract-site-on-construct\",\n ON_VIEW_LOADED: \"abstract-site-on-view-loaded\",\n ON_START: \"abstract-site-on-start\",\n ON_PAUSE: \"abstract-site-on-pause\",\n ON_DESTROY: \"abstract-site-on-destroy\"\n};\n//# sourceMappingURL=AbstractSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _typeorm = require(\"typeorm\");\nlet typeorm = _typeorm;\nclass BaseDatabase {\n constructor(database) {\n let options = this._createConnectionOptions(database);\n this._connectionPromise = this._createConnection(options);\n }\n _createConnection(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options.type === \"sqljs\") {\n //wait for SQL to be initialized\n window[\"SQL\"] = yield window[\"initSqlJs\"]();\n }\n return typeorm.createConnection(options).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n });\n }\n _createConnectionOptions(database) {\n let options = BaseDatabase.CONNECTION_OPTIONS;\n if (typeof device === \"undefined\" || device.platform !== \"browser\") {\n options.type = \"cordova\";\n options.database = database;\n }\n else {\n let saveTimeout = null;\n options.type = \"sqljs\";\n options.location = database;\n options.autoSave = true;\n options.useLocalForage = true;\n //Deactivated delay of saving since PRAGMA foreign_keys = ON is not saved with delay (why ever!)\n // options.autoSaveCallback = function () {\n // clearTimeout(saveTimeout);\n // saveTimeout = setTimeout(() => {\n // typeorm.getSqljsManager().saveDatabase();\n // }, 150);\n // }\n }\n options.entities = this.getEntityDefinitions();\n // options.migrations = this.constructor._migrations;\n return options;\n }\n getEntityDefinitions() {\n let entities = [];\n Object.keys(BaseDatabase._models).forEach(modelName => {\n BaseDatabase._models[modelName]._database = this;\n entities.push(new typeorm.EntitySchema(BaseDatabase._models[modelName].getSchemaDefinition()));\n });\n // console.log(\"entities\", entities);\n return entities;\n }\n saveEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = null;\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n repository = yield this._getRepository(entity[0].constructor);\n }\n else {\n repository = yield this._getRepository(entity.constructor);\n }\n return repository.save(entity);\n });\n }\n static _buildQuery(where, order, limit, offset, relations) {\n let query = {};\n if (where) {\n query[\"where\"] = where;\n }\n if (order) {\n query[\"order\"] = order;\n }\n if (limit) {\n query[\"take\"] = limit;\n }\n if (offset) {\n query[\"skip\"] = offset;\n }\n if (relations) {\n query[\"relations\"] = relations;\n }\n return query;\n }\n static _setLoaded(models) {\n return __awaiter(this, void 0, void 0, function* () {\n models = yield models;\n if (models === null || models === undefined) {\n return null;\n }\n let isArray = Array.isArray(models);\n if (!isArray) {\n models = [models];\n }\n models.forEach(models => models.setLoaded(true));\n return (isArray) ? models : models[0];\n });\n }\n findEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.find(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findAndCountEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findAndCount(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findOneEntity(model, where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(BaseDatabase._buildQuery(where, order, undefined, offset, relations)));\n });\n }\n findById(model, id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(id, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n findByIds(model, ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findByIds(ids, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n clearModel(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return repository.clear();\n });\n }\n _getRepository(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.getRepository(model);\n });\n }\n createQueryBuilder(model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (model) {\n let repo = yield this._getRepository(model);\n return repo.createQueryBuilder(model.getSchemaName());\n }\n else {\n let connection = yield this._connectionPromise;\n return connection.createQueryBuilder();\n }\n });\n }\n createQueryRunner() {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.createQueryRunner();\n });\n }\n deleteEntity(entity, model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n if (!model) {\n model = entity[0].constructor;\n }\n if (typeof entity[0] !== \"number\") {\n let ids = [];\n entity.forEach(ent => ids.push(ent.id));\n entity = ids;\n }\n }\n else {\n if (!model) {\n model = entity.constructor;\n }\n if (typeof entity !== \"number\") {\n entity = entity.id;\n }\n }\n let repository = yield this._getRepository(model);\n return repository.delete(entity);\n });\n }\n rawQuery(sql, params) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this._connectionPromise).query(sql, params);\n });\n }\n waitForConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._connectionPromise;\n });\n }\n /**\n * @return {BaseDatabase}\n */\n static getInstance() {\n if (!this.instance) {\n this.instance = new this();\n }\n return this.instance;\n }\n static addModel(model) {\n BaseDatabase._models[model.getSchemaName()] = model;\n }\n static getModel(modelName) {\n if (modelName) {\n return this._models[modelName];\n }\n else {\n return this._models;\n }\n }\n}\nexports.BaseDatabase = BaseDatabase;\nBaseDatabase._models = {};\nBaseDatabase.CONNECTION_OPTIONS = {\n location: \"default\",\n // autoSave: true,\n logging: [\"error\", \"warn\"],\n synchronize: true,\n};\nBaseDatabase.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\",\n};\n//# sourceMappingURL=BaseDatabase.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LoginSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/loginSite.html\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst ForgotPasswordSite_1 = require(\"./ForgotPasswordSite\");\nclass LoginSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#login-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n // await this.showLoadingSymbol();\n if (yield UserManager_1.UserManager.getInstance().login(data[\"email\"], data[\"password\"], client_1.Helper.isNotNull(data[\"saveLogin\"]))) {\n new client_1.Toast(\"welcome back\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email or password is wrong\"\n });\n // await this.removeLoadingSymbol();\n }\n }));\n let listener = () => form.clearErrors();\n this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#forgot-pw\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.startSite(ForgotPasswordSite_1.ForgotPasswordSite);\n }));\n return res;\n });\n }\n}\nexports.LoginSite = LoginSite;\nLoginSite.ACCESS = \"loggedOut\";\nLoginSite.LOGOUT_ACCESS = \"loggedIn\";\nLoginSite.ADD_LOGIN_ACTION = true;\nLoginSite.ADD_LOGOUT_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (LoginSite.ADD_LOGIN_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"login\", LoginSite.ACCESS, LoginSite));\n }\n if (LoginSite.ADD_LOGOUT_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"logout\", LoginSite.LOGOUT_ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().logout();\n })));\n }\n app.addDeepLink(\"login\", LoginSite);\n});\n//# sourceMappingURL=LoginSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserMenuAction = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass UserMenuAction extends client_1.MenuAction {\n constructor(name, access, action, showFor, order, icon) {\n super(name, action, showFor, order, icon);\n this._access = access;\n this._loginChangedCallbackId = UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => {\n this.redraw();\n });\n }\n isVisible() {\n return (super.isVisible() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n isActivated() {\n return (super.isActivated() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new UserMenuAction());\n copiedAction._access = this._access;\n return super.copy(copiedAction);\n }\n}\nexports.UserMenuAction = UserMenuAction;\n//# sourceMappingURL=UserMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientFileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst FileTransferPromise_1 = require(\"./FileWriter/FileTransferPromise\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FileWriter/FilePromise\");\nclass ClientFileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n setLoaded(isLoaded) {\n // @ts-ignore\n super.setLoaded(isLoaded);\n this._isDownloaded = true;\n FilePromise_1.FilePromise.open(this.src, { create: false }).then(() => this._isDownloaded = true).catch(e => {\n console.log(\"not downloaded, yet!\");\n this._isDownloaded = false;\n ClientFileMedium._handleImages(this);\n });\n }\n save() {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(this);\n return _super.save.call(this);\n });\n }\n static saveMany(entities) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(entities);\n return _super.saveMany.call(this, entities);\n });\n }\n static _handleImages(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n let isArray = Array.isArray(entities);\n if (!isArray) {\n entities = [entities];\n }\n yield Helper_1.Helper.asyncForEach(entities, (entity) => __awaiter(this, void 0, void 0, function* () {\n if (entity.saveOffline && device.platform !== \"browser\" && !entity.src.startsWith(\"data\") && !entity.src.startsWith(\"http\") && !entity.src.startsWith(\"//\")) {\n yield new FileTransferPromise_1.FileTransferPromise(entity.getServerUrl(false), entity.src).download().catch(e => console.log(e));\n entity._isDownloaded = true;\n }\n }), true);\n });\n }\n}\nexports.ClientFileMedium = ClientFileMedium;\n//# sourceMappingURL=ClientFileMedium.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to create entity id map from the mixed id value,\n * but id value is a single value when entity requires multiple values.\n */\nvar CannotCreateEntityIdMapError = /** @class */ (function (_super) {\n __extends(CannotCreateEntityIdMapError, _super);\n function CannotCreateEntityIdMapError(metadata, id) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotCreateEntityIdMapError\";\n Object.setPrototypeOf(_this, CannotCreateEntityIdMapError.prototype);\n var objectExample = metadata.primaryColumns.reduce(function (object, column, index) {\n column.setEntityValue(object, index + 1);\n return object;\n }, {});\n _this.message = \"Cannot use given entity id \\\"\" + id + \"\\\" because \\\"\" + metadata.targetName + \"\\\" contains multiple primary columns, you must provide object in following form: \" + JSON.stringify(objectExample) + \" as an id.\";\n return _this;\n }\n return CannotCreateEntityIdMapError;\n}(Error));\nexport { CannotCreateEntityIdMapError };\n\n//# sourceMappingURL=CannotCreateEntityIdMapError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when a transaction is required for the current operation, but there is none open.\n */\nvar PessimisticLockTransactionRequiredError = /** @class */ (function (_super) {\n __extends(PessimisticLockTransactionRequiredError, _super);\n function PessimisticLockTransactionRequiredError() {\n var _this = _super.call(this) || this;\n _this.name = \"PessimisticLockTransactionRequiredError\";\n Object.setPrototypeOf(_this, PessimisticLockTransactionRequiredError.prototype);\n _this.message = \"An open transaction is required for pessimistic lock.\";\n return _this;\n }\n return PessimisticLockTransactionRequiredError;\n}(Error));\nexport { PessimisticLockTransactionRequiredError };\n\n//# sourceMappingURL=PessimisticLockTransactionRequiredError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when an entity does not have no version and no update date column.\n */\nvar NoVersionOrUpdateDateColumnError = /** @class */ (function (_super) {\n __extends(NoVersionOrUpdateDateColumnError, _super);\n function NoVersionOrUpdateDateColumnError(entity) {\n var _this = _super.call(this) || this;\n _this.name = \"NoVersionOrUpdateDateColumnError\";\n Object.setPrototypeOf(_this, NoVersionOrUpdateDateColumnError.prototype);\n _this.message = \"Entity \" + entity + \" does not have version or update date columns.\";\n return _this;\n }\n return NoVersionOrUpdateDateColumnError;\n}(Error));\nexport { NoVersionOrUpdateDateColumnError };\n\n//# sourceMappingURL=NoVersionOrUpdateDateColumnError.js.map\n","/**\n * Syntax sugar.\n * Allows to use brackets in WHERE expressions for better syntax.\n */\nvar Brackets = /** @class */ (function () {\n /**\n * Given WHERE query builder that will build a WHERE expression that will be taken into brackets.\n */\n function Brackets(whereFactory) {\n this.whereFactory = whereFactory;\n }\n return Brackets;\n}());\nexport { Brackets };\n\n//# sourceMappingURL=Brackets.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: In([...]) }\n */\nexport function In(value) {\n return new FindOperator(\"in\", value, true, true);\n}\n\n//# sourceMappingURL=In.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to insert using QueryBuilder but do not specify what to insert.\n */\nvar InsertValuesMissingError = /** @class */ (function (_super) {\n __extends(InsertValuesMissingError, _super);\n function InsertValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"InsertValuesMissingError\";\n Object.setPrototypeOf(_this, InsertValuesMissingError.prototype);\n _this.message = \"Cannot perform insert query because values are not defined. Call \\\"qb.values(...)\\\" method to specify inserted values.\";\n return _this;\n }\n return InsertValuesMissingError;\n}(Error));\nexport { InsertValuesMissingError };\n\n//# sourceMappingURL=InsertValuesMissingError.js.map\n","/**\n * Result object returned by DeleteQueryBuilder execution.\n */\nvar DeleteResult = /** @class */ (function () {\n function DeleteResult() {\n }\n return DeleteResult;\n}());\nexport { DeleteResult };\n\n//# sourceMappingURL=DeleteResult.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingDeleteDateColumnError = /** @class */ (function (_super) {\n __extends(MissingDeleteDateColumnError, _super);\n function MissingDeleteDateColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDeleteDateColumnError\";\n Object.setPrototypeOf(_this, MissingDeleteDateColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have delete date columns.\";\n return _this;\n }\n return MissingDeleteDateColumnError;\n}(Error));\nexport { MissingDeleteDateColumnError };\n\n//# sourceMappingURL=MissingDeleteDateColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build SELECT query using OFFSET without LIMIT applied but database does not support it.\n*/\nvar OffsetWithoutLimitNotSupportedError = /** @class */ (function (_super) {\n __extends(OffsetWithoutLimitNotSupportedError, _super);\n function OffsetWithoutLimitNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OffsetWithoutLimitNotSupportedError\";\n Object.setPrototypeOf(_this, OffsetWithoutLimitNotSupportedError.prototype);\n _this.message = \"RDBMS does not support OFFSET without LIMIT in SELECT statements. You must use limit in conjunction with offset function (or take in conjunction with skip function if you are using pagination).\";\n return _this;\n }\n return OffsetWithoutLimitNotSupportedError;\n}(Error));\nexport { OffsetWithoutLimitNotSupportedError };\n\n//# sourceMappingURL=OffsetWithoutLimitNotSupportedError.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NavbarFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultViewNavbar = require(\"../../../html/siteTemplates/navbar.html\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Context_1 = require(\"../Context\");\nconst Menu_1 = require(\"./Menu\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\nconst DropdownRenderer_1 = require(\"./Renderer/DropdownRenderer\");\nconst AccordionRenderer_1 = require(\"./Renderer/AccordionRenderer\");\nconst ColorIndicator_1 = require(\"../../ColorIndicator/ColorIndicator\");\nconst App_1 = require(\"../../App\");\n/**\n * Fragment, welches ein Menü in der Navbar anzeigt und hinzufügt.\n *\n * Technisch gesehen wird das gleiche Menü zwei mal gerendert und hinzugefügt. Einmal das Menü in der Navbar, welches\n * immer sichtbar ist und einmal das versteckte Menü, welches durch einen Toggle-Button angezeigt werden kann.\n * Dabei hat jede MenuAction eine Sichtbarkeitsklasse. Anhand der Sichtbarkeitsklasse und der Bildschirmgröße wird\n * entweder das eine oder das andere Element sichtbar, jedoch niemals beide.\n */\nclass NavbarFragment extends AbstractFragment_1.AbstractFragment {\n /**\n * Erstellt das Fragment\n * @param site\n * @param {string|Node|null} viewNavbar\n */\n constructor(site, viewNavbar) {\n super(site, Helper_1.Helper.nonNull(viewNavbar, defaultViewNavbar));\n this._menu = null;\n this._responsiveMenu = null;\n this._backgroundImage = \"\";\n this._menuActions = [];\n NavbarFragment.defaultActions.forEach(action => {\n this._menuActions.push(action.copy());\n });\n this._scrollWidget = null;\n this._canGoBack = true;\n this._logo = App_1.App.getLogo();\n }\n setLogo(logo) {\n this._logo = logo;\n if (this._view) {\n if (Helper_1.Helper.isNotNull(this._logo)) {\n this.findBy(\".logo\").classList.remove(\"hidden\");\n this.findBy(\".logo-img\").src = this._logo;\n }\n else {\n this.findBy(\".logo\").classList.add(\"hidden\");\n }\n }\n }\n setCanGoBack(canGoBack) {\n this._canGoBack = canGoBack;\n if (this._view) {\n if (this._canGoBack) {\n this.findBy(\".back-button\").classList.remove(\"hidden\");\n }\n else {\n this.findBy(\".back-button\").classList.add(\"hidden\");\n }\n }\n }\n setScrollWidget(scrollWidget) {\n this._scrollWidget = scrollWidget;\n if (this._view && this._scrollWidget) {\n let nav = this.findBy(\".top-bar > span\");\n let background = this.findBy(\".background-img\");\n let listener = () => {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (nav.getBoundingClientRect().bottom >= background.getBoundingClientRect().bottom) {\n navbarElem.classList.add(\"solid\");\n }\n else {\n navbarElem.classList.remove(\"solid\");\n }\n };\n background.addEventListener(\"load\", listener);\n scrollWidget.addEventListener(\"scroll\", listener);\n requestAnimationFrame(listener);\n }\n }\n setBackgroundImage(backgroundImage) {\n this._backgroundImage = backgroundImage;\n if (this._view) {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (Helper_1.Helper.isNotNull(this._backgroundImage)) {\n let imgElem = this.findBy(\".background-img\");\n let colorIndicator = ColorIndicator_1.ColorIndicator.getInstance();\n // navbarElem.classList.add(\"color-black\");\n imgElem.addEventListener(\"load\", () => {\n if (this._backgroundImage !== \"\") {\n let color = (colorIndicator.getAverageImgColor(imgElem, undefined, 150));\n let textColor = colorIndicator.invertColorBW(color);\n if (textColor.r === 0 && textColor.g === 0 && textColor.b === 0) {\n navbarElem.classList.remove(\"color-white\");\n navbarElem.classList.add(\"color-black\");\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.add(\"color-white\");\n }\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.remove(\"color-white\");\n }\n });\n requestAnimationFrame(() => {\n let heightElement = navbarElem.querySelector(\".grid-container\");\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n if (entry.borderBoxSize) {\n navbarElem.style = \"min-height:\" + entry.borderBoxSize[0].blockSize + \"px\";\n }\n else if (entry.contentRect) {\n navbarElem.style = \"min-height:\" + entry.contentRect.height + \"px\";\n }\n else {\n console.log(\"entry\", entry);\n }\n });\n });\n resizeObserver.observe(heightElement);\n }\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 500);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1000);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1500);\n });\n imgElem.src = this._backgroundImage;\n navbarElem.classList.add(\"with-image\");\n }\n else {\n navbarElem.classList.remove(\"with-image\");\n }\n }\n }\n /**\n * Wird aufgerufen, sobald die View geladen ist\n * @returns {Promise<*>}\n */\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.setTitleElement(document.createTextNode(NavbarFragment.title));\n //Erstelle die Renderers und das Menü\n let renderers = [];\n renderers.push(new DropdownRenderer_1.DropdownRenderer(this.findBy(\"#navbar-menu-visible\")));\n renderers.push(new AccordionRenderer_1.AccordionRenderer(this.findBy(\"#navbar-menu-hidden\")));\n this._menu = new Menu_1.Menu(renderers, this._menuActions);\n this._closeListenerContainer = this.findBy(\"#navbar-close-listener-container\");\n //Falls im visible-submenu eine Submenu-Action zu sehen ist\n this._menu.setOpenSubmenuListener(() => {\n this._showCloseListener();\n });\n //Falls ein Element im Menü angeklickt wird, sollte das Menü geschlossen werden,\n //außer dadurch wird ein Untermenü geöffnet/geschlossen\n let oldListener = this._menu.getOnClickListener();\n this._menu.setOnClickListener(e => {\n if (!(oldListener(e) instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.closeMenu();\n }\n });\n //Fügt close/open-Listener für den Toggle-Button hinzu\n this._responsiveMenu = this.findBy(\"#responsive-menu\");\n this.findBy(\"#responsive-menu-toggle\").onclick = () => {\n if (this._responsiveMenu.classList.contains(\"visible\")) {\n this.closeMenu();\n }\n else {\n this.openMenu();\n }\n };\n //Wenn das \"versteckte\" Menü geöffnet ist, sollte jeder Click nicht auf das Menü dieses wieder schließen\n //Dazu gibt es den navbar-close-listener der sich vor allen (außer dem Menü) befindet. Er wird nur angezeigt,\n //wenn das Menü offen ist\n let navbarFragment = this;\n this.findBy(\"#navbar-close-listener\").addEventListener(\"click\", function (e) {\n if (e.target === this) {\n navbarFragment.closeMenu();\n }\n });\n //Wenn die größe des Fenster geändert wird, muss nachgeschaut werden, ob der Menü-Button für das hidden-Menü noch angezeigt werden muss\n window.addEventListener('resize', () => {\n //Reicht aus, wenn Seite im Vordergrund, da bei jedem Start (durch onStart) der toggleButton geupdatet wird\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this.updateToggleButton();\n }\n });\n //Rendere das Menü\n this.drawMenu();\n this.findBy(\".back-button\").addEventListener(\"click\", () => {\n this.goBack();\n });\n this.findBy(\".logo\").addEventListener(\"click\", () => {\n if (NavbarFragment.onLogoClickListener) {\n NavbarFragment.onLogoClickListener(this.getSite());\n }\n });\n this.setCanGoBack(this._canGoBack);\n this.setBackgroundImage(this._backgroundImage);\n this.setScrollWidget(this._scrollWidget);\n this.setLogo(this._logo);\n return res;\n });\n }\n goBack() {\n if (this._canGoBack) {\n this.getSite().goBack();\n }\n }\n /**\n * Jedes mal, wenn die Seite startet, update den toggleButton\n *\n * @param pauseArguments\n * @returns {Promise}\n */\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n _super.onStart.call(this, pauseArguments);\n this.updateToggleButton();\n });\n }\n _showCloseListener() {\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'block';\n }\n }\n /**\n * Schließe das Menü\n */\n closeMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n this._responsiveMenu.classList.remove(\"visible\");\n this._view.classList.remove(\"navbar-is-open\");\n }\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'none';\n }\n if (this._menu) {\n this._menu.close();\n }\n }\n /**\n * Öffne das Menü\n */\n openMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n // this._responsiveMenu.style.display = 'block';\n this._responsiveMenu.classList.add(\"visible\");\n this._view.classList.add(\"navbar-is-open\");\n }\n this._showCloseListener();\n }\n /**\n * rendere das Menü\n */\n drawMenu() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.draw();\n }\n }\n /**\n * Update die Sichtbarkeit des MenüButtons für das \"versteckte\" Menü\n */\n updateToggleButton() {\n //Bekomme die aktuelle Bildschirm-größe als Foundation-Klasse\n let size = NavbarFragment._getCurrentSize();\n //schaue hier nach den enthaltenen Elementen. Evtl sollte das direkt an den MenüActions gemacht werden\n let firstParentElement = this.findBy(\"#navbar-menu-visible\");\n if (\n //Es existieren Elemente für large und Bildschirmgröße ist kleiner large => ToggleButton muss angezeigt werden\n (size === \"medium\" || size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_LARGE + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für medium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_MEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für smedium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_SMEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente, welche nie angezeigt werden sollen => ToggleButton muss angezeigt werden\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_NEVER + \":not(.hidden)\").length > 0) {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'block';\n }\n else {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'none';\n //schließe Menü, falls es offen war\n this.closeMenu();\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param action\n */\n addAction(action) {\n this._menuActions.push(action);\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.addAction(action);\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param redraw\n */\n removeAllActions(redraw) {\n this._menuActions = [];\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.removeAllActions(redraw);\n }\n }\n /**\n * Updatet das Title-Element\n * @param titleElement\n */\n setTitleElement(titleElement) {\n Helper_1.Helper.removeAllChildren(this.findBy(\"#title-element-container\")).appendChild(titleElement);\n }\n /**\n * Gibt die aktuelle Size zurück\n *\n * @returns {*}\n * @private\n */\n static _getCurrentSize() {\n let matched;\n //Queries sind paare von css-selektoren auf die Mindest-Breite und Namen\n //Queries sind so geordnet, dass größter zum schluss kommt\n let queries = NavbarFragment._getViewQueries();\n for (let i = 0; i < queries.length; i++) {\n let query = queries[i];\n //Letzter sollte matchen, daher noch nicht breaken\n if (matchMedia(query._value).matches) {\n matched = query;\n }\n }\n if (typeof matched === 'object') {\n return matched._name;\n }\n else {\n return matched;\n }\n }\n /**\n * Gibt die ViewQueries zurück, triggert die Berechnung der ViewQueries, falls das noch nicht geschehen ist\n *\n * @returns {Array}\n * @private\n */\n static _getViewQueries() {\n if (NavbarFragment.queries.length === 0) {\n NavbarFragment.queries = NavbarFragment._calculateViewQueries();\n }\n return NavbarFragment.queries;\n }\n /**\n * Berechnet die ViewQueries, bzw liest diese aus Foundation/CSS ein\n * Eine Veränderung der Werte in SASS, verändert daher auch hier die Werte\n *\n * @returns {*}\n * @private\n */\n static _calculateViewQueries() {\n //Hilfs-Funktion zum Parsen der Bildschirmgröße\n function parseStyleToObject(str) {\n let styleObject = {};\n if (typeof str !== 'string') {\n return styleObject;\n }\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n if (!str) {\n return styleObject;\n }\n styleObject = str.split('&').reduce(function (ret, param) {\n const parts = param.replace(/\\+/g, ' ').split('=');\n let key = parts[0];\n let val = parts[1];\n key = decodeURIComponent(key);\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = val === undefined ? null : decodeURIComponent(val);\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n }\n else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n }\n else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n return styleObject;\n }\n //die Font-Family ist reiner Text. Daher übergibt Foundation die Bildchirmgröße mit den dazugehörigen Namen als\n // Font-Family in einem Element im Head\n let cssStyle = document.getElementsByClassName('foundation-mq');\n if (cssStyle.length === 0) {\n return;\n }\n let queries = [];\n //Lade Bildschirmgrößen und speichere diese als Query in einem Array\n let cssStyleElements = parseStyleToObject(window.getComputedStyle(cssStyle[0]).getPropertyValue('font-family'));\n for (let key in cssStyleElements) {\n if (cssStyleElements.hasOwnProperty(key)) {\n //Erstelle aus der Bildschirmgröße die Queries\n queries.push({\n _name: key,\n _value: 'only screen and (min-width: ' + cssStyleElements[key] + ')'\n });\n }\n }\n return queries;\n }\n /**\n * Setzt den Listener, welcher ausgeführt wird, wenn auf das Logo geklickt wird\n *\n * @param listener\n */\n static setOnLogoClickListener(listener) {\n this.onLogoClickListener = listener;\n }\n}\nexports.NavbarFragment = NavbarFragment;\nNavbarFragment.queries = [];\nNavbarFragment.onLogoClickListener = () => App_1.App.addInitialization(app => app.startStartingSite());\nNavbarFragment.title = \"MeinBerufBau\";\nNavbarFragment.defaultActions = [];\n//# sourceMappingURL=NavbarFragment.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Form = void 0;\nconst DataManager_1 = require(\"./DataManager\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"./Translator\");\nconst Toast_1 = require(\"./Toast/Toast\");\nclass Form {\n constructor(formElem, urlOrCallback, method) {\n this._formElem = formElem;\n this._method = Helper_1.Helper.nonNull(method, formElem[\"method\"], \"POST\");\n this._elementChangeListener = null;\n this._validators = [];\n this._isBusy = false;\n if (typeof urlOrCallback === \"string\") {\n this._submitHandler = (values) => {\n if (this._method.toLowerCase() === \"get\") {\n return (DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)));\n }\n else {\n //TODO, wenn Serververbindung kommt\n // return (DataManager.send(urlOrCallback, values));\n }\n };\n }\n else {\n this._submitHandler = urlOrCallback;\n }\n this._editors = [];\n this._submitCallback = null;\n this.errorCallback = (errors) => __awaiter(this, void 0, void 0, function* () {\n yield this.setErrors(errors);\n });\n formElem.addEventListener(\"submit\", function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n yield self.doSubmit(e);\n });\n });\n let self = this;\n [...formElem.elements].forEach(element => {\n element.addEventListener(\"change\", function () {\n if (this.value.trim() !== \"\") {\n this.classList.add(\"notEmpty\");\n }\n else {\n this.classList.remove(\"notEmpty\");\n }\n this.setCustomValidity(\"\");\n if (Helper_1.Helper.isNotNull(self._elementChangeListener)) {\n self._elementChangeListener(element, this);\n }\n this.setCustomValidity(\"\");\n if (element.accept && element.accept.indexOf(\"image\") !== -1) {\n if (element.files && element.files[0]) {\n let reader = new FileReader();\n reader.onload = e => {\n const previewElem = formElem.querySelector(\".\" + element.name + \"-preview\");\n if (previewElem) {\n previewElem.src = e.target[\"result\"];\n }\n };\n reader.readAsDataURL(element.files[0]);\n }\n else {\n formElem.querySelector(\".\" + element.name + \"-preview\").src = \"\";\n }\n }\n });\n element.addEventListener(\"keydown\", function () {\n this.setCustomValidity(\"\");\n });\n });\n }\n addValidator(validatorCallback) {\n this._validators.push(validatorCallback);\n }\n onError(errorHandler) {\n this.errorCallback = errorHandler;\n }\n addEditor(e) {\n this._editors.push(e);\n }\n doSubmit(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._isBusy) {\n let res = yield this.submit();\n //TODO einbauen, wenn server dazu kommt\n // if (res[\"success\"]) {\n // if (self._submitCallback !== null) {\n // return self._submitCallback(res[\"result\"]);\n // }\n // } else if (Helper.isNotNull(self.errorCallback)) {\n // return self.errorCallback(res[\"errors\"]);\n // }\n return res;\n }\n return false;\n });\n }\n setValues(valuePromise) {\n return __awaiter(this, void 0, void 0, function* () {\n this.setIsBusy(true);\n let values = yield Promise.resolve(valuePromise);\n this.setIsBusy(false);\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + \"Options\"])) {\n let options = this._formElem.elements[k].options;\n for (let val in values[k + \"Options\"]) {\n let option = document.createElement(\"option\");\n option.value = val;\n option.innerText = values[k + \"Options\"][val];\n options.add(option);\n }\n }\n if (this._formElem.elements[k].type && (this._formElem.elements[k].type === \"checkbox\" || this._formElem.elements[k].type === \"radio\")) {\n this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k];\n }\n else if (this._formElem.elements[k].type && this._formElem.elements[k].type === \"file\") {\n if (this._formElem.elements[k + \"-hidden\"]) {\n this._formElem.elements[k + \"-hidden\"].value = values[k];\n }\n if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf(\"image\") !== -1) {\n let previewImage = this._formElem.querySelector(\".\" + k + \"-preview\");\n if (previewImage) {\n previewImage.src = values[k];\n }\n }\n }\n else {\n this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]);\n if (this._formElem.elements[k].classList) {\n if (Helper_1.Helper.isNotNull(values[k]) && (\"\" + values[k]).trim() !== \"\") {\n this._formElem.elements[k].classList.add(\"notEmpty\");\n }\n else {\n this._formElem.elements[k].classList.remove(\"notEmpty\");\n }\n }\n }\n }\n }\n return this;\n });\n }\n getValues(filesToBase64) {\n return __awaiter(this, void 0, void 0, function* () {\n let valuesFormData = new FormData(this._formElem);\n let values = Array.from(valuesFormData[\"entries\"]()).reduce((memo, pair) => (Object.assign(Object.assign({}, memo), { [pair[0]]: pair[1] })), {});\n if (Helper_1.Helper.nonNull(filesToBase64, true)) {\n values = yield Form.filesToBase64(values);\n }\n return values;\n });\n }\n static filesToBase64(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let filePromises = [];\n Object.keys(values).forEach(key => {\n if (values[key] instanceof Blob) {\n filePromises.push(new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n reader.readAsDataURL(values[key]);\n }).then(base64 => values[key] = base64));\n }\n });\n yield Promise.all(filePromises);\n return values;\n });\n }\n setElementChangeListener(listener) {\n this._elementChangeListener = listener;\n }\n clearErrors() {\n Object.keys(this._formElem.elements).forEach(elemKey => {\n this._formElem.elements[elemKey].setCustomValidity(\"\");\n });\n }\n setErrors(errors) {\n let hasElem = false;\n let firstError = null;\n // let notCatchedErrors = [];\n for (let k in errors) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== \"hidden\"\n && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) {\n this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")));\n hasElem = true;\n }\n else {\n new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")).show();\n }\n // if (Helper.isNull(firstError)) {\n // firstError = ;\n // }\n }\n // if (!hasElem && Helper.isNotNull(firstError)) {\n // for (let k in this._formElem.elements) {\n // if (this._formElem.elements[k].type !== \"hidden\") {\n // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError));\n // hasElem = true;\n // break;\n // }\n // }\n // }\n if (hasElem) {\n \"reportValidity\" in this._formElem && this._formElem.reportValidity();\n }\n }\n setIsBusy(isBusy) {\n this._isBusy = isBusy;\n if (this._isBusy) {\n this._formElem.classList.add(\"sending\");\n }\n else {\n this._formElem.classList.remove(\"sending\");\n }\n }\n submit() {\n return __awaiter(this, void 0, void 0, function* () {\n this._editors.forEach(e => e.updateSourceElement());\n this.setIsBusy(true);\n if (yield this.validate()) {\n let res = false;\n try {\n res = yield (this._submitHandler(yield this.getValues(), this));\n }\n catch (e) {\n console.error(e);\n }\n finally {\n this.setIsBusy(false);\n }\n return res;\n }\n this.setIsBusy(false);\n return false;\n });\n }\n validate() {\n return __awaiter(this, void 0, void 0, function* () {\n if (\"reportValidity\" in this._formElem && !this._formElem.reportValidity()) {\n return false;\n }\n let values = yield this.getValues();\n let res = yield Helper_1.Helper.asyncForEach(this._validators, (validator) => __awaiter(this, void 0, void 0, function* () {\n return validator(values, this);\n }), true);\n let hasErrors = false;\n let errors = {};\n res.forEach(value => {\n if (value !== true) {\n hasErrors = true;\n if (typeof value === \"object\") {\n for (let k in value) {\n errors[k] = value[k];\n }\n }\n }\n });\n if (hasErrors) {\n yield this.setErrors(errors);\n return false;\n }\n return true;\n });\n }\n onSubmit(callback) {\n this._submitCallback = callback;\n }\n getFormElement() {\n return this._formElem;\n }\n}\nexports.Form = Form;\n//# sourceMappingURL=Form.js.map","import { __values } from \"tslib\";\nimport { QueryBuilderUtils } from \"./QueryBuilderUtils\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nvar JoinAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JoinAttribute(connection, queryExpressionMap, joinAttribute) {\n this.connection = connection;\n this.queryExpressionMap = queryExpressionMap;\n this.isSelectedEvaluated = false;\n this.relationEvaluated = false;\n ObjectUtils.assign(this, joinAttribute || {});\n }\n Object.defineProperty(JoinAttribute.prototype, \"isMany\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"isSelected\", {\n /**\n * Indicates if this join is selected.\n */\n get: function () {\n var _this = this;\n if (!this.isSelectedEvaluated) {\n var getValue = function () {\n var e_1, _a;\n var _loop_1 = function (select) {\n if (select.selection === _this.alias.name)\n return { value: true };\n if (_this.metadata && !!_this.metadata.columns.find(function (column) { return select.selection === _this.alias.name + \".\" + column.propertyPath; }))\n return { value: true };\n };\n try {\n for (var _b = __values(_this.queryExpressionMap.selects), _c = _b.next(); !_c.done; _c = _b.next()) {\n var select = _c.value;\n var state_1 = _loop_1(select);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvaluated = true;\n }\n return this.isSelectedCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"tablePath\", {\n /**\n * Name of the table which we should join.\n */\n get: function () {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get: function () {\n var _this = this;\n if (!this.relationEvaluated) {\n var getValue = function () {\n if (!QueryBuilderUtils.isAliasProperty(_this.entityOrProperty))\n return undefined;\n var relationOwnerSelection = _this.queryExpressionMap.findAliasByName(_this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n }\n throw new Error(\"Relation with property path \" + _this.relationPropertyPath + \" in entity was not found.\");\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvaluated = true;\n }\n return this.relationCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n return undefined;\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n \n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n \n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n if (!this.relation)\n throw new Error(\"Cannot get junction table for join without relation.\");\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return JoinAttribute;\n}());\nexport { JoinAttribute };\n\n//# sourceMappingURL=JoinAttribute.js.map\n","/**\n * This class stores up and down queries needed for migrations functionality.\n */\nvar SqlInMemory = /** @class */ (function () {\n function SqlInMemory() {\n this.upQueries = [];\n this.downQueries = [];\n }\n return SqlInMemory;\n}());\nexport { SqlInMemory };\n\n//# sourceMappingURL=SqlInMemory.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { Query } from \"../driver/Query\";\nimport { SqlInMemory } from \"../driver/SqlInMemory\";\nvar BaseQueryRunner = /** @class */ (function () {\n function BaseQueryRunner() {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n this.isReleased = false;\n /**\n * Indicates if transaction is in progress.\n */\n this.isTransactionActive = false;\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n this.data = {};\n /**\n * All synchronized tables in the database.\n */\n this.loadedTables = [];\n /**\n * All synchronized views in the database.\n */\n this.loadedViews = [];\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n this.sqlMemoryMode = false;\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n this.sqlInMemory = new SqlInMemory();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads given table's data from the database.\n */\n BaseQueryRunner.prototype.getTable = function (tablePath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables([tablePath])];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables.length > 0 ? this.loadedTables[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database.\n */\n BaseQueryRunner.prototype.getTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables(tableNames)];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getView = function (viewPath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews([viewPath])];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews.length > 0 ? this.loadedViews[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getViews = function (viewPaths) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews(viewPaths)];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews];\n }\n });\n });\n };\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n BaseQueryRunner.prototype.enableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = true;\n };\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n BaseQueryRunner.prototype.disableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = false;\n };\n /**\n * Flushes all memorized sqls.\n */\n BaseQueryRunner.prototype.clearSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n };\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n BaseQueryRunner.prototype.getMemorySql = function () {\n return this.sqlInMemory;\n };\n /**\n * Executes up sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryUpSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_1_1;\n var e_1, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.upQueries), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes down sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryDownSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.downQueries.reverse()), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedView = function (viewName) {\n return __awaiter(this, void 0, void 0, function () {\n var view, foundViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n view = this.loadedViews.find(function (view) { return view.name === viewName; });\n if (view)\n return [2 /*return*/, view];\n return [4 /*yield*/, this.loadViews([viewName])];\n case 1:\n foundViews = _a.sent();\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0]);\n return [2 /*return*/, foundViews[0]];\n }\n else {\n throw new Error(\"View \\\"\" + viewName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, foundTables;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.loadedTables.find(function (table) { return table.name === tableName; });\n if (table)\n return [2 /*return*/, table];\n return [4 /*yield*/, this.loadTables([tableName])];\n case 1:\n foundTables = _a.sent();\n if (foundTables.length > 0) {\n this.loadedTables.push(foundTables[0]);\n return [2 /*return*/, foundTables[0]];\n }\n else {\n throw new Error(\"Table \\\"\" + tableName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Replaces loaded table with given changed table.\n */\n BaseQueryRunner.prototype.replaceCachedTable = function (table, changedTable) {\n var foundTable = this.loadedTables.find(function (loadedTable) { return loadedTable.name === table.name; });\n if (foundTable) {\n foundTable.name = changedTable.name;\n foundTable.columns = changedTable.columns;\n foundTable.indices = changedTable.indices;\n foundTable.foreignKeys = changedTable.foreignKeys;\n foundTable.uniques = changedTable.uniques;\n foundTable.checks = changedTable.checks;\n foundTable.justCreated = changedTable.justCreated;\n foundTable.engine = changedTable.engine;\n }\n };\n BaseQueryRunner.prototype.getTypeormMetadataTableName = function () {\n var options = this.connection.driver.options;\n return this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n };\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n BaseQueryRunner.prototype.isColumnChanged = function (oldColumn, newColumn, checkDefault, checkComment) {\n // this logs need to debug issues in column change detection. Do not delete it!\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(oldColumn.enum !== newColumn.enum);\n // console.log(oldColumn.enum, newColumn.enum);\n return oldColumn.charset !== newColumn.charset\n || oldColumn.collation !== newColumn.collation\n || oldColumn.precision !== newColumn.precision\n || oldColumn.scale !== newColumn.scale\n || oldColumn.width !== newColumn.width // MySQL only\n || oldColumn.zerofill !== newColumn.zerofill // MySQL only\n || oldColumn.unsigned !== newColumn.unsigned // MySQL only\n || oldColumn.asExpression !== newColumn.asExpression // MySQL only\n || (checkDefault && oldColumn.default !== newColumn.default)\n || oldColumn.onUpdate !== newColumn.onUpdate // MySQL only\n || oldColumn.isNullable !== newColumn.isNullable\n || (checkComment && oldColumn.comment !== newColumn.comment)\n || oldColumn.enum !== newColumn.enum;\n };\n /**\n * Checks if column length is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnLength = function (table, column, length) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.length)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].length) {\n return this.connection.driver.dataTypeDefaults[column.type].length.toString() === length.toString();\n }\n return false;\n };\n /**\n * Checks if column precision is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnPrecision = function (table, column, precision) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.precision !== null && columnMetadata.precision !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].precision !== null\n && this.connection.driver.dataTypeDefaults[column.type].precision !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].precision === precision;\n return false;\n };\n /**\n * Checks if column scale is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnScale = function (table, column, scale) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.scale !== null && columnMetadata.scale !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].scale !== null\n && this.connection.driver.dataTypeDefaults[column.type].scale !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].scale === scale;\n return false;\n };\n /**\n * Executes sql used special for schema build.\n */\n BaseQueryRunner.prototype.executeQueries = function (upQueries, downQueries) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries_1, upQueries_1_1, _a, query, parameters, e_3_1;\n var _b, _c, e_3, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (upQueries instanceof Query)\n upQueries = [upQueries];\n if (downQueries instanceof Query)\n downQueries = [downQueries];\n (_b = this.sqlInMemory.upQueries).push.apply(_b, __spreadArray([], __read(upQueries)));\n (_c = this.sqlInMemory.downQueries).push.apply(_c, __spreadArray([], __read(downQueries)));\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return [2 /*return*/, Promise.resolve()];\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n upQueries_1 = __values(upQueries), upQueries_1_1 = upQueries_1.next();\n _e.label = 2;\n case 2:\n if (!!upQueries_1_1.done) return [3 /*break*/, 5];\n _a = upQueries_1_1.value, query = _a.query, parameters = _a.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 3:\n _e.sent();\n _e.label = 4;\n case 4:\n upQueries_1_1 = upQueries_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _e.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (upQueries_1_1 && !upQueries_1_1.done && (_d = upQueries_1.return)) _d.call(upQueries_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n return BaseQueryRunner;\n}());\nexport { BaseQueryRunner };\n\n//# sourceMappingURL=BaseQueryRunner.js.map\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass JsonHelper {\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n // array deepEqual\n if (a instanceof Array && b instanceof Array && a.length === b.length) {\n return a[\"every\"]((obj, i) => {\n return JsonHelper.deepEqual(obj, b[i]);\n });\n }\n //date deepEqual\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n // object deep copy\n if (typeof a === \"object\" && typeof b === \"object\") {\n let aKeys = Object.keys(a);\n let bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys[\"every\"]((key) => {\n return Helper_1.Helper.isNotNull(b[key]) && JsonHelper.deepEqual(a[key], b[key]);\n });\n }\n //else is false (or not handled)\n return false;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static deepCopy(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper_1.Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneO;\n }\n static deepAssign(...objects) {\n if (objects.length > 0 && Array.isArray(objects)) {\n const result = [];\n objects.forEach(arr => result.push(...arr));\n return result;\n }\n const resultObj = {};\n objects.forEach(obj => {\n for (let i in obj) {\n if (resultObj[i] && typeof obj[i] === \"object\" && typeof resultObj[i] === \"object\") {\n resultObj[i] = JsonHelper.deepAssign(resultObj[i], obj[i]);\n }\n else {\n resultObj[i] = obj[i];\n }\n }\n });\n return resultObj;\n }\n static getDiff(a, b) {\n const result = {\n changed: {},\n added: {},\n removed: [],\n };\n // if (Array.isArray(a) && Array.isArray(b)){\n // const lengthA = a.length;\n // const lengthB = b.length;\n //\n // const minLength = Math.min(lengthA, lengthB);\n // for (let i = 0; i < minLength; i++){\n // const\n // }\n // }\n if ((typeof a !== \"object\" || typeof b !== \"object\")\n && (!Array.isArray(a) && !Array.isArray(b))) {\n if (a === b) {\n return null;\n }\n else {\n return { value: b };\n }\n }\n let hasChanged = false;\n let hasRemoved = false;\n let hasAdded = false;\n for (let i in a) {\n if (i in b) {\n const newVal = JsonHelper.getDiff(a[i], b[i]);\n if (newVal !== null) {\n result.changed[i] = newVal;\n hasChanged = true;\n }\n }\n else {\n result.removed.push(i);\n hasRemoved = true;\n }\n }\n for (let i in b) {\n if (!(i in a)) {\n result.added[i] = b[i];\n hasAdded = true;\n }\n }\n if (hasRemoved || hasAdded || hasChanged) {\n return result;\n }\n else {\n return null;\n }\n }\n static applyDiff(obj, diff) {\n if (!Array.isArray(diff.removed)) {\n debugger;\n }\n Object.keys(diff.changed).forEach(key => {\n if (\"value\" in diff.changed[key]) {\n obj[key] = diff.changed[key].value;\n }\n else {\n obj[key] = JsonHelper.applyDiff(obj[key], diff.changed[key]);\n }\n });\n Object.keys(diff.added).forEach(key => obj[key] = diff.added[key]);\n if (Array.isArray(obj)) {\n diff.removed.sort((a, b) => (parseInt(b) - parseInt(a))).forEach(index => {\n obj.splice(parseInt(index), 1);\n });\n }\n else {\n diff.removed.forEach(rem => delete obj[rem]);\n }\n return obj;\n }\n}\nexports.JsonHelper = JsonHelper;\n//# sourceMappingURL=JsonHelper.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { InsertResult } from \"./result/InsertResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { InsertValuesMissingError } from \"../error/InsertValuesMissingError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar InsertQueryBuilder = /** @class */ (function (_super) {\n __extends(InsertQueryBuilder, _super);\n function InsertQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n InsertQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n InsertQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var valueSets, queryRunner, transactionStartedByUs, broadcastResult_1, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, insertSql, parameters, insertResult, statements, _b, broadcastResult_2, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n valueSets = this.getValueSets();\n // console.timeEnd(\".value sets\");\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return [2 /*return*/, new InsertResult()];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult_1 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult_1, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_1.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult_1.promises)];\n case 4:\n _c.sent();\n _c.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), insertSql = _a[0], parameters = _a[1];\n insertResult = new InsertResult();\n statements = [declareSql, insertSql, selectOutputSql];\n _b = insertResult;\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n _b.raw = _c.sent();\n if (!(this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n // console.time(\".updating entity\");\n return [4 /*yield*/, returningResultsEntityUpdator.insert(insertResult, valueSets)];\n case 7:\n // console.time(\".updating entity\");\n _c.sent();\n _c.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult_2 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult_2, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_2.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult_2.promises)];\n case 9:\n _c.sent();\n _c.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _c.sent();\n _c.label = 12;\n case 12: \n // console.timeEnd(\".commit\");\n return [2 /*return*/, insertResult];\n case 13:\n error_1 = _c.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _c.label = 14;\n case 14:\n _c.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _c.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _c.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _c.sent();\n _c.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _c.sent();\n _c.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n InsertQueryBuilder.prototype.into = function (entityTarget, columns) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return this;\n };\n /**\n * Values needs to be inserted into table.\n */\n InsertQueryBuilder.prototype.values = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n InsertQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n */\n InsertQueryBuilder.prototype.onConflict = function (statement) {\n this.expressionMap.onConflict = statement;\n return this;\n };\n /**\n * Adds additional ignore statement supported in databases.\n */\n InsertQueryBuilder.prototype.orIgnore = function (statement) {\n if (statement === void 0) { statement = true; }\n this.expressionMap.onIgnore = statement;\n return this;\n };\n /**\n * Adds additional update statement supported in databases.\n */\n InsertQueryBuilder.prototype.orUpdate = function (statement) {\n var _this = this;\n this.expressionMap.onUpdate = {};\n if (statement && Array.isArray(statement.conflict_target))\n this.expressionMap.onUpdate.conflict = \" ( \" + statement.conflict_target.map(function (columnName) { return _this.escape(columnName); }).join(\", \") + \" ) \";\n if (statement && typeof statement.conflict_target === \"string\")\n this.expressionMap.onUpdate.conflict = \" ON CONSTRAINT \" + this.escape(statement.conflict_target) + \" \";\n if (statement && Array.isArray(statement.columns))\n this.expressionMap.onUpdate.columns = statement.columns.map(function (column) { return _this.escape(column) + \" = :\" + column; }).join(\", \");\n if (statement && Array.isArray(statement.overwrite)) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return column + \" = VALUES(\" + column + \")\"; }).join(\", \");\n }\n else if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return _this.escape(column) + \" = EXCLUDED.\" + _this.escape(column); }).join(\", \");\n }\n }\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates INSERT express used to perform insert query.\n */\n InsertQueryBuilder.prototype.createInsertExpression = function () {\n var _this = this;\n var tableName = this.getTableName(this.getMainTableName());\n var valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n var returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n var columnsExpression = this.createColumnNamesExpression();\n var query = \"INSERT \";\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" IGNORE \" : \"\");\n }\n query += \"INTO \" + tableName;\n // add columns expression\n if (columnsExpression) {\n query += \"(\" + columnsExpression + \")\";\n }\n else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += \" OUTPUT \" + returningExpression;\n }\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += \" \" + valuesExpression;\n }\n else {\n query += \" VALUES \" + valuesExpression;\n }\n }\n else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n }\n else {\n query += \" DEFAULT VALUES\";\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" ON CONFLICT DO NOTHING \" : \"\");\n query += \"\" + (this.expressionMap.onConflict ? \" ON CONFLICT \" + this.expressionMap.onConflict : \"\");\n if (this.expressionMap.onUpdate) {\n var _a = this.expressionMap.onUpdate, overwrite = _a.overwrite, columns = _a.columns, conflict = _a.conflict;\n query += \"\" + (columns ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + overwrite : \"\");\n }\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n var _b = this.expressionMap.onUpdate, overwrite = _b.overwrite, columns = _b.columns;\n query += \"\" + (columns ? \" ON DUPLICATE KEY UPDATE \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON DUPLICATE KEY UPDATE \" + overwrite : \"\");\n }\n }\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += \" RETURNING \" + returningExpression;\n }\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias.hasMetadata\n && this.expressionMap.mainAlias.metadata.columns\n .filter(function (column) { return _this.expressionMap.insertColumns.length > 0 ? _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert; })\n .some(function (column) { return _this.isOverridingAutoIncrementBehavior(column); })) {\n query = \"SET IDENTITY_INSERT \" + tableName + \" ON; \" + query + \"; SET IDENTITY_INSERT \" + tableName + \" OFF\";\n }\n return query;\n };\n /**\n * Gets list of columns where values must be inserted to.\n */\n InsertQueryBuilder.prototype.getInsertedColumns = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n return [];\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n // if user specified list of columns he wants to insert to, then we filter only them\n if (_this.expressionMap.insertColumns.length)\n return _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n // skip columns the user doesn't want included by default\n if (!column.isInsert) {\n return false;\n }\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(_this.connection.driver instanceof OracleDriver)\n && !(_this.connection.driver instanceof AbstractSqliteDriver)\n && !(_this.connection.driver instanceof MysqlDriver)\n && !(_this.connection.driver instanceof AuroraDataApiDriver)\n && !(_this.connection.driver instanceof SqlServerDriver && _this.isOverridingAutoIncrementBehavior(column)))\n return false;\n return true;\n });\n };\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n InsertQueryBuilder.prototype.createColumnNamesExpression = function () {\n var _this = this;\n var columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(function (column) { return _this.escape(column.databaseName); }).join(\", \");\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias.hasMetadata && !this.expressionMap.insertColumns.length) {\n var valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n }\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n };\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n InsertQueryBuilder.prototype.createValuesExpression = function () {\n var _this = this;\n var valueSets = this.getValueSets();\n var columns = this.getInsertedColumns();\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n var expression_1 = \"\";\n var parametersCount_1 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, valueSetIndex) {\n columns.forEach(function (column, columnIndex) {\n if (columnIndex === 0) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" SELECT \";\n }\n else {\n expression_1 += \"(\";\n }\n }\n var paramName = \"i\" + valueSetIndex + \"_\" + column.databaseName;\n // extract real value from the entity\n var value = column.getEntityValue(valueSet);\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression_1 += \"1\";\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n }\n else if (column.isDiscriminator) {\n _this.expressionMap.nativeParameters[\"discriminator_value_\" + parametersCount_1] = _this.expressionMap.mainAlias.metadata.discriminatorValue;\n expression_1 += _this.connection.driver.createParameter(\"discriminator_value_\" + parametersCount_1, parametersCount_1);\n parametersCount_1++;\n // return \"1\";\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n }\n else if (column.isGenerated && column.generationStrategy === \"uuid\" && !_this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n var paramName_1 = \"uuid_\" + column.databaseName + valueSetIndex;\n value = RandomGenerator.uuid4();\n _this.expressionMap.nativeParameters[paramName_1] = value;\n expression_1 += _this.connection.driver.createParameter(paramName_1, parametersCount_1);\n parametersCount_1++;\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if ((_this.connection.driver instanceof OracleDriver && valueSets.length > 1) || _this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression_1 += _this.connection.driver.normalizeDefault(column);\n }\n else {\n expression_1 += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n }\n else {\n expression_1 += \"DEFAULT\";\n }\n // support for SQL expressions in queries\n }\n else if (value instanceof Function) {\n expression_1 += value();\n // just any other regular value\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver)\n value = _this.connection.driver.parametrizeValue(column, value);\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n _this.expressionMap.nativeParameters[paramName] = value;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + column.srid + \")\";\n }\n else {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression_1 += \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression_1 += \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression_1 += column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression_1 += _this.connection.driver.createParameter(paramName, parametersCount_1);\n }\n parametersCount_1++;\n }\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL \";\n }\n else {\n expression_1 += \")\";\n }\n }\n else {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL UNION ALL \";\n }\n else {\n expression_1 += \"), \";\n }\n }\n }\n else {\n expression_1 += \", \";\n }\n });\n });\n if (expression_1 === \"()\")\n return \"\";\n return expression_1;\n }\n else { // for tables without metadata\n // get values needs to be inserted\n var expression_2 = \"\";\n var parametersCount_2 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, insertionIndex) {\n var columns = Object.keys(valueSet);\n columns.forEach(function (columnName, columnIndex) {\n if (columnIndex === 0) {\n expression_2 += \"(\";\n }\n var paramName = \"i\" + insertionIndex + \"_\" + columnName;\n var value = valueSet[columnName];\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression_2 += value();\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if (_this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) {\n expression_2 += \"NULL\";\n }\n else {\n expression_2 += \"DEFAULT\";\n }\n // just any other regular value\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n expression_2 += _this.connection.driver.createParameter(paramName, parametersCount_2);\n parametersCount_2++;\n }\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression_2 += \")\";\n }\n else {\n expression_2 += \"), \";\n }\n }\n else {\n expression_2 += \", \";\n }\n });\n });\n if (expression_2 === \"()\")\n return \"\";\n return expression_2;\n }\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n InsertQueryBuilder.prototype.getValueSets = function () {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n throw new InsertValuesMissingError();\n };\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n InsertQueryBuilder.prototype.isOverridingAutoIncrementBehavior = function (column) {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some(function (valueSet) {\n return column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null;\n });\n };\n return InsertQueryBuilder;\n}(QueryBuilder));\nexport { InsertQueryBuilder };\n\n//# sourceMappingURL=InsertQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar UpdateQueryBuilder = /** @class */ (function (_super) {\n __extends(UpdateQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function UpdateQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n UpdateQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n UpdateQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, updateSql, parameters, updateResult, statements, result, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata, this.expressionMap.valuesSet);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), updateSql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n statements = [declareSql, updateSql, selectOutputSql];\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n result = _b.sent();\n if (this.connection.driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else if (this.connection.driver instanceof MysqlDriver) {\n updateResult.raw = result;\n updateResult.affected = result.affectedRows;\n }\n else if (this.connection.driver instanceof AuroraDataApiDriver) {\n updateResult.raw = result;\n updateResult.affected = result.numberOfRecordsUpdated;\n }\n else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n updateResult.raw = result;\n updateResult.affected = result.changes;\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Values needs to be updated.\n */\n UpdateQueryBuilder.prototype.set = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n UpdateQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n UpdateQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n UpdateQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n UpdateQueryBuilder.prototype.createUpdateExpression = function () {\n var _this = this;\n var valuesSet = this.getValueSet();\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var updatedColumns = [];\n var newParameters = {};\n var parametersCount = this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver\n ? 0 : Object.keys(this.expressionMap.nativeParameters).length;\n if (metadata) {\n EntityMetadata.createPropertyPath(metadata, valuesSet).forEach(function (propertyPath) {\n // todo: make this and other query builder to work with properly with tables without metadata\n var columns = metadata.findColumnsWithPropertyPath(propertyPath);\n if (columns.length <= 0) {\n throw new EntityColumnNotFound(propertyPath);\n }\n columns.forEach(function (column) {\n if (!column.isUpdate) {\n return;\n }\n updatedColumns.push(column);\n var paramName = \"upd_\" + column.databaseName;\n //\n var value = column.getEntityValue(valuesSet);\n if (column.referencedColumn && value instanceof Object) {\n value = column.referencedColumn.getEntityValue(value);\n }\n else if (!(value instanceof Function)) {\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = NULL\");\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver) {\n value = _this.connection.driver.parametrizeValue(column, value);\n // } else if (value instanceof Array) {\n // value = new ArrayParameter(value);\n }\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[paramName] = value;\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n }\n var expression = null;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + column.srid + \")\";\n }\n else {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression = \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression = \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression = column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression = _this.connection.driver.createParameter(paramName, parametersCount);\n }\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + expression);\n parametersCount++;\n }\n });\n });\n if (metadata.versionColumn && updatedColumns.indexOf(metadata.versionColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn && updatedColumns.indexOf(metadata.updateDateColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n }\n else {\n Object.keys(valuesSet).map(function (key) {\n var value = valuesSet[key];\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(key) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(key) + \" = NULL\");\n }\n else {\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[key] = value;\n }\n else {\n _this.expressionMap.nativeParameters[key] = value;\n }\n updateColumnAndValues.push(_this.escape(key) + \" = \" + _this.connection.driver.createParameter(key, parametersCount));\n parametersCount++;\n }\n });\n }\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n UpdateQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n UpdateQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n UpdateQueryBuilder.prototype.getValueSet = function () {\n if (this.expressionMap.valuesSet instanceof Object)\n return this.expressionMap.valuesSet;\n throw new UpdateValuesMissingError();\n };\n return UpdateQueryBuilder;\n}(QueryBuilder));\nexport { UpdateQueryBuilder };\n\n//# sourceMappingURL=UpdateQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { DeleteResult } from \"./result/DeleteResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../index\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar DeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(DeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n DeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createDeleteExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n DeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, broadcastResult, deleteResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 11, 16, 21]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n deleteResult = new DeleteResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof MysqlDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.affectedRows;\n }\n else if (driver instanceof AuroraDataApiDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.numberOfRecordsUpdated;\n }\n else if (driver instanceof SqlServerDriver || driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n deleteResult.raw = result[0] ? result[0] : null;\n // don't return 0 because it could confuse. null means that we did not receive this value\n deleteResult.affected = typeof result[1] === \"number\" ? result[1] : null;\n }\n else if (driver instanceof OracleDriver) {\n deleteResult.affected = result;\n }\n else if (driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n deleteResult.raw = result;\n deleteResult.affected = result.changes;\n }\n else {\n deleteResult.raw = result;\n }\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, deleteResult];\n case 11:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 15];\n _b.label = 12;\n case 12:\n _b.trys.push([12, 14, , 15]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 13:\n _b.sent();\n return [3 /*break*/, 15];\n case 14:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 15];\n case 15: throw error_1;\n case 16:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 18];\n return [4 /*yield*/, queryRunner.release()];\n case 17:\n _b.sent();\n _b.label = 18;\n case 18:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 20];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20: return [7 /*endfinally*/];\n case 21: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n DeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates DELETE express used to perform query.\n */\n DeleteQueryBuilder.prototype.createDeleteExpression = function () {\n var tableName = this.getTableName(this.getMainTableName());\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"DELETE FROM \" + tableName + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression !== \"\" && this.connection.driver instanceof SqlServerDriver) {\n return \"DELETE FROM \" + tableName + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"DELETE FROM \" + tableName + whereExpression;\n }\n };\n return DeleteQueryBuilder;\n}(QueryBuilder));\nexport { DeleteQueryBuilder };\n\n//# sourceMappingURL=DeleteQueryBuilder.js.map\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/Dragger/DragHelper\"), exports);\n__exportStar(require(\"./client/Dragger/DraggedElement\"), exports);\n__exportStar(require(\"./client/HotkeyManager\"), exports);\n__exportStar(require(\"./client/InputSelect\"), exports);\n__exportStar(require(\"./client/ViewHelper\"), exports);\n//# sourceMappingURL=client.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventManager = void 0;\nconst cs_event_manager_1 = require(\"cs-event-manager\");\nclass EventManager extends cs_event_manager_1.EventManager {\n}\nexports.EventManager = EventManager;\n//# sourceMappingURL=EventManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TemplateSite = void 0;\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst MasterSite_1 = require(\"./Delegate/MasterSite\");\n/**\n * Die Seite bekommt ein Template übergeben und ersetzt in diesem Template das mit dem Selector gefundene\n * Element mit der angebenen View\n */\nclass TemplateSite extends MasterSite_1.MasterSite {\n /**\n * Constructor für eine TemplateSite\n *\n * @param siteManager\n * @param view\n * @param template\n * @param selectorToReplace\n */\n constructor(siteManager, view, template, selectorToReplace) {\n super(siteManager, template);\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(selectorToReplace).replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n}\nexports.TemplateSite = TemplateSite;\n//# sourceMappingURL=TemplateSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Menu = void 0;\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Klasse für ein Menü, was im Prinzip nichts anderes als eine Collection für MenuActions ist\n * Ein Menü hat einen oder mehrere Renderer, die für die Anzeige zuständig sind\n */\nclass Menu {\n /**\n * Setzt die Renderer und die initialen Actions\n *\n * @param renderer\n * @param actions\n */\n constructor(renderer, actions) {\n this._actions = [];\n this._renderers = [];\n this._submenus = [];\n if (Array.isArray(renderer)) {\n this._renderers = renderer;\n }\n else {\n this._renderers = [renderer];\n }\n //Initialisiert onClickListener\n this._onClickListener = this._generateOnClickListener();\n //Setze die Actions so, um einzelne Actions noch zu überprüfen\n Helper_1.Helper.nonNull(actions, []).forEach(action => {\n this.addAction(action, false);\n });\n this._openSubmenuListener = null;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n * @param menu\n * @return {Menu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Menu());\n menu._actions = [];\n this._actions.forEach(action => {\n menu.addAction(action.copy());\n });\n menu._renderers = this._renderers;\n menu._onClickListener = this._onClickListener;\n return menu;\n }\n /**\n * Schließt das Menü, hauptsächlich hier zum Schließen der Submenüs.\n * Zum öffnen wird nicht so eine Funktion gebraucht, da beim öffnen nicht die untermenüs geöffnet werden sollen\n */\n close() {\n this._submenus.forEach(submenu => {\n submenu.close();\n });\n }\n /**\n * Fügt eine Action dem Menü hinzu\n *\n * @param action\n * @param redraw\n */\n addAction(action, redraw) {\n //Überprüfung, ob es die richtige Klasse ist und ob die Action nicht schon hinzugefügt wurde\n if (action instanceof MenuAction_1.MenuAction && this._actions.indexOf(action) === -1) {\n //Falls es sich um ein Submenu handelt, füge dieses hinzu\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._submenus.push(action.getSubmenu());\n }\n this._actions.push(action);\n action.setMenu(this);\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n }\n removeAllActions(redraw) {\n this._actions.forEach(action => action.setMenu(null));\n this._actions = [];\n this._submenus = [];\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n /**\n * Sortiert die Actions und sagt danach den Renderern, dass diese das Menü zeuchnen sollen\n */\n draw() {\n try {\n this.sortActions();\n this._renderers.forEach(renderer => {\n renderer.render(this);\n });\n }\n catch (e) {\n console.error(e);\n }\n }\n /**\n * Sortiert die Actions der Order nach\n */\n sortActions() {\n this._actions = this._actions.sort(function (first, second) {\n return first.getOrder() - second.getOrder();\n });\n }\n openSubmenu(submenu) {\n if (this._openSubmenuListener) {\n this._openSubmenuListener(submenu);\n }\n }\n setOpenSubmenuListener(listener) {\n this._openSubmenuListener = listener;\n }\n /**\n * Generiert den defaultmäßigen onclick-listener.\n * @returns {Function}\n * @private\n */\n _generateOnClickListener() {\n return (event) => {\n let _element = event.target;\n //Falls es eine Action oder ein Unterlement einer Action war...\n if (_element.matches('li') || _element.matches('li *')) {\n //...finde das zugehörige Element und lese ID aus\n _element = _element.closest(\"li\");\n let actionId = parseInt(_element.dataset[\"id\"]);\n //Schaue nach, welche Action angeklickt wurde\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n //Falls action eine Funktion (und kein Link), sowie aktiv ist, führe action aus\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n //Gebe gefundene Action zurück\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n }\n return null;\n };\n }\n /**\n * Setzt den OnClickListener\n *\n * @param listener\n */\n setOnClickListener(listener) {\n this._onClickListener = listener;\n }\n /**\n * Gibt den OnClickListener zurück\n *\n * @returns {*}\n */\n getOnClickListener() {\n return this._onClickListener;\n }\n /**\n * Gibt die Actions zurück\n * @returns {Array}\n */\n getActions() {\n return this._actions;\n }\n /**\n * Triggert ein neues Rendern für eine Action. Das entsprechende ActionElement wird ausgetauscht\n * @param action\n */\n redrawAction(action) {\n this._renderers.forEach(renderer => {\n renderer._triggerRenderAction(action);\n });\n }\n /**\n * Updated das entsprechende ActionElement abhängig vom Renderer. Das Element wird nicht ausgetauscht\n * @param action\n */\n updateAction(action) {\n this._renderers.forEach(renderer => {\n renderer.updateAction(action);\n });\n }\n /**\n * alias für draw\n */\n redraw() {\n this.draw();\n }\n}\nexports.Menu = Menu;\n//# sourceMappingURL=Menu.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccordionRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst MenuRenderer_1 = require(\"./MenuRenderer\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst Translator_1 = require(\"../../../Translator\");\n/**\n * Leitet von DropdownRenderer ab, da Funktionalität fast gleich ist\n */\nclass AccordionRenderer extends MenuRenderer_1.MenuRenderer {\n /**\n * Rendert eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderAction(action) {\n let linkElement = this.renderLinkElement(action);\n let liElement = this.renderLiElement(action);\n liElement.insertBefore(linkElement, liElement.firstChild);\n return liElement;\n }\n /**\n * Rendert das AnchorElement für eine Action\n * @param action\n * @returns {HTMLAnchorElement}\n */\n renderLinkElement(action) {\n let aElement = document.createElement(\"a\");\n if (typeof action.getAction() === 'string') {\n aElement.href = action.getAction();\n }\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n let iconElement = document.createElement(\"img\");\n iconElement.src = action.getIcon();\n iconElement.classList.add('action-image');\n if (action.isShouldTranslate()) {\n iconElement.dataset[\"translationTitle\"] = action.getName();\n iconElement.classList.add(Translator_1.Translator.getInstance().getTranslationClass());\n }\n else {\n iconElement.title = action.getName();\n }\n aElement.appendChild(iconElement);\n }\n let name = action.getName();\n // debugger;\n if (action.isShouldTranslate()) {\n name = Translator_1.Translator.makePersistentTranslation(name);\n }\n else {\n name = document.createTextNode(name);\n }\n aElement.appendChild(name);\n return aElement;\n }\n /**\n * Render das LI-Element für eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderLiElement(action) {\n let liElement = document.createElement(\"li\");\n if (action.getLiClass().trim() !== \"\") {\n liElement.classList.add(...action.getLiClass().split(\" \"));\n }\n // liElement.appendChild(aElement);\n liElement.dataset[\"id\"] = action.getId();\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n liElement.classList.add(\"img\");\n }\n if (!action.isVisible()) {\n liElement.classList.add(\"hidden\");\n }\n liElement.classList.add(action.getShowFor());\n return liElement;\n }\n /**\n * Da abgeleitet von DropdownRenderer, muss eine Klasse wieder entfernt werden\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.remove('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('is-accordion-submenu-parent');\n return submenuActionElement;\n }\n /**\n * erstellt ein SubmenuParent für Accordion\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-accordion-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet ein ActionElement\n * @param action\n */\n updateAction(action) {\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n this.getElementForAction(action).setAttribute(\"aria-expanded\", true);\n submenuElement.classList.add(\"js-active\");\n submenuElement.style = \"\";\n }\n else {\n this.getElementForAction(action).removeAttribute(\"aria-expanded\");\n submenuElement.classList.remove(\"js-activ\");\n submenuElement.style = \"display:none;\";\n }\n }\n }\n}\nexports.AccordionRenderer = AccordionRenderer;\n//# sourceMappingURL=AccordionRenderer.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst _typeorm = require(\"typeorm\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst XSSHelper_1 = require(\"js-helper/dist/shared/XSSHelper\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nlet typeorm = _typeorm;\n// if (typeorm.default) {\n// typeorm = typeorm.default;\n// }\nclass EasySyncPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.find({\n \"id\": typeorm.In(ids)\n }, null, null, null, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.findOne({\n \"id\": id\n }, null, null, relations);\n });\n }\n static findByClientId(id, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, id, relations);\n });\n }\n static findByClientIds(ids, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, ids, relations);\n });\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (Helper_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns_(entities[index]);\n this._handleRelations_(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations_(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns_(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n}\nexports.EasySyncPartialModel = EasySyncPartialModel;\nEasySyncPartialModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass FileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"src\"] = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[\"saveOffline\"] = { type: BaseDatabase_1.BaseDatabase.TYPES.BOOLEAN, default: 1 };\n return columns;\n }\n getServerUrl(appendDate) {\n appendDate = Helper_1.Helper.nonNull(appendDate, true);\n if (!this.src.startsWith(\"http\") && !this.src.startsWith(\"//\") && !this.src.startsWith(\"data\")) {\n let path = FileMedium.PUBLIC_PATH + this.src;\n if (appendDate) {\n path += \"?t=\" + new Date(this.updatedAt).getTime();\n }\n return path;\n }\n return this.src;\n }\n getUrl() {\n if (device.platform !== \"browser\" && this.saveOffline && this._isDownloaded && Helper_1.Helper.isNotNull(this.id) && !this.src.startsWith(\"data\") && !this.src.startsWith(\"http\")) {\n return \"cdvfile://localhost/persistent/\" + this.src;\n }\n else {\n return this.getServerUrl();\n }\n }\n toString() {\n console.warn(\"to string called on FileMedium. Only for dependency. Please look inside your sourcecode\");\n return this.getUrl();\n }\n}\nexports.FileMedium = FileMedium;\nFileMedium.PUBLIC_PATH = \"./\";\nFileMedium.SCHEMA_NAME = \"FileMedium\";\nBaseDatabase_1.BaseDatabase.addModel(FileMedium);\n//# sourceMappingURL=FileMedium.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Role = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Access_1 = require(\"./Access\");\nclass Role extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n this.accesses = null;\n this.parents = null;\n this.children = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"accesses\"] = {\n target: Access_1.Access.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleAccess\"\n },\n cascade: false\n };\n relations[\"parents\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n relations[\"children\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n return relations;\n }\n}\nexports.Role = Role;\nRole.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Role);\n//# sourceMappingURL=Role.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartUserSiteMenuAction = void 0;\nconst UserMenuAction_1 = require(\"./UserMenuAction\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nclass StartUserSiteMenuAction extends UserMenuAction_1.UserMenuAction {\n constructor(name, access, site, showFor, order, icon) {\n super(name, access, () => {\n if (client_1.StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n client_1.StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n client_1.StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartUserSiteMenuAction = StartUserSiteMenuAction;\n//# sourceMappingURL=StartUserSiteMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FilePromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FileWriterPromise_1 = require(\"./FileWriterPromise\");\nclass FilePromise {\n constructor(fileEntry) {\n this.fileEntry = fileEntry;\n }\n createWriter() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res) => {\n this.fileEntry.createWriter(writer => {\n res(new FileWriterPromise_1.FileWriterPromise(writer));\n });\n });\n });\n }\n static open(file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n options = Helper_1.Helper.nonNull(options, { create: true, exclusive: false });\n return new Promise((r, rej) => {\n window[\"resolveLocalFileSystemURL\"](\"cdvfile://localhost/persistent/\", dirEntry => {\n dirEntry.getFile(file, options, fileEntry => {\n r(new FilePromise(fileEntry));\n }, rej);\n }, rej);\n });\n });\n }\n}\nexports.FilePromise = FilePromise;\n//# sourceMappingURL=FilePromise.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationUpdater = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationUpdater(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs set or add operation on a relation.\n */\n RelationUpdater.prototype.update = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updateSet, updateSet_1, ofs, parameters_1, conditions_1, condition, of_1, updateSet, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, bulkInserted_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!(relation.isManyToOne || relation.isOneToOneOwner)) return [3 /*break*/, 2];\n updateSet = relation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = value instanceof Object ? joinColumn.referencedColumn.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!this.expressionMap.of || (Array.isArray(this.expressionMap.of) && !this.expressionMap.of.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 10];\n case 2:\n if (!((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null)) return [3 /*break*/, 4];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n conditions_1.push(column.propertyPath + \" = :\" + parameterName);\n });\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 10];\n case 4:\n if (!(relation.isOneToOneNotOwner || relation.isOneToMany)) return [3 /*break*/, 6];\n if (Array.isArray(this.expressionMap.of))\n throw new Error(\"You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.\");\n of_1 = this.expressionMap.of;\n updateSet = relation.inverseRelation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = of_1 instanceof Object ? joinColumn.referencedColumn.getEntityValue(of_1) : of_1;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!value || (Array.isArray(value) && !value.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute()];\n case 5:\n _a.sent();\n return [3 /*break*/, 10];\n case 6:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n bulkInserted_1 = [];\n firstColumnValues.forEach(function (firstColumnVal) {\n secondColumnValues_1.forEach(function (secondColumnVal) {\n var inserted = {};\n junctionMetadata_1.ownerColumns.forEach(function (column) {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata_1.inverseColumns.forEach(function (column) {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted_1.push(inserted);\n });\n });\n if (!bulkInserted_1.length)\n return [2 /*return*/];\n if (!(this.queryBuilder.connection.driver instanceof OracleDriver || this.queryBuilder.connection.driver instanceof SapDriver)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(bulkInserted_1.map(function (value) {\n return _this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(value)\n .execute();\n }))];\n case 7:\n _a.sent();\n return [3 /*break*/, 10];\n case 8: return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(bulkInserted_1)\n .execute()];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n return RelationUpdater;\n}());\nexport { RelationUpdater };\n\n//# sourceMappingURL=RelationUpdater.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationRemover = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationRemover(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs remove operation on a relation.\n */\n RelationRemover.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, ofs, values_1, updateSet_1, parameters_1, conditions_1, condition, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, parameters_2, conditions_2, condition;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!relation.isOneToMany) return [3 /*break*/, 2];\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values_1 = Array.isArray(value) ? value : [value];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n conditions_1.push.apply(conditions_1, __spreadArray([], __read(values_1.map(function (value, valueIndex) {\n return __spreadArray(__spreadArray([], __read(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n return column.propertyPath + \" = :\" + parameterName;\n }))), __read(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return column.propertyPath + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n parameters_2 = {};\n conditions_2 = [];\n firstColumnValues.forEach(function (firstColumnVal, firstColumnValIndex) {\n conditions_2.push.apply(conditions_2, __spreadArray([], __read(secondColumnValues_1.map(function (secondColumnVal, secondColumnValIndex) {\n return __spreadArray(__spreadArray([], __read(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {\n var parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))), __read(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {\n var parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_2.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata_1.tableName)\n .where(condition)\n .setParameters(parameters_2)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return RelationRemover;\n}());\nexport { RelationRemover };\n\n//# sourceMappingURL=RelationRemover.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { RelationUpdater } from \"./RelationUpdater\";\nimport { RelationRemover } from \"./RelationRemover\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationQueryBuilder = /** @class */ (function (_super) {\n __extends(RelationQueryBuilder, _super);\n function RelationQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n RelationQueryBuilder.prototype.getQuery = function () {\n return \"\";\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sets entity (target) which relations will be updated.\n */\n RelationQueryBuilder.prototype.of = function (entity) {\n this.expressionMap.of = entity;\n return this;\n };\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n RelationQueryBuilder.prototype.set = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToMany || relation.isOneToMany)\n throw new Error(\"Set operation is only supported for many-to-one and one-to-one relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .add() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.add = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, remover;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set(null) method instead.\");\n remover = new RelationRemover(this, this.expressionMap);\n return [2 /*return*/, remover.remove(value)];\n });\n });\n };\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.addAndRemove = function (added, removed) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.remove(removed)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.add(added)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets entity's relation id.\n async getId(): Promise {\n\n }*/\n /**\n * Gets entity's relation ids.\n async getIds(): Promise {\n return [];\n }*/\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n RelationQueryBuilder.prototype.loadOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.loadMany().then(function (results) { return results[0]; })];\n });\n });\n };\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n RelationQueryBuilder.prototype.loadMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var of, metadata;\n return __generator(this, function (_a) {\n of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new Error(\"Cannot load entity because only one primary key was specified, however entity contains multiple primary keys\");\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n return [2 /*return*/, this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner)];\n });\n });\n };\n return RelationQueryBuilder;\n}(QueryBuilder));\nexport { RelationQueryBuilder };\n\n//# sourceMappingURL=RelationQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareManager = void 0;\nconst ShareDialog_1 = require(\"./ShareDialog\");\nclass ShareManager {\n share(text) {\n if (device.platform === \"browser\") {\n this._shareBrowser(text);\n }\n else {\n this._shareMobile(text);\n }\n }\n _shareMobile(text) {\n navigator[\"share\"](text);\n }\n _shareBrowser(text) {\n new ShareDialog_1.ShareDialog(text).show();\n }\n}\nexports.ShareManager = ShareManager;\n//# sourceMappingURL=ShareManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseDatabase_1 = require(\"./BaseDatabase\");\nclass BaseModel {\n constructor() {\n this.id = null;\n this._isLoaded = false;\n }\n getId() {\n return this.id;\n }\n setId(id) {\n this.id = id;\n }\n static getColumnDefinitions() {\n return {\n id: {\n primary: true,\n type: BaseDatabase_1.BaseDatabase.TYPES.INTEGER,\n generated: true\n },\n };\n }\n static getRelationDefinitions() {\n return {};\n }\n static getRelations() {\n return Object.keys(this.getRelationDefinitions());\n }\n static getSchemaDefinition() {\n let columns = this.getColumnDefinitions();\n Object.keys(columns).forEach(column => {\n if (typeof columns[column] === \"string\") {\n columns[column] = { type: columns[column] };\n }\n if (columns[column].type === BaseDatabase_1.BaseDatabase.TYPES.MY_JSON && !columns[column].transformer) {\n columns[column].type = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[column].transformer = {\n from: text => {\n return (text ? JSON.parse(text) : null);\n },\n to: json => {\n return (json ? JSON.stringify(json) : \"\");\n }\n };\n }\n });\n return {\n name: this.getSchemaName(),\n target: this,\n columns: columns,\n relations: this.getRelationDefinitions()\n };\n }\n static getSchemaName() {\n if (!this.SCHEMA_NAME) {\n this.SCHEMA_NAME = this.name;\n }\n return this.SCHEMA_NAME;\n }\n setLoaded(isLoaded) {\n this._isLoaded = isLoaded;\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.saveEntity(this);\n });\n }\n delete() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.deleteEntity(this);\n });\n }\n static deleteMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.deleteEntity(entities);\n });\n }\n static saveMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.saveEntity(entities);\n });\n }\n static find(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findEntities(this, where, order, limit, offset, relations);\n });\n }\n static findAndCount(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findAndCountEntities(this, where, order, limit, offset, relations);\n });\n }\n static findOne(where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findOneEntity(this, where, order, offset, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findById(this, id, relations);\n });\n }\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findByIds(this, ids, relations);\n });\n }\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.clearModel(this);\n });\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.every((subA, index) => {\n this.equals(subA, b[index]);\n });\n }\n else if (a instanceof this && b instanceof this) {\n return a.constructor === b.constructor && a.getId() === b.getId();\n }\n }\n}\nexports.BaseModel = BaseModel;\n/**\n * @type {null | BaseDatabase}\n * @private\n */\nBaseModel._database = null;\nBaseModel.RELATION = {\n MANY_TO_MANY: \"many-to-many\",\n MANY_TO_ONE: \"many-to-one\",\n ONE_TO_MANY: \"one-to-many\",\n ONE_TO_ONE: \"one-to-one\"\n};\n//# sourceMappingURL=BaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nclass SyncJob {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromise = Promise.resolve();\n this._queryRunner = null;\n this._finalRes = {};\n this._manyToManyRelations = {};\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (Object.keys(this._lastSyncDates).length === 0) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n yield this._doRuns(requestQueries);\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //disabled in doRuns. Cannot be reenabled sooner, but since lastSyncDates should not have any relations, it should be okay\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().rawQuery(\"PRAGMA foreign_keys = ON;\");\n if (this._finalRes[\"FileMedium\"] && this._finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(yield FileMedium_1.FileMedium.findByIds(this._finalRes[\"FileMedium\"][\"changed\"]));\n }\n return this._finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n //startTransaction maybe allow read, but not write?\n this._queryRunner = yield EasySyncClientDb_1.EasySyncClientDb.getInstance().createQueryRunner();\n this._savePromise = this._queryRunner.query(\"PRAGMA foreign_keys = OFF;\").then(() => {\n return this._queryRunner.startTransaction();\n });\n //Ask for next run until no more runs needed\n let shouldAskAgain;\n do {\n shouldAskAgain = false;\n response = yield SyncJob._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query and save changes\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (res && res.shouldAskAgain) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n //Extract entities\n this._extractEntities(res);\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n yield this._handleManyToManyRelations();\n //wait for savePromises, stop transaction\n return this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.commitTransaction();\n })).catch((e) => __awaiter(this, void 0, void 0, function* () {\n console.error(e);\n yield this._queryRunner.rollbackTransaction();\n })).finally(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.release();\n }));\n });\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return;\n }\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedEntities = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedEntities.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n let schemaDefinition = modelClass.getSchemaDefinition();\n let relations = schemaDefinition[\"relations\"];\n let columns = schemaDefinition[\"columns\"];\n let changedEntityIds = [];\n changedEntities.forEach(entity => {\n Object.keys(relations).forEach(relation => {\n if (relations[relation].type === \"many-to-many\" && Array.isArray(entity[relation])) {\n let table = relations[relation].joinTable;\n let ownName;\n if (table.joinColumn && table.joinColumn.name) {\n ownName = table.joinColumn.name;\n }\n else {\n ownName = modelClass.getSchemaName();\n ownName = ownName.substr(0, 1).toLowerCase() + ownName.substr(1) + \"Id\";\n }\n let otherName;\n if (table.inverseJoinColumn && table.inverseJoinColumn.name) {\n otherName = table.inverseJoinColumn.name;\n }\n else {\n otherName = relations[relation].target;\n otherName = otherName.substr(0, 1).toLowerCase() + otherName.substr(1) + \"Id\";\n }\n this._manyToManyRelations[table.name] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name], {});\n this._manyToManyRelations[table.name][\"values\"] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"values\"], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"delete_\" + ownName], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName].push(entity.id);\n let otherIdsAlreadyInserted = [];\n let insertedRelations = this._manyToManyRelations[table.name][\"values\"].filter(relValue => relValue[ownName] === entity.id);\n insertedRelations.forEach(relValue => otherIdsAlreadyInserted.push(relValue[otherName]));\n entity[relation].forEach(otherId => {\n let index = otherIdsAlreadyInserted.indexOf(otherId);\n if (index === -1) {\n let value = {};\n value[ownName] = entity.id;\n value[otherName] = otherId;\n this._manyToManyRelations[table.name][\"values\"].push(value);\n }\n });\n }\n else if ((relations[relation].type === \"many-to-one\"\n || (relations[relation].type === \"one-to-one\" && relations[relation].joinColumn))\n //DO not check for a value of the relation here. Else If the first entity has no value set, the field\n // will not be set and therefore ignored for all other entites too\n ) {\n let fieldName;\n if (relations[relation].joinColumn && relations[relation].joinColumn.name) {\n fieldName = relations[relation].joinColumn.name;\n }\n else {\n fieldName = relation + \"Id\";\n }\n entity[fieldName] = entity[relation];\n }\n delete entity[relation];\n });\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n changedEntityIds.push(entity.id);\n });\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._insertOrReplace(modelClass, changedEntities); }));\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._deleteModels(modelClass, deletedModelsIds); }));\n this._finalRes[modelName] = shared_1.Helper.nonNull(this._finalRes[modelName], { \"deleted\": [], \"changed\": [] });\n this._finalRes[modelName][\"deleted\"].push(...deletedModelsIds);\n this._finalRes[modelName][\"changed\"].push(...changedEntityIds);\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n _insertOrReplace(modelClass, changedEntities) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_INSERT_IN_ONE_GO = 300;\n if (changedEntities.length === 0) {\n return;\n }\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = schemaDefinition.name;\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let columns = schemaDefinition.columns;\n //Get fields from entity for including relation fields\n const fields = Object.keys(changedEntities[0]);\n let values = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(changedEntities, (entity) => __awaiter(this, void 0, void 0, function* () {\n let valueString = [];\n //Stellt die reihenfolge sicher\n fields.forEach(field => {\n let val = entity[field];\n if (columns[field] && columns[field].transformer) {\n val = columns[field].transformer.to(val);\n }\n if (columns[field] && columns[field].type === BaseDatabase_1.BaseDatabase.TYPES.SIMPLE_JSON) {\n val = JSON.stringify(val);\n }\n values.push(val);\n valueString.push(\"?\");\n });\n valueStrings.push(\"(\" + valueString.join(\",\") + \")\");\n if (valueStrings.length >= MAX_INSERT_IN_ONE_GO) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n valueStrings = [];\n values = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n }\n });\n }\n _deleteModels(modelClass, deletedModelsIds) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_DELETES_IN_ONE_GO = 300;\n if (deletedModelsIds.length === 0) {\n return;\n }\n let tableName = modelClass.getSchemaName();\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let ids = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(deletedModelsIds, (entityId) => __awaiter(this, void 0, void 0, function* () {\n ids.push(entityId);\n valueStrings.push(\"?\");\n if (valueStrings.length >= MAX_DELETES_IN_ONE_GO) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n valueStrings = [];\n ids = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n }\n });\n }\n _handleManyToManyRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._savePromise;\n let promises = [];\n Object.keys(this._manyToManyRelations).forEach(table => {\n let sql = \"DELETE FROM \" + table + \" WHERE \";\n let deleteSqls = [];\n Object.keys(this._manyToManyRelations[table]).forEach(field => {\n if (field.startsWith(\"delete_\")) {\n deleteSqls.push(field.substr(7) + \" IN (\" + this._manyToManyRelations[table][field].join(\",\") + \")\");\n }\n });\n sql += deleteSqls.join(\" OR \") + \";\";\n promises.push(this._queryRunner.query(sql).then(() => {\n if (this._manyToManyRelations[table].values.length > 0) {\n let fields = Object.keys(this._manyToManyRelations[table].values[0]);\n let valueStrings = [];\n this._manyToManyRelations[table].values.forEach(valuePair => {\n let values = [];\n fields.forEach(field => {\n values.push(valuePair[field]);\n });\n valueStrings.push(\"(\" + values.join(\",\") + \")\");\n });\n let sql = \"INSERT OR REPLACE INTO \" + table + \"(\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\") + \";\";\n return this._queryRunner.query(sql);\n }\n }));\n });\n yield Promise.all(promises);\n });\n }\n}\nexports.SyncJob = SyncJob;\nSyncJob.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DeleteUserManagement1000000000000 = void 0;\nclass DeleteUserManagement1000000000000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"roleAccess\", true);\n yield queryRunner.dropTable(\"roleChildren\", true);\n yield queryRunner.dropTable(\"userRole\", true);\n if (this._isServer()) {\n yield queryRunner.dropTable(\"user_access\", true);\n }\n yield queryRunner.dropTable(\"access\", true);\n yield queryRunner.dropTable(\"role\", true);\n yield queryRunner.dropTable(\"user\", true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.DeleteUserManagement1000000000000 = DeleteUserManagement1000000000000;\n//# sourceMappingURL=DeleteUserManagement.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupUserManagement1000000001000 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupUserManagement1000000001000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._addAccess(queryRunner);\n yield this._addRole(queryRunner);\n yield this._addUser(queryRunner);\n yield this._addRoleAccess(queryRunner);\n yield this._addRoleChildren(queryRunner);\n yield this._addUserRole(queryRunner);\n if (this._isServer()) {\n yield this._addUserAccess(queryRunner);\n }\n });\n }\n _addAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let accessTable = new typeorm_1.Table({\n name: \"access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(accessTable, true);\n });\n }\n _addRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleTable = new typeorm_1.Table({\n name: \"role\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(roleTable, true);\n });\n }\n _addUser(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userTable = new typeorm_1.Table({\n name: \"user\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"username\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"email\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"password\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"activated\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"blocked\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"salt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n ]\n });\n return yield queryRunner.createTable(userTable, true);\n });\n }\n _addRoleAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleAccessTable = new typeorm_1.Table({\n name: \"roleAccess\",\n columns: [\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"accessId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_38300dd4683a436f8db90b42bd\",\n columnNames: [\"roleId\"]\n },\n {\n name: \"IDX_bd55fc382ad2480f75a17e33cb\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_38300dd4683a436f8db90b42bd9\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_bd55fc382ad2480f75a17e33cb5\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleAccessTable, true);\n });\n }\n _addRoleChildren(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleChildrenTable = new typeorm_1.Table({\n name: \"roleChildren\",\n columns: [\n {\n name: \"childId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"parentId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_030234c342756c67cefa480687\",\n columnNames: [\"childId\"]\n },\n {\n name: \"IDX_35741f2d68a65c2765047705f8\",\n columnNames: [\"parentId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_roleChildren_childId\",\n columnNames: [\"childId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_roleChildren_parentId\",\n columnNames: [\"parentId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleChildrenTable, true);\n });\n }\n _addUserRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"userRole\",\n columns: [\n {\n name: \"userId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_userRole_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userRole_roleId\",\n columnNames: [\"roleId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userRole_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userRole_roleId\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n _addUserAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"user_access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"userId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n },\n {\n name: \"accessId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n }\n ],\n indices: [\n {\n name: \"IDX_userAccess_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userAccess_accessId\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userAccess_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userAccess_accessId\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupUserManagement1000000001000 = SetupUserManagement1000000001000;\n//# sourceMappingURL=SetupUserManagement.js.map","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config = {\n translations: {},\n fallbackLanguage: \"en\",\n markUntranslatedTranslations: true,\n markTranslations: false,\n logMissingTranslations: true\n }) {\n this._dynamicKey = 0;\n this._translations = {};\n this.addDynamicTranslations(Translator._translations);\n this.addDynamicTranslations(config.translations);\n this._fallbackLanguage = config.fallbackLanguage;\n this._markUntranslatedTranslations = config.markUntranslatedTranslations;\n this._markTranslations = config.markTranslations;\n if (config.logMissingTranslations === true) {\n this._logMissingTranslationsFunction = (missingTranslation, language) => {\n if (language === this._fallbackLanguage) {\n console.error(\"missing base translation for key \" + missingTranslation);\n }\n else {\n console.warn(\"missing translation for language >\" + language + \"< and key >\" + missingTranslation + \"<\");\n }\n };\n }\n else if (typeof config.logMissingTranslations === \"function\") {\n this._logMissingTranslationsFunction = config.logMissingTranslations;\n }\n else {\n this._logMissingTranslationsFunction = null;\n }\n this._translationCallbacks = new Map();\n this._lastTranslationCallbackId = 0;\n }\n createDynamicKey() {\n this._dynamicKey++;\n return \"translator-dynamic-\" + new Date().getTime() + \"-\" + this._dynamicKey;\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @param language\n * @returns {*}\n */\n translate(key, args, language) {\n if (shared_1.Helper.isNull(key)) {\n return \"\";\n }\n language = shared_1.Helper.nonNull(language, args, this._fallbackLanguage);\n let translation = null;\n key = key.toLowerCase();\n if (shared_1.Helper.isNotNull(this._translations[language]) && shared_1.Helper.isNotNull(this._translations[language][key])) {\n translation = this._translations[language][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n if (this._translations[this._fallbackLanguage]) {\n translation = this._translations[this._fallbackLanguage][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n translation = key;\n }\n if (this._markUntranslatedTranslations) {\n translation = \">>\" + translation + \"<<\";\n }\n }\n if (this._markTranslations) {\n translation = \"$\" + translation + \"$\";\n }\n if (args !== undefined) {\n translation = Translator._format(translation, args);\n }\n return translation;\n }\n /**\n * Fügt neue Übersetzungen hinzu\n * @param trans\n */\n addDynamicTranslations(trans) {\n for (let lang in trans) {\n if (!this._translations[lang]) {\n this._translations[lang] = {};\n }\n for (let key in trans[lang]) {\n this._translations[lang][key.toLowerCase()] = trans[lang][key];\n }\n }\n }\n getLanguages() {\n return Object.keys(this._translations);\n }\n getFallbackLanguage() {\n return this._fallbackLanguage;\n }\n static translate(key, args, language) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.translate(key, args, language);\n }\n return \"\";\n }\n static addDynamicTranslations(trans) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addDynamicTranslations(trans);\n }\n else {\n Object.keys(trans).forEach(lang => {\n if (shared_1.Helper.isNull(Translator._translations[lang])) {\n Translator._translations[lang] = {};\n }\n Object.assign(Translator._translations[lang], trans[lang]);\n });\n }\n }\n static init(config) {\n Translator.instance = new Translator(config);\n }\n /**\n * @returns {Translator|null}\n */\n static getInstance() {\n return Translator.instance;\n }\n static _isValid(translation) {\n return (typeof translation === \"string\");\n }\n static _format(translation, args) {\n return translation.replace(/{(\\d+)}/g, function (match, number) {\n return args[number] !== undefined ? args[number] : match;\n });\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { MissingDeleteDateColumnError } from \"../error/MissingDeleteDateColumnError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SoftDeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(SoftDeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SoftDeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SoftDeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n SoftDeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, returningResultsEntityUpdator, _a, sql, parameters, updateResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n }\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete/soft-delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SoftDeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SoftDeleteQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SoftDeleteQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n SoftDeleteQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n SoftDeleteQueryBuilder.prototype.createUpdateExpression = function () {\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n if (!metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.expressionMap.mainAlias + \"\\\"\");\n if (!metadata.deleteDateColumn) {\n throw new MissingDeleteDateColumnError(metadata);\n }\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var newParameters = {};\n switch (this.expressionMap.queryType) {\n case \"soft-delete\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\");\n break;\n case \"restore\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = NULL\");\n break;\n default:\n throw new Error(\"The queryType must be \\\"soft-delete\\\" or \\\"restore\\\"\");\n }\n if (metadata.versionColumn)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n return SoftDeleteQueryBuilder;\n}(QueryBuilder));\nexport { SoftDeleteQueryBuilder };\n\n//# sourceMappingURL=SoftDeleteQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XSSHelper = void 0;\nclass XSSHelper {\n static escapeHTML(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n const MAP = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, function (m) {\n return MAP[m];\n });\n }\n static escapeJS(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n return text.replace(/[<]([\\\\s]*\\\\\\/?[\\\\s]*)script([^<]*)[>]/g, function (match, p1, p2) {\n return \"<\" + p1 + \"sc‌ript\" + p2 + \">\";\n });\n }\n}\nexports.XSSHelper = XSSHelper;\n//# sourceMappingURL=XSSHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SiteManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst AbstractSite_1 = require(\"./AbstractSite\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst Context_1 = require(\"./Context\");\nconst Translator_1 = require(\"../Translator\");\nconst DataManager_1 = require(\"../DataManager\");\nconst HistoryManager_1 = require(\"../HistoryManager\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Manager-Klasse für die Seiten\n */\nclass SiteManager {\n /**\n * Constructor für Manager. Fügt Listener für zurück (onpopstate) hinzu\n */\n constructor() {\n this._isInit = false;\n }\n /**\n *\n * @return {SiteManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new SiteManager();\n }\n return this._instance;\n }\n /**\n * @param siteDivId\n * @param deepLinks\n */\n init(siteDivId, deepLinks) {\n this._siteDiv = null;\n this._siteStack = [];\n this._siteDiv = document.getElementById(siteDivId);\n this._titleTranslationCallbackId = null;\n this._appEndedListener = null;\n this._inversedDeepLinks = Helper_1.Helper.invertKeyValues(deepLinks);\n //Listener, welcher beim klicken auf Zurück oder Forward ausgeführt wird\n HistoryManager_1.HistoryManager.getInstance().setOnPopStateListener((state, direction) => {\n //Falls zurück\n if (direction === HistoryManager_1.HistoryManager.BACK) {\n this.goBack();\n }\n //Falls vorwärts\n else if (HistoryManager_1.HistoryManager.FORWARD === direction) {\n if (this._siteStack.indexOf(state.state.site) !== -1) {\n this.toForeground(state.state.site);\n }\n else {\n this.startSite(state.state.site.constructor, state.state.parameters);\n }\n }\n });\n //Cordova-Callbacks\n document.addEventListener(\"pause\", () => this._pauseSite(), false);\n document.addEventListener(\"resume\", () => __awaiter(this, void 0, void 0, function* () { return yield this._resumeSite(); }), false);\n document.addEventListener(\"menubutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onMenuPressed();\n }\n }, false);\n document.addEventListener(\"searchbutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onSearchPressed();\n }\n }, false);\n window.addEventListener(\"beforeunload\", e => {\n const returnMessage = this.beforeUnload(e);\n if (returnMessage !== null) {\n e.preventDefault();\n e.returnValue = returnMessage;\n return returnMessage;\n }\n });\n this._isInit = true;\n }\n setAppEndedListener(listener) {\n this._appEndedListener = listener;\n }\n goBack() {\n if (this._siteStack.length >= 1) {\n let site = this.getCurrentSite();\n if (site && site.onBackPressed() !== false) {\n this.endSite(site);\n }\n }\n }\n /**\n * gibt die aktuelle Seite zurück\n * @returns AbstractSite\n */\n getCurrentSite() {\n if (this._siteStack.length >= 1) {\n return this._siteStack[this._siteStack.length - 1];\n }\n return null;\n }\n /**\n * Erstellt eine neue Seite und zeigt diese an. ParamsPromise kann entweder ein Promise oder ein Objekt oder null sein.\n *\n * @param siteConstructor\n * @param paramsPromise\n * @returns {Promise}\n */\n startSite(siteConstructor, paramsPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n //Testen, ob der Constructor vom richtigen Typen ist\n if (!(siteConstructor.prototype instanceof AbstractSite_1.AbstractSite)) {\n throw {\n \"error\": \"wrong class given! Expected AbstractSite, given \" + siteConstructor.name\n };\n }\n EventManager_1.EventManager.trigger(\"site-manager-start-site\", {\n site: siteConstructor, paramPromise: paramsPromise\n });\n //Loading-Symbol, falls ViewParameters noch länger brauchen\n let loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n this._siteDiv.appendChild(loadingSymbol);\n //create Site\n let site = new siteConstructor(this);\n this._siteStack.unshift(site);\n //Wartet auf onConstruct, viewPromise, onViewLoaded und zeigt dann Seite\n Promise.resolve(paramsPromise).then((params) => __awaiter(this, void 0, void 0, function* () {\n site._onConstructPromise = site.onConstruct(Helper_1.Helper.nonNull(params, {}));\n yield Promise.all([site._onConstructPromise, site.getViewPromise()]);\n //If site is ended inside onConstruct, don't do anything\n if (site._state !== Context_1.Context.STATE_DESTROYED && site._state !== Context_1.Context.STATE_DESTROYING) {\n yield site.callOnViewLoaded();\n site._viewLoadedPromise.resolve();\n return this._show(site);\n }\n loadingSymbol.remove();\n })).catch((e) => {\n console.error(\"site start error for site \", siteConstructor.name, e);\n site.getFinishResolver().reject(e);\n loadingSymbol.remove();\n //Zeige alte Seite im Fehlerfall wieder an\n for (let i = this._siteStack.length - 1; i >= 0; i--) {\n if (this._siteStack[i] !== site) {\n return this._show(this._siteStack[i]);\n }\n }\n site._viewLoadedPromise.reject();\n });\n //Gebe Site-Promise zurück\n return site.getFinishPromise();\n });\n }\n updateUrl(site, args) {\n let url = this._generateUrl(site, args);\n HistoryManager_1.HistoryManager.getInstance().replaceState({\n 'site': site,\n 'parameters': args\n }, site.constructor.name, url);\n }\n _generateUrl(site, args) {\n let deepLink = this.getDeepLinkFor(site);\n let url = [location.protocol, '//', location.host, location.pathname].join('');\n if (Helper_1.Helper.isNotNull(deepLink)) {\n args[\"s\"] = deepLink;\n url = [url, DataManager_1.DataManager.buildQuery(args)].join('');\n }\n return url;\n }\n /**\n * Gibt einen DeepLink zurück\n *\n * @param site\n * @return string\n */\n getDeepLinkFor(site) {\n return this._inversedDeepLinks[site.constructor];\n }\n /**\n * Pausiert eine Seite\n *\n * @param site\n * @private\n */\n _pauseSite(site) {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && site._state === Context_1.Context.STATE_RUNNING) {\n site._pauseParameters = site.onPause();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n }\n }\n /**\n * Lässt eine Seite weiterlaufen\n *\n * @param site\n * @private\n */\n _resumeSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && (site._state === Context_1.Context.STATE_PAUSED || site._state === Context_1.Context.STATE_VIEW_LOADED)) {\n yield site.getViewPromise();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(site._view);\n yield Translator_1.Translator.getInstance().updateTranslations();\n if (Helper_1.Helper.isNull(site._historyId)) {\n site._historyId = HistoryManager_1.HistoryManager.getInstance().pushState({\n 'site': site,\n 'parameters': site.getParameters()\n }, site.constructor.name, this._generateUrl(site, site.getParameters()));\n }\n else {\n HistoryManager_1.HistoryManager.getInstance().stateToCurrentPosition(site._historyId);\n }\n yield site.onStart(site._pauseParameters);\n }\n });\n }\n /**\n * Zeigt eine Seite an\n *\n * @param site\n * @returns {Promise<*>}\n * @private\n */\n _show(site) {\n return __awaiter(this, void 0, void 0, function* () {\n //check if site is ended\n if (site._state === Context_1.Context.STATE_DESTROYING || site._state === Context_1.Context.STATE_DESTROYED) {\n return;\n }\n //Mache nichts, wenn Seite bereits angezeigt wird\n if (site._state === Context_1.Context.STATE_RUNNING && this.getCurrentSite() === site) {\n return;\n }\n //Speichere alte Seite\n this._pauseSite();\n //Zeige Ladesymbol\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n //Hinzufügen/Updaten zum SiteStack\n let currentSiteIndex = this._siteStack.indexOf(site);\n if (-1 !== currentSiteIndex) {\n this._siteStack.splice(currentSiteIndex, 1);\n }\n this._siteStack.push(site);\n //Anzeigen der Seite. Stelle sicher, dass die View wirklich geladen ist!\n return site.getViewPromise().then(() => __awaiter(this, void 0, void 0, function* () {\n //Stelle sicher, dass in der Zwischenzeit keine andere Seite gestartet wurde\n if (this.getCurrentSite() === site) {\n yield this._resumeSite(site);\n }\n }));\n });\n }\n /**\n * Beendet eine Seite. Muss nicht die aktive Seite sein\n *\n * @param site\n */\n endSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n // return site._onConstructPromise.then(async () => {\n //Aus Index entfernen\n let index = this._siteStack.indexOf(site);\n this._siteStack.splice(index, 1);\n //Seite war/ist die aktive Seite\n if (index === this._siteStack.length) {\n this._pauseSite(site);\n //Seite ist aktiv, zeige Ladesymbol\n this._siteDiv.appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol('overlay'));\n site.getFinishPromise().then(() => {\n let newSiteToShow = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(newSiteToShow)) {\n this.toForeground(newSiteToShow);\n }\n });\n }\n if (this._siteStack.length <= 0) {\n console.log(\"stack is empty, starting normal site!\");\n HistoryManager_1.HistoryManager.getInstance().cutStack(0);\n HistoryManager_1.HistoryManager.getInstance().go(-1 * history.length, true);\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(document.createTextNode(\"App ist beendet\"));\n if (typeof this._appEndedListener === \"function\") {\n this._appEndedListener(this);\n }\n }\n site._context = Context_1.Context.STATE_DESTROYING;\n yield site.onDestroy();\n site._context = Context_1.Context.STATE_DESTROYED;\n site.getFinishResolver().resolve(site._result);\n });\n }\n /**\n * Stellt eine aktive Seite in den Vordergrund;\n * @param site\n * @returns {Promise<*>}\n */\n toForeground(site) {\n return this._show(site);\n }\n /**\n * Updated den Seitentitel. Dafür gibt es im translation-file den Key document-title (document-title-empty, falls title null),\n * der als Parameter in der Übersetzung den übergebenen Title übergeben bekommt.\n *\n * Der übergebene title wird mit den angebenenen argumenten zuerst übersetz, bevor der gesamte document-Title überstzt wird\n *\n * Wenn args === false, dann wird title nicht übersetzt\n *\n * Durch das argument titleTemplate kann der key im translation-file von document-title individuell abweichen\n *\n * @param title\n * @param args\n * @param titleTemplate\n */\n updateTitle(title, args, titleTemplate) {\n titleTemplate = Helper_1.Helper.nonNull(titleTemplate, Helper_1.Helper.isNull(title) ? \"document-title-empty\" : \"document-title\");\n if (Helper_1.Helper.isNotNull(this._titleTranslationCallbackId)) {\n Translator_1.Translator.removeTranslationCallback(this._titleTranslationCallbackId);\n }\n this._titleTranslationCallbackId = Translator_1.Translator.addTranslationCallback(() => {\n if (args !== false) {\n title = Translator_1.Translator.translate(title, args);\n }\n document.title = Translator_1.Translator.translate(titleTemplate, [title]);\n });\n }\n beforeUnload(e) {\n return this.getCurrentSite().onBeforeUnload(e);\n }\n}\nexports.SiteManager = SiteManager;\nSiteManager._instance = null;\n//# sourceMappingURL=SiteManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DraggedElement = void 0;\nclass DraggedElement {\n constructor(element) {\n this.isDragging = false;\n this.element = element;\n }\n onStart(listener) {\n this.startListener = listener;\n return this;\n }\n onStop(listener) {\n this.stopListener = listener;\n return this;\n }\n onMove(listener) {\n this.moveListener = listener;\n return this;\n }\n start() {\n this.isDragging = true;\n if (!this.previewElement) {\n this.previewElement = this.element.cloneNode(true);\n const styles = getComputedStyle(this.element);\n for (let i = 0; i < styles.length; i++) {\n this.previewElement.style[styles[i]] = styles.getPropertyValue(styles[i]);\n }\n this.previewElement.style.opacity = \"0.6\";\n this.previewElement.style.position = \"fixed\";\n }\n const boundingRect = this.element.getBoundingClientRect();\n this.startPosition = { x: boundingRect.left, y: boundingRect.top };\n this.previewElement.style.top = boundingRect.top + \"px\";\n this.previewElement.style.left = boundingRect.left + \"px\";\n this.previewElement.style.width = (boundingRect.right - boundingRect.left) + \"px\";\n this.previewElement.style.height = (boundingRect.bottom - boundingRect.top) + \"px\";\n document.body.appendChild(this.previewElement);\n if (this.startListener) {\n this.startListener(this.element);\n }\n }\n stop(mousePosition) {\n this.isDragging = false;\n if (this.previewElement) {\n this.previewElement.remove();\n }\n const droppedAt = document.elementFromPoint(mousePosition.x, mousePosition.y);\n if (this.stopListener) {\n this.stopListener(this.element, droppedAt);\n }\n }\n moved() {\n if (this.isDragging && this.moveListener) {\n this.moveListener(this.element);\n }\n }\n moveRelativeTo(relativePos) {\n if (this.startPosition && this.previewElement) {\n const newPosition = { x: this.startPosition.x + relativePos.x, y: this.startPosition.y + relativePos.y };\n this.previewElement.style.left = newPosition.x + \"px\";\n this.previewElement.style.top = newPosition.y + \"px\";\n this.moved();\n }\n }\n}\nexports.DraggedElement = DraggedElement;\n//# sourceMappingURL=DraggedElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotOnlineError = void 0;\nclass NotOnlineError extends Error {\n constructor(message, url) {\n super(message + \" for url \" + url);\n this._url = url;\n }\n}\nexports.NotOnlineError = NotOnlineError;\n//# sourceMappingURL=NotOnlineError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\n/**\n * Manager, welcher sich um die Manipulation von der Historie kümmert\n */\nclass HistoryManager {\n /**\n * Constructor für den Manager. Fügt den onPopstateListener hinzu\n */\n constructor() {\n this._lastStateId = -1;\n this._states = {};\n this._stack = [];\n this._ignoreOnPopState = false;\n this._isUpdateNativeStack = false;\n this._onPopStateListener = null;\n this._currentStackIndex = -1;\n window.onpopstate = (e) => {\n //Wenn nativeStack geupdated wird, mache nichts\n if (this._isUpdateNativeStack) {\n this._isUpdateNativeStack = false;\n return;\n }\n let direction = e.state[\"type\"];\n this._currentStackIndex += direction;\n this._updateNativeHistoryStack();\n //Wenn popState ignoriert werden soll, mache ebenfalls nichts außer Stack updaten\n if (this._ignoreOnPopState) {\n this._ignoreOnPopState = false;\n return;\n }\n //Wenn Listener gesetzt, hole daten und führe Listener aus\n if (typeof this._onPopStateListener === 'function') {\n let data = {};\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n data = this._states[this._stack[this._currentStackIndex]];\n }\n this._onPopStateListener(data, direction, e);\n }\n };\n this._updateNativeHistoryStack();\n }\n /**\n * Updated den History-Stack innerhalb des Browsers\n *\n * @param url\n * @private\n */\n _updateNativeHistoryStack(url) {\n url = Helper_1.Helper.nonNull(url, window.location.href);\n //setze das weitere zurückgehen\n if (this._currentStackIndex >= 0) {\n history.pushState({\n \"type\": HistoryManager.BACK,\n }, \"back\", url);\n }\n history.pushState({\n \"type\": HistoryManager.CURRENT,\n }, \"current\", url);\n if (this._currentStackIndex < this._stack.length - 1) {\n history.pushState({\n \"type\": HistoryManager.FORWARD,\n }, \"forward\", url);\n this._isUpdateNativeStack = true;\n history.go(-1);\n }\n }\n /**\n * Generiert einen neuen History-Eintrag. Gibt die ID des Eintrages zurück\n *\n * @param value\n * @param name\n * @param url\n *\n * @return {number}\n */\n pushState(value, name, url) {\n let newState = {\n state: value,\n title: name,\n url: url\n };\n this._lastStateId++;\n this._states[this._lastStateId] = newState;\n this._currentStackIndex++;\n this._stack.splice(this._currentStackIndex, this._stack.length, this._lastStateId);\n this._updateNativeHistoryStack(url);\n return this._lastStateId;\n }\n /**\n * Ersetzt den Eintrag mit der gegebenen ID. Ist die ID nicht gegeben, wird der aktuelle Eintrag ersetzt\n *\n * @param value\n * @param name\n * @param url\n * @param id\n */\n replaceState(value, name, url, id) {\n id = Helper_1.Helper.nonNull(id, this._stack[this._currentStackIndex]);\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n this._states[id] = {\n state: value,\n title: name,\n url: url\n };\n this._updateNativeHistoryStack(url);\n }\n }\n /**\n * Verschiebt den Eintrag mit der entsprechenden ID an die aktuell aktive Stelle\n * @param id\n */\n stateToCurrentPosition(id) {\n if (Helper_1.Helper.isNotNull(this._states[id])) {\n let oldStackPosition = this._stack.indexOf(id);\n if (oldStackPosition !== -1) {\n this._stack.splice(oldStackPosition, 1);\n this._stack.splice(this._currentStackIndex + ((oldStackPosition <= this._currentStackIndex) ? -1 : 0), 0, id);\n }\n }\n }\n /**\n * Gehe um to in der Historie\n *\n * @param to\n * @param ignoreOnPopState\n */\n go(to, ignoreOnPopState) {\n this._ignoreOnPopState = (Helper_1.Helper.nonNull(ignoreOnPopState, false) === true);\n history.go(to);\n }\n /**\n * Entferne alle Einträge ab at (inklusive). Wenn at nicht gesetzt ist, wird alles über der aktuellen position abgeschnitten\n * @param at\n */\n cutStack(at) {\n at = Helper_1.Helper.nonNull(at, this._currentStackIndex + 1);\n this._stack.splice(at);\n this._currentStackIndex = Math.min(this._currentStackIndex, this._stack.length - 1);\n this._updateNativeHistoryStack();\n }\n /**\n * Alias für this.go(-1)\n */\n back() {\n this.go(-1);\n }\n /**\n * Alias für this.go(1)\n */\n forward() {\n this.go(+1);\n }\n /**\n * Setzt den onPopStateListener\n *\n * @param listener\n */\n setOnPopStateListener(listener) {\n this._onPopStateListener = listener;\n }\n /**\n * Singelton-Getter\n * @return {HistoryManager}\n */\n static getInstance() {\n if (Helper_1.Helper.isNull(HistoryManager._instance)) {\n HistoryManager._instance = new HistoryManager();\n }\n return HistoryManager._instance;\n }\n}\nexports.HistoryManager = HistoryManager;\nHistoryManager.BACK = -1;\nHistoryManager.FORWARD = 1;\nHistoryManager.CURRENT = 0;\n//# sourceMappingURL=HistoryManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ColorIndicator = void 0;\nconst Singleton_1 = require(\"../Singleton\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ColorIndicator extends Singleton_1.Singleton {\n getAverageImgColor(imgEl, areaWidth, areaHeight) {\n //https://stackoverflow.com/questions/2541481/get-average-color-of-image-via-javascript\n let blockSize = 5, // only visit every 5 pixels\n defaultRGB = { r: 255, g: 255, b: 255 }, // for non-supporting envs\n canvas = document.createElement('canvas'), context = canvas.getContext && canvas.getContext('2d'), data, width, height, i = -4 * blockSize, //start with first pixel\n length, rgb = { r: 0, g: 0, b: 0 }, count = 0;\n if (!context) {\n return defaultRGB;\n }\n height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;\n width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;\n areaWidth = Helper_1.Helper.nonNull(areaWidth, width);\n areaHeight = Helper_1.Helper.nonNull(areaWidth, height);\n context.drawImage(imgEl, 0, 0);\n try {\n data = context.getImageData(0, 0, Math.min(width, areaWidth), Math.min(height, areaHeight));\n }\n catch (e) {\n /* security error, img on diff domain */\n console.error(e);\n return defaultRGB;\n }\n length = data.data.length;\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb.r += data.data[i];\n rgb.g += data.data[i + 1];\n rgb.b += data.data[i + 2];\n }\n // ~~ used to floor values\n rgb.r = ~~(rgb.r / count);\n rgb.g = ~~(rgb.g / count);\n rgb.b = ~~(rgb.b / count);\n return rgb;\n }\n invertColorBW(r, g, b) {\n return this.invertColor(r, g, b, true);\n }\n invertColor(r, g, b, bw) {\n if (typeof r === \"object\") {\n bw = g || bw;\n g = r.g;\n b = r.b;\n r = r.r;\n }\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? { r: 0, g: 0, b: 0 }\n : { r: 255, g: 255, b: 255 };\n }\n // invert color components\n r = (255 - r);\n g = (255 - g);\n b = (255 - b);\n // pad each with zeros and return\n return {\n r: r,\n g: g,\n b: b,\n };\n }\n toHEX(r, g, b) {\n if (typeof r === \"object\") {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n r = r.toString(16);\n g = g.toString(16);\n b = b.toString(16);\n return \"#\" + Helper_1.Helper.padZero(r) + Helper_1.Helper.padZero(g) + Helper_1.Helper.padZero(b);\n }\n}\nexports.ColorIndicator = ColorIndicator;\n//# sourceMappingURL=ColorIndicator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Singleton = void 0;\nclass Singleton {\n /**\n *\n * @returns {Singleton|this}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new this();\n }\n return this._instance;\n }\n}\nexports.Singleton = Singleton;\n//# sourceMappingURL=Singleton.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MasterSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass MasterSite extends AbstractSite_1.AbstractSite {\n constructor(siteManager, view) {\n super(siteManager, view);\n this._delegates = [];\n }\n addDelegate(delegateSite) {\n this._delegates.push(delegateSite);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onConstruct(constructParameters);\n }));\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onStart(pauseArguments);\n }));\n });\n }\n onBackPressed() {\n super.onBackPressed();\n this._delegates.forEach(delegate => {\n delegate.onBackPressed();\n });\n }\n onMenuPressed() {\n super.onMenuPressed();\n this._delegates.forEach(delegate => {\n delegate.onMenuPressed();\n });\n }\n onSearchPressed() {\n super.onSearchPressed();\n this._delegates.forEach(delegate => {\n delegate.onSearchPressed();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onViewLoaded();\n }));\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onPause.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onPause();\n }));\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onDestroy.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onDestroy();\n }));\n });\n }\n}\nexports.MasterSite = MasterSite;\n//# sourceMappingURL=MasterSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ToastManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nclass ToastManager {\n constructor() {\n this._toastContainer = document.querySelector(ToastManager._toastContainerSelector);\n this._toastTemplate = this._toastContainer.querySelector(\".toast-template\");\n this._toastTemplate.classList.remove(\"toast-template\");\n this._toastTemplate.remove();\n }\n showToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n let message = toast.getMessage();\n if (toast.isShouldTranslate()) {\n message = Translator_1.Translator.makePersistentTranslation(message, toast.getTranslationArgs());\n }\n else {\n message = document.createTextNode(message);\n }\n let toastElement = this._toastTemplate.cloneNode(true);\n toastElement.querySelector(\".message\").appendChild(message);\n toast.setToastElement(toastElement);\n this._toastContainer.appendChild(toastElement);\n toastElement.style.opacity = 1;\n return new Promise(resolve => {\n toastElement.querySelector(\".message\").onclick = () => {\n this.hideToast(toast);\n resolve(true);\n };\n setTimeout(() => {\n this.hideToast(toast);\n resolve(false);\n }, toast.getDuration());\n });\n });\n }\n hideToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n //TODO Animation hinzufügen\n let element = toast.getToastElement();\n if (Helper_1.Helper.isNotNull(element)) {\n element.style.opacity = 0;\n return new Promise(res => {\n setTimeout(() => {\n element.remove();\n res();\n }, 250);\n });\n }\n return Promise.reject(\"toast is not showing\");\n });\n }\n static setToastContainerSelector(selector) {\n ToastManager._toastContainerSelector = selector;\n }\n static getInstance() {\n if (!ToastManager._instance) {\n ToastManager._instance = new ToastManager();\n }\n return ToastManager._instance;\n }\n}\nexports.ToastManager = ToastManager;\nToastManager._instance = null;\nToastManager._toastContainerSelector = \"#toast-container\";\n//# sourceMappingURL=ToastManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DropdownRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst AccordionRenderer_1 = require(\"./AccordionRenderer\");\nconst Submenu_1 = require(\"../Submenu\");\n/**\n * Erstellt ein Dropdown-Menu\n */\nclass DropdownRenderer extends AccordionRenderer_1.AccordionRenderer {\n constructor(parentElement) {\n super(parentElement);\n this._accordionMenuRenderer = new AccordionRenderer_1.AccordionRenderer();\n }\n /**\n * Rendert die SubmenuAction\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.renderSubmenuAction(action);\n }\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.add('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('opens-right');\n return submenuActionElement;\n }\n /**\n * Erstellt ein SubmenuParent\n *\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.createSubmenuParentElement(action);\n }\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-dropdown-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet das Element für eine Action\n * @param action\n */\n updateAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.updateAction(action);\n }\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n submenuElement.classList.add(\"js-dropdown-active\");\n }\n else {\n submenuElement.classList.remove(\"js-dropdown-active\");\n }\n }\n }\n}\nexports.DropdownRenderer = DropdownRenderer;\n//# sourceMappingURL=DropdownRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuRenderer = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\n/**\n * Rendert ein Menü\n */\nclass MenuRenderer {\n /**\n * Jeder Renderer hat ein Element, wo er die gerenderten Elemente hinzufügt\n *\n * @param parentElement\n */\n constructor(parentElement) {\n this._parentElement = parentElement;\n this._renderedElements = {};\n }\n /**\n * Stößt das Rendern an\n * @param menu\n * @param parentElement\n */\n render(menu, parentElement) {\n let actions = menu.getActions();\n //Funktion wird auch für Submenüs genutzt. Daher muss hier ein anderes parentElement übergeben werden\n parentElement = Helper_1.Helper.nonNull(parentElement, this._parentElement);\n if (Helper_1.Helper.isNotNull(parentElement)) {\n Helper_1.Helper.removeAllChildren(parentElement);\n //Füge Elemente hinzu\n actions.forEach(action => {\n parentElement.appendChild(this.getElementForAction(action));\n });\n //Setze den onclick-Listener\n parentElement.onclick = (e) => {\n if (typeof menu.getOnClickListener() === 'function') {\n menu.getOnClickListener()(e);\n }\n };\n }\n }\n /**\n * Führt das Rendern der Elemente aus und ersetzt evtl schon alte Elemente\n * Auslagern von renderAction und renderSubmenuAction zum besseren überschreiben der Funktionen.\n *\n * renderSubmenuAction und renderAction sollten nur von dieser Funktion aufgerufen werden, damit die\n * _rendererElements aktuell bleiben!\n *\n * @param action\n * @returns {HTMLElement}\n * @private\n */\n _triggerRenderAction(action) {\n let oldElement = this._renderedElements[action.getId()];\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._renderedElements[action.getId()] = this.renderSubmenuAction(action);\n }\n else {\n this._renderedElements[action.getId()] = this.renderAction(action);\n }\n this.updateAction(action);\n if (Helper_1.Helper.isNotNull(oldElement)) {\n oldElement.replaceWith(this._renderedElements[action.getId()]);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Gibt das Element zur Action. Falls es noch nicht existiert, wird dieses gerendert\n * @param action\n * @returns {*}\n */\n getElementForAction(action) {\n if (Helper_1.Helper.isNull(this._renderedElements[action.getId()])) {\n this._triggerRenderAction(action);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n renderAction(action) {\n return null;\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n updateAction(action) {\n }\n /**\n * Rendert eine SubmenuAction, kann/sollte überladen werden\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let actionElement = this.renderAction(action);\n action.getSubmenu().sortActions();\n let submenuParentElement = this.createSubmenuParentElement(action);\n this.render(action.getSubmenu(), submenuParentElement);\n actionElement.appendChild(submenuParentElement);\n return actionElement;\n }\n ;\n /**\n * Erstellt ein Element für ein Submenu. Sollte überladen werden\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n return document.createElement(\"ul\");\n }\n}\nexports.MenuRenderer = MenuRenderer;\n//# sourceMappingURL=MenuRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Submenu = void 0;\nconst Menu_1 = require(\"./Menu\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Submenü, ein untermenü\n */\nclass Submenu extends Menu_1.Menu {\n /**\n * Constructor für ein Submenu\n *\n * Bekommt parameter für die OpenSubmenuAction übergeben und reicht diese weiter.\n * Renderer besitzt das Menü keine, da die Renderer des ParentMenus genutzt werden\n * Actions können nicht bei der Erstellung hinzugefügt werden\n *\n * @param title\n * @param showFor\n * @param order\n * @param icon\n * @param renderers\n */\n constructor(title, showFor, order, icon, renderers) {\n super(Helper_1.Helper.nonNull(renderers, []));\n this._parentAction = new OpenSubmenuAction_1.OpenSubmenuAction(title, this, showFor, order, icon);\n this._isOpen = false;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n *\n * @param menu\n * @return {Submenu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Submenu());\n menu = super.copy(menu);\n menu._isOpen = this._isOpen;\n return menu;\n }\n /**\n * Setzt die ParentAction\n *\n * @param action\n */\n setParentAction(action) {\n this._parentAction = action;\n }\n /**\n * Gibt das ParentMenu zurück\n */\n getParentMenu() {\n return this._parentAction.getMenu();\n }\n /**\n * Erstelle keinen onClickListener, damit der Listener aus dem Obermenü aufgerufen wird\n *\n * @returns {null}\n * @private\n */\n _generateOnClickListener() {\n return null;\n }\n /**\n * Wird vom Obermenü aufgerufen, um die ensprechende Action zu finden\n *\n * @param actionId\n * @param event\n * @returns {boolean}\n */\n click(actionId, event) {\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n if (!(this._actions[i] instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.close();\n }\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n return null;\n }\n /**\n * Öffnet oder schließt das Menü\n */\n toggle() {\n if (this._isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * öffnet das Menü und updatet die Elemente\n */\n open() {\n this._isOpen = true;\n this.openSubmenu(this);\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n openSubmenu(submenu) {\n this.getParentMenu().openSubmenu(submenu);\n }\n /**\n * schließt das Menü und updatet die Elemente\n */\n close() {\n this._isOpen = false;\n super.close();\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n /**\n * Gibt die ParentAction zurück\n *\n * @returns {OpenSubmenuAction}\n */\n getParentAction() {\n return this._parentAction;\n }\n /**\n * Updated eine Action. Da ein Submenu keine Renderer hat, muss es ans parentMenu weitergegeben werden\n * @param action\n */\n updateAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.updateAction(action);\n }\n }\n redrawAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.redrawAction(action);\n }\n }\n /**\n * Gibt an, ob das Submenu offen ist oder nicht\n *\n * @returns {boolean}\n */\n isOpen() {\n return this._isOpen;\n }\n}\nexports.Submenu = Submenu;\n//# sourceMappingURL=Submenu.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeChildFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass SwipeChildFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, view);\n this._parent = null;\n }\n onSwipeRight() {\n return __awaiter(this, void 0, void 0, function* () {\n this.previousFragment();\n });\n }\n onSwipeLeft() {\n return __awaiter(this, void 0, void 0, function* () {\n this.nextFragment();\n });\n }\n setParent(parent) {\n this._parent = parent;\n }\n nextFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.nextFragment();\n }\n }\n previousFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.previousFragment();\n }\n }\n}\nexports.SwipeChildFragment = SwipeChildFragment;\n//# sourceMappingURL=SwipeChildFragment.js.map","module.exports = __webpack_public_path__ + \"html/chooseDialog.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElemChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nclass ElemChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n valueElem.querySelector(\".choose-dialog-value\").appendChild(valueNames[k]);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ElemChooseDialog = ElemChooseDialog;\n//# sourceMappingURL=ElemChooseDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareDialog = void 0;\nconst Dialog_1 = require(\"../Dialog/Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Dialog/shareDialog.html\");\nclass ShareDialog extends Dialog_1.Dialog {\n constructor(textToShare) {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n view.querySelector(\"#whatsapp-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"\";\n linkToOpen = \"https://web.whatsapp.com/send?text=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n view.querySelector(\"#telegram-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"https://t.me/share/url?url=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n return view;\n }), \"Share\");\n }\n}\nexports.ShareDialog = ShareDialog;\n//# sourceMappingURL=ShareDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AudioChain = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass AudioChain {\n constructor(context, sourceBuffer, chainFunction) {\n this._buffer = sourceBuffer;\n this._shouldLoop = false;\n this._loopStart = null;\n this._loopEnd = null;\n this._chainFunction = chainFunction;\n this._context = context;\n this._startTime = null;\n this._pauseTime = null;\n this._source = null;\n this._running = false;\n }\n setBuffer(buffer) {\n this._buffer = buffer;\n }\n setLooping(shouldLoop, loopStart, loopEnd) {\n this._shouldLoop = shouldLoop;\n if (Helper_1.Helper.isNotNull(loopStart)) {\n this._loopStart = loopStart;\n }\n if (Helper_1.Helper.isNotNull(loopEnd)) {\n this._loopEnd = loopEnd;\n }\n }\n start(delay, offset, duration) {\n return __awaiter(this, void 0, void 0, function* () {\n //sind sonst null, schmeißt in Android 5 einen fehler\n delay = Helper_1.Helper.nonNull(delay, 0);\n offset = Helper_1.Helper.nonNull(offset, 0);\n //Duration darf nicht gesetzt werden\n // duration = Helper.nonNull(duration, -1);\n let source = this._context.createBufferSource();\n source.loop = this._shouldLoop;\n if (Helper_1.Helper.isNotNull(this._loopStart)) {\n source.loopStart = this._loopStart;\n }\n if (Helper_1.Helper.isNotNull(this._loopEnd)) {\n source.loopEnd = this._loopEnd;\n }\n source.buffer = this._buffer;\n yield this._chainFunction(source);\n if (Helper_1.Helper.isNull(duration)) {\n source.start(delay, offset);\n }\n else {\n source.start(delay, offset, duration);\n }\n this._startTime = (new Date()).getTime() - (Helper_1.Helper.nonNull(offset, 0) * 1000);\n this._source = source;\n this._running = true;\n });\n }\n stop(delay) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._source)) {\n delay = Helper_1.Helper.nonNull(delay, 0);\n this._pauseTime = ((new Date()).getTime()) - this._startTime;\n this._running = false;\n return this._source.stop(delay);\n }\n return null;\n });\n }\n resume() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._running) {\n return this.start(null, Helper_1.Helper.nonNull(this._pauseTime, 0) / 1000.0);\n }\n });\n }\n}\nexports.AudioChain = AudioChain;\n//# sourceMappingURL=AudioChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"cordova-sites/dist/shared\");\nconst deTranslations = require(\"../translations/de\");\nconst enTranslations = require(\"../translations/en\");\nclient_1.App.addInitialization(() => {\n shared_1.Translator.addDynamicTranslations({\n \"de\": deTranslations,\n \"en\": enTranslations\n });\n});\n//# sourceMappingURL=translationInit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Access = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass Access extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n}\nexports.Access = Access;\nAccess.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Access);\n//# sourceMappingURL=Access.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ForgotPasswordSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/forgotPasswordSite.html\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"./LoginSite\");\nclass ForgotPasswordSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite_1.LoginSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n if (client_1.Helper.isSet(constructParameters[\"t\"])) {\n this._token = constructParameters[\"t\"];\n }\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#forgot-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().sendForgotPasswordEmail(data[\"email\"])) {\n new client_1.Toast(\"forgot-password-mail sent\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email is not in our database\"\n });\n }\n }));\n let resetForm = new client_1.Form(this.findBy(\"#reset-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().resetPassword(this._token, data[\"password1\"])) {\n new client_1.Toast(\"password resetted\").show();\n yield this.finish();\n }\n else {\n yield new client_1.Toast(\"token is not valid!\").show();\n }\n }));\n resetForm.addValidator(data => {\n let errors = {};\n let hasErrors = false;\n if (data[\"password1\"].trim() === \"\") {\n hasErrors = true;\n errors[\"password1\"] = \"no password set\";\n }\n if (data[\"password1\"] !== data[\"password2\"]) {\n hasErrors = true;\n errors[\"password2\"] = \"not equal to password1\";\n }\n if (hasErrors) {\n return errors;\n }\n else {\n return true;\n }\n });\n if (this._token) {\n this.findBy(\"#reset-password\").classList.remove(\"hidden\");\n this.findBy(\"#forgot-password\").classList.add(\"hidden\");\n }\n return res;\n });\n }\n}\nexports.ForgotPasswordSite = ForgotPasswordSite;\nclient_1.App.addInitialization(app => {\n app.addDeepLink(\"forgotPW\", ForgotPasswordSite);\n});\n//# sourceMappingURL=ForgotPasswordSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotAllowedSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst view = require(\"./../../html/sites/notAllowedSite.html\");\nclass NotAllowedSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n onConstruct(constructParameters) {\n return super.onConstruct(constructParameters);\n }\n onCreateMenu(navbar) {\n return super.onCreateMenu(navbar);\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n yield this.finish();\n return res;\n });\n }\n}\nexports.NotAllowedSite = NotAllowedSite;\n//# sourceMappingURL=NotAllowedSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectUserDialog = void 0;\nconst Dialog_1 = require(\"cordova-sites/dist/client/js/Dialog/Dialog\");\nconst ViewInflater_1 = require(\"cordova-sites/dist/client/js/ViewInflater\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst view = require(\"../../html/dialog/selectUserDialog.html\");\nclass SelectUserDialog extends Dialog_1.Dialog {\n constructor() {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then((view) => __awaiter(this, void 0, void 0, function* () {\n this._loadUserTimeout = null;\n this._usernameInput =\n view.querySelector(\"#username-input\");\n this._usernameInput.addEventListener(\"keydown\", () => {\n clearTimeout(this._loadUserTimeout);\n this._loadUserTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield this._loadUsers(this._usernameInput.value);\n }), 500);\n });\n this._userContainer = view.querySelector(\"#user-container\");\n this._userTemplate = view.querySelector(\"#user-template\");\n this._userTemplate.remove();\n this._userTemplate.removeAttribute(\"id\");\n this._loadUsers();\n return view;\n })), \"select user\");\n }\n _loadUsers(username) {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let res = yield DataManager_1.DataManager.load(\"user/listUsers\" + DataManager_1.DataManager.buildQuery({ username: Helper_1.Helper.nonNull(username, \"\") }));\n if (res[\"success\"]) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._userContainer);\n let users = res[\"data\"];\n users.forEach(user => {\n let userElement = this._userTemplate.cloneNode(true);\n userElement.querySelector(\".name\").innerText = user.username;\n userElement.addEventListener(\"click\", () => {\n this._result = user;\n this.close();\n });\n this._userContainer.appendChild(userElement);\n });\n }\n });\n }\n}\nexports.SelectUserDialog = SelectUserDialog;\n//# sourceMappingURL=SelectUserDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileTransferPromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FilePromise\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nclass FileTransferPromise {\n constructor(downloadUrl, storagePath) {\n this.downloadUrl = downloadUrl;\n if (Helper_1.Helper.isNull(storagePath)) {\n let parts = this.downloadUrl.split(\"/\");\n if (parts.length > 0) {\n storagePath = parts[parts.length - 1];\n }\n }\n this.storagePath = storagePath;\n }\n download() {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let blob = DataManager_1.DataManager.fetchBlob(this.downloadUrl);\n let filePromise = yield FilePromise_1.FilePromise.open(this.storagePath);\n let fileWriter = yield filePromise.createWriter();\n // blob = await blob;\n yield fileWriter.write(yield blob);\n });\n }\n}\nexports.FileTransferPromise = FileTransferPromise;\n//# sourceMappingURL=FileTransferPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileWriterPromise = void 0;\nclass FileWriterPromise {\n constructor(fileWriter) {\n this.fileWriter = fileWriter;\n this._isWritingPromise = Promise.resolve();\n }\n write(data) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._isWritingPromise.then(() => new Promise((res, rej) => {\n this.fileWriter.onwriteend = res;\n this.fileWriter.onerror = rej;\n this.fileWriter.write(data);\n }));\n this._isWritingPromise = promise.catch(console.error);\n return promise;\n });\n }\n}\nexports.FileWriterPromise = FileWriterPromise;\n//# sourceMappingURL=FileWriterPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass ClientModel extends cordova_sites_database_1.BaseModel {\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"] && columns[\"id\"][\"generated\"]) {\n columns[\"id\"][\"generated\"] = false;\n }\n return columns;\n }\n static _fromJson(jsonObjects, models, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n });\n }\n toJSON(includeFull) {\n }\n ;\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n yield this.constructor._fromJson(data, this, true);\n }\n return _super.save.call(this);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n entities = yield this._fromJson(data, undefined, true);\n }\n return _super.saveMany.call(this, entities);\n });\n }\n static getSchemaDefinition() {\n const TYPES_FOR_DEFAULT_ESCAPING = [\n cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT,\n cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n ];\n let definitions = super.getSchemaDefinition();\n let columns = definitions[\"columns\"];\n Object.keys(columns).forEach(column => {\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.TEXT;\n }\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.JSON) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON;\n }\n if (TYPES_FOR_DEFAULT_ESCAPING.indexOf(columns[column].type) !== -1) {\n columns[column].escapeJS = shared_1.Helper.nonNull(columns[column].escapeJS, true);\n columns[column].escapeHTML = shared_1.Helper.nonNull(columns[column].escapeHTML, true);\n }\n });\n return definitions;\n }\n}\nexports.ClientModel = ClientModel;\nClientModel.SAVE_PATH = \"/sync\";\nClientModel.DELETE_PATH = \"/sync/delete\";\n//# sourceMappingURL=ClientModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ClientPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super();\n this.clientId = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"]) {\n columns[\"id\"][\"primary\"] = false;\n columns[\"id\"][\"generated\"] = false;\n columns[\"id\"][\"nullable\"] = true;\n columns[\"id\"][\"unique\"] = true;\n }\n columns[\"clientId\"] = {\n type: \"integer\",\n primary: true,\n generated: true,\n };\n return columns;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n if (typeof this.clientId !== \"number\") {\n this.clientId = undefined;\n }\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n yield this.constructor._fromJson(data, this, true);\n }\n }\n return _super.save.call(this, true);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this, true);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n entities.forEach(entity => {\n if (typeof entity.clientId !== \"number\") {\n entity.clientId = undefined;\n }\n });\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n entities = yield this._fromJson(data, entities, true);\n }\n }\n return _super.saveMany.call(this, entities, true);\n });\n }\n}\nexports.ClientPartialModel = ClientPartialModel;\n//# sourceMappingURL=ClientPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccessEasySyncModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nclass AccessEasySyncModel extends shared_1.EasySyncBaseModel {\n}\nexports.AccessEasySyncModel = AccessEasySyncModel;\nAccessEasySyncModel.ACCESS_READ = true;\nAccessEasySyncModel.ACCESS_MODIFY = false;\nAccessEasySyncModel.CAN_BE_SYNCED = false;\n//# sourceMappingURL=AccessEasySyncModel.js.map","export default \"img/help.png\";","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar SqljsQueryRunner = /** @class */ (function (_super) {\n __extends(SqljsQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n SqljsQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.commitTransaction.call(this)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.driver.autoSave()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n SqljsQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (parameters === void 0) { parameters = []; }\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, statement, maxQueryExecutionTime, queryEndTime, queryExecutionTime, result;\n return __generator(this, function (_a) {\n databaseConnection = this.driver.databaseConnection;\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n try {\n statement = databaseConnection.prepare(query);\n if (parameters) {\n parameters = parameters.map(function (p) { return typeof p !== 'undefined' ? p : null; });\n statement.bind(parameters);\n }\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n result = [];\n while (statement.step()) {\n result.push(statement.getAsObject());\n }\n statement.free();\n ok(result);\n }\n catch (e) {\n if (statement) {\n statement.free();\n }\n this.driver.connection.logger.logQueryError(e, query, parameters, this);\n fail(new QueryFailedError(query, parameters, e));\n }\n return [2 /*return*/];\n });\n }); });\n };\n return SqljsQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { SqljsQueryRunner };\n\n//# sourceMappingURL=SqljsQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { NativescriptQueryRunner } from \"./NativescriptQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\n/**\n * Organizes communication with sqlite DBMS within Nativescript.\n */\nvar NativescriptDriver = /** @class */ (function (_super) {\n __extends(NativescriptDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.database = _this.options.database;\n _this.driver = _this.options.driver;\n // validate options to make sure everything is set\n if (!_this.options.database) {\n throw new DriverOptionNotSetError(\"database\");\n }\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n NativescriptDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close().then(ok).catch(fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n NativescriptDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner) {\n this.queryRunner = new NativescriptQueryRunner(this);\n }\n return this.queryRunner;\n };\n NativescriptDriver.prototype.normalizeType = function (column) {\n if (column.type === Buffer) {\n return \"blob\";\n }\n return _super.prototype.normalizeType.call(this, column);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n NativescriptDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n readOnly: _this.options.readOnly,\n key: _this.options.key,\n multithreading: _this.options.multithreading,\n migrate: _this.options.migrate,\n iosFlags: _this.options.iosFlags,\n androidFlags: _this.options.androidFlags,\n }, _this.options.extra || {});\n new _this.sqlite(_this.options.database, options, function (err, db) {\n if (err)\n return fail(err);\n // use object mode to work with TypeORM\n db.resultType(_this.sqlite.RESULTSASOBJECT);\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n db.execSQL(\"PRAGMA foreign_keys = ON;\", [], function (err, result) {\n if (err)\n return fail(err);\n // We are all set\n ok(db);\n });\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n NativescriptDriver.prototype.loadDependencies = function () {\n this.sqlite = this.driver;\n if (!this.driver) {\n throw new DriverPackageNotInstalledError(\"Nativescript\", \"nativescript-sqlite\");\n }\n };\n return NativescriptDriver;\n}(AbstractSqliteDriver));\nexport { NativescriptDriver };\n\n//# sourceMappingURL=NativescriptDriver.js.map\n","import { __extends } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar NativescriptQueryRunner = /** @class */ (function (_super) {\n __extends(NativescriptQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n NativescriptQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n var connection = this.driver.connection;\n return new Promise(function (ok, fail) {\n var isInsertQuery = query.substr(0, 11) === \"INSERT INTO\";\n var handler = function (err, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n if (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n }\n else {\n // when isInsertQuery == true, result is the id\n ok(result);\n }\n };\n _this.driver.connection.logger.logQuery(query, parameters, _this);\n var queryStartTime = +new Date();\n _this.connect().then(function (databaseConnection) {\n if (isInsertQuery) {\n databaseConnection.execSQL(query, parameters, handler);\n }\n else {\n databaseConnection.all(query, parameters, handler);\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n NativescriptQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return NativescriptQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { NativescriptQueryRunner };\n\n//# sourceMappingURL=NativescriptQueryRunner.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nvar RawSqlResultsToEntityTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RawSqlResultsToEntityTransformer(expressionMap, driver, rawRelationIdResults, rawRelationCountResults, queryRunner) {\n this.expressionMap = expressionMap;\n this.driver = driver;\n this.rawRelationIdResults = rawRelationIdResults;\n this.rawRelationCountResults = rawRelationCountResults;\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n RawSqlResultsToEntityTransformer.prototype.transform = function (rawResults, alias) {\n var _this = this;\n var group = this.group(rawResults, alias);\n var entities = [];\n group.forEach(function (results) {\n var entity = _this.transformRawResultsGroup(results, alias);\n if (entity !== undefined && !Object.values(entity).every(function (value) { return value === null; }))\n entities.push(entity);\n });\n return entities;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Groups given raw results by ids of given alias.\n */\n RawSqlResultsToEntityTransformer.prototype.group = function (rawResults, alias) {\n var _this = this;\n var map = new Map();\n var keys = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.columns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n else {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.primaryColumns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n rawResults.forEach(function (rawResult) {\n var id = keys.map(function (key) {\n var keyValue = rawResult[key];\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n return keyValue;\n }).join(\"_\"); // todo: check partial\n var items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n }\n else {\n items.push(rawResult);\n }\n });\n return map;\n };\n /**\n * Transforms set of data results into single entity.\n */\n RawSqlResultsToEntityTransformer.prototype.transformRawResultsGroup = function (rawResults, alias) {\n var _this = this;\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n var metadata = alias.metadata;\n if (metadata.discriminatorColumn) {\n var discriminatorValues_1 = rawResults.map(function (result) { return result[DriverUtils.buildColumnAlias(_this.driver, alias.name, alias.metadata.discriminatorColumn.databaseName)]; });\n var discriminatorMetadata = metadata.childEntityMetadatas.find(function (childEntityMetadata) {\n return typeof discriminatorValues_1.find(function (value) { return value === childEntityMetadata.discriminatorValue; }) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n var entity = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner);\n // get value from columns selections and put them into newly created entity\n var hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n var hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n var hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n var hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n var hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(function (column) { return column.isVirtual === false; }).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n return undefined;\n };\n // get value from columns selections and put them into object\n RawSqlResultsToEntityTransformer.prototype.transformColumns = function (rawResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n var value = rawResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!_this.expressionMap.selects.find(function (select) { return select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath; }))\n return;\n column.setEntityValue(entity, _this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n };\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n RawSqlResultsToEntityTransformer.prototype.transformJoins = function (rawResults, entity, alias, metadata) {\n var _this = this;\n var hasData = false;\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildColumnAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n this.expressionMap.joinAttributes.forEach(function (join) {\n // skip joins without metadata\n if (!join.metadata)\n return;\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(function (relation) { return relation === join.relation; }))\n return;\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n }\n else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation.propertyPath)\n return;\n }\n // transform joined data into entities\n var result = _this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n }\n else { // otherwise set to relation\n join.relation.setEntityValue(entity, result);\n }\n hasData = true;\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationIds = function (rawSqlResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n this.rawRelationIdResults.forEach(function (rawRelationIdResult) {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n var relation = rawRelationIdResult.relationIdAttribute.relation;\n var valueMap = _this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n var idMaps = rawRelationIdResult.results.map(function (result) {\n var entityPrimaryIds = _this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n }\n else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n var idMap = columns.reduce(function (idMap, column) {\n var value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n }\n else {\n if (column.referencedColumn.referencedColumn) // if column is a relation\n value = column.referencedColumn.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));\n }\n }, {});\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n }\n else {\n return columns[0].referencedColumn.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(function (result) { return result !== undefined; });\n var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n var mapToProperty = function (properties, map, value) {\n var property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n }\n else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n }\n else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n }\n else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationCounts = function (rawSqlResults, alias, entity) {\n var _this = this;\n var hasData = false;\n this.rawRelationCountResults\n .filter(function (rawRelationCountResult) { return rawRelationCountResult.relationCountAttribute.parentAlias === alias.name; })\n .forEach(function (rawRelationCountResult) {\n var relation = rawRelationCountResult.relationCountAttribute.relation;\n var referenceColumnName;\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn.databaseName; // todo: fix joinColumns[0]\n }\n else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn.databaseName : relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n }\n var referenceColumnValue = rawSqlResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(function (result) { return result[\"parentId\"] === referenceColumnValue; })\n .forEach(function (result) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.createValueMapFromJoinColumns = function (relation, parentAlias, rawSqlResults) {\n var _this = this;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (valueMap, column) {\n rawSqlResults.forEach(function (rawSqlResult) {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.databaseName)], column);\n }\n else {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.referencedColumn.databaseName)], column);\n }\n });\n return valueMap;\n }, {});\n };\n RawSqlResultsToEntityTransformer.prototype.extractEntityPrimaryIds = function (relation, relationIdRawResult) {\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (data, column) {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {});\n };\n return RawSqlResultsToEntityTransformer;\n}());\nexport { RawSqlResultsToEntityTransformer };\n\n//# sourceMappingURL=RawSqlResultsToEntityTransformer.js.map\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Counter = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Counter {\n constructor(value) {\n this._value = 0;\n if (value instanceof Counter) {\n value = value.current;\n }\n this._value = Helper_1.Helper.nonNull(value, 0);\n }\n next() {\n this._value++;\n return this._value;\n }\n current() {\n return this._value;\n }\n}\nexports.Counter = Counter;\n//# sourceMappingURL=Counter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DateHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet DateHelper = /** @class */ (() => {\n class DateHelper {\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string}\n */\n static strftime(sFormat, date, useUTC) {\n useUTC = Helper_1.Helper.nonNull(useUTC, false);\n date = Helper_1.Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, (sMatch) => {\n return {\n '%a': this.translate(aDaysShort[nDay]),\n '%A': this.translate(aDays[nDay]),\n '%b': this.translate(aMonths[nMonth].slice(0, 3)),\n '%B': this.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static translate(key) {\n if (this.translationCallback) {\n return this.translationCallback(key);\n }\n return key;\n }\n static setTranslationCallback(callback) {\n this.translationCallback = callback;\n }\n }\n DateHelper.FORMAT = {\n ISO_TIME: \"%Y-%m-%dT%H:%M%S\"\n };\n return DateHelper;\n})();\nexports.DateHelper = DateHelper;\n//# sourceMappingURL=DateHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MigrationHelper = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst Helper_1 = require(\"./Helper\");\nclass MigrationHelper {\n static isServer() {\n return (typeof document !== \"object\");\n }\n static addTableFromModelClass(modelClass, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createTableFromModelClass(modelClass));\n });\n }\n static addManyToManyTable(tableOne, tableTwo, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createManyToManyTable(tableOne, tableTwo));\n });\n }\n static createManyToManyTable(tableOne, tableTwo) {\n let fieldOne = tableOne + \"Id\";\n let fieldTwo = tableTwo + \"Id\";\n let name = tableOne + tableTwo.substr(0, 1).toUpperCase() + tableTwo.substr(1);\n let manyToManyTable = new typeorm_1.Table({\n name: name,\n columns: [\n {\n name: fieldOne,\n isPrimary: true,\n type: \"integer\"\n },\n {\n name: fieldTwo,\n isPrimary: true,\n type: \"integer\"\n }\n ],\n indices: [\n {\n name: \"IDX_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne]\n },\n {\n name: \"IDX_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne],\n referencedTableName: tableOne.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo],\n referencedTableName: tableTwo.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return manyToManyTable;\n }\n static createTableFromModelClass(modelClass, prefix) {\n prefix = Helper_1.Helper.nonNull(prefix, \"\");\n let columns = [];\n let indices = [];\n let foreignKeys = [];\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = prefix + Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n Object.keys(schemaDefinition.columns).forEach(column => {\n let columnConfig = {};\n Object.keys(schemaDefinition.columns[column]).forEach(key => {\n columnConfig[key] = schemaDefinition.columns[column][key];\n });\n columnConfig[\"name\"] = column;\n if (schemaDefinition.columns[column].primary) {\n columnConfig[\"isPrimary\"] = true;\n }\n if (schemaDefinition.columns[column].nullable) {\n columnConfig[\"isNullable\"] = true;\n }\n if (schemaDefinition.columns[column].generated) {\n //If it is not EasySyncBaseModel or server\n if (Helper_1.Helper.isNull(modelClass.CAN_BE_SYNCED) || this.isServer() || column === \"clientId\") {\n columnConfig[\"isGenerated\"] = true;\n columnConfig[\"generationStrategy\"] = \"increment\";\n if (!this.isServer()) {\n columnConfig[\"type\"] = \"INTEGER\";\n }\n }\n }\n if (typeof columnConfig[\"default\"] === \"string\") {\n columnConfig[\"default\"] = \"'\" + columnConfig[\"default\"] + \"'\";\n }\n else if (columnConfig[\"default\"] === true) {\n columnConfig[\"default\"] = 1;\n }\n else if (columnConfig[\"default\"] === false) {\n columnConfig[\"default\"] = 0;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.MEDIUMTEXT && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n columns.push(columnConfig);\n });\n Object.keys(schemaDefinition.relations).forEach(relation => {\n if (schemaDefinition.relations[relation].type === \"many-to-one\" || schemaDefinition.relations[relation].joinColumn) {\n // let columnName = Helper.toSnakeCase(relation) + \"Id\";\n let columnName = relation.substr(0, 1).toLowerCase() + relation.substr(1) + \"Id\";\n let columnConfig = {\n name: columnName,\n type: MigrationHelper.TYPES.INTEGER,\n isNullable: true\n };\n columns.push(columnConfig);\n let indexConfig = {\n name: \"IDX_\" + tableName + \"_\" + columnName,\n columnNames: [columnName]\n };\n indices.push(indexConfig);\n let foreignKeyConfig = {\n name: \"FK_\" + tableName + \"_\" + columnName,\n columnNames: [columnName],\n referencedTableName: Helper_1.Helper.toSnakeCase(schemaDefinition.relations[relation].target),\n referencedColumnNames: [\"id\"]\n };\n foreignKeys.push(foreignKeyConfig);\n }\n });\n return new typeorm_1.Table({\n name: tableName,\n columns: columns,\n indices: indices,\n foreignKeys: foreignKeys\n });\n }\n static updateModel(queryRunner, newModel) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = newModel.getSchemaDefinition();\n let tableName = Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n let newTable = this.createTableFromModelClass(newModel);\n let table = yield queryRunner.getTable(tableName);\n table.name = \"__temp__\" + table.name;\n table.indices.forEach(index => {\n index.name = \"__temp__\" + index.name;\n });\n table.foreignKeys.forEach(key => {\n key.name = \"__temp__\" + key.name;\n key.columnNames = [key.columnNames[0]];\n key.referencedColumnNames = [key.referencedColumnNames[0]];\n });\n if (MigrationHelper.isServer()) {\n table.columns.forEach(column => {\n if (column.default !== null && typeof column.default === \"string\" && column.default.startsWith(\"'\") && column.default.endsWith(\"'\") && (column.type !== \"varchar\" || column.default.startsWith(\"''\"))) {\n column.default = column.default.substring(1, column.default.length - 1);\n }\n });\n }\n yield queryRunner.createTable(table);\n let names = [];\n table.columns.forEach(column => {\n names.push(column.name);\n });\n yield queryRunner.query(\"INSERT INTO \" + table.name + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + tableName + \";\");\n yield queryRunner.query(\"DROP TABLE \" + tableName + \";\");\n yield queryRunner.createTable(newTable);\n let newColumnNames = [];\n newTable.columns.forEach(column => newColumnNames.push(column.name));\n names = [];\n table.columns.forEach(column => {\n if (newColumnNames.indexOf(column.name) !== -1) {\n names.push(column.name);\n }\n });\n yield queryRunner.query(\"INSERT INTO \" + tableName + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + table.name + \";\");\n yield queryRunner.query(\"DROP TABLE \" + table.name + \";\");\n });\n }\n}\nexports.MigrationHelper = MigrationHelper;\nMigrationHelper.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\"\n};\n//# sourceMappingURL=MigrationHelper.js.map","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Prioritized = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Prioritized {\n constructor(promises) {\n this._lastPriority = 0;\n this._status = 0;\n this._lastResult = null;\n this._success = {};\n this._highestPromise = null;\n promises = Helper_1.Helper.nonNull(promises, {});\n this._callbacks = [];\n if (Array.isArray(promises)) {\n let tmpPromises = {};\n promises.forEach((promise, i) => {\n tmpPromises[(i + 1) * 10] = promise;\n });\n promises = tmpPromises;\n }\n let highestPromiseResolver = null;\n this._highestPromise = new Promise(resolve => {\n highestPromiseResolver = resolve;\n });\n Object.keys(promises).forEach(priority => {\n this._success[priority] = null;\n promises[priority].then(res => {\n this._success[priority] = true;\n if (parseInt(priority) > this._lastPriority) {\n this._lastResult = res;\n this._lastPriority = parseInt(priority);\n this._callCallbacks();\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n else {\n this._status = 1;\n }\n }\n }).catch(e => {\n this._success[priority] = e;\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n });\n });\n this._promises = promises;\n }\n _callCallbacks() {\n this._callbacks.forEach(callback => {\n callback(this._lastResult, this._lastPriority);\n });\n }\n _checkHighest() {\n let isHighestResult = false;\n Object.keys(this._success).reverse().some(priority => {\n if (Helper_1.Helper.isNull(this._success[priority])) {\n //return true beendet some-schleife\n return true;\n }\n else if (this._success[priority] === true) {\n isHighestResult = true;\n return true;\n }\n });\n return isHighestResult;\n }\n do(callback) {\n if (this._status < 2) {\n this._callbacks.push(callback);\n }\n if (this._status > 0) {\n callback(this._lastResult, this._lastPriority);\n }\n }\n highest(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._highestPromise;\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.resolve(this._lastResult).then(funcOrPromise);\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n first(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._status === 0) {\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.race(Object[\"values\"](this._promises)).then(funcOrPromise);\n }\n else {\n return Promise.race(Object[\"values\"](this._promises));\n }\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n}\nexports.Prioritized = Prioritized;\n//# sourceMappingURL=Prioritized.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseWithHandlers = void 0;\nclass PromiseWithHandlers extends Promise {\n constructor(executor) {\n let resolver = null;\n let rejecter = null;\n super((res, rej) => {\n resolver = res;\n rejecter = rej;\n if (executor) {\n executor(resolver, rejecter);\n }\n });\n this.resolver = resolver;\n this.rejecter = rejecter;\n }\n resolve(value) {\n if (this.resolver) {\n this.resolver(value);\n }\n }\n reject(value) {\n if (this.rejecter) {\n this.rejecter(value);\n }\n }\n}\nexports.PromiseWithHandlers = PromiseWithHandlers;\n//# sourceMappingURL=PromiseWithHandlers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Random = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet Random = /** @class */ (() => {\n class Random {\n static seedRandom(seed) {\n this._seed = seed;\n }\n static getRandom() {\n let t = this._seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n static getIntRandom(maxValue) {\n return Math.floor(Random.getRandom() * (maxValue + 1));\n }\n static getStringRandom(numSigns, alphabet) {\n alphabet = Helper_1.Helper.nonNull(alphabet, \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\");\n let random = \"\";\n const numAlphabet = alphabet.length - 1;\n for (let i = 0; i < numSigns; i++) {\n random += alphabet[Random.getIntRandom(numAlphabet)];\n }\n return random;\n }\n }\n Random._seed = new Date().getTime();\n return Random;\n})();\nexports.Random = Random;\n//# sourceMappingURL=Random.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DragHelper = void 0;\nconst DraggedElement_1 = require(\"./DraggedElement\");\nclass DragHelper {\n constructor() {\n this.startPosition = null;\n this.currentDraggedElement = null;\n window.addEventListener(\"mousemove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchmove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n }\n });\n window.addEventListener(\"mouseup\", e => {\n if (e.button === 0) {\n this.dragStop({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchend\", e => {\n if (e.touches.length === 0) {\n this.dragStop({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY });\n }\n });\n }\n static getInstance() {\n if (!this.instance) {\n this.instance = new DragHelper();\n }\n return this.instance;\n }\n draggable(element) {\n const dragElement = new DraggedElement_1.DraggedElement(element);\n element.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n console.log(\"mousedown\", e.button);\n if (e.button === 0) {\n this.dragStart({ x: e.clientX, y: e.clientY }, dragElement);\n }\n });\n element.addEventListener(\"touchstart\", e => {\n e.preventDefault();\n if (e.touches.length === 1) {\n this.dragStart({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY }, dragElement);\n }\n });\n return dragElement;\n }\n dragStart(position, draggedElement) {\n this.currentDraggedElement = draggedElement;\n this.startPosition = position;\n this.currentDraggedElement.start();\n }\n dragMove(toPosition) {\n if (this.currentDraggedElement) {\n const diff = { x: toPosition.x - this.startPosition.x, y: toPosition.y - this.startPosition.y };\n this.currentDraggedElement.moveRelativeTo(diff);\n }\n }\n dragStop(mousePos) {\n if (this.currentDraggedElement) {\n this.currentDraggedElement.stop(mousePos);\n this.currentDraggedElement = null;\n this.startPosition = null;\n }\n }\n}\nexports.DragHelper = DragHelper;\n//# sourceMappingURL=DragHelper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HotkeyManager = void 0;\nclass HotkeyManager {\n constructor() {\n this._keys = {};\n this._callbacks = {};\n this._lastCallbackId = 0;\n this._active = false;\n this.mousePosition = null;\n this._addListeners();\n this.ignoreFormElements = false;\n }\n static isFormElement(element) {\n return element instanceof HTMLInputElement\n || element instanceof HTMLSelectElement\n || element instanceof HTMLTextAreaElement;\n }\n getMousePosition() {\n return this.mousePosition;\n }\n _addListeners() {\n window.addEventListener(\"keydown\", e => {\n if (this.ignoreFormElements || !HotkeyManager.isFormElement(e.target)) {\n this._keys[e.key.toLowerCase()] = true;\n if (this._active) {\n this._checkCallbacks(e);\n }\n }\n });\n window.addEventListener(\"keyup\", e => {\n if (e.key) {\n this._keys[e.key.toLowerCase()] = false;\n }\n });\n document.addEventListener(\"mousemove\", e => {\n this.mousePosition = { x: e.clientX, y: e.clientY };\n });\n }\n activate() {\n this._active = true;\n }\n deactivate() {\n this._active = false;\n }\n addCallback(keys, callback) {\n this._lastCallbackId++;\n this._callbacks[this._lastCallbackId] = {\n keys: keys,\n callback: callback\n };\n }\n isKeyPressed(key) {\n return this._active && this._keys[key] && this._keys[key] === true;\n }\n _checkCallbacks(e) {\n //TODO async forEach?\n Object.values(this._callbacks).forEach(callback => {\n // @ts-ignore\n if (callback.keys.every(key => this._keys[key] === true)) {\n // @ts-ignore\n callback.callback(e);\n }\n });\n }\n removeCallback(callbackId) {\n delete this._callbacks[callbackId];\n }\n}\nexports.HotkeyManager = HotkeyManager;\n//# sourceMappingURL=HotkeyManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InputSelect = void 0;\nconst Helper_1 = require(\"../shared/Helper\");\nconst ViewHelper_1 = require(\"./ViewHelper\");\nclass InputSelect {\n constructor(element, options) {\n this.onChangeListeners = [];\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n this.options = new Map();\n this.inputElement = element;\n options.forEach(o => {\n if (typeof o === \"string\") {\n o = { value: o, label: o };\n }\n o.selected = Helper_1.Helper.nonNull(o.selected, false);\n this.options.set(o.value, o);\n return o;\n });\n this.buildElement();\n }\n onChange(listener) {\n this.onChangeListeners.push(listener);\n }\n buildElement() {\n const parent = this.inputElement.parentElement;\n this.container = document.createElement(\"div\");\n this.container.classList.add(\"input-select-container\");\n const flexContainer = document.createElement(\"div\");\n flexContainer.classList.add(\"input-select-flex\");\n this.selectedOptionsContainer = document.createElement(\"span\");\n this.selectedOptionsContainer.classList.add(\"input-select-selected-options\");\n const classes = [];\n this.inputElement.classList.forEach(c => {\n this.container.classList.add(c);\n classes.push(c);\n });\n this.inputElement.classList.remove(...classes);\n this.inputElement.classList.add(\"input-select-input\");\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.classList.add(\"input-select-options\");\n parent.insertBefore(this.container, this.inputElement);\n this.inputElement.remove();\n this.container.appendChild(flexContainer);\n this.container.appendChild(this.optionsContainer);\n flexContainer.appendChild(this.selectedOptionsContainer);\n flexContainer.appendChild(this.inputElement);\n this.inputElement.addEventListener(\"input\", () => this.updateOptions());\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.optionsContainer.style.width = entry.borderBoxSize[0].inlineSize + \"px\";\n });\n });\n resizeObserver.observe(this.container);\n }\n // if (\"IntersectionObserver\" in window) {\n // const intersectionOptions = {\n // root: this.optionsContainer,\n // rootMargin: \"20px\",\n // threshold: 0.01\n // }\n // const intersectionObserver = new IntersectionObserver((entries) => {\n // entries.forEach(entry => console.log(\"is intersecting\", entry.isIntersecting));\n // // console.log(\"entries\", entries);\n // }, intersectionOptions);\n // intersectionObserver.observe(flexContainer);\n // }\n window.addEventListener(\"scroll\", () => console.log(\"scrolling\"));\n this.container.addEventListener(\"click\", () => {\n const rect = this.container.getBoundingClientRect();\n this.optionsContainer.style.top = (rect.top + rect.height) + \"px\";\n });\n this.updateOptions();\n }\n updateOptions() {\n ViewHelper_1.ViewHelper.removeAllChildren(this.selectedOptionsContainer);\n ViewHelper_1.ViewHelper.removeAllChildren(this.optionsContainer);\n const inputValue = this.inputElement.value;\n this.options.forEach(o => {\n const optionElement = document.createElement(\"span\");\n optionElement.classList.add(\"input-select-option\");\n optionElement.dataset[\"value\"] = o.value;\n optionElement.innerText = o.label;\n if (o.selected) {\n this.selectedOptionsContainer.appendChild(optionElement);\n }\n else if (o.label.indexOf(inputValue) !== -1) {\n this.optionsContainer.appendChild(optionElement);\n }\n optionElement.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n e.cancelBubble = true;\n this.toggle(o.value);\n this.inputElement.focus();\n });\n });\n }\n toggle(value) {\n const option = this.options.get(value);\n if (option) {\n option.selected = !option.selected;\n this.updateOptions();\n this.onChangeListeners.forEach(listener => {\n listener(option, this);\n });\n }\n }\n getOptions() {\n return Array.from(this.options.values());\n }\n getSelectedOptions() {\n return this.getOptions().filter(o => o.selected);\n }\n getSelectedValues() {\n return this.getSelectedOptions().map(o => o.value);\n }\n updateSelection(selection) {\n Object.keys(selection).forEach(value => {\n const option = this.options.get(value);\n if (option) {\n option.selected = selection[value];\n }\n });\n this.updateOptions();\n }\n}\nexports.InputSelect = InputSelect;\n//# sourceMappingURL=InputSelect.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./shared/EventManager\"));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst js_helper_1 = require(\"js-helper\");\nclass EventManager {\n constructor() {\n this._listeners = {};\n this._lastListenerId = 0;\n }\n /**\n * @return {EventManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new EventManager();\n }\n return this._instance;\n }\n addListener(event, listener) {\n if (typeof listener !== \"function\") {\n throw new Error(\"can only add functions as listeners!\");\n }\n this._lastListenerId++;\n if (!this._listeners[event]) {\n this._listeners[event] = {};\n this._listeners[event][this._lastListenerId] = listener;\n }\n return this._lastListenerId;\n }\n removeListener(event, listenerId) {\n if (this._listeners[event] && this._listeners[event][listenerId]) {\n delete this._listeners[event][listenerId];\n }\n }\n trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._listeners[event]) {\n yield js_helper_1.Helper.asyncForEach(Object.keys(this._listeners[event]), (listenerId) => __awaiter(this, void 0, void 0, function* () {\n yield this._listeners[event][listenerId](data);\n }), true);\n }\n });\n }\n static trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.getInstance().trigger(event, data);\n });\n }\n}\nexports.EventManager = EventManager;\nEventManager._instance = null;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContainerSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst containerTemplate = require(\"../../html/siteTemplates/container.html\");\n/**\n * Seite, welche das Container-Template benutzt\n */\nclass ContainerSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für die ContainerSite\n *\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(siteManager, view, containerTemplate, \"#site-content\");\n }\n}\nexports.ContainerSite = ContainerSite;\n//# sourceMappingURL=ContainerSite.js.map","module.exports = __webpack_public_path__ + \"html/container.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DelegateSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nclass DelegateSite extends AbstractSite_1.AbstractSite {\n constructor(site) {\n super(undefined, document.createElement(\"span\"));\n /** @var {AbstractSite} */\n this._site = site;\n }\n setTitle(titleElement, title) {\n return this._site.setTitle(titleElement, title);\n }\n setParameter(name, value) {\n //Todo changing\n // return this._site.setParameter(name, value);\n }\n setParameters(parameters) {\n //TODO changing\n // return this._site.setParameters(parameters)\n }\n getParameters() {\n return this._site.getParameters();\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.showLoadingSymbol();\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.removeLoadingSymbol();\n });\n }\n _updateTitle() {\n return this._site._updateTitle();\n }\n updateUrl(args) {\n //todo\n // return this._site.updateUrl(args);\n }\n startSite(site, args) {\n return this._site.startSite(site, args);\n }\n finishAndStartSite(site, args, result) {\n return this._site.finishAndStartSite(site, args, result);\n }\n finish(result) {\n return this._site.finish(result);\n }\n goBack() {\n return this._site.goBack();\n }\n getFinishPromise() {\n return this._site.getFinishPromise();\n }\n setResult(result) {\n return this._site.setResult(result);\n }\n getFinishResolver() {\n return this._site.getFinishResolver();\n }\n addFragment(viewQuery, fragment) {\n return this._site.addFragment(viewQuery, fragment);\n }\n findBy(query, all, asPromise) {\n return this._site.findBy(query, all, asPromise);\n }\n setPauseParameters(pauseParameters) {\n return this._site.setPauseParameters(pauseParameters);\n }\n getViewPromise() {\n return this._site.getViewPromise();\n }\n getState() {\n return this._site.getState();\n }\n getTitle() {\n return this._site.getTitle();\n }\n isShowing() {\n return this._site.isShowing();\n }\n isDestroying() {\n return this._site.isDestroying();\n }\n}\nexports.DelegateSite = DelegateSite;\n//# sourceMappingURL=DelegateSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractWindowFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst ViewInflater_1 = require(\"../../ViewInflater\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Translator_1 = require(\"../../Translator\");\nconst NativeStoragePromise_1 = require(\"../../NativeStoragePromise\");\nconst Toast_1 = require(\"../../Toast/Toast\");\nconst template = require(\"../../../html/Framework/Fragment/abstractWindowTemplate.html\");\nclass AbstractWindowFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view, position, title, id) {\n super(site, template);\n this.position = {\n x: 0,\n y: 0,\n anchorY: \"top\",\n anchorX: \"left\"\n };\n this.title = \"\";\n this._margin = { x: 0, y: 0 };\n this.saveData = {};\n this.state = \"normal\";\n this.popupWindow = null;\n this.translateTitle = true;\n this.position = Object.assign({ anchorY: \"top\", anchorX: \"left\" }, position);\n this.title = Helper_1.Helper.nonNull(title, \" \");\n if (id) {\n this.id = \"window-\" + id;\n }\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(\"#child-view\").replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n setTitle(title) {\n if (this._titleElement) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._titleElement);\n this._titleElement.appendChild(this.translateTitle ? Translator_1.Translator.makePersistentTranslation(title) : document.createTextNode(title));\n }\n this.title = title;\n }\n getDimension() {\n let computedStyle = window.getComputedStyle(this._container);\n let width = parseFloat(computedStyle.getPropertyValue(\"width\"));\n let height = parseFloat(computedStyle.getPropertyValue(\"height\"));\n if (isNaN(width)) {\n width = parseFloat(this._container.style.width);\n }\n if (isNaN(height)) {\n height = parseFloat(this._container.style.height);\n }\n return { x: Math.ceil(width) - this._margin.x, y: Math.ceil(height) - this._margin.y };\n }\n setDimension(x, y) {\n x += this._margin.x;\n y += this._margin.y;\n this._container.style.width = x + \"px\";\n this._container.style.height = y + \"px\";\n this.saveData.dimension = {\n x: x,\n y: y,\n };\n this.save();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._container = this.findBy(\".window-container\");\n if (this.position.width || this.position.height) {\n this._container.style.width = this.position.width + \"px\";\n this._container.style.height = this.position.height + \"px\";\n }\n this._window = this.findBy(\".window\");\n this._titleElement = this.findBy(\"#title\");\n this._resizeElements = {\n x: [\n this._window,\n this.findBy(\".window-resize.left\"),\n this.findBy(\".window-resize.right\")\n ],\n y: [\n this._window,\n this._titleElement,\n this.findBy(\".window-resize.top\"),\n this.findBy(\".window-resize.bottom\")\n ],\n };\n yield this.load();\n this._checkPositionAndDimension();\n // this.moveTo(this.position.x, this.position.y);\n this.setTitle(this.title);\n this.addListeners();\n const buttonContainer = this.findBy(\"#title-buttons\");\n if (buttonContainer) {\n buttonContainer.remove();\n this._titleElement.parentNode.appendChild(buttonContainer);\n buttonContainer.querySelectorAll(\".title-button\").forEach(button => {\n button.addEventListener(\"click\", e => {\n this.onButtonClick(button.id, button, e);\n });\n });\n }\n return res;\n });\n }\n addListeners() {\n return __awaiter(this, void 0, void 0, function* () {\n let resizeStart = null;\n let multiplier;\n let dimension;\n let resizeStartListener = (x, y, e) => {\n if (e.target.classList.contains(\"window-resize\")) {\n e.stopPropagation();\n resizeStart = { x: x, y: y };\n let direction = e.target.dataset[\"direction\"].split(\",\");\n multiplier = { x: parseInt(direction[0]), y: parseInt(direction[1]) };\n dimension = this.getDimension();\n }\n };\n this.findBy(\".window-resize\", true).forEach(element => {\n element.addEventListener(\"mousedown\", (e) => {\n resizeStartListener(e.clientX, e.clientY, e);\n });\n });\n let mouseDownPos = null;\n let pos = null;\n let moveStartListener = (x, y, e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n mouseDownPos = { x: x, y: y };\n pos = Object.assign({}, this.getPosition()); //Make copy\n this._container.classList.add(\"moving\");\n }\n this.makeActiveWindow();\n };\n this._container.addEventListener(\"mousedown\", (e) => {\n moveStartListener(e.clientX, e.clientY, e);\n });\n this._container.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length === 1) {\n moveStartListener(e.touches[0].clientX, e.touches[0].clientY, e);\n }\n });\n let moveListener = (x, y) => {\n if (resizeStart !== null) {\n let localMultiplier = {\n x: multiplier.x,\n y: multiplier.y,\n };\n let diff = {\n x: (x - resizeStart.x) * (localMultiplier.x),\n y: (y - resizeStart.y) * (localMultiplier.y)\n };\n dimension = { x: dimension.x + diff.x, y: dimension.y + diff.y };\n this.setDimension(dimension.x, dimension.y);\n const realDimension = this.getDimension();\n if (dimension.x !== realDimension.x) {\n localMultiplier.x = 0;\n }\n if (dimension.y !== realDimension.y) {\n localMultiplier.y = 0;\n }\n this._checkPositionAndDimension();\n //TODO diff für Center berechnen...\n let moveDiff = { x: 0, y: 0 };\n if (localMultiplier.x !== 0) {\n if (this.position.anchorX === \"center\") {\n moveDiff.x = diff.x * localMultiplier.x / 2;\n }\n else if (localMultiplier.x * (this.position.anchorX === \"left\" ? 1 : -1) < 0) {\n moveDiff.x = diff.x * localMultiplier.x;\n }\n }\n if (localMultiplier.y !== 0) {\n if (this.position.anchorY === \"center\") {\n moveDiff.y = diff.y * localMultiplier.y / 2;\n }\n else if (localMultiplier.y * (this.position.anchorY === \"top\" ? 1 : -1) < 0) {\n moveDiff.y = diff.y * localMultiplier.y;\n }\n }\n this.moveAt(moveDiff.x, moveDiff.y);\n resizeStart = { x: x, y: y };\n }\n else if (mouseDownPos !== null) {\n let diff = {\n x: x - mouseDownPos.x,\n y: y - mouseDownPos.y,\n };\n mouseDownPos = { x, y };\n // const newPos = {x: pos.x + diff.x, y: pos.y + diff.y};\n this.moveAt(diff.x, diff.y);\n }\n };\n window.addEventListener(\"mousemove\", (e) => {\n moveListener(e.clientX, e.clientY);\n });\n window.addEventListener(\"touchmove\", (e) => {\n if (e.touches.length === 1) {\n moveListener(e.touches[0].clientX, e.touches[0].clientY);\n }\n });\n let endListener = (x, y, e) => {\n mouseDownPos = null;\n resizeStart = null;\n this._container.classList.remove(\"moving\");\n };\n window.addEventListener(\"mouseup\", (e) => {\n endListener(e.clientX, e.clientY, e);\n });\n window.addEventListener(\"touchend\", (e) => {\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n endListener(e.changedTouches[0].clientX, e.changedTouches[0].clientY, e);\n }\n });\n this._container.addEventListener(\"dblclick\", (e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n this.toggleMinimize();\n }\n });\n window.addEventListener(\"resize\", () => {\n this._checkPositionAndDimension();\n });\n window.addEventListener(\"beforeunload\", () => {\n if (this.popupWindow) {\n this.id = null; //disable saving, since it should\n this.popupWindow.close();\n }\n });\n });\n }\n makeActiveWindow() {\n let activeWindow = document.querySelector(\".window-container.active-window\");\n if (activeWindow && activeWindow !== this._container) {\n activeWindow.classList.remove(\"active-window\");\n }\n this._container.classList.add(\"active-window\");\n }\n load() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n const saveData = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this.id);\n if (saveData) {\n if (saveData.dimension) {\n this.setDimension(saveData.dimension.x, saveData.dimension.y);\n }\n if (saveData.position) {\n this.position = saveData.position;\n this._checkPositionAndDimension();\n }\n if (saveData.state) {\n switch (saveData.state) {\n case \"minimized\": {\n this.toggleMinimize();\n break;\n }\n case \"maximized\": {\n this.toggleMaximize();\n break;\n }\n case \"popup\": {\n this._viewLoadedPromise.then(() => {\n this.openInNewWindow();\n });\n break;\n }\n }\n }\n this.saveData = saveData;\n this.save();\n }\n }\n });\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n // console.log(\"save\", this.id, this.saveData);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this.id, this.saveData);\n }\n });\n }\n toggleMinimize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"minimized\");\n this._container.classList.remove(\"maximized\");\n if (!this._container.classList.contains(\"minimized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"minimized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n toggleMaximize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"maximized\");\n this._container.classList.remove(\"minimized\");\n if (!this._container.classList.contains(\"maximized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"maximized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n resizeToContent() {\n if (this._window) {\n let diff = {\n x: this._window.scrollWidth - this._window.clientWidth,\n y: this._window.scrollHeight - this._window.clientHeight,\n };\n let dimension = this.getDimension();\n if (diff.x === 0) {\n let sum = 0;\n this._resizeElements.x.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"width\")));\n diff.x = Math.ceil(sum) - dimension.x;\n }\n if (diff.y === 0) {\n let sum = 0;\n this._resizeElements.y.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"height\")));\n diff.y = Math.ceil(sum) - dimension.y;\n }\n dimension.x += diff.x;\n dimension.y += diff.y;\n if (this.state === \"normal\") {\n this.setDimension(dimension.x, dimension.y);\n }\n this._checkPositionAndDimension();\n }\n }\n getTopLeftCornerPosition() {\n const dimension = this.getDimension();\n let x = this.position.x;\n if (this.position.anchorX === \"center\") {\n x += window.innerWidth / 2 - dimension.x / 2;\n }\n else if (this.position.anchorX === \"right\") {\n x += window.innerWidth - dimension.x;\n }\n let y = this.position.y;\n if (this.position.anchorY === \"center\") {\n y += window.innerHeight / 2 - dimension.y / 2;\n }\n else if (this.position.anchorY === \"bottom\") {\n y += window.innerHeight - dimension.y;\n }\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n return { x, y };\n }\n getCenterCenterPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: (topLeft.x + dimension.x / 2) - window.innerWidth / 2,\n y: (topLeft.y + dimension.y / 2) - window.innerHeight / 2\n };\n }\n getBottomRightPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: Math.min((topLeft.x + dimension.x) - window.innerWidth, 0),\n y: Math.min((topLeft.y + dimension.y) - window.innerHeight, 0),\n };\n }\n _checkPositionAndDimension() {\n let dimension = this.getDimension();\n let setDimension = true;\n let dimensionChanged = false;\n if (isNaN(dimension.x)) {\n dimension.x = 0;\n setDimension = false;\n }\n if (isNaN(dimension.y)) {\n dimension.y = 0;\n setDimension = false;\n }\n let posTopLeft = this.getTopLeftCornerPosition();\n let posCenterCenter = this.getCenterCenterPosition();\n let posBottomRight = this.getBottomRightPosition();\n if (dimension.x > window.innerWidth) {\n dimensionChanged = true;\n dimension.x = window.innerWidth;\n this.position.x = 0;\n this.position.anchorX = \"left\";\n }\n else {\n if (posTopLeft.x <= Math.abs(posCenterCenter.x) && posTopLeft.x <= -1 * posBottomRight.x) {\n this.position.x = posTopLeft.x;\n this.position.anchorX = \"left\";\n }\n else if (-1 * posBottomRight.x <= Math.abs(posCenterCenter.x)) {\n this.position.x = posBottomRight.x;\n this.position.anchorX = \"right\";\n }\n else {\n this.position.x = posCenterCenter.x;\n this.position.anchorX = \"center\";\n }\n }\n if (dimension.y > window.innerHeight) {\n dimensionChanged = true;\n dimension.y = window.innerHeight;\n this.position.y = 0;\n this.position.anchorY = \"top\";\n }\n else {\n if (posTopLeft.y <= Math.abs(posCenterCenter.y) && posTopLeft.y <= -1 * posBottomRight.y) {\n this.position.y = posTopLeft.y;\n this.position.anchorY = \"top\";\n }\n else if (-1 * posBottomRight.y <= Math.abs(posCenterCenter.y)) {\n this.position.y = posBottomRight.y;\n this.position.anchorY = \"bottom\";\n }\n else {\n this.position.y = posCenterCenter.y;\n this.position.anchorY = \"center\";\n }\n }\n if (this.position.anchorY === \"top\") {\n this._container.style.top = this.position.y + \"px\";\n this._container.style.removeProperty(\"bottom\");\n }\n else if (this.position.anchorY === \"bottom\") {\n this._container.style.bottom = (-1 * this.position.y) + \"px\";\n this._container.style.removeProperty(\"top\");\n }\n else {\n this._container.style.top = \"calc(50% + \" + this.position.y.toString() + \"px - \" + (dimension.y / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"bottom\");\n }\n if (this.position.anchorX === \"left\") {\n this._container.style.left = this.position.x + \"px\";\n this._container.style.removeProperty(\"right\");\n }\n else if (this.position.anchorX === \"right\") {\n this._container.style.right = (-1 * this.position.x) + \"px\";\n this._container.style.removeProperty(\"left\");\n }\n else {\n this._container.style.left = \"calc(50% + \" + this.position.x.toString() + \"px - \" + (dimension.x / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"right\");\n }\n this.saveData.position = this.position;\n if (!this._container.classList.contains(\"minimized\") && setDimension && dimensionChanged) {\n this.setDimension(dimension.x, dimension.y);\n }\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onStart.call(this, pauseArguments);\n this._checkPositionAndDimension();\n return res;\n });\n }\n moveAt(x, y) {\n const posTopLeft = this.getTopLeftCornerPosition();\n return this.moveTo(x + posTopLeft.x, y + posTopLeft.y);\n }\n moveTo(x, y) {\n this.position = { x: x, y: y, anchorX: \"left\", anchorY: \"top\" };\n this._checkPositionAndDimension();\n this.save();\n }\n onButtonClick(id, button, e) {\n switch (id) {\n case \"minimize-button\": {\n this.toggleMinimize();\n break;\n }\n case \"maximize-button\": {\n this.toggleMaximize();\n break;\n }\n case \"new-window-button\": {\n this.openInNewWindow();\n break;\n }\n }\n }\n openInNewWindow() {\n if (this.state === \"popup\") {\n return;\n }\n const windowProxy = window.open(\"\", \"\", \"modal=yes\");\n if (windowProxy === null) {\n new Toast_1.Toast(\"cannot open popups\").show();\n return;\n }\n this.state = \"popup\";\n this.saveData.state = this.state;\n this.save();\n const baseElement = document.createElement(\"base\");\n baseElement.href = window.location.href;\n windowProxy.document.head.appendChild(baseElement);\n const titleElement = document.createElement(\"title\");\n titleElement.innerText = this.title;\n windowProxy.document.head.appendChild(titleElement);\n document.querySelectorAll(\"link[rel='stylesheet']\").forEach(styleElem => {\n windowProxy.document.head.appendChild(styleElem.cloneNode());\n });\n const parent = this._view.parentNode;\n this._view.remove();\n this._container.classList.add(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n const translationCallback = Translator_1.Translator.getInstance().addTranslationCallback((baseElement) => {\n if (baseElement !== this._container) {\n Translator_1.Translator.getInstance().updateTranslations(this._container);\n }\n }, false);\n windowProxy.document.body.appendChild(this._view);\n windowProxy.addEventListener(\"beforeunload\", () => {\n this.state = \"normal\";\n this.saveData.state = this.state;\n this.save();\n this._view.remove();\n this._container.classList.remove(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n parent.appendChild(this._view);\n this.popupWindow = null;\n Translator_1.Translator.getInstance().removeTranslationCallback(translationCallback);\n });\n this.popupWindow = windowProxy;\n document.body.classList.forEach(className => {\n console.log(\"adding class\", className);\n windowProxy.document.body.classList.add(className);\n });\n }\n getPosition() {\n return this.position;\n }\n}\nexports.AbstractWindowFragment = AbstractWindowFragment;\n//# sourceMappingURL=AbstractWindowFragment.js.map","module.exports = __webpack_public_path__ + \"html/abstractWindowTemplate.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AlphabeticListFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst defaultView = require(\"../../../html/Framework/Fragment/alphabeticListFragment.html\");\nclass AlphabeticListFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, shared_1.Helper.nonNull(view, defaultView));\n this.elements = {};\n this.sideScrolling = false;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n //TODO font-size changing\n let sideAlphabet = this.findBy(\".alphabetic-list-sidealphabet\");\n sideAlphabet.addEventListener(\"mousedown\", () => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"mouseup\", () => {\n this.sideScrolling = false;\n });\n window.addEventListener(\"touchend\", () => {\n this.sideScrolling = false;\n });\n this.findBy(\".alphabet-scroll-to\", true).forEach(elem => {\n let listener = (e) => {\n if (this.sideScrolling) {\n this.findBy(\".alphabet-section.\" + elem.dataset.letter).scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n }\n };\n elem.addEventListener(\"mousedown\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"mousemove\", listener);\n elem.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"touchmove\", listener);\n });\n this.headingElement = this.findBy(\"#alphabetic-list-heading\");\n this.renderList();\n return res;\n });\n }\n setElements(elements) {\n this.elements = {};\n Object.keys(elements).sort(function (a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n }).forEach(key => {\n this.elements[key] = elements[key];\n });\n }\n setHeading(headingElement) {\n this.heading = headingElement;\n if (this.headingElement && this.heading) {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n this.headingElement.appendChild(this.heading);\n }\n }\n renderElement(element) {\n console.warn(\"should be overloaded?\");\n let elem = document.createElement(\"div\");\n elem.innerText = element;\n return elem;\n }\n renderList() {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n if (this.heading) {\n this.headingElement.appendChild(this.heading);\n }\n this.findBy(\".alphabet-section\", true).forEach(section => {\n client_1.ViewHelper.removeAllChildren(section);\n });\n let currentLetter = 'A';\n let currentSegment = this.findBy(\".alphabet-section.A\");\n Object.keys(this.elements).forEach(key => {\n let newLetter = key.trim().substring(0, 1).toUpperCase();\n if (newLetter !== currentLetter) {\n currentLetter = newLetter;\n let newSegment = this.findBy(\".alphabet-section.\" + newLetter);\n if (newSegment !== null) {\n currentSegment = newSegment;\n }\n }\n let element = this.renderElement(this.elements[key]);\n currentSegment.appendChild(element);\n });\n }\n}\nexports.AlphabeticListFragment = AlphabeticListFragment;\n//# sourceMappingURL=AlphabeticListFragment.js.map","module.exports = __webpack_public_path__ + \"html/alphabeticListFragment.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TabFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultTabView = require(\"../../../html/Framework/Fragment/tabFragment.html\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Translator_1 = require(\"../../Translator\");\nconst client_1 = require(\"js-helper/dist/client\");\nclass TabFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, Helper_1.Helper.nonNull(view, defaultTabView));\n this.lastTabId = 0;\n this.activeTab = null;\n this.onTabChangeListener = null;\n this.tabs = new Map();\n this.tabViewPromise = this._viewLoadedPromise;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.nameContainer = this.findBy(\".tab-names\");\n this.nameButton = this.findBy(\".tab-button-template\");\n this.nameButton.classList.remove(\"tab-button-template\");\n this.nameButton.remove();\n this.tabContent = this.findBy(\".tab-content\");\n this.tabSite = this.findBy(\".tab-site-template\");\n this.tabSite.classList.remove(\"tab-site-template\");\n this.tabSite.remove();\n return res;\n });\n }\n addFragment(name, fragment, nameIsTranslatable) {\n super.addFragment(\".tab-content\", fragment);\n fragment._viewLoadedPromise.then(() => {\n const view = this.tabSite.cloneNode(true);\n view.appendChild(fragment._view);\n this.lastTabId++;\n const tab = {\n name: name,\n fragment: fragment,\n view: view,\n nameIsTranslatable: Helper_1.Helper.nonNull(nameIsTranslatable, true),\n button: null,\n id: this.lastTabId,\n };\n this.tabs.set(this.lastTabId, tab);\n this._viewLoadedPromise.then(() => {\n const nameElement = this.nameButton.cloneNode(true);\n nameElement.appendChild(tab.nameIsTranslatable ? Translator_1.Translator.makePersistentTranslation(name) : document.createTextNode(name));\n this.nameContainer.appendChild(nameElement);\n nameElement.addEventListener(\"click\", () => {\n this.showTab(tab.id);\n });\n tab.button = nameElement;\n if (Helper_1.Helper.isNull(this.activeTab)) {\n this.showTab(tab.id);\n }\n });\n });\n }\n showTab(tabId) {\n const tab = this.tabs.get(tabId);\n if (tab && tabId !== this.activeTab) {\n let previousActiveButton = this.findBy(\".tab-button.active\");\n if (Helper_1.Helper.isNotNull(previousActiveButton)) {\n previousActiveButton.classList.remove(\"active\");\n }\n tab.button.classList.add(\"active\");\n client_1.ViewHelper.removeAllChildren(this.tabContent);\n this.tabContent.appendChild(tab.view);\n this.activeTab = tabId;\n if (this.onTabChangeListener) {\n this.onTabChangeListener(tab);\n }\n }\n }\n setOnTabChangeListener(listener) {\n this.onTabChangeListener = listener;\n }\n}\nexports.TabFragment = TabFragment;\n//# sourceMappingURL=TabFragment.js.map","module.exports = __webpack_public_path__ + \"html/tabFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Dialog_1 = require(\"../../../Dialog/Dialog\");\nconst Translator_1 = require(\"../../../Translator\");\nconst errorIcon = require(\"../../../../img/errorIcon.png\");\nclass ErrorAction extends MenuAction_1.MenuAction {\n constructor() {\n super(\"\", () => {\n let d = new Dialog_1.Dialog(ErrorAction._errors.join(\"
\"), Translator_1.Translator.translate(\"error\"));\n d.setTranslatable(false);\n d.show();\n }, MenuAction_1.MenuAction.SHOW_ALWAYS, -1000, ErrorAction.ERROR_ICON);\n this._visible = (ErrorAction._errors.length > 0);\n this._shouldTranslate = false;\n console.log(\"icon: \", ErrorAction.ERROR_ICON);\n }\n static addError(errorMessage) {\n if (this._errors.indexOf(errorMessage) === -1) {\n this._errors.push(errorMessage);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n static removeError(errorMessage) {\n let index = this._errors.indexOf(errorMessage);\n if (index >= 0) {\n this._errors.splice(index, 1);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n /**\n * @return ErrorAction;\n */\n static getInstance() {\n if (this._instance === null) {\n this._instance = new ErrorAction();\n }\n return this._instance;\n }\n}\nexports.ErrorAction = ErrorAction;\nErrorAction.ERROR_ICON = errorIcon;\nErrorAction._instance = null;\nErrorAction._errors = [];\n//# sourceMappingURL=ErrorAction.js.map","export default \"img/errorIcon.png\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartSiteMenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst App_1 = require(\"../../../App\");\nclass StartSiteMenuAction extends MenuAction_1.MenuAction {\n constructor(name, site, showFor, order, icon) {\n super(name, () => {\n if (StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartSiteMenuAction = StartSiteMenuAction;\nStartSiteMenuAction._app = null;\nApp_1.App.addInitialization(app => {\n StartSiteMenuAction._app = app;\n});\n//# sourceMappingURL=StartSiteMenuAction.js.map","module.exports = __webpack_public_path__ + \"html/navbar.html\";","module.exports = __webpack_public_path__ + \"html/menuSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst SwipeChildFragment_1 = require(\"./SwipeChildFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst view = require(\"../../../html/Framework/Fragment/swipeFragment.html\");\nclass SwipeFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site) {\n super(site, view);\n this._activeIndex = 0;\n this._touchStart = null;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this._view.addEventListener(\"touchstart\", e => {\n this._touchStart = e.touches[0];\n }, false);\n this._view.addEventListener(\"touchend\", e => {\n this._handleSwipe(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n this._touchStart = null;\n });\n this._view.addEventListener(\"mousedown\", e => {\n this._touchStart = e;\n }, false);\n this._view.addEventListener(\"mouseup\", e => {\n this._handleSwipe(e.clientX, e.clientY);\n this._touchStart = null;\n });\n return _super.onViewLoaded.call(this);\n });\n }\n _handleSwipe(endX, endY) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._touchStart)) {\n return;\n }\n let touchStart = this._touchStart;\n this._touchStart = null;\n let diffX = touchStart.clientX - endX;\n if (Math.abs(touchStart.clientY - endY) <= SwipeFragment.MAX_Y\n && Math.abs(diffX) >= SwipeFragment.MIN_X) {\n if (diffX > 0) {\n yield this._fragments[this._activeIndex].onSwipeLeft();\n }\n else {\n yield this._fragments[this._activeIndex].onSwipeRight();\n }\n }\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (this._activeIndex >= 0 && this._activeIndex < this._fragments.length) {\n this.setActiveFragment(this._activeIndex);\n }\n return _super.onStart.call(this, pauseArguments);\n });\n }\n setActiveFragment(index) {\n if (index instanceof SwipeChildFragment_1.SwipeChildFragment) {\n index = this._fragments.indexOf(index);\n }\n if (index >= 0 && index < this._fragments.length) {\n this._activeIndex = index;\n this._fragments.forEach((frag, i) => {\n frag.setActive(i === this._activeIndex);\n });\n }\n }\n nextFragment() {\n this.setActiveFragment((this._activeIndex + 1) % this._fragments.length);\n }\n previousFragment() {\n this.setActiveFragment((this._activeIndex + this._fragments.length - 1) % this._fragments.length);\n }\n addFragment(fragment) {\n if (fragment instanceof SwipeChildFragment_1.SwipeChildFragment) {\n fragment.setParent(this);\n return super.addFragment(\".swipe-container\", fragment);\n }\n }\n}\nexports.SwipeFragment = SwipeFragment;\nSwipeFragment.MAX_Y = 80;\nSwipeFragment.MIN_X = 150;\n//# sourceMappingURL=SwipeFragment.js.map","module.exports = __webpack_public_path__ + \"html/swipeFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ButtonChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nclass ButtonChooseDialog extends Dialog_1.Dialog {\n constructor(content, title, values) {\n super(content, title);\n Object.keys(values).forEach(key => {\n this.addButton(values[key], key);\n });\n }\n}\nexports.ButtonChooseDialog = ButtonChooseDialog;\n//# sourceMappingURL=ButtonChooseDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nconst Translator_1 = require(\"../Translator\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title, translateable) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n translateable = Helper_1.Helper.nonNull(translateable, true);\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n let textElem = null;\n if (translateable) {\n textElem = Translator_1.Translator.makePersistentTranslation(valueNames[k]);\n }\n else {\n textElem = document.createElement(\"span\");\n textElem.innerText = valueNames[k];\n }\n valueElem.querySelector(\".choose-dialog-value\").appendChild(textElem);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ChooseDialog = ChooseDialog;\n//# sourceMappingURL=ChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfirmDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ConfirmDialog extends Dialog_1.Dialog {\n constructor(content, title, confirmButtonText, cancelButtonText) {\n super(content, title);\n this.confirmButtonText = Helper_1.Helper.nonNull(confirmButtonText, \"confirm-button\");\n this.cancelButtonText = Helper_1.Helper.nonNull(cancelButtonText, \"cancel-button\");\n }\n show() {\n const _super = Object.create(null, {\n show: { get: () => super.show }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.addButton(this.confirmButtonText, true);\n this.addButton(this.cancelButtonText, false);\n return _super.show.call(this);\n });\n }\n close() {\n if (Helper_1.Helper.isNull(this._result)) {\n this._result = false;\n }\n return super.close();\n }\n}\nexports.ConfirmDialog = ConfirmDialog;\n//# sourceMappingURL=ConfirmDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImgChooseDialog = void 0;\nconst ElemChooseDialog_1 = require(\"./ElemChooseDialog\");\nclass ImgChooseDialog extends ElemChooseDialog_1.ElemChooseDialog {\n constructor(valueNames, title) {\n let newValueNames = {};\n Object.keys(valueNames).forEach(k => {\n let elem = document.createElement(\"img\");\n elem.src = valueNames[k];\n newValueNames[k] = elem;\n });\n super(newValueNames, title);\n }\n}\nexports.ImgChooseDialog = ImgChooseDialog;\n//# sourceMappingURL=ImgChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleHelper = void 0;\nconst js_helper_1 = require(\"js-helper\");\nclass ScaleHelper {\n scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n addListener = js_helper_1.Helper.nonNull(addListener, true);\n animationDelay = js_helper_1.Helper.nonNull(animationDelay, 0);\n let newFontSize = yield this._getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay === 0);\n if (animationDelay > 0) {\n yield new Promise(r => {\n setTimeout(r, animationDelay);\n fontElement.style.fontSize = newFontSize + \"px\";\n });\n }\n let self = this;\n let listener = function () {\n return new Promise(resolve => {\n let timeout = (typeof addListener === 'number') ? addListener : 255;\n setTimeout(() => {\n resolve(self.scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, false));\n }, timeout);\n });\n };\n if (addListener !== false) {\n window.addEventListener(\"resize\", listener);\n }\n return listener;\n });\n }\n scaleToFull(fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.scaleTo(1, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener);\n });\n }\n _getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, setFontSize) {\n return __awaiter(this, void 0, void 0, function* () {\n margin = js_helper_1.Helper.nonNull(margin, 10);\n ignoreHeight = js_helper_1.Helper.nonNull(ignoreHeight, false);\n ignoreWidth = js_helper_1.Helper.nonNull(ignoreWidth, false);\n fontWeight = js_helper_1.Helper.nonNull(fontWeight, fontElement.innerHTML.length);\n setFontSize = js_helper_1.Helper.nonNull(setFontSize, true);\n let hasNoTransitionClass = container.classList.contains(\"no-transition\");\n if (!hasNoTransitionClass) {\n container.classList.add(\"no-transition\");\n }\n const numChanged = 5;\n let oldDiffIndex = 0;\n let oldDiff = [];\n for (let i = 0; i < numChanged; i++) {\n oldDiff.push(0);\n }\n let beforeFontSize = fontElement.style.fontSize;\n let currentFontSize = 1;\n let widthDiff = 0;\n let heightDiff = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n do {\n currentFontSize += oldDiff[oldDiffIndex] / (fontWeight + 1);\n fontElement.style.fontSize = currentFontSize + 'px';\n let containerStyle = window.getComputedStyle(container);\n containerWidth = parseFloat(containerStyle.getPropertyValue(\"width\").replace('px', ''));\n containerHeight = parseFloat(containerStyle.getPropertyValue(\"height\").replace('px', ''));\n widthDiff = containerWidth - fontElement.offsetWidth;\n heightDiff = containerHeight - fontElement.offsetHeight;\n oldDiffIndex = (oldDiffIndex + 1) % numChanged;\n let newDiff = (ignoreWidth ? heightDiff : (ignoreHeight ? widthDiff : Math.min(widthDiff, heightDiff)));\n if (newDiff === oldDiff[(oldDiffIndex + 1) % numChanged]) {\n break;\n }\n oldDiff[oldDiffIndex] = newDiff;\n } while ((widthDiff > (1 - scale) * containerWidth || ignoreWidth) && (heightDiff > (1 - scale) * containerHeight || ignoreHeight));\n currentFontSize -= margin;\n fontElement.style.fontSize = ((setFontSize) ? currentFontSize + \"px\" : beforeFontSize);\n if (!hasNoTransitionClass) {\n yield new Promise((r) => {\n setTimeout(r, 50);\n });\n container.classList.remove(\"no-transition\");\n }\n return currentFontSize;\n });\n }\n}\nexports.ScaleHelper = ScaleHelper;\n//# sourceMappingURL=ScaleHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseHelper = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nclass PromiseHelper {\n static delay(milliseconds) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(r, milliseconds);\n });\n });\n }\n static tryMultipleTimes(func, times, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n times = Helper_1.Helper.nonNull(times, 5);\n delay = Helper_1.Helper.nonNull(delay, 50);\n for (let i = 0; i < times; i++) {\n let res = yield func();\n if (res !== undefined) {\n return res;\n }\n else {\n yield PromiseHelper.delay(delay);\n }\n }\n return undefined;\n });\n }\n static tryUntilTimeout(func, timeout, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n timeout = Helper_1.Helper.nonNull(timeout, 500);\n delay = Helper_1.Helper.nonNull(delay, 50);\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n let shouldRun = true;\n PromiseHelper.delay(timeout).then(() => {\n reject(new Error(\"timeout\"));\n shouldRun = false;\n });\n while (shouldRun) {\n let res = yield func();\n if (res !== undefined) {\n resolve(res);\n break;\n }\n yield PromiseHelper.delay(delay);\n }\n }));\n });\n }\n}\nexports.PromiseHelper = PromiseHelper;\n//# sourceMappingURL=PromiseHelper.js.map","module.exports = __webpack_public_path__ + \"html/shareDialog.html\";","module.exports = __webpack_public_path__ + \"html/loginSite.html\";","module.exports = __webpack_public_path__ + \"html/forgotPasswordSite.html\";","module.exports = __webpack_public_path__ + \"html/notAllowedSite.html\";","module.exports = __webpack_public_path__ + \"html/selectUserDialog.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OfflineUserManager = void 0;\nconst client_1 = require(\"cordova-sites-easy-sync/dist/client\");\nconst client_2 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"./UserManager\");\nconst Role_1 = require(\"../../shared/v1/model/Role\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass OfflineUserManager extends UserManager_1.UserManager {\n constructor() {\n super();\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n let userId = yield client_2.NativeStoragePromise.getItem(\"user-manager-user-id\");\n if (Helper_1.Helper.isNotNull(userId)) {\n let user = yield User_1.User.findById(userId, User_1.User.getRelations());\n if (Helper_1.Helper.isNotNull(user) && user.activated && !user.blocked) {\n yield this._handleLoginFromUser(user);\n }\n }\n return this._userData;\n });\n }\n _handleLoginFromUser(user) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = [];\n let roles = user.roles;\n let roleIds = [];\n roles.forEach(role => {\n roleIds.push(role.id);\n });\n roles = yield Role_1.Role.findByIds(roleIds, [\"accesses\"]);\n yield Helper_1.Helper.asyncForEach(roles, (role) => __awaiter(this, void 0, void 0, function* () {\n accesses.push(...yield this._getAccessesFromRole(role));\n }));\n let accessNames = [];\n accesses.forEach(access => {\n accessNames.push(access.name);\n });\n this._userData = {\n id: user.id,\n loggedIn: true,\n online: true,\n username: user.username,\n email: user.email,\n accesses: accessNames,\n };\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let user = yield User_1.User.findOne({\n \"email\": email,\n \"password\": this._hashPassword(password),\n \"activated\": true,\n \"blocked\": false,\n }, undefined, undefined, User_1.User.getRelations());\n if (user) {\n yield this._handleLoginFromUser(user);\n if (saveLogin) {\n yield client_2.NativeStoragePromise.setItem(\"user-manager-user-id\", user.id);\n }\n return true;\n }\n return false;\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n yield client_2.NativeStoragePromise.remove(\"user-manager-user-id\");\n return false;\n });\n }\n _getAccessesFromRole(role) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = role.accesses;\n let repo = yield client_1.EasySyncClientDb.getInstance()._getRepository(Role_1.Role.getSchemaName());\n let parents = yield repo.createQueryBuilder(Role_1.Role.getSchemaName())\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.accesses', \"access\")\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.children', \"child\")\n .where('child.id = :id', { id: role.id })\n .getMany();\n yield Helper_1.Helper.asyncForEach(parents, (role) => __awaiter(this, void 0, void 0, function* () {\n let otherAccesses = yield this._getAccessesFromRole(role);\n accesses.push(...otherAccesses);\n }));\n return accesses;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let errors = {};\n let users = yield Promise.all([\n User_1.User.findOne({ \"email\": email }),\n User_1.User.findOne({ \"username\": username }),\n ]);\n if (Helper_1.Helper.isNotNull(users[0])) {\n errors[\"email\"] = \"email is already in use.\";\n }\n if (Helper_1.Helper.isNotNull(users[1])) {\n errors[\"username\"] = \"username is already in use.\";\n }\n if (Object.keys(errors).length > 0) {\n return errors;\n }\n let user = new User_1.User();\n user.id = yield OfflineUserManager._getNewId();\n user.email = email;\n user.password = this._hashPassword(password);\n user.username = username;\n user.roles = OfflineUserManager.DEFAULT_ROLES;\n user.activated = true;\n yield user.save();\n // user.roles\n yield this.login(email, password);\n return user;\n });\n }\n static _getNewId() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(OfflineUserManager._lastId)) {\n let user = yield User_1.User.findOne(undefined, { \"id\": \"DESC\" });\n OfflineUserManager._lastId = user.id;\n }\n OfflineUserManager._lastId++;\n return OfflineUserManager._lastId;\n });\n }\n _hashPassword(pw) {\n return pw;\n }\n}\nexports.OfflineUserManager = OfflineUserManager;\nOfflineUserManager.LOGGED_OUT_ACCESSES = UserManager_1.UserManager.OFFLINE_ACCESSES;\nOfflineUserManager.DEFAULT_ROLES = [];\nOfflineUserManager._lastId = null;\n//# sourceMappingURL=OfflineUserManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob_old = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass SyncJob_old {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromises = [];\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (shared_1.Helper.isNull(this._lastSyncDates)) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n let saveResults = yield this._doRuns(requestQueries);\n yield this._handleRelations();\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //Calculate final result and give it back\n let finalRes = {};\n saveResults.forEach(res => {\n if (res) {\n if (!finalRes[res.model]) {\n finalRes[res.model] = {\n \"deleted\": [],\n \"changed\": []\n };\n }\n if (res.deleted) {\n finalRes[res.model][\"deleted\"] = finalRes[res.model][\"deleted\"].concat(res.entities);\n }\n else {\n finalRes[res.model][\"changed\"] = finalRes[res.model][\"changed\"].concat(res.entities);\n }\n }\n });\n if (finalRes[\"FileMedium\"] && finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(finalRes[\"FileMedium\"][\"changed\"]);\n }\n return finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n let shouldAskAgain = false;\n //Ask for next run until no more runs needed\n do {\n shouldAskAgain = false;\n response = yield SyncJob_old._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (this._extractEntities(res)) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n return Promise.all(this._savePromises);\n });\n }\n _handleRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n let mergedRelations = {};\n let relationPromises = [];\n Object.keys(this._relationshipModels).forEach(modelClassName => {\n let relationDefinitions = this._keyedModelClasses[modelClassName].getRelationDefinitions();\n Object.keys(this._relationshipModels[modelClassName]).forEach(id => {\n let entity = this._relationshipModels[modelClassName][id][\"entity\"];\n let relations = this._relationshipModels[modelClassName][id][\"relations\"];\n let entityRelationPromises = [];\n Object.keys(relations).forEach(relation => {\n //foreach relation load other models and save them here\n let valuePromise = this._handleSingleRelation(relationDefinitions, relation, relations, mergedRelations, entity);\n entityRelationPromises.push(valuePromise.then(value => {\n entity[relation] = value;\n }));\n });\n //Save after all relationships has been set\n relationPromises.push(Promise.all(entityRelationPromises).then(() => {\n return entity.save(true);\n }));\n });\n });\n //Wait for relation-promises\n yield Promise.all(relationPromises);\n yield shared_1.Helper.asyncForEach(Object.keys(mergedRelations), (model) => __awaiter(this, void 0, void 0, function* () {\n let entities = shared_1.Helper.arrayToObject(yield this._keyedModelClasses[model].findByIds(Object.keys(mergedRelations[model]), this._keyedModelClasses[model].getRelations()), e => e.id);\n Object.keys(mergedRelations[model]).forEach(id => {\n if (entities[id]) {\n Object.keys(mergedRelations[model][id]).forEach(relation => {\n if (Array.isArray(mergedRelations[model][id][relation])) {\n entities[id][relation] = shared_1.Helper.nonNull(entities[id][relation], []);\n entities[id][relation].push.apply(entities[id][relation], mergedRelations[model][id][relation]);\n }\n else {\n entities[id][relation] = mergedRelations[model][id][relation];\n }\n });\n }\n });\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(Object.values(entities));\n }), true);\n });\n }\n _handleSingleRelation(relationDefinitions, relationName, relations, mergedRelations, entity) {\n let valuePromise = Promise.resolve(undefined);\n let target = relationDefinitions[relationName][\"target\"];\n let shouldSync = (relationDefinitions[relationName].sync !== false);\n //is relation a *-to-many relation?\n if (Array.isArray(relations[relationName])) {\n if (shouldSync || relations[relationName].every(id => !shared_1.Helper.isSet(this._syncedModels, target, id))) {\n valuePromise = this._keyedModelClasses[target].findByIds(relations[relationName]);\n }\n else {\n let targetRelationDefinition = this._keyedModelClasses[target].getRelationDefinitions()[relationDefinitions[relationName][\"inverseSide\"]];\n relations[relationName].filter(id => !shared_1.Helper.isSet(this._relationshipModels, target, id)).forEach(id => {\n mergedRelations[target] = shared_1.Helper.nonNull(mergedRelations[target], {});\n mergedRelations[target][id] = shared_1.Helper.nonNull(mergedRelations[target][id], {});\n let otherRelationValue = null;\n if (targetRelationDefinition.type === \"many-to-many\" || targetRelationDefinition.type === \"one-to-many\") {\n otherRelationValue = shared_1.Helper.nonNull(mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]], []);\n otherRelationValue.push(entity);\n }\n else {\n otherRelationValue = entity;\n }\n mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]] = otherRelationValue;\n });\n }\n }\n else if (shouldSync || !shared_1.Helper.isSet(this._syncedModels, target, relations[relationName])) {\n valuePromise = this._keyedModelClasses[target].findById(relations[relationName]);\n }\n return valuePromise;\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return false;\n }\n let shouldAskAgain = false;\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedModels = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedModels.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n this._savePromises.push(modelClass._fromJson(changedModels).then((changedEntities) => __awaiter(this, void 0, void 0, function* () {\n let relations = modelClass.getRelationDefinitions();\n let newIds = [];\n changedEntities.forEach(entity => {\n this._syncedModels[modelName][entity.id] = entity;\n newIds.push(entity.id);\n Object.keys(relations).forEach(relation => {\n if (entity[relation]) {\n this._addRelation(modelName, entity, relation);\n //clear relation\n entity[relation] = null;\n }\n });\n });\n //Handle partial Models (different ids on client than server)\n if (modelClass.prototype instanceof EasySyncPartialModel_1.EasySyncPartialModel) {\n let oldObjects = yield modelClass.findByIds(newIds);\n let keyedEntities = shared_1.Helper.arrayToObject(changedEntities, changedEntities => changedEntities.id);\n oldObjects.forEach(old => {\n keyedEntities[old.id].clientId = old.clientId;\n });\n }\n return EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(changedEntities).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": false\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n })));\n //Deletion of the entities\n this._savePromises.push(EasySyncClientDb_1.EasySyncClientDb.getInstance().deleteEntity(deletedModelsIds, modelClass).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": true\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n }));\n if (modelRes.shouldAskAgain) {\n shouldAskAgain = true;\n }\n return shouldAskAgain;\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n _addRelation(modelName, entity, relation) {\n this._relationshipModels[modelName] = shared_1.Helper.nonNull(this._relationshipModels[modelName], {});\n this._relationshipModels[modelName][entity.id] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id], {});\n this._relationshipModels[modelName][entity.id][\"entity\"] = entity;\n this._relationshipModels[modelName][entity.id][\"relations\"] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id][\"relations\"], {});\n this._relationshipModels[modelName][entity.id][\"relations\"][relation] = entity[relation];\n return this._relationshipModels;\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob_old.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n}\nexports.SyncJob_old = SyncJob_old;\nSyncJob_old.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob_old.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModifyEntitySite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst Form_1 = require(\"cordova-sites/dist/client/js/Form\");\nconst js_helper_1 = require(\"js-helper\");\nconst EasySyncBaseModel_1 = require(\"../../shared/EasySyncBaseModel\");\nclass ModifyEntitySite extends MenuSite_1.MenuSite {\n constructor(siteManager, view, model, menuTemplate) {\n super(siteManager, view, menuTemplate);\n this._formSelector = \".entity-form\";\n this._ckEditorConfig = {\n \".editor\": {\n toolbar: ['bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote'],\n removePlugins: [\"Heading\", \"Image\", \"ImageCaption\", \"ImageStyle\", \"ImageToolbar\", \"ImageUpload\", \"Table\", \"TableToolbar\", \"MediaEmbed\", \"CKFinderUploadAdapter\"],\n language: \"de\"\n }\n };\n this._entity = null;\n this._model = model;\n }\n getEntityFromParameters(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(this._model.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel)) {\n throw {\n \"error\": \"wrong class given! Expected EasySyncBaseModel, given \" + this._model.name\n };\n }\n let entity = null;\n if (js_helper_1.Helper.isSet(constructParameters, \"id\")) {\n entity = this._model.findById(constructParameters[\"id\"], this._model.getRelations());\n }\n if (js_helper_1.Helper.isNull(entity)) {\n entity = new this._model();\n }\n return entity;\n });\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let entity = yield this.getEntityFromParameters(constructParameters);\n if (entity !== null) {\n this.setEntity(entity);\n }\n return res;\n });\n }\n setEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n this._entity = entity;\n yield this._viewLoadedPromise;\n let values = yield this.dehydrate(this._entity);\n if (js_helper_1.Helper.isNotNull(values)) {\n yield this._form.setValues(values);\n }\n });\n }\n hydrate(values, entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(values, column)) {\n entity[column] = values[column];\n }\n });\n return entity;\n });\n }\n dehydrate(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let values = {};\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(entity, column)) {\n values[column] = entity[column];\n }\n });\n return values;\n });\n }\n validate(values, form) {\n return __awaiter(this, void 0, void 0, function* () {\n return true;\n });\n }\n saveListener() {\n this.finish();\n }\n save(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let entity = yield this.hydrate(values, this._entity);\n yield entity.save();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._form = new Form_1.Form(this.findBy(this._formSelector), (values) => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n try {\n yield this.save(values);\n this.saveListener();\n }\n catch (e) {\n console.error(e);\n this._form.setErrors({ \"error\": e.message });\n }\n finally {\n this.removeLoadingSymbol();\n }\n }));\n if (js_helper_1.Helper.isNotNull(window[\"CKEditor\"])) {\n Object.keys(this._ckEditorConfig).forEach(selector => {\n this.findBy(selector, true).forEach((e) => __awaiter(this, void 0, void 0, function* () {\n this._form.addEditor(yield CKEditor.create(e, this._ckEditorConfig[selector]));\n }));\n });\n }\n this._form.addValidator((values) => __awaiter(this, void 0, void 0, function* () {\n return yield this.validate(values, this._form);\n }));\n return res;\n });\n }\n}\nexports.ModifyEntitySite = ModifyEntitySite;\n//# sourceMappingURL=ModifyEntitySite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupEasySync1000000000500 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupEasySync1000000000500 {\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"last_sync_dates\", true);\n yield this._addLastSyncDates(queryRunner);\n });\n }\n _addLastSyncDates(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let lastSyncDatesTable = new typeorm_1.Table({\n name: \"last_sync_dates\",\n columns: [\n {\n name: \"id\",\n type: \"Integer\",\n isPrimary: true,\n isGenerated: true,\n generationStrategy: \"increment\",\n },\n {\n name: \"model\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isNullable: true\n },\n {\n name: \"lastSynced\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n isNullable: true\n },\n {\n name: \"where\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n }\n ]\n });\n return yield queryRunner.createTable(lastSyncDatesTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupEasySync1000000000500 = SetupEasySync1000000000500;\n//# sourceMappingURL=SetupEasySync.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChangeUserSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst LoginSite_1 = require(\"./LoginSite\");\nconst SelectUserDialog_1 = require(\"../Dialog/SelectUserDialog\");\nconst view = require(\"./../../html/sites/changeUserSite.html\");\nclass ChangeUserSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, ChangeUserSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let data;\n if (Helper_1.Helper.isSet(constructParameters, \"id\")) {\n data = yield DataManager_1.DataManager.load(ChangeUserSite.LOAD_USER_INFOS_URL + DataManager_1.DataManager.buildQuery({ id: constructParameters[\"id\"] }));\n }\n if (!data || data.success !== true) {\n new client_1.Toast(data.message).show();\n this.finish();\n }\n this._roles = data.roles;\n this._userData = data.userData;\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.findBy(\"#username\").innerText = this._userData.username;\n this._hasRoleContainer = this.findBy(\"#has-role-container\");\n this._availableRoleContainer = this.findBy(\"#available-role-container\");\n this._hasRoleTemplate = this.findBy(\"#has-role-template\");\n this._availableRoleTemplate = this.findBy(\"#available-role-template\");\n this._hasRoleTemplate.removeAttribute(\"id\");\n this._availableRoleTemplate.removeAttribute(\"id\");\n this._hasRoleTemplate.remove();\n this._availableRoleTemplate.remove();\n this.updateRoles();\n return res;\n });\n }\n updateRoles() {\n let userRoles = [];\n let availableRoles = [];\n this._roles.forEach(role => {\n if (this._userData.roleIds.indexOf(role.id) !== -1) {\n userRoles.push(role);\n }\n else {\n availableRoles.push(role);\n }\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._hasRoleContainer);\n userRoles.forEach((role, i) => {\n let elem = this._hasRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".remove-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: false\n });\n if (res.success) {\n this._userData.roleIds.splice(this._userData.roleIds.indexOf(role.id), 1);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._hasRoleContainer.appendChild(elem);\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._availableRoleContainer);\n availableRoles.forEach(role => {\n let elem = this._availableRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".add-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: true\n });\n if (res.success) {\n this._userData.roleIds.push(role.id);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._availableRoleContainer.appendChild(elem);\n });\n }\n}\nexports.ChangeUserSite = ChangeUserSite;\nChangeUserSite.ACCESS = \"admin\";\nChangeUserSite.LOAD_USER_INFOS_URL = \"/user/userRoles\";\nChangeUserSite.CHANGE_USER_ROLE_URL = \"/user/changeUserRole\";\nChangeUserSite.ADD_CHANGE_USER_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (ChangeUserSite.ADD_CHANGE_USER_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"change user\", ChangeUserSite.ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n let user = yield new SelectUserDialog_1.SelectUserDialog().show();\n yield app.startSite(ChangeUserSite, { \"id\": user[\"id\"] });\n })));\n }\n app.addDeepLink(\"login\", LoginSite_1.LoginSite);\n});\n//# sourceMappingURL=ChangeUserSite.js.map","module.exports = __webpack_public_path__ + \"html/changeUserSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegistrationSite = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/registrationSite.html\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst User_1 = require(\"../../../shared/v1/model/User\");\nclass RegistrationSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, RegistrationSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#registration-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n let result = yield UserManager_1.UserManager.getInstance().register(data[\"email\"], data[\"username\"], data[\"password\"]);\n if ((result instanceof User_1.User) || result === true) {\n yield new client_1.Toast(\"registration successful\").show();\n yield this.finish();\n }\n else {\n yield form.setErrors(result);\n }\n }));\n form.addValidator(data => {\n if (data[\"password\"] !== data[\"password2\"]) {\n return {\n \"password2\": \"the passwords do not match.\"\n };\n }\n return true;\n });\n // let listener = () => form.clearErrors();\n // this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n // this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n return res;\n });\n }\n}\nexports.RegistrationSite = RegistrationSite;\nRegistrationSite.ACCESS = \"loggedOut\";\nRegistrationSite.ADD_REGISTRATION_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (RegistrationSite.ADD_REGISTRATION_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"registration\", RegistrationSite.ACCESS, RegistrationSite));\n }\n app.addDeepLink(\"registration\", RegistrationSite);\n});\n//# sourceMappingURL=RegistrationSite.js.map","module.exports = __webpack_public_path__ + \"html/registrationSite.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncModel = void 0;\nconst AccessEasySyncModel_1 = require(\"./AccessEasySyncModel\");\nconst User_1 = require(\"./User\");\nclass UserSyncModel extends AccessEasySyncModel_1.AccessEasySyncModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncModel = UserSyncModel;\nUserSyncModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncPartialModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst User_1 = require(\"./User\");\nclass UserSyncPartialModel extends shared_1.EasySyncPartialModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncPartialModel = UserSyncPartialModel;\nUserSyncPartialModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncPartialModel.js.map","export default \"img/settings.png\";","module.exports = __webpack_public_path__ + \"html/menu.html\";","module.exports = __webpack_public_path__ + \"html/level.html\";","export default \"img/single_coin_fall_on_concrete_.mp3\";","module.exports = __webpack_public_path__ + \"html/end.html\";","module.exports = __webpack_public_path__ + \"html/settingsSite.html\";","module.exports = __webpack_public_path__ + \"html/tutorialSite.html\";","module.exports = __webpack_public_path__ + \"html/settings.html\";","module.exports = __webpack_public_path__ + \"html/credits.html\";","module.exports = __webpack_public_path__ + \"html/privacyPolicy.html\";","module.exports = __webpack_public_path__ + \"html/impressum.html\";","module.exports = __webpack_public_path__ + \"html/contactSite.html\";","export default __webpack_public_path__ + \"index.css\";","import {AccessEasySyncModel} from \"cordova-sites-user-management/dist/shared\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\n\nexport class LevelData extends AccessEasySyncModel{\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"words\"] = BaseDatabase.TYPES.STRING;\n columns[\"positions\"] = BaseDatabase.TYPES.STRING;\n columns[\"renderer\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"lang\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"difficulty\"] = BaseDatabase.TYPES.INTEGER;\n return columns;\n }\n\n static async getNextLevelData(renderer){\n debugger;\n }\n}\nBaseDatabase.addModel(LevelData);","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelData} from \"../../LevelData\";\n\nexport class Setup1000000002000 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelData, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","import {Helper} from \"js-helper/dist/shared/Helper\";\n\nexport class TemplateContainer{\n constructor(leafTemplate, parentTemplate, rowTemplate, triangleTemplate, columnTemplate){\n this.leafTemplate = leafTemplate;\n this.parentTemplate = parentTemplate;\n this.rowTemplate = rowTemplate;\n this.triangleTemplate = triangleTemplate;\n this.columnTemplate = columnTemplate;\n }\n\n copyLeafTemplate()\n {\n return this.leafTemplate.cloneNode(true);\n }\n\n copyParentTemplate()\n {\n return this.parentTemplate.cloneNode(true);\n }\n\n copyRowTemplate()\n {\n return this.rowTemplate.cloneNode(true);\n }\n\n copyTriangleTemplate()\n {\n return this.triangleTemplate.cloneNode(true);\n }\n\n copyColumnTemplate(){\n return this.columnTemplate.cloneNode(true);\n }\n}","\nexport class Segment{\n constructor(element){\n this.rotation = 0;\n this.element = element;\n this.parent = null;\n }\n\n getCurrentRotations(rotations){\n return rotations;\n }\n\n sameAs(otherSegment){\n return false;\n }\n\n setParent(parent)\n {\n this.parent = parent;\n }\n \n getLevel()\n {\n if (this.parent!==null)\n {\n return this.parent.getLevel();\n }\n }\n\n canRotate(){\n return false;\n }\n\n isSolved(){\n return (this.rotation === 0);\n }\n \n async rotate(){\n return Promise.resolve();\n };\n\n _updateElement(){};\n\n applyRotations(rotations){\n return rotations;\n }\n\n applyLocks(locks)\n {\n return locks;\n }\n\n getCurrentLocked(lockedArray){\n return lockedArray;\n }\n\n getElement()\n {\n return this.element;\n }\n}\n","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class LeafSegment extends Segment {\n\n constructor(element, leaf) {\n super(element);\n this.leaf = 'A';\n if (Helper.isNotNull(leaf)) {\n this.setLeaf(leaf);\n }\n }\n\n sameAs(otherSegment) {\n // debugger;\n return (otherSegment instanceof LeafSegment && otherSegment.leaf === this.leaf);\n }\n\n setLeaf(leaf) {\n this.leaf = leaf;\n }\n\n _updateElement() {\n ViewHelper.removeAllChildren(this.element.querySelector(\".leaf-element\")).appendChild(document.createTextNode(this.leaf));\n }\n}","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ParentSegment extends Segment {\n static initListener() {\n window.addEventListener(\"mousedown\", (e) => {\n // console.log(\"mousedown\");\n ParentSegment.mouseDownTarget = e.target;\n ParentSegment.clickPosition = {x: e.pageX, y: e.pageY};\n });\n window.addEventListener(\"mouseup\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n\n window.addEventListener(\"touchstart\", (e) => {\n if (e.targetTouches.length === 1) {\n ParentSegment.mouseDownTarget = e.targetTouches[0].target;\n ParentSegment.clickPosition = {x: e.targetTouches[0].pageX, y: e.targetTouches[0].pageY};\n }\n });\n window.addEventListener(\"touchend\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n }\n\n setIsRotatable(rotatable) {\n this.rotatable = rotatable;\n this._updateElement();\n }\n\n constructor(element) {\n super(element);\n this.children = [];\n this.class = \"rotate-0\";\n this.rotatable = true;\n\n this.userRotationDelta = 100;\n this.lastUserRotation = 0;\n\n this.touchendListener = (e) => {\n let now = new Date().getTime();\n\n let target = null;\n let position = null;\n\n if (e.changedTouches.length >= 1) {\n target = document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY);\n position = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY};\n }\n if (target != null && e.targetTouches.length === 0 && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(target)) {\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, target, ParentSegment.clickPosition, position);\n // console.log(\"touchendListener stopped event\", e);\n\n this.lastUserRotation = new Date().getTime();\n }\n };\n this.mouseupListener = (e) => {\n let now = new Date().getTime();\n\n // console.log(\"mouseup\", ParentSegment.mouseDownTarget);\n if (ParentSegment.mouseDownTarget !== null && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(e.target)) {\n let position = {x: e.pageX, y: e.pageY};\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, e.target, ParentSegment.clickPosition, position);\n // console.log(\"mouseupListener stopped event\", e);\n this.lastUserRotation = new Date().getTime();\n }\n };\n }\n\n canRotate() {\n return (this.rotatable && !this.getLevel().getHasWon());\n }\n\n async rotate(firstElem, secondElem, firstPosition, secondPosition) {\n const timeout = 250;\n const clickTolerance = 5;\n\n let rotationDirection = 1;\n if (Helper.isNotNull(secondElem) && Helper.isNotNull(firstElem) &&\n (Helper.isNull(firstPosition) || Helper.isNull(secondPosition) ||\n Math.abs(firstPosition.x - secondPosition.x) > clickTolerance ||\n Math.abs(firstPosition.y - secondPosition.y) > clickTolerance)) {\n\n let firstIndex = -1;\n let secondIndex = -1;\n let rotationIndexes = [0, 1, 3, 2];\n for (let i = 0; i < this.children.length; i++) {\n if (this.children[rotationIndexes[i]].element === firstElem || this.children[rotationIndexes[i]].element.contains(firstElem)) {\n firstIndex = (i + this.rotation / 90) % 4;\n }\n if (this.children[rotationIndexes[i]].element === secondElem || this.children[rotationIndexes[i]].element.contains(secondElem)) {\n secondIndex = (i + this.rotation / 90) % 4;\n }\n }\n\n if (firstIndex >= 0 && secondIndex >= 0) {\n if (firstIndex === 2 && (secondIndex === 0 || secondIndex === 1)\n || firstIndex === 1 && (secondIndex === 0 || secondIndex === 3)\n || (firstIndex === 0 && secondIndex === 3)\n || (firstIndex === 3 && secondIndex === 2)) {\n rotationDirection = -1;\n }\n }\n }\n\n if (this.canRotate()) {\n this.rotation += 360 + 90 * rotationDirection;\n this.rotation %= 360;\n\n let currentRotation = this.rotation;\n\n this._updateRotationClass();\n this.element.classList.add(\"rotating\");\n if (rotationDirection === -1) {\n this.element.classList.add(\"reverse\");\n }\n\n let delayPromise = new Promise(function (resolve) {\n setTimeout(resolve, timeout);\n }).then(() => {\n if (this.rotation === currentRotation) {\n this.element.classList.remove(\"rotating\");\n this.element.classList.remove(\"reverse\");\n }\n });\n this.getLevel().checkHasWon(delayPromise);\n return delayPromise;\n }\n }\n\n sameAs(otherSegment) {\n if (!(otherSegment instanceof ParentSegment) || otherSegment.children.length !== this.children.length) {\n return false;\n }\n for (let i = 0; i < this.children.length; i++) {\n if (!this.children[i].sameAs(otherSegment.children[i])) {\n return false;\n }\n }\n return true;\n }\n\n applyRotations(rotations) {\n this.rotation = rotations[0];\n\n if (isNaN(this.rotation)) {\n this.rotation = 0;\n }\n\n rotations.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n applyLocks(locks) {\n this.rotatable = (locks[0] !== false);\n locks.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n getCurrentRotations(rotations) {\n rotations.push(this.rotation);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n locked.push(this.rotatable);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n isSolved(checkChildren) {\n checkChildren = Helper.nonNull(checkChildren, true);\n if (checkChildren) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n if (!this.children[i].isSolved()) {\n return false;\n }\n }\n }\n return (this.rotation === 0 || (\n this.children[0].sameAs(this.children[3]) && this.children[1].sameAs(this.children[2]) && (\n this.rotation === 180 || this.children[0].sameAs(this.children[1]))))\n }\n\n setChildren(children) {\n this.children = [];\n for (let i = 0, n = children.length; i < n; i++) {\n this.addChild(children[i]);\n }\n }\n\n addChild(child) {\n this.children.push(child);\n child.setParent(this);\n this._updateElement();\n }\n\n _updateRotationClass() {\n // this.style.transform = \"rotate(\"+this.rotation+\"deg)\";\n this.element.classList.remove(this.class);\n this.class = \"rotate-\" + this.rotation;\n if (this.class === \"rotate-0\") {\n this.class = \"rotate-360\";\n }\n this.element.classList.add(this.class);\n }\n\n _updateElement() {\n let layer = this._getLayer();\n if (layer >= 2) {\n this.element.classList.add(\"layer-\" + layer);\n }\n\n if (!this.rotatable) {\n this.element.classList.add(\"locked\");\n }\n\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n this.element.removeEventListener(\"mouseup\", this.mouseupListener);\n this.element.removeEventListener(\"touchend\", this.touchendListener);\n\n this.element.addEventListener(\"mouseup\", this.mouseupListener);\n this.element.addEventListener(\"touchend\", this.touchendListener);\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n if (i % 2 === 1 && this.children.length - 1 !== i) {\n childContainer.appendChild(document.createElement(\"br\"));\n }\n }\n }\n\n _getLayer() {\n if (this.children.length >= 1 && this.children[0] && this.children[0] instanceof ParentSegment) {\n return this.children[0]._getLayer() + 1;\n }\n return 1;\n }\n}\n\nParentSegment.initListener();\n","import {LeafSegment} from \"../Segment/LeafSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {Random} from \"js-helper\";\n\nexport class Level {\n constructor(templateContainer) {\n this.rootSegment = null;\n this.words = [];\n this.startRotations = [];\n this.templateContainer = templateContainer;\n\n this.levelData = null;\n\n this.hasWon = false;\n this.id = null;\n\n this.saveAsCurrentAfterCheckWon = true;\n\n this.wonResolver = null;\n this.giveUpResolver = null;\n\n this._shakeLeafs = true;\n this._shakeLeafsTimeout = null;\n this._lastRotation = 0;\n\n this.wonPromise = new Promise((resolve, reject) => {\n this.wonResolver = resolve;\n this.giveUpResolver = reject;\n });\n\n this.segmentClickedListener = () => {\n // console.log(\"clicked\")\n };\n }\n\n getLevelData() {\n return this.levelData;\n }\n\n setLevelData(levelData) {\n this.levelData = levelData;\n }\n\n async saveAsCurrentLevel() {\n let rotations = this.getCurrentRotations();\n let locked = this.getCurrentLocked();\n await NativeStoragePromise.setItem(\"currentLevel\", JSON.stringify({\n \"id\": this.id,\n \"rotations\": rotations,\n \"locks\": locked\n }));\n }\n\n getCurrentLocked() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentLocked([]);\n }\n return [];\n }\n\n getCurrentRotations() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentRotations([]);\n }\n return [];\n }\n\n setLocks(locks) {\n if (this.rootSegment !== null) {\n this.rootSegment.applyLocks(locks);\n }\n }\n\n setId(id) {\n this.id = id;\n }\n\n getId() {\n return this.id;\n }\n\n getLevel() {\n return this;\n }\n\n setRootSegment(rootSegment) {\n this.rootSegment = rootSegment;\n this.rootSegment.setParent(this);\n if (this.startRotations) {\n this.applyRotations();\n }\n }\n\n setWords(words) {\n this.words = [];\n for (let i = 0, n = words.length; i < n; i++) {\n this.words.push(words[i].replace(/ß/g, \"ẞ\").toUpperCase());\n }\n }\n\n setStartRotations(rotations) {\n this.startRotations = rotations;\n }\n\n applyRotations(rotations) {\n if (this.rootSegment) {\n rotations = Helper.nonNull(rotations, this.startRotations);\n this.rootSegment.applyRotations(rotations);\n }\n }\n\n getHasWon() {\n return this.hasWon;\n }\n\n checkHasWon(delayPromise) {\n if (this.rootSegment.isSolved()) {\n this.hasWon = true;\n const self = this;\n Promise.resolve(delayPromise).then(() => {\n self.wonResolver(true);\n });\n return true;\n }\n if (this.saveAsCurrentAfterCheckWon) {\n this.saveAsCurrentLevel();\n }\n return false;\n }\n\n setSaveAsCurrentAfterCheckWon(shouldSave){\n this.saveAsCurrentAfterCheckWon = (shouldSave === true);\n }\n\n getWonPromise() {\n return this.wonPromise;\n }\n\n getRootSegment() {\n return this.rootSegment;\n }\n\n createSegments() {\n };\n\n getRotatableSegments() {\n return Level._getRotatableSegmentsFrom(this.rootSegment);\n }\n\n segmentClicked(segment) {\n if (this.segmentClickedListener) {\n this.segmentClickedListener(segment);\n }\n\n this._lastRotation = new Date().getTime();\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs) {\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(5000) + 25000);\n }\n }\n\n setSegmentClickedListener(listener) {\n this.segmentClickedListener = listener;\n }\n\n getLeafSegments() {\n return Level._getLeafSegmentsFrom(this.rootSegment);\n }\n\n static _getRotatableSegmentsFrom(segment) {\n let rotatable = [];\n if (segment.canRotate()) {\n rotatable.push(segment);\n }\n if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n rotatable.push.apply(rotatable, Level._getRotatableSegmentsFrom(segment.children[i]));\n }\n }\n return rotatable;\n }\n\n shakeLeafs() {\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs && !this.hasWon) {\n\n const leafs = this.getLeafSegments();\n if (leafs.length > 0) {\n const index = Random.getIntRandom(leafs.length - 1);\n const leaf = leafs[index];\n\n leaf.getElement().classList.add(\"shake\");\n setTimeout(() => {\n leaf.getElement().classList.remove(\"shake\");\n }, Random.getIntRandom(350) + 650);\n }\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(2000) + 5000);\n }\n }\n\n static _createLeafsForWord(word, leafSegmentTemplate) {\n let leafSegments = [];\n for (let i = 0, n = word.length; i < n; i++) {\n leafSegments.push(new LeafSegment(leafSegmentTemplate.cloneNode(true), word.charAt(i)));\n }\n return leafSegments;\n }\n\n static _getLeafSegmentsFrom(segment) {\n let leafs = [];\n if (segment instanceof LeafSegment) {\n leafs.push(segment);\n } else if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n leafs.push(...Level._getLeafSegmentsFrom(segment.children[i]));\n }\n }\n return leafs;\n }\n}\n","import {ParentSegment} from \"./ParentSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class RowSegment extends ParentSegment{\n constructor(element) {\n super(element);\n this.rotatable = false;\n }\n\n applyRotations(rotations)\n {\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentRotations(rotations){\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n applyLocks(locks) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class RowLevel extends Level {\n constructor(container, wordLength) {\n super(container);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 2 && this.words[0].length >= this.wordLength && this.words[1].length >= this.wordLength) {\n let leafsWordOne = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n let leafsWordTwo = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0, n = this.wordLength / 2; i < n; i++) {\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(leafsWordOne[2 * i]);\n parent.addChild(leafsWordOne[2 * i + 1]);\n parent.addChild(leafsWordTwo[2 * i]);\n parent.addChild(leafsWordTwo[2 * i + 1]);\n rootSegment.addChild(parent);\n }\n // rootSegment.applyRotations(this.startRotations);\n this.setRootSegment(rootSegment)\n }\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class SimpleLevel extends RowLevel{\n constructor(container) {\n super(container, 6);\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel8 extends RowLevel{\n constructor(container) {\n super(container, 8);\n }\n}\n","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel10 extends RowLevel{\n constructor(container) {\n super(container, 10);\n }\n}\n","import {RowSegment} from \"./RowSegment\";\n\nexport class TriangleSegment extends RowSegment{\n\n}","import {RowSegment} from \"../Segment/RowSegment\";\nimport {Level} from \"./Level\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {TriangleSegment} from \"../Segment/TriangleSegment\";\n\nexport class SixWordsRowLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 6 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.words[4].length >= this.wordLength &&\n this.words[5].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n leafsWords[4] = Level._createLeafsForWord(this.words[4], this.templateContainer.copyLeafTemplate());\n leafsWords[5] = Level._createLeafsForWord(this.words[5], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[4] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[5] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4*i]);\n parents[0].addChild(leafsWords[0][4*i+1]);\n parents[0].addChild(leafsWords[1][4*i]);\n parents[0].addChild(leafsWords[1][4*i+1]);\n\n parents[1].addChild(leafsWords[0][4*i+2]);\n parents[1].addChild(leafsWords[0][4*i+3]);\n parents[1].addChild(leafsWords[1][4*i+2]);\n parents[1].addChild(leafsWords[1][4*i+3]);\n\n parents[2].addChild(leafsWords[2][4*i]);\n parents[2].addChild(leafsWords[2][4*i+1]);\n parents[2].addChild(leafsWords[3][4*i]);\n parents[2].addChild(leafsWords[3][4*i+1]);\n\n parents[3].addChild(leafsWords[2][4*i+2]);\n parents[3].addChild(leafsWords[2][4*i+3]);\n parents[3].addChild(leafsWords[3][4*i+2]);\n parents[3].addChild(leafsWords[3][4*i+3]);\n\n parents[4].addChild(leafsWords[4][4*i]);\n parents[4].addChild(leafsWords[4][4*i+1]);\n parents[4].addChild(leafsWords[5][4*i]);\n parents[4].addChild(leafsWords[5][4*i+1]);\n\n parents[5].addChild(leafsWords[4][4*i+2]);\n parents[5].addChild(leafsWords[4][4*i+3]);\n parents[5].addChild(leafsWords[5][4*i+2]);\n parents[5].addChild(leafsWords[5][4*i+3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n let triangle = new TriangleSegment(this.templateContainer.copyTriangleTemplate());\n if (i % 2 === 0) {\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[4]);\n rowSegment.addChild(parents[5]);\n\n triangle.addChild(parent);\n triangle.addChild(rowSegment);\n\n triangle.getElement().classList.add(\"type-1\");\n }\n else {\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[0]);\n rowSegment.addChild(parents[1]);\n\n triangle.addChild(rowSegment);\n triangle.addChild(parent);\n\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n parent.addChild(parents[4]);\n parent.addChild(parents[5]);\n\n triangle.getElement().classList.add(\"type-2\");\n }\n rootSegment.addChild(triangle);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel8 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel12 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class FourWordsLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4 * i]);\n parents[0].addChild(leafsWords[0][4 * i + 1]);\n parents[0].addChild(leafsWords[1][4 * i]);\n parents[0].addChild(leafsWords[1][4 * i + 1]);\n\n parents[1].addChild(leafsWords[0][4 * i + 2]);\n parents[1].addChild(leafsWords[0][4 * i + 3]);\n parents[1].addChild(leafsWords[1][4 * i + 2]);\n parents[1].addChild(leafsWords[1][4 * i + 3]);\n\n parents[2].addChild(leafsWords[2][4 * i]);\n parents[2].addChild(leafsWords[2][4 * i + 1]);\n parents[2].addChild(leafsWords[3][4 * i]);\n parents[2].addChild(leafsWords[3][4 * i + 1]);\n\n parents[3].addChild(leafsWords[2][4 * i + 2]);\n parents[3].addChild(leafsWords[2][4 * i + 3]);\n parents[3].addChild(leafsWords[3][4 * i + 2]);\n parents[3].addChild(leafsWords[3][4 * i + 3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n rootSegment.addChild(parent);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel8 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel12 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {RowSegment} from \"./RowSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ColumnSegment extends RowSegment{\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n\n // constructor(element) {\n // super(element);\n // this.rotatable = false;\n // }\n //\n // applyRotations(rotations)\n // {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].applyRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentRotations(rotations){\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].getCurrentRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentLocked(locked) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locked = this.children[i].getCurrentLocked(locked);\n // }\n // return locked;\n // }\n //\n // applyLocks(locks) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locks = this.children[i].applyLocks(locks);\n // }\n // return locks;\n // }\n //\n // _updateElement() {\n // const childContainer = this.element.querySelector(\".child-container\");\n // ViewHelper.removeAllChildren(childContainer);\n //\n // this._updateRotationClass();\n //\n // const self = this;\n // this.element.onclick = function (e) {\n // self.rotate();\n // e.stopPropagation();\n // };\n //\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // this.children[i]._updateElement();\n // childContainer.appendChild(this.children[i].getElement());\n // }\n // }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {ColumnSegment} from \"../Segment/ColumnSegment\";\n\nexport class BigSegmentsLevels extends Level{\n constructor(templateContainer, wordLength, bigSegmentPositions) {\n super(templateContainer);\n this.wordLength = wordLength;\n this.bigSegmentPositions = bigSegmentPositions;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.wordLength >= 4\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 2; i++) {\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][2 * i]);\n parents[0].addChild(leafsWords[0][2 * i + 1]);\n parents[0].addChild(leafsWords[1][2 * i]);\n parents[0].addChild(leafsWords[1][2 * i + 1]);\n\n parents[1].addChild(leafsWords[2][2 * i]);\n parents[1].addChild(leafsWords[2][2 * i + 1]);\n parents[1].addChild(leafsWords[3][2 * i]);\n parents[1].addChild(leafsWords[3][2 * i + 1]);\n\n let parentSegment =null;\n if (this.bigSegmentPositions.indexOf(i) !== -1){\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[2].addChild(leafsWords[0][2 * i + 2]);\n parents[2].addChild(leafsWords[0][2 * i + 3]);\n parents[2].addChild(leafsWords[1][2 * i + 2]);\n parents[2].addChild(leafsWords[1][2 * i + 3]);\n\n parents[3].addChild(leafsWords[2][2 * i + 2]);\n parents[3].addChild(leafsWords[2][2 * i + 3]);\n parents[3].addChild(leafsWords[3][2 * i + 2]);\n parents[3].addChild(leafsWords[3][2 * i + 3]);\n\n parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[2]);\n parentSegment.addChild(parents[1]);\n parentSegment.addChild(parents[3]);\n i++;\n }\n else{\n parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[1]);\n }\n\n rootSegment.addChild(parentSegment);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class SimpleFourWordsLevel extends BigSegmentsLevels{\n constructor(templateContainer, wordLength, bigSegmentPosition) {\n super(templateContainer, wordLength, [bigSegmentPosition]);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_0 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 0);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_1 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 1);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_2 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 2);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_3 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 3);\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_1_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [1,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_2 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,2]);\n }\n}\n\n","import {SimpleLevel} from \"./SimpleLevel\";\nimport {RowLevel8} from \"./RowLevel8\";\nimport {RowLevel10} from \"./RowLevel10\";\nimport {SixWordsRowLevel8} from \"./SixWordsRowLevel8\";\nimport {SixWordsRowLevel12} from \"./SixWordsRowLevel12\";\nimport {FourWordsLevel8} from \"./FourWordsLevel8\";\nimport {FourWordsLevel12} from \"./FourWordsLevel12\";\nimport {SimpleFourWordsLevel10_0} from \"./SimpleFourWordsLevel10_0\";\nimport {SimpleFourWordsLevel10_1} from \"./SimpleFourWordsLevel10_1\";\nimport {SimpleFourWordsLevel10_2} from \"./SimpleFourWordsLevel10_2\";\nimport {SimpleFourWordsLevel10_3} from \"./SimpleFourWordsLevel10_3\";\nimport {TwoSegmentFourWordsLevel10_0_3} from \"./TwoSegmentFourWordsLevel10_0_3\";\nimport {TwoSegmentFourWordsLevel10_1_3} from \"./TwoSegmentFourWordsLevel10_1_3\";\nimport {TwoSegmentFourWordsLevel10_0_2} from \"./TwoSegmentFourWordsLevel10_0_2\";\nimport {Level} from \"./Level\";\n\nexport class LevelHelper {\n public static readonly types = {\n 20: SimpleLevel,\n 40: RowLevel8,\n 60: RowLevel10,\n 80: SimpleFourWordsLevel10_0,\n 81: SimpleFourWordsLevel10_1,\n 82: SimpleFourWordsLevel10_2,\n 83: SimpleFourWordsLevel10_3,\n 100: SixWordsRowLevel8,\n 110: TwoSegmentFourWordsLevel10_0_3,\n 111: TwoSegmentFourWordsLevel10_1_3,\n 112: TwoSegmentFourWordsLevel10_0_2,\n 120: FourWordsLevel8,\n 140: SixWordsRowLevel12,\n 160: FourWordsLevel12,\n };\n static setLevelType(typeId, level) {\n LevelHelper.types[typeId] = level;\n }\n\n static getLevelClass(type) {\n return LevelHelper.types[type];\n }\n\n static inflateLevel(levelData, templateContainer): Level {\n let level = new (LevelHelper.types[levelData[\"renderer\"]])(templateContainer);\n level.setWords(JSON.parse(levelData[\"words\"].replace(/"/g, '\"')));\n level.setId(levelData[\"id\"]);\n level.setLevelData(levelData);\n\n levelData[\"positions\"] = JSON.parse(levelData[\"positions\"]);\n for (let i = 0, n = levelData[\"positions\"].length; i < n; i++) {\n if (levelData[\"positions\"][i] <= 4) {\n levelData[\"positions\"][i] = 90 * levelData[\"positions\"][i];\n }\n }\n\n level.setStartRotations(levelData[\"positions\"]);\n return level;\n }\n}\n","const view = require(\"../../html/sites/end.html\");\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class EndSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n","import {BaseModel} from \"cordova-sites-database/dist/BaseModel\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {SelectQueryBuilder} from \"typeorm\";\n\nexport class LevelPlayed extends BaseModel {\n\n levelData: LevelData;\n played: boolean;\n\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"played\"] = {type: BaseDatabase.TYPES.BOOLEAN, default: true};\n return columns;\n }\n\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"levelData\"] = {\n target: LevelData.getSchemaName(),\n type: \"one-to-one\",\n joinColumn: true,\n // cascade: true,\n };\n return relations;\n }\n\n static async setPlayed(levelData, played?){\n played = Helper.nonNull(played, true);\n let levelPlayed = new LevelPlayed();\n levelPlayed.levelData = levelData;\n levelPlayed.played = played;\n\n return await levelPlayed.save();\n }\n\n static async getNextLevelData(renderer){\n let qb = >await this._database.createQueryBuilder(LevelData);\n\n qb = qb.select(\"COUNT(*) as count, difficulty\")\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .groupBy(\"difficulty\")\n .orderBy(\"difficulty, LevelData.id\");\n\n let countRes = await qb.getRawMany();\n\n let difficulty = null;\n let offset = null;\n\n if (!countRes.some(res => {\n if (res[\"count\"] > 0){\n difficulty = res[\"difficulty\"];\n offset = Math.floor(Math.random() * Math.floor(res[\"count\"]));\n return true;\n }\n return false;\n })){\n return null;\n }\n\n qb = >await this._database.createQueryBuilder(LevelData);\n qb = qb\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"difficulty = \"+difficulty)\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .orderBy(\"LevelData.id\")\n .limit(1)\n .offset(offset);\n\n return await qb.getOne();\n }\n}\nBaseDatabase.addModel(LevelPlayed);\n","import {Level} from \"../wordrotator/Level/Level\";\n\nconst helpIcon = require(\"../../img/help.png\").default;\nconst view = require(\"../../html/sites/level.html\");\nconst coinSound = require(\"../../sound/single_coin_fall_on_concrete_.mp3\").default;\n\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {EndSite} from \"./EndSite\";\n\nimport {\n MenuAction,\n Toast,\n ScaleHelper,\n Matomo,\n NativeStoragePromise,\n} from \"cordova-sites/dist/client\";\n\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class LevelSite extends MenuSite {\n\n public static readonly RENDERER_TYPES = [20, 40, 60, 80, 81, 82, 83, 100, 110, 111, 112, 120, 140, 160];\n public static readonly TUTORIAL = {\n FIRST_LEVEL: 67,\n SECOND_LEVEL: 15,\n BIG_SEGMENT_LEVEL: 1921\n };\n\n private coinAction: MenuAction;\n private levelCounterAction: MenuAction;\n private levelCounter: number;\n private levelScaler: () => void;\n private wonParams: { aborted: boolean; coinCounterTimer: any };\n private coinPromise: Promise;\n private continueButtonScaler: () => Promise;\n private wonTextScaler: () => Promise;\n private wonText: HTMLElement;\n private templateContainer: TemplateContainer;\n private coinTemplate: HTMLElement;\n private coinContainer: HTMLElement;\n private level: Level;\n\n constructor(siteManager) {\n super(siteManager, view);\n // this.getNavbarFragment().setBackgroundImage(null);\n }\n\n async onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n\n let coinAction = new MenuAction(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n coinAction._shouldTranslate = false;\n coinAction.setLiClass(\"coin-counter img\");\n navbar.addAction(coinAction);\n this.coinAction = coinAction;\n\n let levelCounterAction = new MenuAction(Helper.nonNull(this.levelCounter, \"1\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n levelCounterAction._shouldTranslate = false;\n levelCounterAction.setLiClass(\"level-counter\");\n navbar.addAction(levelCounterAction);\n this.levelCounterAction = levelCounterAction;\n\n let helpAction = new MenuAction(\"\", () => {\n this.help();\n }, MenuAction.SHOW_ALWAYS, 900);\n helpAction._shouldTranslate = false;\n helpAction._icon = helpIcon;\n helpAction.setLiClass(\"help-action show-while-playing\");\n navbar.addAction(helpAction);\n\n return navbar;\n }\n\n async onConstruct(args) {\n this.levelCounter = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n // this.levelCounter = 9999;\n this.levelScaler = () => {\n };\n this.wonParams = {\n aborted: false,\n coinCounterTimer: null,\n };\n this.coinPromise = Promise.resolve();\n\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: ((await NativeStoragePromise.getItem(\"play-sound\", \"1\")) !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n soundManager.resume(SoundManager.CHANNELS.MUSIC);\n\n return super.onConstruct(args);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.addEventListener(\"click\", () => {\n continueButton.style.opacity = 0;\n this.nextLevel();\n });\n\n let wonText = this.findBy(\"#won-text\");\n\n let scaleHelper = new ScaleHelper();\n this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2);\n this.wonTextScaler = await scaleHelper.scaleToFull(wonText, wonText.parentElement, false, false, 2, null, 5);\n this.wonText = wonText;\n this.wonText.style.fontSize = \"0\";\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n this.coinTemplate = this.findBy(\"#coin-template\");\n this.coinContainer = this.findBy(\"#coin-container\");\n\n this.coinTemplate.id = null;\n ViewHelper.removeAllChildren(this.coinContainer);\n\n // this.findBy(\"#help-button\").addEventListener(\"click\", () => {\n // this.help();\n // });\n await this.loadLastLevel();\n\n return res;\n }\n\n async loadLastLevel() {\n try {\n let currentLevelInfo = await NativeStoragePromise.getItem(\"currentLevel\");\n if (Helper.isNotNull(currentLevelInfo)) {\n currentLevelInfo = JSON.parse(currentLevelInfo);\n\n let levelData = await LevelData.findById(currentLevelInfo[\"id\"]);\n\n if (Helper.isNull(levelData)) {\n return this.nextLevel();\n }\n\n let level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n level.setStartRotations(currentLevelInfo[\"rotations\"]);\n\n level.getWonPromise().then(() => {\n this.levelWon(level);\n });\n\n level.createSegments();\n level.setLocks(currentLevelInfo[\"locks\"]);\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleTo(1, levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LoadLastLevel\"]);\n this.level.checkHasWon();\n return;\n }\n } catch (e) {\n console.error(e);\n }\n return this.nextLevel();\n }\n\n startEndSite() {\n this.startSite(EndSite);\n this.finish();\n }\n\n updateLevelCounter() {\n this.levelCounterAction.setName(this.levelCounter);\n if (this.levelCounter >= 10 && this.levelCounter <= 99) {\n this.levelCounterAction.setLiClass(\"num-10 level-counter\");\n } else if (this.levelCounter >= 100 && this.levelCounter <= 999) {\n this.levelCounterAction.setLiClass(\"num-100 level-counter\");\n } else if (this.levelCounter >= 1000) {\n this.levelCounterAction.setLiClass(\"num-1000 level-counter\");\n } else {\n this.levelCounterAction.setLiClass(\"level-counter\");\n }\n }\n\n async nextLevel() {\n this.showLoadingSymbol();\n try {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n\n if (Helper.isNull(levelData)) {\n this.startEndSite();\n return;\n }\n\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n //Waiting for Level to be done\n if (this.level && level.id === this.level.id) {\n console.log(\"Level is the same as before! reload!\");\n await new Promise((resolve) => setTimeout(resolve, 50));\n // return;\n debugger;\n return this.nextLevel();\n }\n\n level.getWonPromise().then(async () => {\n await this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n\n this._view.classList.remove('won');\n this.wonText.style.fontSize = \"0\";\n this.removeLoadingSymbol();\n\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n this.updateLevelCounter();\n\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n\n this.wonParams.aborted = true;\n clearTimeout(this.wonParams.coinCounterTimer);\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"NextLevel\", \"Level Number Normal\", this.levelCounter]);\n\n this.level.checkHasWon();\n\n return this.tutorial();\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n this.startEndSite();\n }\n }\n\n async onStart(args) {\n this.setTitle(\"WR\");\n\n Matomo.update(\"Level Sites\");\n let res = super.onStart(args);\n\n if (this.levelCounterAction) {\n this.updateLevelCounter();\n }\n this.levelScaler();\n\n //TODO Sound\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: (await NativeStoragePromise.getItem(\"play-sound\", \"1\") !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n await this.tutorial();\n\n return res;\n }\n\n async levelWon(level) {\n try {\n const savePromise = LevelPlayed.setPlayed(level.getLevelData());\n\n // savePromise.then((r) => console.log(\"levelSaved!\", r));\n\n this.levelCounter++;\n await NativeStoragePromise.setItem(\"levelCounter\", this.levelCounter);\n await NativeStoragePromise.remove(\"currentLevel\");\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.style.transition = \"none\";\n continueButton.style.opacity = 0;\n\n //Todo richtiges Element aufrufen?\n this._view.classList.add('won');\n ViewHelper.removeAllChildren(this.coinContainer);\n let coinsPerLevel = await NativeStoragePromise.getItem(\"coinsPerLevel\", 5);\n\n let coinsBefore = 0;\n\n let soundManager = SoundManager.getInstance();\n let audioOptions = soundManager.get(SoundManager.CHANNELS.SOUND);\n\n this.coinPromise = this.coinPromise.then(async () => {\n coinsBefore = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n await NativeStoragePromise.setItem(\"coins\", coinsBefore + parseInt(coinsPerLevel));\n }).then(async () => {\n return Promise.all([new Promise((r) => {\n setTimeout(() => {\n //TODO animationen einbauen\n continueButton.style.opacity = 1;\n r();\n }, 500)\n }),\n audioOptions.loadedPromise.catch(e => {\n console.error(e)\n })\n ]);\n });\n\n this.wonParams.aborted = false;\n\n for (let i = 0; i < coinsPerLevel; i++) {\n let coinElem = this.coinTemplate.cloneNode(true);\n this.coinContainer.appendChild(coinElem);\n this.coinPromise = this.coinPromise.then(() => {\n return new Promise(r => {\n let timeout = 350;\n if (!this.wonParams.aborted) {\n //TODO animationen einbauen\n\n coinElem.style.opacity = \"1\";\n soundManager.play(SoundManager.CHANNELS.SOUND);\n\n this.wonParams.coinCounterTimer = setTimeout(() => {\n if (!this.wonParams.aborted) {\n this.coinAction.setName(++coinsBefore);\n }\n }, timeout / 2);\n } else {\n r();\n }\n\n //Always do the next promise for garbage collection\n setTimeout(r, timeout);\n })\n });\n }\n\n this.coinPromise = this.coinPromise.catch((e) => {\n console.error(e)\n });\n\n this.wonTextScaler();\n this.continueButtonScaler();\n this.levelScaler();\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LevelWon\", \"Coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"))]);\n\n let leafs = level.getLeafSegments();\n leafs.forEach((leaf, i) => {\n let elem = leaf.getElement();\n elem.style.animationDelay = i * 50 + \"ms\";\n elem.classList.add(\"jump-animation\");\n })\n\n await savePromise;\n } catch (e) {\n console.error(e);\n }\n }\n\n async help() {\n let cost = await NativeStoragePromise.getItem(\"costForHelp\", 25);\n let currentCoins = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), 0));\n\n if (currentCoins >= cost) {\n currentCoins -= cost;\n await NativeStoragePromise.setItem(\"coins\", currentCoins);\n this.coinAction.setName(currentCoins);\n\n let rotatables = this.level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n this.level.saveAsCurrentLevel();\n\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n } else {\n new Toast(\"not-enough-coins\").show();\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Not enough Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n }\n }\n\n async tutorial() {\n const tutorialScale = 0.01;\n\n if (this.level.id === LevelSite.TUTORIAL.FIRST_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"1\");\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n switch (currentStep) {\n case \"1\": {\n this.level.setSegmentClickedListener(async () => {\n this._view.classList.remove(\"step-1\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"2\");\n this.tutorial();\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-1\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 2, 2);\n\n break;\n }\n case \"2\": {\n this.level.setSegmentClickedListener(() => {\n });\n this.level.getWonPromise().then(async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-2\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n this.coinPromise = this.coinPromise.then(async () => {\n new Toast(\"extra-coins-after-first-level\").show();\n await NativeStoragePromise.setItem(\"coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\")) + 50);\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n });\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-2\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.SECOND_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"3\");\n\n switch (currentStep) {\n case \"3\": {\n let scaleHelper = new ScaleHelper();\n\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let eventListener = async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-3\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"4\");\n // this.findBy(\"#help-button\").removeEventListener(\"click\", eventListener);\n this.levelScaler();\n };\n this.findBy(\".help-action\").addEventListener(\"click\", eventListener);\n\n // let textElem = this.findBy(\".tutorial-text .step-3\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"4\");\n\n switch (currentStep) {\n case \"4\": {\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let rotatableSegments = this.level.getRotatableSegments();\n let firstSegment = rotatableSegments[2];\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n firstSegment.element.appendChild(pointer);\n\n this.level.setSegmentClickedListener(async (segment) => {\n if (firstSegment === segment) {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-4\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"5\");\n this.levelScaler();\n }\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-4\");\n\n await this.levelScaler();\n // debugger;\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n }\n }\n}\n","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class MainMenuLevel extends FourWordsLevel{\n\n constructor(templateContainer) {\n super(templateContainer, 4);\n }\n\n saveAsCurrentLevel() {\n }\n\n // checkHasWon(delayPromise) {\n // }\n}","import {Matomo, MenuSite, NativeStoragePromise, ScaleHelper, Toast} from \"cordova-sites/dist/client\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelSite} from \"./LevelSite\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client\";\nimport {Level} from \"../wordrotator/Level/Level\";\n\nconst view = require(\"../../html/sites/tutorialSite.html\");\n\nexport class TutorialSite extends MenuSite {\n private templateContainer: TemplateContainer;\n\n constructor(siteManager: any) {\n super(siteManager, view);\n }\n\n async onConstruct(constructParameters: any): Promise {\n const res = super.onConstruct(constructParameters);\n await Promise.race([new SyncJob().sync([LevelData]).catch(e => console.error(e)), new Promise(async resolve => {\n let levelData = await LevelData.findById(LevelSite.TUTORIAL.FIRST_LEVEL);\n if (levelData !== null) {\n resolve();\n }\n })]);\n return res;\n }\n\n async onViewLoaded(): Promise {\n const res = super.onViewLoaded();\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n const tutorial1Container = this.findBy(\"#tutorial-1 .level-container\");\n const tutorial2Container = this.findBy(\"#tutorial-2 .level-container\");\n const tutorial3Container = this.findBy(\"#tutorial-3 .level-container\");\n\n const level1 = await this.loadLevel(LevelSite.TUTORIAL.FIRST_LEVEL);\n const level2 = await this.loadLevel(LevelSite.TUTORIAL.SECOND_LEVEL);\n const level3 = await this.loadLevel(LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL);\n\n level1.setSaveAsCurrentAfterCheckWon(false);\n level2.setSaveAsCurrentAfterCheckWon(false);\n level3.setSaveAsCurrentAfterCheckWon(false);\n\n tutorial1Container.appendChild(level1.getRootSegment().getElement());\n tutorial2Container.appendChild(level2.getRootSegment().getElement());\n tutorial3Container.appendChild(level3.getRootSegment().getElement());\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n\n let rotatableSegments = level3.getRotatableSegments();\n let pointerSegment = rotatableSegments[2];\n pointerSegment.element.appendChild(pointer);\n\n this.find(\".help-action\").addEventListener(\"click\", () => {\n TutorialSite.help(level2);\n })\n\n return res;\n }\n\n static async help(level: Level) {\n let rotatables = level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n if (rotatables.length === 0){\n return;\n }\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n }\n\n async loadLevel(id) {\n try {\n let levelData = await LevelData.findById(id);\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n level.getWonPromise().then(() => {\n console.log(\"level won!\");\n new Toast(\"you solved the tutorial level!\").show();\n //TODO\n // this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n return level;\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n // this.startEndSite();\n return null;\n }\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"tutorial\", TutorialSite);\n})\n","const view = require(\"../../html/sites/credits.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class CreditsSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"credits\", CreditsSite);\n});\n","const view = require(\"../../html/sites/privacyPolicy.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class PrivacyPolicySite extends MenuSite {\n constructor(siteManager) {\n super(siteManager,view);\n }\n\n async onViewLoaded() {\n let trackSwitch =this.findBy(\"#track-switch\");\n\n trackSwitch.addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n return super.onViewLoaded();\n }\n\n async onStart(args) {\n let trackSwitch =this.findBy(\"#track-switch\");\n trackSwitch.checked = ((await Matomo.getTrackingPromise()) === \"1\");\n\n // Matomo.update(\"Privacy Policy Sites\");\n return super.onStart(args);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"privacyPolicy\", PrivacyPolicySite);\n});\n","const view = require(\"../../html/sites/impressum.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class ImpressumSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"impressum\", ImpressumSite);\n});\n","const view = require(\"../../html/sites/contactSite.html\");\n\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Form} from \"cordova-sites/dist/client/js/Form\";\nimport {DataManager} from \"cordova-sites/dist/client/js/DataManager\";\nimport {Toast} from \"cordova-sites/dist/client/js/Toast/Toast\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class ContactSite extends MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n\n onViewLoaded() {\n let res = super.onViewLoaded();\n\n // @ts-ignore\n this.findBy(\"#contactText\").appendChild(Translator.makePersistentTranslation(\"contact text\", [__CONTACT_EMAIL__]))\n\n new Form(this.findBy(\"#contact-form\"), async values => {\n\n let result = await DataManager.send(\"contact\", values);\n if (result.success) {\n new Toast(\"the message was sent\").show();\n this.finish();\n } else {\n if (result) {\n new Toast(result.message).show();\n } else {\n new Toast(\"Es ist ein Fehler aufgetreten...\").show();\n }\n }\n });\n\n return res;\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"contact\", ContactSite);\n});\n","import {TutorialSite} from \"../Sites/TutorialSite\";\n\nconst view = require(\"../../html/fragment/settings.html\");\n\nimport {CreditsSite} from \"../Sites/CreditsSite\";\nimport {PrivacyPolicySite} from \"../Sites/PrivacyPolicySite\";\nimport {ImpressumSite} from \"../Sites/ImpressumSite\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\nimport {AbstractFragment} from \"cordova-sites/dist/client/js/Context/AbstractFragment\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LastSyncDates} from \"cordova-sites-easy-sync/dist/client/LastSyncDates\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ContactSite} from \"../Sites/ContactSite\";\n\nexport class WordRotatorSettingFragment extends AbstractFragment {\n constructor(site) {\n super(site, view);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n\n this.findBy(\"#reset-levels\").addEventListener(\"click\", async () => {\n await NativeStoragePromise.remove(\"currentLevel\");\n await NativeStoragePromise.remove(\"levelCounter\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n\n await LevelPlayed.clear();\n await LevelData.clear();\n await LastSyncDates.clear();\n });\n\n if (location.hostname.includes(\"beta\") || location.hostname.includes(\"127.0.0.1\") || location.hostname.includes(\"localhost\")) {\n // this.findBy(\"#reset-levels\").classList.remove(\"hidden\");\n }\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\")\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#track-switch\").addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.findBy(\"#tutorial-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(TutorialSite);\n });\n this.findBy(\"#credits-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(CreditsSite);\n });\n this.findBy(\"#privacy-policy-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(PrivacyPolicySite);\n });\n this.findBy(\"#contact-button\").addEventListener(\"click\", () => {\n // new Toast(\"contact site\").show();\n this.getSite().startSite(ContactSite);\n });\n this.findBy(\"#impressum-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(ImpressumSite);\n });\n // @ts-ignore\n this.findBy(\"#version-info\").innerText = __VERSION__;\n\n return res;\n }\n\n onStart(args) {\n Matomo.update(\"Settings Sites\");\n return super.onStart(args);\n }\n}\n","const view = require(\"../../html/sites/settingsSite.html\");\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\nimport {WordRotatorSettingFragment} from \"../Fragment/WordRotatorSettingFragment\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\n\nexport class SettingsSite extends MenuSite {\n\n constructor(siteManager) {\n super(siteManager, view);\n this.addFragment(\"#wordRotatorSettings\", new WordRotatorSettingFragment(this));\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"settings\", SettingsSite);\n});\n","const settingsIcon = require(\"../../img/settings.png\").default;\nconst view = require(\"../../html/sites/menu.html\");\n\nimport {App, Toast, DataManager, ScaleHelper, MenuSite} from \"cordova-sites/dist/client\";\nimport {Helper} from \"js-helper/dist/shared\";\nimport {LevelSite} from \"./LevelSite\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {MainMenuLevel} from \"../wordrotator/Level/MainMenuLevel\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client/SyncJob\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {ShareManager} from \"cordova-sites/dist/client/js/ShareManager/ShareManager\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuAction} from \"cordova-sites/dist/client/js/Context/Menu/MenuAction/MenuAction\";\nimport {SettingsSite} from \"./SettingsSite\";\n\nexport class MainMenuSite extends MenuSite {\n static app: App;\n\n private loadLevelPromise: Promise;\n private listener: () => void;\n private templateContainer: TemplateContainer;\n private randomRotateTimeout;\n\n constructor(siteManager) {\n super(siteManager, view);\n this.loadLevelPromise = new SyncJob().sync([LevelData]).catch(e => console.error(e));\n this.listener = null;\n this.getNavbarFragment().setCanGoBack(false);\n }\n\n onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n let settingsAction = new MenuAction(\"\", () => {\n this.startSite(SettingsSite);\n }, MenuAction.SHOW_ALWAYS, null, settingsIcon);\n navbar.addAction(settingsAction);\n return navbar;\n }\n\n async onViewLoaded() {\n const res = super.onViewLoaded();\n\n let playButton = this.findBy(\"#play-button\");\n playButton.addEventListener(\"click\", () => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"startButton\"]);\n this.startLevelSite();\n });\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n\n leafSegmentTemplate.id = null;\n parentSegmentTemplate.id = null;\n rowSegmentTemplate.id = null;\n triangleTemplate.id = null;\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate);\n\n //TODO?\n // if (Helper.nonNull(MainMenuSite.app._cookieClosePromise)) {\n // MainMenuSite.app._cookieClosePromise.then(() => {\n // if (this.listener) {\n // this.listener();\n // }\n // });\n // }\n\n let soundManager = SoundManager.getInstance();\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#share-button\").addEventListener(\"click\", () => {\n new ShareManager().share(Translator.getInstance().translate(\"share-text\", [window.location]));\n });\n return res;\n // this.findBy(\"#share-buttons\").appendChild(ShareManager.generateDefaultShareElement(\"https://wordrotator.silas.link\"));\n }\n\n async onStart(args) {\n // Matomo.update(\"Menu Sites\");\n let res = super.onStart(args);\n\n let level = new MainMenuLevel(this.templateContainer);\n level.setWords([\"WORD\", \"ROTA\", \"TORW\", \"ORDR\"]);\n level.createSegments();\n\n level.getWonPromise().then(() => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"levelSolved\"]);\n this.startLevelSite();\n });\n\n let segment = level.getRootSegment();\n segment._updateElement();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(segment.getElement());\n\n let rotationsSegments = level.getRotatableSegments();\n\n let randomRotationFunction = () => {\n let timeout = Math.random() * 4500 + 1500;\n this.randomRotateTimeout = setTimeout(() => {\n let indexBlocked = -1;\n let indexesNotRight = [];\n for (let i = 0; i < rotationsSegments.length; i++) {\n if (rotationsSegments[i].rotation !== 0) {\n indexesNotRight.push(i);\n if (indexesNotRight.length >= 2) {\n break;\n }\n }\n }\n if (indexesNotRight.length === 1) {\n indexBlocked = indexesNotRight[0];\n }\n\n let index = Math.floor(Math.random() * rotationsSegments.length);\n if (index === indexBlocked) {\n index = (index + 1) % rotationsSegments.length;\n }\n\n rotationsSegments[index].rotate();\n randomRotationFunction();\n }, timeout);\n };\n randomRotationFunction();\n\n this.listener = async () => {\n let playButton = this.findBy(\"#play-button\");\n let levelNumber = this.findBy(\"#level-number\");\n levelNumber.innerText = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n\n let levelSegment = this.findBy(\"#level\");\n\n let scaleHelper = new ScaleHelper();\n await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 2, 8, null, false);\n\n let levelStyle = getComputedStyle(levelSegment);\n playButton.style.width = levelStyle.getPropertyValue(\"width\");\n scaleHelper.scaleTo(0.65, playButton.children[0], playButton, null, null, null, 4, null, false);\n\n await scaleHelper.scaleTo(0.1, levelNumber.parentElement, levelNumber.parentElement.parentElement, null, null, null, 10, null, false);\n scaleHelper.scaleTo(1, levelNumber, levelNumber.parentElement, false, false, 5, null, null, false);\n };\n\n // this.listener();\n window.addEventListener(\"resize\", this.listener);\n setTimeout(this.listener, 50);\n\n //Musikbuttons update, falls in den Einstellungen umgestellt\n // let settingsManager = SettingsManager.getInstance();\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n\n return res;\n }\n\n async startLevelSite() {\n SoundManager.getInstance().resumeContext();\n\n this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n if (levelData !== null) {\n resolve();\n }\n })]));\n }\n\n onPause() {\n clearTimeout(this.randomRotateTimeout);\n window.removeEventListener(\"resize\", this.listener);\n return super.onPause();\n }\n\n // async loadLevels() {\n // try {\n // const db = await WordRotatorDb.getInstance();\n // const dateLastSync = Helper.nonNull(await db.loadDateLastSync(), 0);\n // // const dateLastSync = Helper.nonNull(localStorage.getItem(\"date-last-sync\"), 0);\n //\n // // let numberLevels = db.countLevels();\n // let newLastSync = null;\n // let maxRuns = 1;\n // let levelPromises = [];\n // for (let run = 0; run < maxRuns; run++) {\n // let res = await DataManager.load(\"wordRotator/levels\" + DataManager.buildQuery({\n // \"currentRun\": run,\n // \"dateLastSync\": dateLastSync\n // }));\n // if (!res[\"success\"]) {\n // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000).show();\n // }\n // newLastSync = null;\n // break;\n // }\n // res = res[\"result\"];\n // newLastSync = Helper.nonNull(newLastSync, res[\"currentSyncDate\"]);\n // maxRuns = res[\"maxRuns\"];\n //\n // let levels = res[\"levels\"];\n // for (let i = 0; i < levels.length; i++) {\n // let currentLevel = levels[i];\n // levelPromises.push(db.loadLevel(levels[i][\"id\"]).then(level => {\n // currentLevel[\"played\"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));\n // return currentLevel;\n // }));\n // }\n // }\n // let levels = await Promise.all(levelPromises);\n // await db.saveManyLevels(levels);\n //\n // if (newLastSync != null && newLastSync !== \"null\") {\n // await NativeStoragePromise.setItem(\"date-last-sync\", newLastSync);\n // db.saveDateLastSync(newLastSync);\n // }\n // }\n // catch(e){\n // // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000);\n // // }\n // console.error(e);\n // }\n // }\n}\n\nApp.addInitialization(app => {\n MainMenuSite.app = app;\n});\n","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelPlayed} from \"../LevelPlayed\";\n\nexport class ClientSetup1000000002001 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelPlayed, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","export default \"img/brightAndBeautifull__.mp3\";","import translationGerman from '../translations/de.json';\nimport translationEn from '../translations/en.json';\nimport {App, Translator, DataManager, Toast} from \"cordova-sites/dist/client\";\n\nimport \"cordova-sites-user-management/dist/client/js/translationInit\"\nimport \"cordova-sites/dist/client/js/translationInit\"\n\nimport {LoginSite, RegistrationSite, UserManager} from \"cordova-sites-user-management/dist/client\";\n\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {DeleteUserManagement1000000000000} from \"cordova-sites-user-management/dist/shared//migrations/DeleteUserManagement\";\nimport {SetupUserManagement1000000001000} from \"cordova-sites-user-management/dist/shared/migrations/SetupUserManagement\";\nimport {Setup1000000002000} from \"../../shared/model/migration/shared/Setup\";\nimport {SetupEasySync1000000000500} from \"cordova-sites-easy-sync/dist/client\";\nimport {MainMenuSite} from \"./Sites/MainMenuSite\";\nimport {ClientSetup1000000002001} from \"./model/migration/ClientSetup\";\nimport {EasySyncClientDb} from \"cordova-sites-easy-sync/dist/client/EasySyncClientDb\";\nimport {NavbarFragment} from \"cordova-sites/dist/client/js/Context/Menu/NavbarFragment\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\n\nimport music from \"../sound/brightAndBeautifull__.mp3\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\n\nwindow[\"JSObject\"] = Object;\n\n//Disable Google Analytics for VideoJS\nwindow[\"HELP_IMPROVE_VIDEOJS\"] = false;\n\nLoginSite.ADD_LOGIN_ACTION = false;\nRegistrationSite.ADD_REGISTRATION_ACTION = false;\n\nApp.addInitialization(async () => {\n Translator.init({\n translations: {\n \"de\": translationGerman,\n \"en\": translationEn\n },\n fallbackLanguage: \"de\",\n // markTranslations: true,\n markUntranslatedTranslations: true,\n });\n\n //Setting Title\n NavbarFragment.title = \"WordRotator\";\n\n let soundManager = SoundManager.getInstance();\n soundManager.play(SoundManager.CHANNELS.MUSIC, {\n audio: music,\n loop: true,\n volume: 0.6,\n muted: (await NativeStoragePromise.getItem(\"play-music\", \"1\") !== \"1\")\n }).catch(e => console.error(e));\n\n await UserManager.getInstance().getMe().catch(e => console.error(e));\n\n UserManager.getInstance().addLoginChangeCallback(async (isLoggedIn) => {\n if (isLoggedIn) {\n // await new SyncJob().sync([UserManager.syncParamFor(Definition), UserManager.syncParamFor(ExerciseProgress), UserManager.syncParamFor(WrongAnswer)]).catch(e => console.error(e));\n }\n });\n});\n\nDataManager._basePath = __HOST_ADDRESS__;\nDataManager.onlineCallback = isOnline => {\n if (!isOnline){\n new Toast(\"not online!\").show();\n }\n};\n\nObject.assign(BaseDatabase.CONNECTION_OPTIONS, {\n logging: [\"error\",],\n synchronize: false,\n migrationsRun: true,\n migrations: [\n DeleteUserManagement1000000000000,\n SetupEasySync1000000000500,\n SetupUserManagement1000000001000,\n Setup1000000002000,\n ClientSetup1000000002001,\n ]\n});\n\nlet app = new App();\napp.start(MainMenuSite).catch(e => console.error(e)).then(async () => {\n window[\"queryDb\"] = async (sql) => {\n // SELECT name FROM my_db.sqlite_master WHERE type='table';\n\n\n // console.log(\"DB\", EasySyncClientDb.getInstance());\n let res = await EasySyncClientDb.getInstance().rawQuery(sql);\n console.log(res);\n return res;\n }\n});\napp.ready(() => {\n console.log(\"initialisation over\", new Date());\n\n if (device.platform === \"browser\"){\n // Check that service workers are supported\n if ('serviceWorker' in navigator) {\n // Use the window load event to keep the page load performant\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('service-worker.js');\n });\n }\n }\n\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/typeorm/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDisabledDriversDummy.js","webpack:///./node_modules/typeorm/browser/driver/Query.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///../src/client.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/Table.js","webpack:///./node_modules/typeorm/browser/util/OrmUtils.js","webpack:///./node_modules/js-helper/dist/shared/Helper.js","webpack:///./node_modules/typeorm/browser/subscriber/BroadcasterResult.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperator.js","webpack:///./node_modules/typeorm/browser/platform/BrowserPlatformTools.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///../../../../src/client/js/Legacy/Helper.ts","webpack:///./node_modules/typeorm/browser/schema-builder/RdbmsSchemaBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteDriver.js","webpack:///./node_modules/js-helper/dist/shared.js","webpack:///../../../../src/client/js/Sound/SoundManager.ts","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///../src/cordova-sites-database.ts","webpack:///./node_modules/typeorm/browser/driver/DriverUtils.js","webpack:///./node_modules/typeorm/browser/util/DateUtils.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/typeorm/browser/util/ObjectUtils.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableColumn.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/js-helper/dist/client/ViewHelper.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///../../../src/client/js/Translator.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableUnique.js","webpack:///./node_modules/typeorm/browser/metadata/ColumnMetadata.js","webpack:///../../../src/client/js/App.ts","webpack:///./node_modules/typeorm/browser/error/QueryRunnerAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/metadata/EntityMetadata.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/typeorm/browser/error/DriverOptionNotSetError.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableIndex.js","webpack:///./node_modules/typeorm/browser/error/QueryFailedError.js","webpack:///./node_modules/typeorm/browser/query-builder/Alias.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryExpressionMap.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilder.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsDriver.js","webpack:///../../../src/client/js/NativeStoragePromise.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableCheck.js","webpack:///./node_modules/typeorm/browser/error/TransactionNotStartedError.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/typeorm/browser/naming-strategy/DefaultNamingStrategy.js","webpack:///./node_modules/typeorm/browser/error/CannotExecuteNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/CannotConnectAlreadyConnectedError.js","webpack:///./node_modules/typeorm/browser/error/EntityMetadataNotFoundError.js","webpack:///./node_modules/typeorm/browser/migration/Migration.js","webpack:///./node_modules/typeorm/browser/driver/sqlserver/MssqlParameter.js","webpack:///./node_modules/typeorm/browser/migration/MigrationExecutor.js","webpack:///./node_modules/typeorm/browser/error/MissingPrimaryColumnError.js","webpack:///./node_modules/typeorm/browser/error/CircularRelationsError.js","webpack:///./node_modules/typeorm/browser/util/DepGraph.js","webpack:///./node_modules/typeorm/browser/error/DataTypeNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionOptionError.js","webpack:///./node_modules/typeorm/browser/error/InitializedRelationError.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataValidator.js","webpack:///./node_modules/typeorm/browser/error/QueryRunnerProviderAlreadyReleasedError.js","webpack:///./node_modules/typeorm/browser/error/NoNeedToReleaseEntityManagerError.js","webpack:///./node_modules/typeorm/browser/repository/Repository.js","webpack:///./node_modules/typeorm/browser/repository/TreeRepository.js","webpack:///./node_modules/typeorm/browser/error/FindRelationsNotFoundError.js","webpack:///./node_modules/typeorm/browser/find-options/FindOptionsUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryDoesNotHaveEntityError.js","webpack:///./node_modules/typeorm/browser/repository/AbstractRepository.js","webpack:///./node_modules/typeorm/browser/error/CustomRepositoryCannotInheritRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/RepositoryNotTreeError.js","webpack:///./node_modules/typeorm/browser/repository/RepositoryFactory.js","webpack:///./node_modules/typeorm/browser/error/TreeRepositoryNotSupportedError.js","webpack:///./node_modules/typeorm/browser/error/MustBeEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectTopoligicalSorter.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectChangedColumnsComputer.js","webpack:///./node_modules/typeorm/browser/error/SubjectWithoutIdentifierError.js","webpack:///./node_modules/typeorm/browser/error/SubjectRemovedAndUpdatedError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/NestedSetSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotAttachTreeChildrenEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/tree/ClosureSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/tree/MaterializedPathSubjectExecutor.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectExecutor.js","webpack:///./node_modules/typeorm/browser/error/CannotDetermineEntityError.js","webpack:///./node_modules/typeorm/browser/persistence/Subject.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/ManyToManySubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/SubjectDatabaseEntityLoader.js","webpack:///./node_modules/typeorm/browser/persistence/subject-builder/CascadesSubjectBuilder.js","webpack:///./node_modules/typeorm/browser/persistence/EntityPersistExecutor.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/SqljsEntityManager.js","webpack:///./node_modules/typeorm/browser/entity-manager/EntityManagerFactory.js","webpack:///./node_modules/typeorm/browser/error/MissingDriverError.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/cordova/CordovaDriver.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/react-native/ReactNativeDriver.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/expo/ExpoDriver.js","webpack:///./node_modules/typeorm/browser/driver/postgres/PostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js","webpack:///./node_modules/typeorm/browser/driver/DriverFactory.js","webpack:///./node_modules/typeorm/browser/platform/BrowserDirectoryExportedClassesLoader.js","webpack:///./node_modules/typeorm/browser/container.js","webpack:///./node_modules/typeorm/browser/metadata/IndexMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/EmbeddedMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationIdMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/RelationCountMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/types/EventListenerTypes.js","webpack:///./node_modules/typeorm/browser/metadata-builder/MetadataUtils.js","webpack:///./node_modules/typeorm/browser/metadata/ForeignKeyMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/JunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/UniqueMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/RelationJoinColumnBuilder.js","webpack:///./node_modules/typeorm/browser/metadata/EntityListenerMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/CheckMetadata.js","webpack:///./node_modules/typeorm/browser/metadata/ExclusionMetadata.js","webpack:///./node_modules/typeorm/browser/metadata-builder/EntityMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/metadata-args/MetadataArgsStorage.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchemaTransformer.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionMetadataBuilder.js","webpack:///./node_modules/typeorm/browser/logger/SimpleConsoleLogger.js","webpack:///./node_modules/typeorm/browser/logger/AdvancedConsoleLogger.js","webpack:///./node_modules/typeorm/browser/platform/BrowserFileLoggerDummy.js","webpack:///./node_modules/typeorm/browser/logger/DebugLogger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerFactory.js","webpack:///./node_modules/typeorm/browser/cache/RedisQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/DbQueryResultCache.js","webpack:///./node_modules/typeorm/browser/cache/QueryResultCacheFactory.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/connection/Connection.js","webpack:///./node_modules/typeorm/browser/error/ConnectionNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/AlreadyHasActiveConnectionError.js","webpack:///./node_modules/typeorm/browser/connection/ConnectionManager.js","webpack:///./node_modules/typeorm/browser/platform/BrowserConnectionOptionsReaderDummy.js","webpack:///./node_modules/typeorm/browser/common/EntityTarget.js","webpack:///./node_modules/typeorm/browser/common/ObjectType.js","webpack:///./node_modules/typeorm/browser/common/ObjectLiteral.js","webpack:///./node_modules/typeorm/browser/common/DeepPartial.js","webpack:///./node_modules/typeorm/browser/error/CannotReflectMethodParameterTypeError.js","webpack:///./node_modules/typeorm/browser/error/ConnectionIsNotSetError.js","webpack:///./node_modules/typeorm/browser/error/MetadataAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/PrimaryColumnCannotBeNullableError.js","webpack:///./node_modules/typeorm/browser/error/NoConnectionForRepositoryError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinColumnError.js","webpack:///./node_modules/typeorm/browser/error/CannotGetEntityManagerNotConnectedError.js","webpack:///./node_modules/typeorm/browser/error/MetadataWithSuchNameAlreadyExistsError.js","webpack:///./node_modules/typeorm/browser/error/NamingStrategyNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/MissingJoinTableError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js","webpack:///./node_modules/typeorm/browser/error/PersistedEntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/UsingJoinColumnIsNotAllowedError.js","webpack:///./node_modules/typeorm/browser/error/ColumnTypeUndefinedError.js","webpack:///./node_modules/typeorm/browser/error/index.js","webpack:///./node_modules/typeorm/browser/decorator/columns/Column.js","webpack:///./node_modules/typeorm/browser/decorator/columns/CreateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/DeleteDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryGeneratedColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/PrimaryColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/UpdateDateColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/VersionColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ViewColumn.js","webpack:///./node_modules/typeorm/browser/decorator/columns/ObjectIdColumn.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterLoad.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/AfterUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeInsert.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeRemove.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/BeforeUpdate.js","webpack:///./node_modules/typeorm/browser/decorator/listeners/EventSubscriber.js","webpack:///./node_modules/typeorm/browser/decorator/options/ColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/IndexOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinColumnOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/JoinTableOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/RelationOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/EntityOptions.js","webpack:///./node_modules/typeorm/browser/decorator/options/ValueTransformer.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinColumn.js","webpack:///./node_modules/typeorm/browser/decorator/relations/JoinTable.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/ManyToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToMany.js","webpack:///./node_modules/typeorm/browser/decorator/relations/OneToOne.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationCount.js","webpack:///./node_modules/typeorm/browser/decorator/relations/RelationId.js","webpack:///./node_modules/typeorm/browser/decorator/entity/Entity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/ChildEntity.js","webpack:///./node_modules/typeorm/browser/decorator/entity/TableInheritance.js","webpack:///./node_modules/typeorm/browser/decorator/entity-view/ViewEntity.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/Transaction.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionManager.js","webpack:///./node_modules/typeorm/browser/decorator/transaction/TransactionRepository.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeLevelColumn.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeParent.js","webpack:///./node_modules/typeorm/browser/decorator/tree/TreeChildren.js","webpack:///./node_modules/typeorm/browser/decorator/tree/Tree.js","webpack:///./node_modules/typeorm/browser/decorator/Index.js","webpack:///./node_modules/typeorm/browser/decorator/Unique.js","webpack:///./node_modules/typeorm/browser/decorator/Check.js","webpack:///./node_modules/typeorm/browser/decorator/Exclusion.js","webpack:///./node_modules/typeorm/browser/decorator/Generated.js","webpack:///./node_modules/typeorm/browser/decorator/EntityRepository.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Any.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Between.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Equal.js","webpack:///./node_modules/typeorm/browser/find-options/operator/IsNull.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/LessThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/ILike.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Like.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThan.js","webpack:///./node_modules/typeorm/browser/find-options/operator/MoreThanOrEqual.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Not.js","webpack:///./node_modules/typeorm/browser/find-options/operator/Raw.js","webpack:///./node_modules/typeorm/browser/find-options/FindConditions.js","webpack:///./node_modules/typeorm/browser/find-options/FindManyOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOneOptions.js","webpack:///./node_modules/typeorm/browser/find-options/FindOperatorType.js","webpack:///./node_modules/typeorm/browser/find-options/JoinOptions.js","webpack:///./node_modules/typeorm/browser/find-options/OrderByCondition.js","webpack:///./node_modules/typeorm/browser/logger/Logger.js","webpack:///./node_modules/typeorm/browser/logger/LoggerOptions.js","webpack:///./node_modules/typeorm/browser/repository/BaseEntity.js","webpack:///./node_modules/typeorm/browser/repository/RemoveOptions.js","webpack:///./node_modules/typeorm/browser/repository/SaveOptions.js","webpack:///./node_modules/typeorm/browser/driver/mongodb/typings.js","webpack:///./node_modules/typeorm/browser/driver/types/DatabaseType.js","webpack:///./node_modules/typeorm/browser/driver/types/ReplicationMode.js","webpack:///./node_modules/typeorm/browser/index.js","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableForeignKey.js","webpack:///./node_modules/typeorm/browser/util/StringUtils.js","webpack:///./node_modules/typeorm/browser/query-builder/QueryBuilderUtils.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///../../../src/client/js/ViewInflater.ts","webpack:///./node_modules/typeorm/browser/subscriber/Broadcaster.js","webpack:///../../../../src/client/js/Legacy/Matomo.ts","webpack:///./node_modules/typeorm/browser/schema-builder/view/View.js","webpack:///./node_modules/core-js/modules/_strict-method.js","webpack:///../../../src/client/js/DataManager.ts","webpack:///./node_modules/typeorm/browser/schema-builder/table/TableExclusion.js","webpack:///./node_modules/typeorm/browser/util/ApplyValueTransformers.js","webpack:///./node_modules/typeorm/browser/util/RandomGenerator.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///../../../../src/client/js/Context/MenuSite.ts","webpack:///./node_modules/typeorm/browser/error/TransactionAlreadyStartedError.js","webpack:///./node_modules/typeorm/browser/error/DriverPackageNotInstalledError.js","webpack:///./node_modules/typeorm/browser/error/ReturningStatementNotSupportedError.js","webpack:///./node_modules/typeorm/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js","webpack:///./node_modules/typeorm/browser/entity-schema/EntitySchema.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_typed-array.js","webpack:///../../src/shared/EasySyncBaseModel.ts","webpack:///../../../../src/client/js/Context/AbstractFragment.ts","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/MenuAction.ts","webpack:///./node_modules/typeorm/node_modules/debug/src/browser.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///../../../../src/client/js/Dialog/Dialog.ts","webpack:///../../../../src/client/js/Toast/Toast.ts","webpack:///./node_modules/typeorm/browser/error/LockNotSupportedOnGivenDriverError.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/OpenSubmenuAction.ts","webpack:///../../../src/client/js/UserManager.ts","webpack:///./node_modules/typeorm/browser/error/UpdateValuesMissingError.js","webpack:///./node_modules/typeorm/browser/error/OptimisticLockCanNotBeUsedError.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///../../../../src/client/js/Context/Context.ts","webpack:///../../../../src/shared/v1/model/User.ts","webpack:///./node_modules/typeorm/browser/error/EntityNotFoundError.js","webpack:///./node_modules/typeorm/browser/error/EntityColumnNotFound.js","webpack:///./node_modules/typeorm/browser/query-builder/result/UpdateResult.js","webpack:///./node_modules/typeorm/browser/error/LimitOnUpdateNotSupportedError.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountLoader.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js","webpack:///./node_modules/typeorm/browser/query-builder/SelectQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-id/RelationIdAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/relation-count/RelationCountAttribute.js","webpack:///./node_modules/typeorm/browser/query-builder/ReturningResultsEntityUpdator.js","webpack:///./node_modules/typeorm/browser/schema-builder/util/TableUtils.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///../../../../src/client/js/Context/UserSite.ts","webpack:///../src/shared.ts","webpack:///../../src/client/EasySyncClientDb.ts","webpack:///../../src/client/LastSyncDates.ts","webpack:///./node_modules/typeorm/browser/error/OptimisticLockVersionMismatchError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/InsertResult.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_typed.js","webpack:///../../../../src/client/js/Context/AbstractSite.ts","webpack:///./node_modules/js-helper/dist/client.js","webpack:///../src/BaseDatabase.ts","webpack:///../../../../src/client/js/Site/LoginSite.ts","webpack:///../../../../src/client/js/MenuAction/UserMenuAction.ts","webpack:///../../src/client/ClientFileMedium.ts","webpack:///./node_modules/typeorm/browser/error/CannotCreateEntityIdMapError.js","webpack:///./node_modules/typeorm/browser/error/PessimisticLockTransactionRequiredError.js","webpack:///./node_modules/typeorm/browser/error/NoVersionOrUpdateDateColumnError.js","webpack:///./node_modules/typeorm/browser/query-builder/Brackets.js","webpack:///./node_modules/typeorm/browser/find-options/operator/In.js","webpack:///./node_modules/typeorm/browser/error/InsertValuesMissingError.js","webpack:///./node_modules/typeorm/browser/query-builder/result/DeleteResult.js","webpack:///./node_modules/typeorm/browser/error/MissingDeleteDateColumnError.js","webpack:///./node_modules/typeorm/browser/error/OffsetWithoutLimitNotSupportedError.js","webpack:///../../../../../src/client/js/Context/Menu/NavbarFragment.ts","webpack:///./node_modules/typeorm/browser/query-builder/JoinAttribute.js","webpack:///./node_modules/typeorm/browser/driver/SqlInMemory.js","webpack:///./node_modules/typeorm/browser/query-runner/BaseQueryRunner.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/js-helper/dist/shared/JsonHelper.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/typeorm/browser/query-builder/InsertQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/UpdateQueryBuilder.js","webpack:///./node_modules/typeorm/browser/query-builder/DeleteQueryBuilder.js","webpack:///../../../../../src/client/js/Legacy/EventManager/EventManager.ts","webpack:///../../../../src/client/js/Context/TemplateSite.ts","webpack:///../../../../../src/client/js/Context/Menu/Menu.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/AccordionRenderer.ts","webpack:///../../src/shared/EasySyncPartialModel.ts","webpack:///../../src/shared/FileMedium.ts","webpack:///../../../../src/shared/v1/model/Role.ts","webpack:///../../../../src/client/js/MenuAction/StartUserSiteMenuAction.ts","webpack:///../../../src/client/FileWriter/FilePromise.ts","webpack:///./node_modules/typeorm/browser/query-builder/RelationUpdater.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationRemover.js","webpack:///./node_modules/typeorm/browser/query-builder/RelationQueryBuilder.js","webpack:///../../../../src/client/js/ShareManager/ShareManager.ts","webpack:///../src/BaseModel.ts","webpack:///../../src/client/SyncJob.ts","webpack:///../../../src/client/js/Form.ts","webpack:///../../../src/shared/migrations/DeleteUserManagement.ts","webpack:///../../../src/shared/migrations/SetupUserManagement.ts","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_bind.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///../../src/shared/Translator.ts","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/typeorm/browser/query-builder/SoftDeleteQueryBuilder.js","webpack:///./node_modules/js-helper/dist/shared/XSSHelper.js","webpack:///../../../../src/client/js/Context/SiteManager.ts","webpack:///./node_modules/js-helper/dist/client/Dragger/DraggedElement.js","webpack:///../../../../src/client/js/DataManager/NotOnlineError.ts","webpack:///../../../src/client/js/HistoryManager.ts","webpack:///../../../../src/client/js/ColorIndicator/ColorIndicator.ts","webpack:///../../../src/client/js/Singleton.ts","webpack:///../../../../../src/client/js/Context/Delegate/MasterSite.ts","webpack:///../../../../src/client/js/Toast/ToastManager.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/DropdownRenderer.ts","webpack:///../../../../../../src/client/js/Context/Menu/Renderer/MenuRenderer.ts","webpack:///../../../../../src/client/js/Context/Menu/Submenu.ts","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeChildFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Dialog/chooseDialog.html","webpack:///../../../../src/client/js/Dialog/ElemChooseDialog.ts","webpack:///../../../../src/client/js/Form/ImageSelectionElement.ts","webpack:///../../../../src/client/js/ShareManager/ShareDialog.ts","webpack:///../../../../src/client/js/Sound/AudioChain.ts","webpack:///../../../src/client/js/translationInit.ts","webpack:///../../../../src/shared/v1/model/Access.ts","webpack:///../../../../src/client/js/Site/ForgotPasswordSite.ts","webpack:///../../../../src/client/js/Site/NotAllowedSite.ts","webpack:///../../../../src/client/js/Dialog/SelectUserDialog.ts","webpack:///../../../src/client/FileWriter/FileTransferPromise.ts","webpack:///../../../src/client/FileWriter/FileWriterPromise.ts","webpack:///../../src/client/ClientModel.ts","webpack:///../../src/client/ClientPartialModel.ts","webpack:///../../../../src/shared/v1/model/AccessEasySyncModel.ts","webpack:///./src/client/img/help.png","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/typeorm/browser/driver/sqljs/SqljsQueryRunner.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptDriver.js","webpack:///./node_modules/typeorm/browser/driver/nativescript/NativescriptQueryRunner.js","webpack:///./node_modules/typeorm/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js","webpack:///./node_modules/@babel/polyfill/lib/index.js","webpack:///./node_modules/@babel/polyfill/lib/noConflict.js","webpack:///./node_modules/core-js/es6/index.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/fn/array/includes.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/fn/array/flat-map.js","webpack:///./node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/core-js/fn/string/pad-start.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/fn/string/pad-end.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/fn/string/trim-start.js","webpack:///./node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/core-js/fn/string/trim-end.js","webpack:///./node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/core-js/fn/symbol/async-iterator.js","webpack:///./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/fn/object/values.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/fn/object/entries.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/fn/promise/finally.js","webpack:///./node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/web/index.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/library/fn/global.js","webpack:///./node_modules/core-js/library/modules/es7.global.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/js-helper/dist/shared/Counter.js","webpack:///./node_modules/js-helper/dist/shared/DateHelper.js","webpack:///./node_modules/js-helper/dist/shared/MigrationHelper.js","webpack:///./node_modules/reflect-metadata/Reflect.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/typeorm/node_modules/debug/src/common.js","webpack:///./node_modules/typeorm/node_modules/ms/index.js","webpack:///./node_modules/js-helper/dist/shared/Prioritized.js","webpack:///./node_modules/js-helper/dist/shared/PromiseWithHandlers.js","webpack:///./node_modules/js-helper/dist/shared/Random.js","webpack:///./node_modules/js-helper/dist/client/Dragger/DragHelper.js","webpack:///./node_modules/js-helper/dist/client/HotkeyManager.js","webpack:///./node_modules/js-helper/dist/client/InputSelect.js","webpack:///./node_modules/cs-event-manager/dist/shared.js","webpack:///./node_modules/cs-event-manager/dist/shared/EventManager.js","webpack:///../../../../src/client/js/Context/ContainerSite.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/container.html","webpack:///../../../../../src/client/js/Context/Delegate/DelegateSite.ts","webpack:///../../../../../src/client/js/Context/Fragment/AbstractWindowFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/abstractWindowTemplate.html","webpack:///../../../../../src/client/js/Context/Fragment/AlphabeticListFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/alphabeticListFragment.html","webpack:///../../../../../src/client/js/Context/Fragment/TabFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/tabFragment.html","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/ErrorAction.ts","webpack:///./node_modules/cordova-sites/dist/client/img/errorIcon.png","webpack:///../../../../../../src/client/js/Context/Menu/MenuAction/StartSiteMenuAction.ts","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/navbar.html","webpack:///./node_modules/cordova-sites/dist/client/html/siteTemplates/menuSite.html","webpack:///../../../../../src/client/js/Context/SwipeFragment/SwipeFragment.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Framework/Fragment/swipeFragment.html","webpack:///../../../../src/client/js/Dialog/ButtonChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ChooseDialog.ts","webpack:///../../../../src/client/js/Dialog/ConfirmDialog.ts","webpack:///../../../../src/client/js/Dialog/ImgChooseDialog.ts","webpack:///../../../../src/client/js/Form/Form.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Form/imageSelectionElement.html","webpack:///../../../../src/client/js/Legacy/ScaleHelper.ts","webpack:///../../../src/client/js/PromiseHelper.ts","webpack:///./node_modules/cordova-sites/dist/client/html/Dialog/shareDialog.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/loginSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/forgotPasswordSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/notAllowedSite.html","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/dialog/selectUserDialog.html","webpack:///../../../src/client/js/OfflineUserManager.ts","webpack:///../../src/client/SyncJob_old.ts","webpack:///../../../src/client/editEntitySite/ModifyEntitySite.ts","webpack:///../../../src/client/migration/SetupEasySync.ts","webpack:///../../../../src/client/js/Site/ChangeUserSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/changeUserSite.html","webpack:///../../../../src/client/js/Site/RegistrationSite.ts","webpack:///./node_modules/cordova-sites-user-management/dist/client/html/sites/registrationSite.html","webpack:///../../../../src/shared/v1/model/UserSyncModel.ts","webpack:///../../../../src/shared/v1/model/UserSyncPartialModel.ts","webpack:///./src/client/img/settings.png","webpack:///./src/client/html/sites/menu.html","webpack:///./src/client/html/sites/level.html","webpack:///./src/client/sound/single_coin_fall_on_concrete_.mp3","webpack:///./src/client/html/sites/end.html","webpack:///./src/client/html/sites/settingsSite.html","webpack:///./src/client/html/sites/tutorialSite.html","webpack:///./src/client/html/fragment/settings.html","webpack:///./src/client/html/sites/credits.html","webpack:///./src/client/html/sites/privacyPolicy.html","webpack:///./src/client/html/sites/impressum.html","webpack:///./src/client/html/sites/contactSite.html","webpack:///./src/client/sass/index.scss","webpack:///./src/shared/model/LevelData.ts","webpack:///./src/shared/model/migration/shared/Setup.ts","webpack:///./src/client/js/wordrotator/Segment/TemplateContainer.js","webpack:///./src/client/js/wordrotator/Segment/Segment.js","webpack:///./src/client/js/wordrotator/Segment/LeafSegment.js","webpack:///./src/client/js/wordrotator/Segment/ParentSegment.js","webpack:///./src/client/js/wordrotator/Level/Level.js","webpack:///./src/client/js/wordrotator/Segment/RowSegment.js","webpack:///./src/client/js/wordrotator/Level/RowLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleLevel.js","webpack:///./src/client/js/wordrotator/Level/RowLevel8.js","webpack:///./src/client/js/wordrotator/Level/RowLevel10.js","webpack:///./src/client/js/wordrotator/Segment/TriangleSegment.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel8.js","webpack:///./src/client/js/wordrotator/Level/SixWordsRowLevel12.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel8.js","webpack:///./src/client/js/wordrotator/Level/FourWordsLevel12.js","webpack:///./src/client/js/wordrotator/Segment/ColumnSegment.js","webpack:///./src/client/js/wordrotator/Level/BigSegmentsLevels.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_0.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_1.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_2.js","webpack:///./src/client/js/wordrotator/Level/SimpleFourWordsLevel10_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_1_3.js","webpack:///./src/client/js/wordrotator/Level/TwoSegmentFourWordsLevel10_0_2.js","webpack:///./src/client/js/wordrotator/Level/LevelHelper.ts","webpack:///./src/client/js/Sites/EndSite.ts","webpack:///./src/client/js/model/LevelPlayed.ts","webpack:///./src/client/js/Sites/LevelSite.ts","webpack:///./src/client/js/wordrotator/Level/MainMenuLevel.js","webpack:///./src/client/js/Sites/TutorialSite.ts","webpack:///./src/client/js/Sites/CreditsSite.ts","webpack:///./src/client/js/Sites/PrivacyPolicySite.ts","webpack:///./src/client/js/Sites/ImpressumSite.ts","webpack:///./src/client/js/Sites/ContactSite.ts","webpack:///./src/client/js/Fragment/WordRotatorSettingFragment.ts","webpack:///./src/client/js/Sites/SettingsSite.ts","webpack:///./src/client/js/Sites/MainMenuSite.ts","webpack:///./src/client/js/model/migration/ClientSetup.ts","webpack:///./src/client/sound/brightAndBeautifull__.mp3","webpack:///./src/client/js/script.js"],"names":["TemplateContainer","leafTemplate","parentTemplate","rowTemplate","triangleTemplate","columnTemplate","cloneNode","Segment","element","rotation","parent","rotations","otherSegment","getLevel","Promise","resolve","locks","lockedArray","LeafSegment","leaf","Helper","isNotNull","setLeaf","ViewHelper","removeAllChildren","querySelector","appendChild","document","createTextNode","ParentSegment","children","class","rotatable","userRotationDelta","lastUserRotation","touchendListener","e","now","Date","getTime","target","position","changedTouches","length","elementFromPoint","pageX","pageY","x","y","targetTouches","contains","mouseDownTarget","stopPropagation","preventDefault","segmentClicked","rotate","clickPosition","mouseupListener","_updateElement","getHasWon","firstElem","secondElem","firstPosition","secondPosition","timeout","clickTolerance","rotationDirection","isNull","Math","abs","firstIndex","secondIndex","rotationIndexes","i","canRotate","currentRotation","_updateRotationClass","classList","add","delayPromise","setTimeout","then","remove","checkHasWon","sameAs","isNaN","splice","n","applyRotations","applyLocks","push","getCurrentRotations","locked","getCurrentLocked","checkChildren","nonNull","isSolved","addChild","child","setParent","layer","_getLayer","childContainer","removeEventListener","addEventListener","getElement","createElement","window","initListener","Level","templateContainer","rootSegment","words","startRotations","levelData","hasWon","id","saveAsCurrentAfterCheckWon","wonResolver","giveUpResolver","_shakeLeafs","_shakeLeafsTimeout","_lastRotation","wonPromise","reject","segmentClickedListener","NativeStoragePromise","setItem","JSON","stringify","replace","toUpperCase","self","saveAsCurrentLevel","shouldSave","_getRotatableSegmentsFrom","segment","clearTimeout","shakeLeafs","Random","getIntRandom","listener","_getLeafSegmentsFrom","leafs","getLeafSegments","index","apply","word","leafSegmentTemplate","leafSegments","charAt","RowSegment","onclick","RowLevel","container","wordLength","leafsWordOne","_createLeafsForWord","copyLeafTemplate","leafsWordTwo","copyRowTemplate","copyParentTemplate","setRootSegment","SimpleLevel","RowLevel8","RowLevel10","TriangleSegment","SixWordsRowLevel","leafsWords","parents","triangle","copyTriangleTemplate","rowSegment","SixWordsRowLevel8","SixWordsRowLevel12","FourWordsLevel","FourWordsLevel8","FourWordsLevel12","ColumnSegment","BigSegmentsLevels","bigSegmentPositions","parentSegment","indexOf","copyColumnTemplate","SimpleFourWordsLevel","bigSegmentPosition","SimpleFourWordsLevel10_0","SimpleFourWordsLevel10_1","SimpleFourWordsLevel10_2","SimpleFourWordsLevel10_3","TwoSegmentFourWordsLevel10_0_3","TwoSegmentFourWordsLevel10_1_3","TwoSegmentFourWordsLevel10_0_2","MainMenuLevel","Object","LoginSite","ADD_LOGIN_ACTION","RegistrationSite","ADD_REGISTRATION_ACTION","App","addInitialization","Translator","init","translations","translationGerman","translationEn","fallbackLanguage","markUntranslatedTranslations","NavbarFragment","title","soundManager","SoundManager","getInstance","CHANNELS","MUSIC","music","getItem","audio","loop","volume","muted","play","catch","console","error","UserManager","getMe","addLoginChangeCallback","isLoggedIn","DataManager","_basePath","__HOST_ADDRESS__","onlineCallback","isOnline","Toast","show","assign","BaseDatabase","CONNECTION_OPTIONS","logging","synchronize","migrationsRun","migrations","DeleteUserManagement1000000000000","SetupEasySync1000000000500","SetupUserManagement1000000001000","Setup1000000002000","ClientSetup1000000002001","app","start","MainMenuSite","sql","EasySyncClientDb","rawQuery","res","log","ready","device","platform","navigator","serviceWorker","register"],"mappings":"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AgD,gBAAgB,EAAE,KAAK;AACjJ;;AAEO;AACP;AACA;AACA,2GAA2G,sFAAsF,aAAa,EAAE;AAChN,sBAAsB,8BAA8B,gDAAgD,uDAAuD,EAAE,EAAE,GAAG;AAClK,4CAA4C,sCAAsC,UAAU,oBAAoB,EAAE,EAAE,UAAU;AAC9H;;AAEO;AACP,gCAAgC,uCAAuC,aAAa,EAAE,EAAE,OAAO,kBAAkB;AACjH;AACA;;AAEA;AACA,yCAAyC,6BAA6B;AACtE,CAAC;AACD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,4CAA4C;AAC5C;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrJA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;ACZA,aAAa,mBAAO,CAAC,EAAW;AAChC,WAAW,mBAAO,CAAC,EAAS;AAC5B,WAAW,mBAAO,CAAC,EAAS;AAC5B,eAAe,mBAAO,CAAC,EAAa;AACpC,UAAU,mBAAO,CAAC,EAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA,gD;;;;;;;ACrDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACF;AACU;AACJ;AACJ;AACF;AACQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,qEAAqE,YAAY,8DAAU,QAAQ,EAAE;AACrG;AACA,kFAAkF,YAAY,wEAAe,aAAa,EAAE;AAC5H;AACA,sEAAsE,YAAY,gEAAW,SAAS,EAAE;AACxG;AACA,mEAAmE,YAAY,8DAAU,QAAQ,EAAE;AACnG;AACA,+EAA+E,YAAY,sEAAc,YAAY,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB,EAAE;AACrF,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,uBAAuB,EAAE;AAClF,6DAA6D,2BAA2B,EAAE;AAC1F,qEAAqE,2BAA2B,EAAE;AAClG,6DAA6D,2BAA2B,EAAE;AAC1F,2DAA2D,2BAA2B,EAAE;AACxF,mEAAmE,2BAA2B,EAAE;AAChG;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,+BAA+B,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,wDAAwD,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2CAA2C,EAAE;AAC5G;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,yCAAyC,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,iDAAiD,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAmD,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB;AAClD,wDAAwD,uCAAuC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC,EAAE;AACzG;AACA,0EAA0E,iGAAiG,EAAE;AAC7K;AACA;AACA;AACA;AACA,oDAAoD,6BAA6B,EAAE;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mCAAmC,EAAE;AACzG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mCAAmC,EAAE;AACxG,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAe,EAAE;AAC5D,wCAAwC,QAAQ,mEAAU,0CAA0C,EAAE;AACtG;AACA,0CAA0C,mCAAmC,EAAE;AAC/E,uCAAuC,QAAQ,8DAAU,eAAe,EAAE;AAC1E,mEAAmE,QAAQ,gEAAW,gBAAgB,EAAE;AACxG,gEAAgE,QAAQ,8DAAU,eAAe,EAAE;AACnG,4EAA4E,QAAQ,sEAAc,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA,CAAC;AACgB;;AAEjB;;;;;;;;AC5QA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qDAAqD,gCAAgC,EAAE;AACvF,qDAAqD,gCAAgC,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB,EAAE;AACjF;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,uDAAuD,EAAE;AAC3H;AACA;AACA,kEAAkE,oEAAoE,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,0CAA0C,mEAAa,WAAW,4DAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,yCAAyC,OAAO;AAChD,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;;;;;;;ACpPa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,GAAc;AAC3C;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,UAAU,gBAAgB;AAChD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,mBAAmB;AACnB,iBAAiB;AACjB,iBAAiB;AACjB,mBAAmB;AACnB,mBAAmB;AACnB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA,4CAA4C,IAAI,EAAE;AAClD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,4DAA4D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,kC;;;;;;;AC/RA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;;;;;;AClBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB;AAC3D,4CAA4C,4BAA4B;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACuB;;AAExB;;;;;;;;AC5GA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gIAAgI,4BAA4B;AAC5J;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI,KAAK;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA;AACA;AACA;AACA,CAAC;AACmB;AACpB;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;AACA;AACA;AACA,oBAAoB,mBAAO,CAAC,EAAS;AACrC;;AAEA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AJ,OAAe,OAAlE;AACH;;;WAED,iCAA4B;AACxB,UAAI,QAAQ,GAAG,IAAf;AACA,UAAI,QAAQ,GAAG,IAAf;AAEA,UAAI,OAAO,GAAG,IAAI,OAAJ,CAAY,UAAC,OAAD,EAAU,MAAV,EAAoB;AAC1C,gBAAQ,GAAG,OAAX;AACA,gBAAQ,GAAG,MAAX;AACH,OAHa,CAAd;AAIA,aAAO,CAAC,SAAD,CAAP,GAAqB,QAArB;AACA,aAAO,CAAC,QAAD,CAAP,GAAoB,QAApB;AAEA,aAAO,OAAP;AACH;;;;;;AAvXL,wB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLyD;AACe;AAClC;AACY;AACQ;AACV;AACD;AACoB;AACT;AACR;AACF;AACQ;AACrB;AACiD;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,2BAA2B,EAAE;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uGAAuG,EAAE;AACxL,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,sHAAsH,8DAA8D,EAAE;AACtL;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,0LAA0L,0BAA0B,EAAE;AACtN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA;AACA,wGAAwG,uCAAuC,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,mEAAmE,EAAE;AAC5K;AACA;AACA,yCAAyC;AACzC,wEAAwE,QAAQ,sCAAS;AACzF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,mGAAmG,+CAA+C,EAAE;AACpJ,yCAAyC;AACzC;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2IAA2I,iDAAiD,EAAE;AAC9L,yCAAyC;AACzC;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,uGAAuG,0CAA0C,EAAE;AACnJ;AACA;AACA;AACA,2GAA2G,uDAAuD,EAAE;AACpK,yCAAyC;AACzC;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,gDAAgD,sBAAK;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,qGAAqG,yDAAyD,EAAE;AAChK,yCAAyC;AACzC;AACA;AACA,wKAAwK,oBAAoB,EAAE;AAC9L;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+FAA+F,yDAAyD,EAAE;AAC1J,yCAAyC;AACzC;AACA;AACA;AACA,uGAAuG,YAAY,kCAAW,SAAS,EAAE;AACzI;AACA;AACA,mJAAmJ,4BAA4B,EAAE;AACjL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA,4GAA4G,yBAAyB,EAAE;AACvI,sGAAsG,yBAAyB,EAAE;AACjI;AACA;AACA,uDAAuD,kCAAW,CAAC,gCAAU;AAC7E,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA,oFAAoF,kDAAW,yCAAyC,0DAAmB;AAC3J;AACA;AACA;AACA,2EAA2E,qCAAQ;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;AACA;AACA;AACA,uGAAuG,mDAAmD,EAAE;AAC5J,wEAAwE,gCAAU;AAClF,qEAAqE,kCAAW;AAChF;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,iLAAiL,4BAA4B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,mDAAmD,+CAA+C,EAAE,wCAAwC,EAAE;AAC5N,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,0IAA0I,iCAAiC,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW,sCAAsC,0DAAmB;AAClI;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,8EAA8E,kDAAkD,+CAA+C,EAAE,EAAE,EAAE;AACrL,2EAA2E,QAAQ,gCAAU,uBAAuB,EAAE;AACtH;AACA;AACA,oJAAoJ,iCAAiC,EAAE;AACvL;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,+EAA+E,yFAAyF,iDAAiD,EAAE,EAAE,EAAE;AAC/N,4EAA4E,QAAQ,kCAAW,wBAAwB,EAAE;AACzH;AACA;AACA,6JAA6J,kCAAkC,EAAE;AACjM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,gEAAgE,qDAAc;AAC9E;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA,kFAAkF,0DAA0D,uDAAuD,EAAE,EAAE,EAAE;AACzM,+EAA+E,QAAQ,wCAAc,2BAA2B,EAAE;AAClI;AACA;AACA,gKAAgK,qCAAqC,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA,wGAAwG,0CAA0C,EAAE;AACpJ;AACA;AACA;AACA;AACA,oGAAoG,mDAAmD,EAAE;AACzJ,yCAAyC;AACzC;AACA;AACA,mGAAmG,QAAQ,0CAAe,4BAA4B,EAAE;AACxJ,2IAA2I,iBAAiB,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA;AACA,yFAAyF,0DAA0D,EAAE;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uFAAuF,uDAAuD,EAAE;AAChJ;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yCAAyC,qCAAQ;AACjD;AACA;AACA;AACA;AACA,iLAAiL,wBAAwB,EAAE;AAC3M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,gFAAgF,qFAAqF,EAAE;AACvK;AACA;AACA,kLAAkL,mBAAmB,EAAE;AACvM;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qFAAqF,iCAAiC,EAAE;AACxH;AACA;AACA,iFAAiF,uFAAuF,EAAE;AAC1K;AACA;AACA,8LAA8L,oBAAoB,EAAE;AACpN;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,QAAQ,gCAAU,mEAAmE,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8EAA8E,sBAAK;AACnF;AACA;AACA;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,gEAAgE;AACpJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,8DAA8D;AAClJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,4DAA4D;AAChJ;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC6B;AAC9B;AACA;AACA;AACA;;AAEA;;;;;;;;;ACvsD+C;AACE;AAC4B;AAC9B;AAC4B;AAC3E;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,uEAAuE,+BAA+B,EAAE;AACxG,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,qCAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA,mBAAmB,8BAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wDAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,8BAAS;AAC7B;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,qEAAqE,8CAA8C,EAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,4DAA4D,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,mBAAmB,4BAAQ;AAC3B,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,+CAA+C,EAAE;AAC/G;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;ACrhBa;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,GAAkB;AACvC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,CAAiB;AACtC,aAAa,mBAAO,CAAC,GAAqB;AAC1C,aAAa,mBAAO,CAAC,GAA0B;AAC/C,aAAa,mBAAO,CAAC,GAAsB;AAC3C,aAAa,mBAAO,CAAC,GAA8B;AACnD,aAAa,mBAAO,CAAC,GAAiB;AACtC,aAAa,mBAAO,CAAC,GAAoB;AACzC,kC;;;;;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;;;;;;AAjBL;AAGkB,wBAAW;AACrB,OAAK,EAAE,OADc;AAErB,OAAK,EAAE,OAFc;AAGrB,SAAO,EAAE;AAHY,CAAX;AA0KlB,UAAI,iBAAJ,CAAsB,aAAG,EAAG,CACxB;AACA;AACA;AACA;AACA;AACA;AACH,CAPD,E,CASA;AACA;AACA;AACA;AACA,M;;;;;;AC/LA,YAAY,mBAAO,CAAC,GAAW;AAC/B,UAAU,mBAAO,CAAC,EAAQ;AAC1B,aAAa,mBAAO,CAAC,EAAW;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;ACVA;;AACA;;AACA,kC;;;;;;;ACFA;AAAA;AAAA;AAAyC;AACE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAQ,gDAAgD,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA,mCAAmC;AACnC;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sEAAI,mBAAmB,yBAAyB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;ACrLA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA,mCAAmC,qCAAqC,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;;AC9LA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;ACLA;AAAA;AAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,iCAAiC,8DAAQ,0CAA0C,mBAAmB;AACtG;AACA;AACA,iDAAiD,8DAAQ,sDAAsD,UAAU;AACzH;AACA;AACA;AACA;AACA,+BAA+B,QAAQ,gBAAgB;AACvD;AACA;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC9CA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AA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,UAAjC,EAA2C;AACvC,UAAI,QAAQ,GAAG,UAAU,CAAC,WAAX,EAAf;;AACA,UAAI,QAAJ,EAAc;AACV,eAAoB,QAAS,CAAC,yBAAV,CAAoC,UAApC,CAApB;AACH;AACJ;;;WAED,4BAAgC,WAAhC,EAA2C;;;;;;;AACnC,wB,GAAW,UAAU,CAAC,WAAX,E;;qBACX,Q;;;;;kDACoB,QAAS,CAAC,kBAAV,CAA6B,WAA7B,C;;;;;;;;;AAE3B;;;WAED,cAAY,MAAZ,EAAkB;AACd,8BAAiB,QAAjB,GAA4B,IAAI,UAAJ,CAAe,MAAf,CAA5B;AACH;;;;EAnP2B,uB;;AAAhC;AAuPA,UAAU,CAAC,aAAX,GAA2B,EAA3B;AAEA,UAAU,CAAC,sBAAX,GAAoC,IAApC;AAEA,UAAU,CAAC,QAAX,GAAsB,IAAtB,C;;;;;;;AClQA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,4BAA4B,EAAE;AACrG,SAAS;AACT;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;AC5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACF;AACgB;AACA;AACY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB,EAAE;AAClE,yCAAyC,uCAAuC,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oEAAoE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,QAAQ,KAAK,iBAAiB,GAAG,YAAY,UAAU,EAAE,GAAG,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE;AACrH;AACA;AACA;AACA;AACA,gCAAgC,0DAA0D;AAC1F;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC,iBAAiB,IAAI;AACrB;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mEAAa,KAAK,4DAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,+EAAY;AACnH;AACA;AACA,wKAAwK,+EAAY;AACpL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,mGAAmG,+EAAY;AAC/G;AACA;AACA,4IAA4I,+EAAY;AACxJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2FAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mFAAmF,EAAE;AACjJ;AACA;AACA;AACA;AACA,wDAAwD,yFAAyF,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wGAA4B;AAClD;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB,qCAAqC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,kBAAkB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,oDAAoD,6CAA6C,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAA6C,EAAE;AACzG;AACA;AACA;AACA;AACA,gEAAgE,+CAA+C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+CAA+C,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA,2DAA2D,+CAA+C,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0GAA0G,EAAE;AAC/J;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA,uCAAuC,iCAAiC;AACxE;AACA;AACA;AACA,wCAAwC,mEAAa,KAAK,4DAAM;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,QAAQ,+DAAQ,qCAAqC,EAAE;AACrH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+DAAQ;AAC3E,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yEAAO,+BAA+B,mCAAmC;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,iDAAiD,EAAE;AAC9H,qEAAqE,yBAAyB,EAAE;AAChG;AACA,8EAA8E,mEAAmE,EAAE;AACnJ;AACA;AACA,yEAAyE,8CAA8C,EAAE;AACzH;AACA;AACA;AACA,8BAA8B,6BAA6B;AAC3D;AACA,qBAAqB,0CAA0C,gBAAgB,sBAAsB;AACrG;AACA,QAAQ,0BAA0B,8BAA8B;AAChE;AACA;AACA;AACA,gDAAgD,QAAQ,+DAAQ,4DAA4D,EAAE;AAC9H,oDAAoD,QAAQ,+DAAQ,gEAAgE,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oFAAY,wCAAwC,sFAAc,wCAAwC,uFAAe,wCAAwC,iFAAS;AACzO;AACA;AACA,iEAAiE,sFAAc;AAC/E,kEAAkE,uFAAe;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,sFAAc;AAClF;AACA;AACA,CAAC;AACyB;;AAE1B;;;;;;;ACpjBA;AACA,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;;;;;;;;ACJA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;;;ACjBA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,4BAA4B,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;;AC3DA;AAAA;AAAA;AAA4C;AACM;AAClD;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,eAAe,8DAAQ,CAAC,8DAAQ,GAAG,iBAAiB,uEAAuE;AAC9I;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;;;;;;;;;;;;;;ACrBkD;AAClD;AACA;AACA,IAAI,WAAK;AACT;AACA,QAAQ,kCAAW,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACgB;;AAEjB;;;;;;;;;;;;ACrCyC;AACT;AACgB;AACwB;AACS;AACjF;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iCAAiC,EAAE;AAC3F;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA,6HAA6H;AAC7H;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,eAAe,EAAE;AAC3E;AACA;AACA,+CAA+C,6BAA6B,WAAK,SAAS,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,YAAY,sCAAa,gCAAgC,EAAE;AACjI,wFAAwF,YAAY,kDAAmB,oBAAoB,EAAE;AAC7I,iGAAiG,YAAY,wDAAsB,uBAAuB,EAAE;AAC5J,uDAAuD,SAAS,qCAAQ,GAAG,UAAU,EAAE;AACvF,0DAA0D,SAAS,qCAAQ,GAAG,WAAW,EAAE;AAC3F,uCAAuC;AACvC,6DAA6D,gBAAgB,EAAE;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;AChTgF;AACtB;AACpB;AACsB;AACF;AACS;AACK;AACF;AACT;AAC1B;AACyB;AACX;AACoB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,qCAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,uBAAY;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAO,CAAC,GAAsB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,GAA0B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAO,CAAC,GAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,wDAAwD,iDAAiD,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAA0C,EAAE;AAClG,mDAAmD,yCAAyC,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kCAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,8BAA8B,qBAAqB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,4CAA4C,UAAU;AAC3G;AACA;AACA,qDAAqD,qCAAQ,CAAC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM,iDAAiD,UAAU;AAC9L;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA,6CAA6C,qCAAQ,0CAA0C,UAAU;AACzG;AACA;AACA;AACA;AACA,2BAA2B,QAAQ,gBAAgB;AACnD;AACA;AACA;AACA;AACA,yBAAyB,0BAA0B;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,iCAAiC,EAAE;AACnC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B,qCAAQ,6CAA6C,UAAU;AACzF;AACA;AACA;AACA;AACA,uBAAuB,QAAQ,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM;AAChE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,sCAAsC,sDAAe;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC,mDAAY;AAC9C;AACA;AACA,2EAA2E;AAC3E;AACA,iBAAiB;AACjB;AACA,kCAAkC,sDAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,uCAAuC,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,uDAAuD,wBAAE,+BAA+B,kDAAkD,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,6DAA6D,gCAAgC,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,4BAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wCAAc;AACtD;AACA;AACA;AACA,sCAAsC,oDAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,4HAA4H,oCAAoC,EAAE;AAClK;AACA;AACA;AACA,+DAA+D,oCAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gCAAgC,qBAAqB,EAAE;AAChF,qBAAqB,gCAAgC,qBAAqB,EAAE;AAC5E,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA,2DAA2D,0BAA0B,EAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qDAAc,sBAAsB,sDAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,oCAAY;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACr1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACqB;AACzB;AACsC;AACd;AACjB;AACd;AAC/C;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0EAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,4BAA4B,6EAAa;AACzC,uCAAuC,6EAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,6EAAa;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA;AACA;AACA,6CAA6C,6EAAa;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6EAAa;AACrC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,+DAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,6EAAa;AACzB;AACA;AACA;AACA;AACA,8BAA8B,6EAAa;AAC3C;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACC;;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7TA;;AAEG;;AACH;;AACA;;IAIa,oB;;;;;;;WAOT,uBAAkB;AACd,aAAQ,QAAO,SAAP,yCAAO,SAAP,OAAqB,QAArB,IAAiC,OAAO,SAAS,CAAC,SAAjB,KAA+B,QAAhE,IAA4E,SAAS,CAAC,SAAV,CAAoB,OAApB,CAA4B,UAA5B,KAA2C,CAA/H;AACH;AAED;;;;;;AAMG;;;;WACH,iBAAqB,GAArB,EAA0B,KAA1B,EAA+B;;;;;;;;qBACvB,KAAK,U;;;;;qBACD,KAAK,WAAL,E;;;;;iDACO,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN;AAAA,yBAAc,KAAI,CAAC,eAAL,CAAqB,GAArB,CAAyB,KAAI,CAAC,MAAL,GAAc,GAAvC,EAA4C,KAA5C,EAAmD,aAAG,EAAG;AACtF,wBAAI,GAAJ,EAAS;AACL,yBAAG,CAAC,GAAD,CAAH;AACH,qBAFD,MAEO;AACH,yBAAG;AACN;AACJ,mBANgC,CAAd;AAAA,iBAAZ,C;;;iDAQA,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN;AAAA,yBAAc,aAAa,CAAC,OAAd,CAAsB,KAAI,CAAC,MAAL,GAAc,GAApC,EAAyC,KAAzC,EAAgD,GAAhD,EAAqD,GAArD,CAAd;AAAA,iBAAZ,C;;;;;;;AAGX,qBAAK,MAAL,CAAY,KAAK,MAAL,GAAc,GAA1B,IAAiC,KAAjC;;;;;;;;;AAEP;AAED;;;;;;AAMG;;;;WACH,iBAAqB,GAArB,EAA0B,YAA1B,EAAuC;;;;;;;;kDAC5B,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN,EAAa;AAC5B,sBAAI,MAAI,CAAC,WAAL,EAAJ,EAAwB;AACpB,0BAAI,CAAC,eAAL,CAAqB,GAArB,CAAyB,MAAI,CAAC,MAAL,GAAc,GAAvC,EAA4C,UAAC,CAAD,EAAI,IAAJ,EAAY;AACpD,0BAAI,CAAJ,EAAO;AACH,2BAAG,CAAC,gBAAO,OAAP,CAAe,MAAI,CAAC,MAAL,CAAY,MAAI,CAAC,MAAL,GAAc,GAA1B,CAAf,EAA+C,YAA/C,CAAD,CAAH;AACH,uBAFD,MAEO;AACH,2BAAG,CAAC,wBAAW,SAAX,CAAqB,IAArB,EAA2B,EAA3B,IAA+B,YAA/B,GAA4C,IAA7C,CAAH;AACH;AACJ,qBAND;AAOH,mBARD,MAQO;AACH,iCAAa,CAAC,OAAd,CAAsB,MAAI,CAAC,MAAL,GAAc,GAApC,EAAyC,cAAI;AAAA,6BAAI,GAAG,CAAC,gBAAO,OAAP,CAAe,IAAf,EAAqB,YAArB,CAAD,CAAP;AAAA,qBAA7C,EAA2F,WAAC,EAAG;AAC3F,yBAAG,CAAC,gBAAO,OAAP,CAAe,MAAI,CAAC,MAAL,CAAY,MAAI,CAAC,MAAL,GAAc,GAA1B,CAAf,EAA+C,YAA/C,CAAD,CAAH;AACH,qBAFD;AAGH;AACJ,iBAdM,C;;;;;;;;;AAeV;AAED;;;;AAIG;;;;WACH,gBAAiB;;;;;;;;;AACT,oB,GAAO,E;;qBACP,KAAK,U;;;;;qBACD,KAAK,WAAL,E;;;;;;AACO,uBAAM,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN;AAAA,yBAAc,MAAI,CAAC,eAAL,CAAqB,IAArB,CAA0B,UAAC,GAAD,EAAM,IAAN,EAAc;AAC3E,wBAAI,GAAJ,EAAS;AACL,yBAAG,CAAC,GAAD,CAAH;AACH,qBAFD,MAEO;AACH,yBAAG,CAAC,IAAD,CAAH;AACH;AACJ,mBANsC,CAAd;AAAA,iBAAZ,CAAN;;;AAAP,oB;;;;;;AAQO,uBAAM,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN;AAAA,yBAAc,aAAa,CAAC,IAAd,CAAmB,GAAnB,EAAwB,GAAxB,CAAd;AAAA,iBAAZ,CAAN;;;AAAP,oB;;;;;;;AAGJ,oBAAI,GAAG,MAAM,CAAC,IAAP,CAAY,KAAK,MAAjB,CAAP;;;kDAEG,IAAI,CAAC,MAAL,CAAY,aAAG;AAAA,yBAAI,GAAG,CAAC,UAAJ,CAAe,MAAI,CAAC,MAApB,CAAJ;AAAA,iBAAf,C;;;;;;;;;AACV;AAED;;;;;AAKG;;;;WACH,gBAAoB,GAApB,EAAuB;;;;;;;;AACnB,uBAAO,KAAK,MAAL,CAAY,KAAK,MAAL,GAAc,GAA1B,CAAP;;qBACI,KAAK,WAAL,E;;;;;kDACO,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN;AAAA,yBAAc,MAAI,CAAC,eAAL,CAAqB,MAArB,CAA4B,MAAI,CAAC,MAAL,GAAc,GAA1C,EAA+C,aAAG,EAAG;AAClF,wBAAI,GAAJ,EAAQ;AACJ,yBAAG,CAAC,GAAD,CAAH;AACH,qBAFD,MAGK;AACD,yBAAG;AACN;AACJ,mBAPgC,CAAd;AAAA,iBAAZ,C;;;kDASA,IAAI,OAAJ,CAAY,UAAC,GAAD,EAAM,GAAN;AAAA,yBAAc,aAAa,CAAC,MAAd,CAAqB,MAAI,CAAC,MAAL,GAAc,GAAnC,EAAwC,GAAxC,EAA6C,GAA7C,CAAd;AAAA,iBAAZ,C;;;;;;;;;AAEd;AAED;;;;AAIG;;;;WACH,iBAAkB;;;;;;;;;;AACH,uBAAM,KAAK,IAAL,EAAN;;;AAAP,oB;;AACJ,uBAAM,gBAAO,YAAP,CAAqB,IAArB,EAA4B,UAAM,GAAN;AAAA,yBAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAC1C,mCAAM,KAAK,MAAL,CAAY,GAAZ,CAAN;;AAD0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAZ;AAAA,iBAA5B,EAEH,IAFG,CAAN;;;;;;;;;AAGH;;;WAED,0BAA2B;;;;;;;;oBAClB,KAAK,U;;;;;AACN,qBAAK,UAAL,GAAkB,IAAlB;;AACA,uBAAM,gBAAO,YAAP,CAAoB,MAAM,CAAC,IAAP,CAAY,KAAK,MAAjB,CAApB,EAA8C,UAAM,GAAN;AAAA,yBAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAC5D,mCAAM,KAAK,OAAL,CAAa,GAAb,EAAkB,KAAK,MAAL,CAAY,GAAZ,CAAlB,CAAN;;AAD4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAZ;AAAA,iBAA9C,EAEH,IAFG,CAAN;;;;;;;;;AAIP;;;WAED,4BAA6B;;;;;;;;;qBACrB,KAAK,U;;;;;;AACM,uBAAM,KAAK,IAAL,EAAN;;;AAAP,oB;AACA,sB,GAAS,E;;AACb,uBAAM,gBAAO,YAAP,CAAoB,IAApB,EAA0B,UAAM,GAAN;AAAA,yBAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAC1B,mCAAM,KAAK,OAAL,CAAa,GAAb,CAAN;;AAD0B;AACxC,kCAAM,CAAC,GAAD,CADkC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAZ;AAAA,iBAA1B,CAAN;;;AAGA,qBAAK,KAAL;AACA,qBAAK,UAAL,GAAkB,KAAlB;AACA,qBAAK,MAAL,GAAc,MAAd;;;;;;;;;AAEP;;;;;;AA5IL;AAEW,8BAAc,EAAd;AACA,8BAAiB,EAAjB;AACA,kCAAsB,IAAtB;AACA,uCAAkB,IAAlB,C;;;;;;;ACbX;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mEAAa,KAAK,4DAAM;AACpE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;;AC9CA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;;;;;ACjBA,aAAa,mBAAO,CAAC,EAAW;AAChC,WAAW,mBAAO,CAAC,EAAS;AAC5B,UAAU,mBAAO,CAAC,EAAQ;AAC1B,UAAU,mBAAO,CAAC,EAAQ;AAC1B,gBAAgB,mBAAO,CAAC,GAAuB;AAC/C;AACA;;AAEA,mBAAO,CAAC,EAAS;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;;;;;AC9BD,cAAc,mBAAO,CAAC,CAAW;AACjC,YAAY,mBAAO,CAAC,EAAU;AAC9B,cAAc,mBAAO,CAAC,EAAY;AAClC;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClB8C;AACY;AACY;AAChB;AACtD;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wCAAS,+BAA+B,wCAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,uBAAuB,0CAAe;AACtC;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,4BAA4B,0CAAe;AAC3C;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD;AACA;AACA,wBAAwB,0CAAe;AACvC;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,wCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACzIkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;ACjBkC;AACM;AACxC;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoB;;AAErB;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvByD;AACH;AACd;AAC8B;AACF;AACR;AAC5D;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,mFAAmF,QAAQ,sCAAS;AACpG,+BAA+B,wCAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB,EAAE,EAAE;AACzB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qCAAQ,4DAA4D,yBAAyB;AAChJ;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,gBAAgB;AAC/D;AACA;AACA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,kDAAkD,EAAE;AAC9J;AACA;AACA;AACA;AACA,2EAA2E,eAAe;AAC1F;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,QAAQ,sCAAS;AAChF,mDAAmD,wCAAW;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC,EAAE,EAAE;AAC7C;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,0DAA0D,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA,oFAAoF,2DAA2D;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,kEAAkE;AACtJ;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oFAAoF,6DAA6D;AACjJ;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA,uCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC,SAAS;AACT;AACA;AACA,gDAAgD,kCAAkC,EAAE;AACpF;AACA;AACA,kEAAkE,uBAAuB,EAAE;AAC3F,mGAAmG,sDAAsD,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kBAAkB,EAAE,wBAAwB,yCAAyC,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,sDAAsD,cAAc,4DAA4D,kEAAkE;AAClM,iDAAiD,cAAc,uDAAuD,6DAA6D;AACnL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8DAA8D,sDAAe;AAC7E,0DAA0D,cAAc,4DAA4D,kEAAkE;AACtM,qDAAqD,cAAc,uDAAuD,6DAA6D;AACvL;AACA;AACA;AACA;AACA;AACA,gEAAgE,kDAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACnpBkC;AAClC;AACA;AACA,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;ACjOkC;AAClC,IAAI,mDAAyB;AAC7B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACoC;;AAErC;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChBkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrB+E;AACN;AAC7B;AACmC;AACnB;AACU;AACZ;AACiB;AACE;AACO;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,gEAAgE,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAyB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,8DAA8D,EAAE;AACxI,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC,kDAAW;AAC3C;AACA;AACA;AACA,8BAA8B,mDAAyB;AACvD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8BAA8B,kDAAW,sBAAsB,0DAAmB;AAClF,oFAAoF,mEAAmE,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAW;AACzC,uFAAuF,0BAA0B,EAAE;AACnH;AACA,0BAA0B,+CAAuB;AACjD;AACA,8BAA8B,sDAAe;AAC7C,kFAAkF,uBAAuB,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAwB;AACtD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,yBAAyB;AAC9I;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,SAAS;AACT;AACA;AACA,6CAA6C,6BAA6B,EAAE;AAC5E;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACvNkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,mEAAiC;AACrC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnB8C;AAC9C;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,mDAAmD,0CAAa,0CAA0C,mCAAM;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;ACnN0D;AAChB;AAC4C;AACtF;AACA;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,oFAAoF,wCAAwC,EAAE;AAC9H;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAsD;AAClG,8CAA8C,uDAAuD;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,sDAAsD;AAC7F;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oDAAoB;AACnF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4EAA4E,gDAAgD,EAAE;AAC9H,6EAA6E,uBAAuB,EAAE;AACtG,mEAAmE,8EAA8E,EAAE;AACnJ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,qBAAU;AACc;;AAE1B;;;ACpRkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA,sFAAsF,+BAA+B,EAAE,gCAAgC;AACvJ;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACrBiF;AACnC;AAC9C;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0EAA0E,iBAAiB,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iCAAiC,EAAE;AAChF,0CAA0C,uCAAuC,EAAE;AACnF,6CAA6C,wDAAwD,EAAE;AACvG;AACA;AACA,4EAA4E,wDAAwD,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sCAAO;AACvC;AACA;AACA;AACA;AACA;AACA,2EAA2E,2CAA2C,EAAE;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4CAA4C,EAAE;AAC3H;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACtFuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAkD,EAAE;AAC/G,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,2DAA2D,uEAAuE,EAAE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,4CAA4C,EAAE;AACpG;AACA,yBAAyB;AACzB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,8CAA8C,EAAE;AAC1G;AACA,yCAAyC,mCAAM;AAC/C;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,6DAA6D,EAAE;AAC9H,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACiD;;AAElD;;;ACtIkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;AClByG;AACvD;AACqC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6EAAsC;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6EAAsC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC9FkC;AAClC;AACA;AACA;AACA,IAAI,yFAA4C;AAChD,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuD;;AAExD;;;AClBkC;AACM;AACxC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;AChCkC;AACM;AACxC;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,oCAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/BkD;AACR;AACkB;AACR;AACpD;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAAc;AAC/C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,kDAAW;AAChE,iCAAiC,sDAAe;AAChD;AACA;AACA,iCAAiC,qBAAU;AAC3C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AClDkC;AAClC,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;ACdkC;AAClC;AACA;AACA;AACA,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;ACjB8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA,wBAAwB,0CAAa,KAAK,mCAAM,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,mDAAmD,EAAE;AACjI,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,2DAA2D,EAAE;AAC9I,sDAAsD,0CAAa,KAAK,mCAAM;AAC9E;AACA,SAAS;AACT;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,WAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;;;;;;;ACpK8C;AACF;AAC4B;AACxE;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,oCAAoC,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA;AACA,0DAA0D,gDAAgD;AAC1G,kEAAkE,8CAA8C;AAChH,gCAAgC,4BAAQ;AACxC;AACA;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA,8CAA8C,8BAAS;AACvD,4CAA4C,8BAAS;AACrD;AACA;AACA;AACA,0CAA0C,wDAAsB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,4BAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,mEAAmE,EAAE;AACzI;AACA;AACA;AACA,0EAA0E,wCAAwC,EAAE;AACpH,4BAA4B;AAC5B;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACnLkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,2DAA6B;AACjC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;AClB+C;AACA;AAC/C;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,mDAAmD,0DAA0D;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA,wBAAwB,4BAAQ;AAChC;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmC;;AAEpC;;;ACrFkC;AAClC;AACA;AACA;AACA,IAAI,uEAAmC;AACvC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;ACjBsE;AACgC;AACtG;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0DAA0D;AAC/G;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA,uGAAuG,wDAAwD,EAAE;AACjK;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,0CAA0C,uEAAmC;AAC7E;AACA;AACA;AACA,yBAAyB;AACzB,wGAAwG,0CAAa,CAAC,0CAAa,KAAK,mCAAM,wBAAwB,mCAAM;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;AC/G+C;AAC/C;AACA;AACA;AACA,IAAI,+DAA+B;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,4CAA4C,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AC/DiE;AACb;AACkB;AACU;AACO;AACA;AACjB;AACV;AACQ;AACP;AACc;AACJ;AACkB;AAC7C;AAC5C;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,4EAA4E,4BAA4B,EAAE;AAC1G,gFAAgF,4BAA4B,EAAE;AAC9G,6EAA6E,4BAA4B,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,8BAA8B,EAAE;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iDAAwB;AAC1E;AACA;AACA;AACA;AACA;AACA,8FAA8F,kCAAkC,EAAE;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAA6B;AACvD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAY,2DAA6B;AACzC,0EAA0E,+BAA+B,EAAE;AAC3G,0EAA0E,8BAA8B,EAAE;AAC1G,0EAA0E,8BAA8B,EAAE;AAC1G,8EAA8E,kCAAkC,EAAE;AAClH,2EAA2E,gCAAgC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,2GAA2G,EAAE;AACzK;AACA,4DAA4D,+KAA+K,EAAE;AAC7O;AACA,4DAA4D,mIAAmI,EAAE;AACjM;AACA,gEAAgE,+KAA+K,EAAE;AACjP;AACA,6DAA6D,+KAA+K,EAAE;AAC9O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAiB;AAC1C;AACA,4DAA4D,0GAA0G,EAAE;AACxK;AACA,4DAA4D,8KAA8K,EAAE;AAC5O;AACA,4DAA4D,kIAAkI,EAAE;AAChM;AACA,gEAAgE,8KAA8K,EAAE;AAChP;AACA,6DAA6D,8KAA8K,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,kDAAW;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,iGAAiG,mDAAY;AAC7G;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mGAAmG,mDAAY;AAC/G,mGAAmG,gDAAS;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,4EAA4E,uDAAgB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA,mDAAmD,wCAAW;AAC9D;AACA;AACA,2HAA2H;AAC3H;AACA,iFAAiF,iDAAwB;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,iFAAiF,6CAAsB;AACvG;AACA;AACA;AACA;AACA;AACA,iFAAiF,+DAA+B;AAChH;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,gFAAgF,qCAAQ;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA,iDAAiD,0BAA0B;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,yCAAyC;AACzC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,yGAAyG,QAAQ,sCAAS;AAC1H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA,qDAAqD,qCAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,2DAA6B;AACvE;AACA,yBAAyB;AACzB,0DAA0D,uDAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,6GAA6G,QAAQ,sCAAS;AAC9H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0GAA0G,QAAQ,sCAAS;AAC3H;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA,sDAAsD,2DAA6B;AACnF,0EAA0E,uDAAgB;AAC1F,wDAAwD,4BAAQ,aAAa;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,6CAA6C,uDAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uIAAuI,wBAAwB,EAAE;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC0B;;AAE3B;;;AC7zBkC;AAClC;AACA;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;ACjB8C;AACF;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,eAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ,2DAA2D;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kDAAkD;AACtG;AACA,sBAAsB;AACtB;AACA,oDAAoD,6CAA6C;AACjG;AACA;AACA,YAAY,4BAAQ;AACpB;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;;AAEnB;;;;;;AC9OqC;AACU;AACgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,6DAA6D;AAC1J;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6BAA6B,GAAG,sBAAsB;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAO;AACtD;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,wCAAc;AACtB;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAO;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AClKqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,eAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yFAAyF,6DAA6D;AACtJ;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,6BAA6B,GAAG,sBAAsB;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+EAA+E,4BAAQ;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,eAAO;AAClD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,CAAC;AAC4C;;AAE7C;;;ACnJqC;AACU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAO;AACjD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B,GAAG,sBAAsB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb;AACA;AACA;AACA,mGAAmG;AACnG,qGAAqG;AACrG;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,4BAAQ;AAC/B,aAAa;AACb,SAAS;AACT;AACA;AACA,sCAAsC,eAAO;AAC7C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA,YAAY,4BAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;AC7MgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,QAAQ,sCAAS;AAC7G;AACA;AACA;AACA,mCAAmC,wCAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,uEAAuE,0CAAa,KAAK,mCAAM,gFAAgF,8BAA8B,EAAE;AAC/M;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC;AACA;AACA,iEAAiE,qCAAQ,sDAAsD,uBAAuB;AACtJ;AACA;AACA;AACA;AACA,uDAAuD,QAAQ,gBAAgB;AAC/E;AACA;AACA;AACA;AACA,qDAAqD,0BAA0B;AAC/E;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,EAAE,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,wDAAwD,EAAE;AAChH;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsC;;AAEvC;;;AChK+B;AACM;AACrC;AACA;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mCAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACiC;;AAElC;;;ACnFyD;AACM;AACX;AAC6B;AAC7C;AACgD;AACoB;AAClB;AACV;AACM;AACtC;AAC5C;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,mCAAiB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,4BAAQ;AAClH,mGAAmG,QAAQ,sCAAS;AACpH;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAA0B;AACxF,kEAAkE,eAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,6CAAsB;AAC/F;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,qEAAqE,uDAA2B;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,+CAAuB;AAC3E,oDAAoD,mEAAiC;AACrF,oDAAoD,iDAAwB;AAC5E;AACA;AACA;AACA;AACA,4DAA4D,iDAAwB;AACpF;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,sEAAsE,+BAAe;AACrF;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA,kGAAkG,yCAAyC,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qCAAQ;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;;;;ACvMyD;AACU;AACwC;AACZ;AACjC;AACR;AACc;AAC+C;AACU;AACtC;AACvB;AACM;AAC+C;AACzD;AACe;AACF;AACL;AACuB;AACd;AAC3B;AAClD;AACA;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC;AACnF;AACA;AACA;AACA;AACA,YAAY,kCAAW,2BAA2B,gBAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kDAAW;AACzE;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mDAAmD,EAAE;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA,+CAA+C,0FAA0F,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qEAAqE,6EAAsC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,oCAAY;AAC3H;AACA;AACA,8BAA8B,oCAAY;AAC1C;AACA;AACA;AACA;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA,+BAA+B,eAAe,EAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,0DAA0D,iCAAgB;AAC1E,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC,sCAAsC,iCAAgB;AACtD,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,0DAA0D,iCAAgB;AAC1E,gBAAgB,iCAAgB;AAChC,qBAAqB,iCAAgB;AACrC,oBAAoB,iCAAgB;AACpC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA,kEAAkE,iCAAgB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAgB;AACzD;AACA;AACA;AACA;AACA,oBAAoB,iCAAgB;AACpC;AACA;AACA,kCAAkC,qCAAQ,CAAC,qCAAQ,GAAG,oBAAoB,KAAK,UAAU;AACzF;AACA,gBAAgB,iCAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA,sDAAsD,kDAAmB;AACzE;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iBAAiB,eAAe,4EAA4E,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA,uEAAuE,yCAAyC,EAAE;AAClH;AACA;AACA;AACA,gCAAgC,mCAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+DAA+B;AACrD;AACA;AACA,oCAAoC,6BAAc;AAClD,sBAAsB,6CAAsB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAsB;AACjE;AACA,SAAS;AACT;AACA,sBAAsB,2DAA6B;AACnD;AACA;AACA;AACA;AACA,gDAAgD,qCAAkB;AAClE;AACA;AACA;AACA,gDAAgD,qBAAU;AAC1D;AACA,0BAA0B,yFAA4C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,8BAA8B,mEAAiC;AAC/D;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACltB0D;AACV;AAChD;AACA;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,2BAAa;AACe;;AAE9B;;;;;;AC7DgD;AACU;AACE;AACF;AACA;AAC1D;AACA;AACA;AACA,IAAI,yCAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD,uBAAuB,yDAAkB;AACzC,yCAAyC,kCAAW;AACpD,uBAAuB,qCAAkB;AACzC,mBAAmB,2BAAa;AAChC;AACA;AACA,CAAC;AAC+B;;AAEhC;;;ACzBkC;AAClC;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;;;;;;;;;;;;;ACjB0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA,0DAA0D,UAAU,IAAI,QAAQ,YAAY,OAAO,sBAAsB,UAAU;AACnI;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;;AAErB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACG;;AAE9B;;;;;;;;;AC9G0D;AACqB;AACrB;AACoB;AACc;AAC5F,IAAI,2BAAa;AACjB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qCAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACG;;AAEzB;;;AC3F0D;AACoC;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qCAAqC,4CAAgB;AACrD,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,8DAAyB;AACO;;AAElC;;;AC9E0D;AACqB;AACb;AACY;AACc;AAC5F,IAAI,mCAAiB;AACrB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,6CAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAO,CAAC,qJAA6B;AAC/D;AACA;AACA,sBAAsB,wEAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,oDAAoB;AACO;;AAE7B;;;;;;;;;;;;ACzF0D;AACoC;AAC9B;AACyB;AACG;AACR;AACzB;AACY;AACvE;AACA;AACA;AACA,IAAI,+BAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yCAAyC,4CAAgB;AACzD,6BAA6B;AAC7B,yBAAyB;AACzB;AACA,yBAAyB;AACzB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,8DAAyB;AACA;;AAE3B;;;ACvM0D;AACqB;AAC3B;AAC0B;AAC9E,IAAI,qBAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0DAAuB;AAC7C;AACA,sBAAsB,0DAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,+BAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA,qBAAqB;AACrB,8BAA8B,6BAA6B;AAC3D,qBAAqB;AACrB,iBAAiB;AACjB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC,CAAC,oDAAoB;AACA;;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvF4E;AACZ;AAC8B;AACF;AACR;AACf;AACZ;AACU;AACE;AACM;AACE;AACV;AACE;AACf;AACK;AACZ;AACd;AACsC;AACvE;AACA;AACA;AACA,IAAI,uCAAmB;AACvB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kCAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA,mDAAmD,wBAAwB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAAgB;AAClD;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,0EAA+B;AACrD,gDAAgD,QAAQ,sCAAS;AACjE;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAK,UAAU,sBAAK;AACzF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,gEAAgE,EAAE;AAChJ;AACA;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,qEAAqE,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sBAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,6EAA6E,mEAAmE,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,oBAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,wDAAwD,sBAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA,yFAAyF,oBAAoB,EAAE;AAC/G;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,iFAAiF,gEAAgE,EAAE;AACnJ;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,iJAAiJ,oBAAoB,EAAE;AACvK,sFAAsF,kCAAkC,EAAE;AAC1H,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,2IAA2I,oBAAoB,EAAE;AACjK,gFAAgF,kCAAkC,EAAE;AACpH,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kCAAW;AAC9D;AACA;AACA,6BAA6B;AAC7B;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,4DAA4D,kCAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,kCAAW;AAC/E;AACA,oEAAoE,6CAA6C,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA,gFAAgF,oBAAoB,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,yBAAyB;AACzB,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,iCAAiC,4BAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA,+IAA+I,oBAAoB,EAAE;AACrK,oFAAoF,kCAAkC,EAAE;AACxH,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,kFAAkF,kCAAkC,EAAE;AACtH;AACA,qFAAqF,uCAAuC,EAAE;AAC9H;AACA;AACA;AACA,mJAAmJ,oBAAoB,EAAE;AACzK,wFAAwF,kCAAkC,EAAE;AAC5H,uDAAuD,sBAAK;AAC5D,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,kCAAW;AAClE;AACA;AACA,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+HAA+H,sCAAsC,EAAE;AACvK,iCAAiC;AACjC;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA,yDAAyD,sBAAK;AAC9D;AACA;AACA;AACA,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,2CAA2C,qCAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,kCAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,oBAAoB,EAAE;AAC7K,mGAAmG,yCAAyC,EAAE;AAC9I,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA;AACA,6JAA6J,oBAAoB,EAAE;AACnL,yGAAyG,yCAAyC,EAAE;AACpJ,mDAAmD,sBAAK;AACxD,qDAAqD,sBAAK;AAC1D;AACA;AACA,iFAAiF,+EAA+E,EAAE;AAClK;AACA;AACA;AACA;AACA;AACA,gFAAgF,sGAAsG,EAAE;AACxL;AACA;AACA;AACA;AACA;AACA,mFAAmF,iFAAiF,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,oBAAoB,EAAE;AAC3F;AACA;AACA;AACA;AACA,6IAA6I,oBAAoB,EAAE;AACnK,wFAAwF,kCAAkC,EAAE;AAC5H,+CAA+C,sBAAK;AACpD,iDAAiD,sBAAK;AACtD;AACA;AACA;AACA,uDAAuD,gDAAgD,EAAE;AACzG,wDAAwD,gCAAgC,EAAE;AAC1F;AACA,mFAAmF,iCAAiC,EAAE;AACtH,2CAA2C,sBAAK;AAChD,6CAA6C,sBAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,oBAAoB,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kCAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,8CAA8C,qCAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,kEAAkE,EAAE;AACxJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,oFAAoF,gEAAgE,EAAE;AACtJ;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,0EAA0E,EAAE;AACxK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,wCAAc,yDAAyD,mCAAmC,EAAE;AACrL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4FAA4F,wEAAwE,EAAE;AACtK;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,0CAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,wCAAwC,qCAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,qDAAqD,sBAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gCAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,oCAAoC,qCAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB,EAAE;AACnF;AACA,kFAAkF,mCAAmC,EAAE;AACvH;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uIAAuI;AACvI;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,oBAAI;AACnD;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAM;AAC3C;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAAM;AACnC;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,sCAAS;AAC5G;AACA;AACA,uCAAuC,wCAAW;AAClD;AACA;AACA,wDAAwD,sBAAK;AAC7D,yFAAyF,oGAAoG;AAC7L;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,wGAAwG,EAAE;AAC3L,8EAA8E,QAAQ,sCAAS;AAC/F;AACA;AACA,2DAA2D,wCAAW;AACtE;AACA;AACA;AACA;AACA,iEAAiE;AACjE,kFAAkF,kCAAW;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,wBAAwB,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wIAAwI,oDAAoD,EAAE;AAC9L,iIAAiI,mDAAmD,EAAE;AACtL;AACA,oHAAoH;AACpH;AACA,mIAAmI,EAAE;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,iDAAiD,EAAE,EAAE;AACrD;AACA;AACA;AACA,qEAAqE,4BAAQ;AAC7E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,mGAAmG,iEAAiE,EAAE;AACtK,2DAA2D,kCAAW;AACtE;AACA,2FAA2F,yBAAyB,EAAE;AACtH,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,kGAAkG,iEAAiE,EAAE;AACrK,2DAA2D,gCAAU;AACrE;AACA,0FAA0F,yBAAyB,EAAE;AACrH;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,wEAAwE,4BAAQ;AAChF;AACA;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,2DAA2D,wCAAc;AACzE;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,yEAAyE,4BAAQ;AACjF;AACA,6CAA6C,4BAA4B,wCAAwC,EAAE;AACnH;AACA,wGAAwG,oEAAoE,EAAE;AAC9K;AACA;AACA;AACA,2DAA2D,0CAAe;AAC1E;AACA,kGAAkG,4BAA4B,EAAE;AAChI;AACA,4GAA4G,uCAAuC,EAAE;AACrJ;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C,oEAAoE,4BAAQ;AAC5E;AACA,6CAA6C,uBAAuB,mCAAmC,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,2DAA2D,gCAAU;AACrE;AACA;AACA,2FAA2F,yBAAyB,EAAE;AACtH;AACA;AACA,2FAA2F,+DAA+D,EAAE;AAC5J;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,kDAAkD,EAAE;AACzH;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,kCAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG;AACA,iIAAiI,oBAAoB,EAAE;AACvJ,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA;AACA,mCAAmC,mBAAmB,EAAE;AACxD,oCAAoC,iBAAiB,8GAA8G,EAAE;AACrK,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA,uBAAuB,sBAAK;AAC5B;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,qCAAqC,8DAA8D;AACnG;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yDAAyD,oBAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA,2EAA2E,iBAAiB;AAC5F,uEAAuE,aAAa;AACpF;AACA,kDAAkD,sBAAK;AACvD;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,gIAAgI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,gCAAgC,EAAE;AACzH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,6CAA6C,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD;AACA,4BAA4B,sBAAK,8DAA8D,sBAAK;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,iCAAiC,EAAE;AAC1G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,sEAAsE,oBAAoB,EAAE;AAC5F;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,8EAA8E,6BAA6B,EAAE;AAC7G,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,gCAAU;AACzD,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,uDAAuD,wCAAc;AACrE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,wEAAwE,6BAA6B,EAAE;AACvG,4FAA4F,6BAA6B,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,yDAAyD,0CAAe;AACxE,mBAAmB,sBAAK;AACxB;AACA;AACA;AACA;AACA;AACA,iDAAiD,kCAAW;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK,sBAAsB,oBAAI;AACzE;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,0CAAe;AACc;;AAE/B;;;ACp6FkE;AAC4B;AACF;AACR;AACd;AACC;AACvE,IAAI,2DAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,uCAAmB;AACrB;AACA;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA,yBAAyB,mCAAM;AAC/B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,wEAA8B;AACpE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,gEAA0B;AAChE,oDAAoD,8CAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,8CAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2DAA0B;AACgB;;AAE5C;;;AC7L0D;AACE;AACC;AAC6C;AAC/B;AAC3E,IAAI,2CAAe;AACnB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC,CAAC,qDAAc;AAChB,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+KAA+K,4DAA4D,EAAE;AAC7O;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iEAAgC,0JAA0J,4DAA4D,EAAE;AAC3Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6CAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,2CAAe;AACsB;;AAEvC;;;AC1HiE;AACD;AACZ;AACU;AACT;AACA;AACG;AACa;AACE;AACrB;AACA;AACS;AACZ;AAC6B;AACmB;AACnD;AAC+B;AAC3E;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qDAAc;AACzC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,gDAAS;AACpC;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,2BAAa;AACxC;AACA,2BAA2B,gDAAkB;AAC7C;AACA,2BAA2B,mCAAiB;AAC5C;AACA,2BAA2B,kCAAW;AACtC;AACA,2BAA2B,mDAAY;AACvC;AACA,2BAA2B,sDAAe;AAC1C;AACA,2BAA2B,kDAAW;AACtC;AACA,2BAA2B,qBAAU;AACrC;AACA,2BAA2B,0DAAmB;AAC9C;AACA,2BAA2B,uDAA2B;AACtD;AACA,0BAA0B,qCAAkB;AAC5C;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACO;AACP,4BAA4B,kBAAkB;AAC9C;AACA;;AAEA;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,6BAA6B,EAAE;AACxF;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA,kBAAkB;AAClB;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,kJAAkJ,4BAA4B,EAAE;AAChL;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;ACxH8C;AACI;AAClD;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA,eAAe,wCAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,sCAAsC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,0CAAa,KAAK,mCAAM;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ,eAAe,YAAY,UAAU,EAAE,EAAE,EAAE;AACnE;AACA,gCAAgC,0CAAa,KAAK,mCAAM;AACxD;AACA,sFAAsF,OAAO;AAC7F,qBAAqB,QAAQ,cAAc,EAAE,QAAQ,QAAQ,eAAe,WAAW,EAAE,EAAE;AAC3F,qBAAqB,QAAQ,eAAe,wFAAwF,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,cAAc;AACd,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,+CAA+C,0CAAa,KAAK,mCAAM;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD,4CAA4C,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACtY8C;AACc;AAC5D;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,mCAAmC,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAW;AACpD;AACA;AACA;AACA;AACA,sCAAsC,0CAAa,KAAK,mCAAM;AAC9D,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wDAAwD,EAAE;AAC7H;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,4DAA4D,EAAE;AACnI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,0DAA0D,EAAE;AACjI;AACA;AACA,qEAAqE,8DAA8D,EAAE;AACrI;AACA;AACA,qEAAqE,iEAAiE,EAAE;AACxI;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B,4CAA4C,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE;AAC1G;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,4BAA4B,EAAE;AAC7F,mFAAmF,4BAA4B,EAAE;AACjH;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;ACnD8C;AACY;AACE;AACA;AACQ;AACV;AAC0B;AACpF;AACA;AACA;AACA;AACA,IAAI,2DAA6B;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uBAAuB,wCAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAW,uCAAuC,0DAAmB;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,oBAAoB,mCAAM;AACpG,6DAA6D,2CAA2C,EAAE;AAC1G;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,0CAA0C,EAAE;AAC/J;AACA,6EAA6E,yBAAyB,EAAE;AACxG;AACA;AACA;AACA,+FAA+F,gEAAgE,EAAE;AACjK;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,0CAA0C,EAAE;AAC7K;AACA;AACA;AACA;AACA;AACA,yGAAyG,gEAAgE,EAAE;AAC3K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;AC5N4D;AACA;AACQ;AACV;AAC1D;AACA;AACA;AACA;AACA,IAAI,yEAAoC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,wCAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AAC+C;;AAEhD;;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,qEAAqE,8BAA8B,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA,8EAA8E,kBAAkB,EAAE;AAClG,iEAAiE,sBAAsB,EAAE;AACzF;AACA;AACA,2FAA2F,kBAAkB,EAAE;AAC/G,kFAAkF,wDAAwD,EAAE;AAC5I;AACA;AACA;AACA,8FAA8F,6CAA6C,EAAE;AAC7I;AACA;AACA;AACA,oGAAoG,4EAA4E,EAAE;AAClL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,yCAAyC,oBAAoB,EAAE;AAC/D;AACA;AACA,8EAA8E,oCAAoC,EAAE;AACpH;AACA;AACA;AACA,SAAS,IAAI;AACb,6JAA6J,4BAA4B,EAAE;AAC3L;AACA;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACxF0D;AACE;AACA;AACQ;AACP;AACuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uDAAuD;AAChE,SAAS,uDAAuD;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAwE;AAC5F,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8CAA8C,mDAAY,qCAAqC,yBAAyB,EAAE;AAC1H,oBAAoB;AACpB;AACA;AACA,uCAAuC,cAAc;AACrD;AACA;AACA;AACA,wJAAwJ,uBAAuB,EAAE;AACjL;AACA;AACA,aAAa;AACb;AACA,oBAAoB;AACpB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,8CAA8C,EAAE;AACrI;AACA;AACA,wFAAwF;AACxF;AACA;AACA,cAAc;AACd;AACA,yGAAyG,gEAAgE,EAAE,EAAE;AAC7K;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,8FAA8F,+CAA+C,EAAE;AAC/I;AACA,uCAAuC,wCAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kDAAW,uCAAuC,0DAAmB;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iEAAiE;AACjE,0DAA0D;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACoC;;AAErC;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;;AAEzB;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC9B8C;AAC0B;AACpB;AACQ;AACA;AACF;AACM;AACA;AACI;AACM;AACA;AAC1B;AACgC;AACc;AACtB;AACI;AAChB;AACF;AACA;AACY;AACH;AACD;AACkB;AACpF;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2DAA6B;AAC9E,wDAAwD,yEAAoC;AAC5F,6CAA6C,mDAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,uHAAuH,EAAE;AACrL;AACA,mEAAmE,8CAA8C,EAAE;AACnH;AACA,2DAA2D,2EAA2E,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC,aAAa;AACb,SAAS;AACT;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,+BAA+B,EAAE;AACjF;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG,gDAAgD,0EAA0E,EAAE;AAC5H;AACA,2DAA2D,yDAAyD,EAAE;AACtH;AACA,2DAA2D,wEAAwE,EAAE;AACrI;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA,iEAAiE,oDAAoD,EAAE;AACvH;AACA,gLAAgL;AAChL;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,kDAAW,uCAAuC,0DAAmB;AAChI,8DAA8D,sDAAe,uCAAuC,gDAAS;AAC7H,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,+DAA+D,sDAAe;AAC9E;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sDAAe;AACpF,oCAAoC,aAAa;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,iEAAiE,8BAA8B,EAAE;AACjG;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,6DAA6D,0CAAa,KAAK,mCAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,2GAA2G,kCAAkC,EAAE;AAC/I,uHAAuH,mDAAmD,EAAE;AAC5K,SAAS;AACT;AACA;AACA,yCAAyC,8CAA8C,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yCAAyC,8EAA8E,EAAE;AACzH,gDAAgD,4DAA4D,EAAE;AAC9G;AACA;AACA,6DAA6D,qDAAqD,EAAE;AACpH,SAAS;AACT;AACA;AACA,8DAA8D,sDAAsD,EAAE;AACtH,SAAS;AACT;AACA;AACA,4DAA4D,qDAAqD,EAAE;AACnH,SAAS;AACT;AACA;AACA,oEAAoE,yDAAyD,EAAE;AAC/H,SAAS;AACT;AACA;AACA,yCAAyC,4CAA4C,EAAE;AACvF;AACA;AACA,6CAA6C,wBAAwB,EAAE;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB,EAAE;AAC5D,2CAA2C,mCAAmC,EAAE;AAChF,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA,mBAAmB,wCAAc;AACjC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8FAA8F,kDAAkD,EAAE;AAClJ,6BAA6B,wCAAc,EAAE,2EAA2E;AACxH;AACA,4GAA4G,uGAAuG,EAAE;AACrN;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wFAAwF,0DAA0D,EAAE;AACpJ;AACA,0CAA0C,wCAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,+BAA+B,EAAE;AAChJ,4FAA4F,yCAAyC,EAAE;AACvI;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,+CAA+C,wCAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,+CAA+C,wCAA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A4F,4CAA4C,EAAE;AAC1I;AACA,2FAA2F,gDAAgD,EAAE;AAC7I,kGAAkG,mEAAmE,EAAE;AACvK,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,yFAAyF,4BAA4B,EAAE;AACvH,sFAAsF,yBAAyB,EAAE;AACjH,4FAA4F,+BAA+B,EAAE;AAC7H,wFAAwF,2BAA2B,EAAE;AACrH,4FAA4F,+BAA+B,EAAE;AAC7H,6FAA6F,gCAAgC,EAAE;AAC/H,+FAA+F,kCAAkC,EAAE;AACnI,uFAAuF,0BAA0B,EAAE;AACnH,kEAAkE,0DAA0D,EAAE;AAC9H;AACA,kEAAkE,2BAA2B,EAAE;AAC/F,wEAAwE,8BAA8B,EAAE;AACxG;AACA,wEAAwE,2BAA2B,EAAE;AACrG,8EAA8E,8BAA8B,EAAE;AAC9G,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,oJAAoJ,EAAE;AACjO;AACA;AACA;AACA;AACA;AACA,sGAAsG,wEAAwE,EAAE;AAChL,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACgC;;AAEjC;;;AChmBkE;AAClE;AACA;AACA;AACA;AACA;AACA,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC;AACA,SAAS;AACT;AACA;AACA,8DAA8D,sCAAsC,EAAE;AACtG;AACA;AACA,4EAA4E,6CAA6C,EAAE;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mDAAmD,EAAE;AAC5G;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC7KiC;AAC0C;AAC3E;AACA;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uCAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,gEAAgE;AACtH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,qCAAQ,2EAA2E,8BAA8B;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,gBAAgB;AACnE;AACA;AACA;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;AC5O8C;AACwC;AAC1C;AACI;AACE;AACgC;AACC;AACtB;AAC7D;AACA;AACA;AACA,IAAI,mDAAyB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kCAAkC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,qBAAqB,mCAAM,CAAC,4BAA4B;AAChI,kEAAkE,QAAQ,gBAAgB,iBAAiB,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,mCAAmC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,sBAAsB,mCAAM,CAAC,4BAA4B;AAClI,eAAe,sBAAsB;AACrC;AACA,sCAAsC,QAAQ,gBAAgB,kBAAkB,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mCAAM,CAAC,4BAAQ;AAChC,kFAAkF,gCAAgC,oCAAY,YAAY,EAAE;AAC5I,kFAAkF,+BAA+B,oCAAY,CAAC,EAAE;AAChI,+BAA+B,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM,CAAC,4BAA4B;AAC1H;AACA,uCAAuC,oCAAY;AACnD;AACA;AACA;AACA,SAAS;AACT,2CAA2C,2CAAqB,kBAAkB,sBAAsB;AACxG,gDAAgD,+CAAuB;AACvE,wCAAwC,2CAAqB;AAC7D,eAAe,0CAAa,CAAC,0CAAa,KAAK,mCAAM,6BAA6B,mCAAM;AACxF;AACA;AACA,CAAC;AACoC;;AAErC;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;AC9F0D;AAC1D;AACA;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,mBAAmB,6CAAa;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa,2BAA2B,6CAAa;AACjE,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa,2BAA2B,6CAAa;AAC7D,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAa;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,oBAAoB,6CAAa;AACjC;AACA;AACA;AACA,iCAAiC,6CAAa;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;AC/FkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,IAAI,iCAAU;AACd,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;;;;;ACzD0B;AACgC;AAC1D;AACA;AACA;AACA,IAAI,uBAAW;AACf;AACA,6BAA6B,iBAAK;AAClC,+BAA+B,iBAAK;AACpC,8BAA8B,iBAAK;AACnC,gCAAgC,iBAAK;AACrC,8BAA8B,iBAAK;AACnC,wBAAwB,iBAAK;AAC7B,yBAAyB,iBAAK;AAC9B,yBAAyB,iBAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAa,yBAAyB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAa,yBAAyB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAa,yBAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;AC9F4D;AACI;AACtB;AACE;AAC5C;AACA;AACA;AACA,IAAI,2BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,mBAAmB;AAClD;AACA,+BAA+B,iCAAU;AACzC;AACA,+BAA+B,2CAAqB;AACpD;AACA,+BAA+B,uBAAW;AAC1C;AACA;AACA,mBAAmB,2CAAqB;AACxC;AACA;AACA,CAAC;AACwB;;AAEzB;;;AClC+C;AACW;AAC1D;AACA;AACA;AACA,IAAI,2CAAqB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA,uBAAuB,6CAAa;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACtN+C;AACc;AACO;AACE;AAChB;AACtD;AACA;AACA;AACA,IAAI,qCAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,sBAAK;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,uCAAuC;AAC3G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,+CAA+C;AACnH;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,yCAAyC;AAC7G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,6CAA6C;AACjH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,0CAA0C;AAC9G;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oEAAoE,2CAA2C;AAC/G;AACA,qCAAqC;AACrC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+CAA+C,sDAAe,OAAO,cAAc,uDAAuD;AAC1K;AACA;AACA;AACA,kDAAkD,mDAAY;AAC9D;AACA,mHAAmH,uBAAuB;AAC1I;AACA;AACA;AACA;AACA,gCAAgC,0CAA0C,sDAAe,OAAO,cAAc,6CAA6C;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,8DAA8D,sDAAe,GAAG;AAChF;AACA,gDAAgD,cAAc;AAC9D,0CAA0C,cAAc;AACxD,8CAA8C,cAAc;AAC5D,2CAA2C,cAAc;AACzD,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,uCAAuC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,mDAAY;AAC1E,qFAAqF,kCAAkC;AACvH;AACA;AACA,4EAA4E,kCAAkC;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,oFAAoF,yBAAyB;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6B;;AAE9B;;;AC3PgE;AACN;AAC1D;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0JAA0J,wCAAwC;AAClM;AACA;AACA;AACA;AACA;AACA,uBAAuB,2CAAqB;AAC5C;AACA;AACA,uBAAuB,qCAAkB;AACzC;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACpC8C;AAC9C;AACA;AACA;AACA;AACA,IAAI,6BAAc;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,0CAA0C,EAAE;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,2DAA2D,EAAE;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA,oEAAoE;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,kFAAkF,2DAA2D,EAAE;AAC/I;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,6CAA6C,0CAAa,CAAC,0CAAa,KAAK,mCAAM,yBAAyB,mCAAM;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D,uEAAuE;AACvE,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0EAA0E,EAAE;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,wGAAwG,EAAE;AAChN;AACA,aAAa;AACb;AACA,+CAA+C;AAC/C;AACA;AACA,sBAAsB;AACtB;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;;AAE1B;;;ACvN+C;AACiB;AAChE;AACA;AACA;AACA,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B,gDAAgD,iCAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,UAAU,mDAAmD,EAAE,EAAE;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,gCAAgC,EAAE;AAC9I,iHAAiH,gCAAgC,EAAE;AACnJ;AACA;AACA,0GAA0G,gCAAgC,EAAE;AAC5I,mHAAmH,gCAAgC,EAAE;AACrJ;AACA;AACA,kFAAkF,gCAAgC,EAAE;AACpH;AACA;AACA;AACA;AACA,yGAAyG,gCAAgC,EAAE;AAC3I;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uEAAuE,2DAA2D,EAAE;AACpI,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA,kFAAkF,kEAAkE,EAAE;AACtJ,oGAAoG;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,4BAA4B,8BAA8B,EAAE;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,yEAAyE,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,4BAA4B,8BAA8B,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;;AAE5B;;;;;;AChSyD;AACwB;AACQ;AACQ;AACd;AAChB;AACP;AACc;AACY;AACqB;AAC7B;AACtB;AACgB;AACC;AACjB;AACmB;AACD;AACT;AACI;AAClC;AACmC;AACZ;AACR;AACkC;AAChC;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2BAAa;AACvC,0BAA0B,2BAAa;AACvC;AACA,4DAA4D,2CAAqB;AACjF,oDAAoD,+CAAuB;AAC3E,kCAAkC,6BAAc;AAChD,oCAAoC,iCAAgB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,yDAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,qEAAkC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,oBAAoB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,sDAAsD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW,eAAe,qBAAqB;AACvE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sDAAe,2BAA2B,kDAAW,2BAA2B,0DAAmB;AACxJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,sCAAsC,qCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,6DAA8B;AACpE;AACA,gDAAgD,mCAAiB;AACjE;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kDAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,4CAA4C,yDAAkB;AAC9D;AACA;AACA,sCAAsC,+EAAuC;AAC7E;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4BAA4B,yDAAkB;AAC9C;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA,uBAAuB,wCAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yCAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oCAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,mDAAyB;AACrE,0CAA0C,+CAAuB;AACjE;AACA;AACA,QAAQ,kCAAW,eAAe,2BAA2B;AAC7D;AACA;AACA,QAAQ,kCAAW,eAAe,mCAAmC;AACrE;AACA;AACA,QAAQ,kCAAW,eAAe,yBAAyB;AAC3D;AACA;AACA,8FAA8F,sCAAsC,EAAE;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA,uBAAuB,kCAAW;AAClC;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;AC7hBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClB0C;AACiC;AACgB;AAC3F;AACA;AACA;AACA;AACA,IAAI,mCAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,iCAAiC,EAAE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB;AAChD,sEAAsE,iCAAiC,EAAE;AACzG;AACA,sBAAsB,+CAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wDAAwD,EAAE;AACrI;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA;AACA;AACA,CAAC;AAC4B;;AAE7B;;;AC7D+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,8DAA0B;AAC9B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,2DAAuB;AAC3B;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AACkC;;AAEnC;;;AC5FU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFkC;AAClC;AACA;AACA;AACA;AACA,IAAI,2EAAqC;AACzC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgD;;AAEjD;;;;;;ACpBkC;AAClC;AACA;AACA;AACA,IAAI,+CAAuB;AAC3B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkC;;AAEnC;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,qDAA0B;AAC9B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqC;;AAEtC;;;;;;;;;;;;AClBkC;AAClC,IAAI,qEAAkC;AACtC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC6C;;AAE9C;;;;;;ACfkC;AAClC;AACA;AACA;AACA,IAAI,6DAA8B;AAClC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;AClBkC;AAClC;AACA;AACA,IAAI,+DAA+B;AACnC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC0C;;AAE3C;;;AClBkC;AAClC;AACA;AACA,IAAI,6CAAsB;AAC1B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;ACxBkC;AAClC;AACA;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;;;;;;;ACjBkC;AAClC;AACA;AACA,IAAI,6EAAsC;AAC1C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACiD;;AAElD;;;ACjBkC;AAClC;AACA;AACA;AACA,IAAI,uDAA2B;AAC/B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsC;;AAEvC;;;;;;ACnBkC;AAClC;AACA;AACA,IAAI,2CAAqB;AACzB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;;AAEjC;;;ACxBkC;AAClC;AACA;AACA,IAAI,iFAAwC;AAC5C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmD;;AAEpD;;;AClBkC;AAClC;AACA;AACA,IAAI,+EAAuC;AAC3C,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;AClBkC;AAClC;AACA;AACA;AACA,IAAI,yDAA4B;AAChC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuC;;AAExC;;;ACjBkC;AAClC;AACA;AACA,IAAI,iEAAgC;AACpC,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2C;;AAE5C;;;ACjBkC;AAClC;AACA;AACA;AACA;AACA,IAAI,iDAAwB;AAC5B,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;ACrBwD;AACN;AACF;AACK;AACA;AACX;AACK;AACF;AACA;AACF;AACO;AACF;AACH;AACI;AACX;AACQ;AACV;AACiB;AACJ;AACI;AACU;AACL;AACJ;AACG;AACV;AACE;AACR;AACa;AACJ;AACT;AACG;AACL;AACF;AACY;AACS;AAChB;AACS;AACR;AACO;AACO;AACf;AACG;AACH;AACI;AACY;AACjB;AACG;AACD;AACH;AACL;AACiB;AACO;AACD;AACV;AACD;AACI;AACR;AACO;AACI;AACL;AACP;;AAE1C;;;AC9DgD;AACgC;AAChF;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,cAAc;AACd;AACA;AACA,0BAA0B,iDAAwB;AAClD;AACA;AACA,gBAAgB,sBAAsB,iBAAiB,sDAAsD;AAC7G,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;;;AC9DgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtDgD;AACgC;AACoB;AACpG;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAwB;AAC9C;AACA;AACA,sBAAsB,qEAAkC;AACxD;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACpDgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AChBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAC6B;AAC7E;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,kBAAkB,kBAAkB;AACpC,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA,SAAS;AACT;AACA;;AAEA;;;ACbU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,iHAAiH;AACjH;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC9BgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrCgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AClBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACvBgD;AAChD;AACA;AACA;AACO;AACP;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;;ACrBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,sFAAsF,uBAAuB;AAC7G,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACtB8C;AAC8D;AACrG;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,sBAAsB;AAC9E;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA,qBAAqB;AACrB;AACA,uEAAuE;AACvE,wEAAwE,0CAAa,kBAAkB,mCAAM;AAC7G;AACA;AACA,wEAAwE,0CAAa,KAAK,mCAAM;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAU;AACvC;AACA;AACA,6BAA6B,sDAAe;AAC5C;AACA;AACA,6BAA6B,6BAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA,uBAAuB,aAAa;AACpC;AACA;AACA;AACA;;AAEA;;;ACpFgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACdgD;AAC0D;AAC1G;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,2EAAqC;AAC3D;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACfgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACtBgD;AAChD;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA,+BAA+B,2BAA2B,EAAE;AAC5D;AACA,SAAS;AACT;AACA;;AAEA;;;ACzBgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACjB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;AC/BkD;AAClD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;;AAEA;;;AC5B6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACpB6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,8BAA8B,wBAAwB;AACtD;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;ACrB6C;AAC7C;AACA;AACA;AACA;AACA;AACO;AACP;AACA,QAAQ,sBAAsB;AAC9B;AACA;AACA,SAAS;AACT;AACA;;AAEA;;;;;;ACf+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACT+C;AAC/C;AACA;AACA;AACA,aAAa,sBAAsB;AACnC;AACO;AACP,eAAe,oCAAY;AAC3B;;AAEA;;;ACV+C;AACxC;AACP;AACA,mBAAmB,oCAAY;AAC/B;AACA,eAAe,oCAAY;AAC3B;;AAEA;;;ACRU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFU;;AAEV;;;ACFsE;AAC7B;AACS;AAClD;AACA;AACA;AACA,IAAI,qBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kCAAW;AACnC;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,aAAa;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,2DAA2D,0CAAa,oBAAoB,mCAAM;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;;AAEtB;;;ACjPU;;AAEV;;;ACFU;;AAEV;;;ACFgF;;AAEhF;;;ACFU;;AAEV;;;ACFU;;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACF+C;AAC/C;AACA;AAC0B;AACyC;AACO;AAC3B;AACU;AACsB;AAC/E;AACA;AACA;AAC4B;AACU;AACF;AACG;AACF;AACb;AACmB;AACU;AACA;AACM;AACT;AACG;AACH;AACH;AACI;AACD;AACF;AACE;AACA;AACC;AACA;AACA;AACG;AACJ;AACD;AACK;AACD;AACD;AACF;AACG;AACJ;AACD;AACC;AACD;AACA;AACD;AACK;AACH;AACP;AACK;AACK;AACD;AACC;AACO;AACG;AACb;AACL;AACE;AACR;AACJ;AACC;AACD;AACI;AACA;AACO;AACD;AACI;AACF;AACH;AACI;AACE;AACO;AACV;AACD;AACI;AACO;AACZ;AACA;AACE;AACC;AACD;AACF;AACI;AACL;AACK;AACA;AAChB;AACO;AACQ;AACF;AACT;AACM;AACK;AACC;AACR;AACA;AACI;AACC;AACF;AACF;AACS;AACC;AACG;AACC;AACL;AACC;AACN;AACJ;AACG;AACG;AACG;AAC6B;AAC1B;AACc;AACP;AACY;AACA;AACA;AACA;AACI;AACxB;AACe;AACA;AACA;AACM;AACvB;AACgB;AACc;AACpB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAa;AACnC;AACA,qDAAqD,uCAAmB;AACxE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE,WAAW,sCAAS;AACpB,eAAe,wCAAW;AAC1B,sCAAsC,2DAAuB;AAC7D,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACO;AACP,WAAW,gBAAgB,CAAC,mCAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,WAAW,sCAAS;AACpB;AACA,eAAe,wCAAW;AAC1B;AACA;AACA;AACA,6CAA6C,2DAAuB;AACpE;AACA;AACA;AACA;AACA,kEAAkE,+CAA+C,EAAE;AACnH,6FAA6F,6BAA6B,EAAE;AAC5H;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACO;AACP,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACxSA;AAAA;AAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAAa,KAAK,4DAAM;AACjD,mCAAmC,mEAAa,KAAK,4DAAM;AAC3D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;;AC/DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAC3B;AACA;AACA;AACA;AACA;AACO;AACP,kCAAkC,sBAAsB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iDAAiD,kEAAkE,EAAE;AACrH;AACA;AACA;AACA;AACO;AACP,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM,2CAA2C;AACjD;AACO;AACP,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,+BAA+B,EAAE;AAC9F;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,6BAA6B,cAAc;AAC3C,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACjGA;AAAA;AAA+B;AAC/B;AACA;AACA;AACA;AACA;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CAAC,WAAP,CAAmB,GAAnB,EAxBmC,CA0BnC;AACA;;AAEA,aAAO,MAAP;AACH;AAED;;;;;AAKG;;;;WACH,sBAAoB,IAApB,EAA0B,EAA1B,EAA4B;AACzB,aAAO,oBAAW,YAAX,CAAwB,IAAxB,EAA8B,EAA9B,CAAP;AACF;AAED;;;AAGG;;;;WACH,6BAA2B,OAA3B,EAAkC;AAC9B,UAAI,QAAQ,GAAG,EAAf,CAD8B,CAG9B;;AACA,aAAO,CAAC,UAAR,CAAmB,OAAnB,CAA2B,eAAK,EAAG;AAC/B,gBAAQ,CAAC,IAAT,CAAc,KAAd;AACH,OAFD;AAIA,UAAI,MAAM,GAAG,OAAO,CAAC,aAArB;AACA,cAAQ,CAAC,OAAT,CAAiB,eAAK,EAAG;AACrB,eAAO,CAAC,WAAR,CAAoB,KAApB;AACA,cAAM,CAAC,YAAP,CAAoB,KAApB,EAA2B,OAA3B;AACH,OAHD;AAIA,aAAO,CAAC,MAAR;AACH;;;;;;AArKL;AACmB,wBAAyB,IAAzB,C;;;;;;;ACRnB;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnbA;;AACA;;IAEa,M;;;;;;;WAWT,gBAAW;AAAA;;AACP,YAAM,CAAC,iBAAP,GAA2B,IAAI,OAAJ,CAAY,UAAO,OAAP;AAAA,eAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACnC,yBAAM,4CAAqB,OAArB,CAA6B,MAAM,CAAC,iBAApC,EAAuD,GAAvD,CAAN;;AADmC;AACjD,6BADiD;;AAAA,uBAEjD,mBAAO,MAAP,CAAc,WAAd,CAFiD;AAAA;AAAA;AAAA;;AAAA;AAGnC,yBAAM,MAAM,CAAC,cAAP,EAAN;;AAHmC;AAGjD,6BAHiD;AAAA;AAIjD,yBAAM,4CAAqB,OAArB,CAA6B,MAAM,CAAC,iBAApC,EAAuD,WAAvD,CAAN;;AAJiD;AAAA;AAAA;;AAAA;AAMjD,6BAAW,GAAI,WAAW,KAAK,GAA/B;AANiD;AAOjD,yBAAM,MAAM,CAAC,QAAP,CAAgB,WAAhB,CAAN;;AAPiD;AASrD,yBAAO,CAAC,WAAD,CAAP;;AATqD;AAAA;AAAA;AAAA;AAAA;AAAA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,OAAP,CAAe,SAAf,EAAyB,WAAW,CAAC,SAArC,CAAX;AACA,aAAO,SAAQ,IAAK,GAAD,GAAQ,GAAR,GAAc,EAAlB,CAAf;AACH;;;WAED,mBAAiB,MAAjB,EAAyB,KAAzB,EAA8B;AAC1B,iBAAW,CAAC,kBAAZ,CAA+B,MAA/B,IAAyC,KAAzC;AACH;;;;;;AApOL;AAMW,6BAAiB,IAAjB;AAiOX,WAAW,CAAC,kBAAZ,GAAiC,EAAjC;AACA,WAAW,CAAC,SAAZ,GAAwB,EAAxB;AACA,WAAW,CAAC,cAAZ,GAA6B,EAA7B,C;;;;;;;AC/OA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACyB;;AAE1B;;;;;;;;ACvCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D,uBAAuB,QAAQ;AAC/B;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;AC5IA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA,UAAU,mBAAO,CAAC,GAAe;AACjC,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,EAAe;AACvC,kBAAkB,mBAAO,CAAC,EAAiB;AAC3C,UAAU,mBAAO,CAAC,EAAQ;AAC1B,qBAAqB,mBAAO,CAAC,GAAmB;AAChD;;AAEA,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;;;;;;;ACfA;AACA,cAAc,mBAAO,CAAC,CAAW;AACjC,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,EAAU;AAC9B;AACA,6BAA6B;AAC7B;AACA;AACA,qDAAqD,OAAO,EAAE;AAC9D;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,cAAc,mBAAO,CAAC,GAAY;AAClC,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,GAAyB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,eAAe;AACzB;AACA;AACA;AACA,wCAAwC;AACxC;AACA,8BAA8B;AAC9B,6BAA6B;AAC7B,+BAA+B;AAC/B,mCAAmC;AACnC,SAAS,iCAAiC;AAC1C;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;;AACA,IAAM,mBAAmB,GAAG,mBAAO,CAAC,GAAD,CAAnC;;AACA;;AACA;;AACA;AAEA;;;;AAIG;;;IACU,Q;;;;;AAGT;;;;;;AAMG;AACH,oBAAY,WAAZ,EAAyB,IAAzB,EAA+B,YAA/B,EAA4C;AAAA;;AAAA;;AACxC,+BAAM,WAAN,EAAmB,IAAnB,EAAyB,gBAAO,OAAP,CAAe,YAAf,EAA6B,mBAA7B,CAAzB,EAA4E,eAA5E;AACA,UAAK,eAAL,GAAuB,IAAI,+BAAJ,+BAAvB;;AACA,UAAK,WAAL,CAAiB,kBAAjB,EAAqC,MAAK,eAA1C;;AAHwC;AAI3C;;;;WAED,6BAAiB;AACb,aAAO,KAAK,eAAZ;AACH;AAED;;;;;AAKG;;;;WACG,qBAAY,mBAAZ,EAA+B;AAAA;;;;;;;;;;;;;;;;;AACvB,uBAAM,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,mBAAlB,CAAN;;;AAAN,mB;AACJ,qBAAK,YAAL,CAAkB,KAAK,eAAvB;iDACO,G;;;;;;;;;AACV;;;WAED,yBAAa;AACT,WAAK,eAAL,CAAqB,QAArB;AACH;;;WAGK,wBAAY;AAAA;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;;AACV,qBAAK,eAAL,CAAqB,eAArB,CAAqC,KAAK,MAAL,CAAY,yBAAZ,CAArC;;kDACO,G;;;;;;;;;AACV;AAED;;;;AAIG;;;;WACH,wBAAY;AACR;;AACA,UAAI,KAAK,MAAL,CAAY,OAAZ,IAAuB,KAAK,MAAL,KAAgB,kBAAQ,aAAnD,EAAiE;AAC7D,aAAK,eAAL,CAAqB,eAArB,CAAqC,KAAK,MAAL,CAAY,OAAjD;AACH;AACJ;AAED;;;;AAIG;;;;WACH,sBAAa,MAAb,EAAmB,CAAG;;;;EA5DI,2B;;AAA9B,4B;;;;;;;ACXA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;;;;;;AClBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AAC0B;AACR;AACf;AACN;AACN;AACU;AACU;AACvB;AACiB;AACtC;AACoC;AACA;AACtB;AACoB;AACnE;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,4GAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sCAAsC,oGAA0B;AAChE,oDAAoD,uFAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAiB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,2DAA2D,yEAAK;AAChE;AACA;AACA;AACA;AACA,gFAAgF,sCAAsC,EAAE;AACxH;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD,2CAA2C,0BAA0B;AACrE,uCAAuC,sBAAsB;AAC7D,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,sEAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,wDAAwD,yEAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAK;AACtC,mCAAmC,qDAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA;AACA,4DAA4D,qFAAW;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,qFAAW,2DAA2D,wCAAwC,EAAE;AACpL;AACA;AACA,yEAAyE,6CAA6C;AACtH;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,8FAA8F,wDAAwD,EAAE;AACxJ;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,qFAAW;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F,oDAAoD,EAAE;AACpJ,6FAA6F,wCAAwC,EAAE;AACvI,8FAA8F,0CAA0C,EAAE;AAC1I,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI,sFAAsF,iCAAiC,EAAE;AACzH,uFAAuF,mCAAmC,EAAE;AAC5H,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,wEAAwE,mCAAmC,EAAE;AAC7G;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,2DAA2D,EAAE;AAC5I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,sFAAW,mDAAmD,gCAAgC,EAAE;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,8DAA8D,EAAE;AAC/I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,yDAAyD,EAAE;AACxI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,oFAAU,iDAAiD,+BAA+B,EAAE;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,4DAA4D,EAAE;AAC3I;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,+CAA+C,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6FAAe,4DAA4D,qCAAqC,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,kDAAkD,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,8CAA8C,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,qDAAqD,yEAAK;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mFAAU,kDAAkD,+BAA+B,EAAE;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,iEAAiE,4CAA4C,EAAE;AAC/G;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,2FAA2F,gCAAgC,EAAE;AAC7H;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA,4FAA4F,gCAAgC,EAAE;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,yBAAyB,EAAE;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,sEAAI;AACnD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,gFAAgF,8BAA8B,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,QAAQ,+DAAS;AAC5G;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA,wDAAwD,yEAAK,EAAE,wBAAwB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,oDAAM;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,qFAAW;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kHAAkH,2BAA2B,EAAE;AAC/I;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA;AACA,qHAAqH,2BAA2B,EAAE;AAClJ;AACA;AACA;AACA;AACA,sFAAsF;AACtF;AACA;AACA;AACA,6CAA6C;AAC7C,yEAAyE,gEAAQ,8CAA8C,2BAA2B,EAAE;AAC5J;AACA,mHAAmH,iGAAiG,EAAE;AACtN,8GAA8G,6BAA6B,EAAE;AAC7I,wHAAwH,2BAA2B,EAAE;AACrJ;AACA;AACA,2DAA2D,6FAAe;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,6CAA6C;AAC7C;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA;AACA,uHAAuH,oCAAoC,EAAE;AAC7J,iEAAiE;AACjE;AACA;AACA;AACA;AACA,sFAAsF,sFAAW;AACjG;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,oFAAU,EAAE,yCAAyC;AAC3H;AACA;AACA,4EAA4E,kCAAkC,EAAE;AAChH,yEAAyE,wBAAwB,EAAE;AACnG,uFAAuF,sCAAsC,EAAE;AAC/H,6EAA6E,QAAQ,+DAAS;AAC9F;AACA,uDAAuD,iEAAW;AAClE;AACA;AACA,gHAAgH,2CAA2C,EAAE;AAC7J;AACA,yGAAyG,wCAAwC,EAAE;AACnJ;AACA;AACA;AACA;AACA,yGAAyG,sEAAsE,EAAE;AACjL,2FAA2F,0BAA0B,EAAE;AACvH;AACA,sFAAsF,mFAAU;AAChG;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,iDAAiD;AACjD,6CAA6C,EAAE,EAAE;AACjD;AACA;AACA;AACA,6FAA6F,gBAAgB,EAAE;AAC/G;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,EAAE;AAChG,sEAAsE,wEAAwE,EAAE;AAChJ;AACA;AACA;AACA,qEAAqE,wDAAwD,EAAE;AAC/H;AACA;AACA;AACA,uCAAuC,wBAAwB,EAAE;AACjE;AACA,sEAAsE,iFAAiF,EAAE;AACzJ;AACA,uCAAuC,sFAAW;AAClD;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA;AACA,gFAAgF,iCAAiC,EAAE;AACnH;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,gGAAgG,iCAAiC,EAAE;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oEAAoE,kCAAkC,EAAE;AACxG;AACA;AACA;AACA,sFAAsF,0CAA0C,EAAE;AAClI;AACA;AACA;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,yEAAK;AACpD;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA,uBAAuB,qDAAK;AAC5B;AACA;AACA;AACA;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,6CAA6C,sEAAI;AACjD;AACA,iBAAiB,4DAAM;AACvB;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,mEAAmE,iCAAiC,EAAE;AACtG,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA,+CAA+C,mFAAU;AACzD,mBAAmB,qDAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAAc;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,wBAAwB,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF,kCAAkC,EAAE;AACzH,qFAAqF,kCAAkC,EAAE;AACzH;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA;AACA;AACA,+EAA+E,+BAA+B,EAAE;AAChH,iCAAiC,yBAAyB,kCAAkC,EAAE;AAC9F;AACA,+CAA+C,qDAAK;AACpD,iDAAiD,qDAAK;AACtD;AACA;AACA;AACA;AACA;AACA,2CAA2C,qDAAK;AAChD,6CAA6C,qDAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC,CAAC,sFAAe;AACoB;;AAErC;;;;;;;;AChuDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;ACXA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;;;;;;;;ACJa;AACb,IAAI,mBAAO,CAAC,EAAgB;AAC5B,gBAAgB,mBAAO,CAAC,EAAY;AACpC,eAAe,mBAAO,CAAC,EAAW;AAClC,cAAc,mBAAO,CAAC,EAAU;AAChC,gBAAgB,mBAAO,CAAC,CAAW;AACnC,eAAe,mBAAO,CAAC,GAAU;AACjC,gBAAgB,mBAAO,CAAC,GAAiB;AACzC,YAAY,mBAAO,CAAC,EAAQ;AAC5B,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,qBAAqB,mBAAO,CAAC,EAAkB;AAC/C,aAAa,mBAAO,CAAC,EAAS;AAC9B,oBAAoB,mBAAO,CAAC,GAAiB;AAC7C,kBAAkB,mBAAO,CAAC,EAAe;AACzC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,gBAAgB,mBAAO,CAAC,GAAa;AACrC,wBAAwB,mBAAO,CAAC,EAAsB;AACtD,oBAAoB,mBAAO,CAAC,EAAiB;AAC7C,YAAY,mBAAO,CAAC,EAAQ;AAC5B,gBAAgB,mBAAO,CAAC,GAAY;AACpC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,iBAAiB,mBAAO,CAAC,EAAc;AACvC,oBAAoB,mBAAO,CAAC,GAAkB;AAC9C,eAAe,mBAAO,CAAC,EAAkB;AACzC,uBAAuB,mBAAO,CAAC,EAAe;AAC9C,aAAa,mBAAO,CAAC,EAAgB;AACrC,kBAAkB,mBAAO,CAAC,GAA4B;AACtD,YAAY,mBAAO,CAAC,EAAQ;AAC5B,YAAY,mBAAO,CAAC,EAAQ;AAC5B,0BAA0B,mBAAO,CAAC,EAAkB;AACpD,4BAA4B,mBAAO,CAAC,GAAmB;AACvD,2BAA2B,mBAAO,CAAC,GAAwB;AAC3D,uBAAuB,mBAAO,CAAC,GAAsB;AACrD,kBAAkB,mBAAO,CAAC,GAAc;AACxC,oBAAoB,mBAAO,CAAC,GAAgB;AAC5C,mBAAmB,mBAAO,CAAC,GAAgB;AAC3C,kBAAkB,mBAAO,CAAC,GAAe;AACzC,wBAAwB,mBAAO,CAAC,GAAsB;AACtD,YAAY,mBAAO,CAAC,EAAc;AAClC,cAAc,mBAAO,CAAC,EAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA,4BAA4B;AAC5B,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB,0BAA0B,EAAE,EAAE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gCAAgC;AACzF;AACA,OAAO;AACP;AACA;AACA,6EAA6E,YAAY;AACzF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,6CAA6C,EAAE;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,mDAAmD;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,oCAAoC;AACpC;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,8DAA8D;AAC9D;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB,sBAAsB,EAAE,EAAE;AACnD;AACA;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,yBAAyB;AACzB,KAAK;AACL,uBAAuB;AACvB,2BAA2B;AAC3B,0BAA0B;AAC1B,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,aAAa;AACvC,OAAO;AACP;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,uDAAuD,6BAA6B,EAA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,aAAO,KAAK,KAAZ;AACH;AAED;;;;AAIG;;;;WACH,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;AACH;;;;;;AA7OL;AAkBI;;;AAGG;;AACY,oBAAiB,CAAjB;AA0NnB;;;;;AAKG;;AACH,UAAU,CAAC,WAAX,GAAyB,QAAzB;AACA;;;;;AAKG;;AACH,UAAU,CAAC,gBAAX,GAA8B,SAA9B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,eAAX,GAA6B,QAA7B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,cAAX,GAA4B,OAA5B;AACA;;;;;AAKG;;AACH,UAAU,CAAC,UAAX,GAAwB,OAAxB,C;;;;;;ACvRA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,GAAU;;AAEnC,OAAO,WAAW;;AAElB;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;AC5QA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAc;AACrC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,cAAc,mBAAO,CAAC,EAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,EAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;;AACA;;AACA;;IAEa,M;AAcT,kBAAY,OAAZ,EAAqB,KAArB,EAA0B;AAAA;;AAAA;;AACtB,SAAK,SAAL,GAAiB,IAAjB;AACA,SAA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AACrC,UAAU,mBAAO,CAAC,GAAe;AACjC,kBAAkB,mBAAO,CAAC,GAAkB;AAC5C,eAAe,mBAAO,CAAC,GAAe;AACtC,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,GAAe;AACtC;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAO,CAAC,GAAS;AACnB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACxCA;AACA,YAAY,mBAAO,CAAC,GAAyB;AAC7C,iBAAiB,mBAAO,CAAC,GAAkB;;AAE3C;AACA;AACA;;;;;;;ACNA;AACA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,GAAe;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACZA;AACA,kBAAkB,mBAAO,CAAC,EAAQ;AAClC;AACA,0CAA0C,mBAAO,CAAC,EAAS,6BAA6B;AACxF;AACA;AACA;;;;;;;ACNA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,GAAW;AAChC,cAAc,mBAAO,CAAC,GAAS;AAC/B,cAAc,mBAAO,CAAC,GAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;A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;;;;EAtEqB,0B;;AAA1B;AAyEA,sCAAa,QAAb,CAAsB,IAAtB,E;;;;;;;AC7EA;AAAA;AAAA;AAAkC;AACM;AACxC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA,mCAAmC,mDAAY;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACvCA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC+B;;AAEhC;;;;;;;;ACjBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACpBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyC;;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBsE;AACf;AACvD,IAAI,iCAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B,oFAAoF,QAAQ,sCAAS;AACrG;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iIAAiI,kCAAW;AAC5I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,oIAAoI,kCAAW;AAC/I;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,kCAAW;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE,4BAA4B,8BAA8B,EAAE;AAChI;AACA;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,kCAAW;AAC5F;AACA,qCAAqC,IAAI;AACzC,iCAAiC;AACjC;AACA;AACA;AACA,2DAA2D,mDAAmD;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB,UAAU,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,UAAU,EAAE;AACpE;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,0CAAa,CAAC,0CAAa,KAAK,mCAAM,kBAAkB,mCAAM;AAClG;AACA,qCAAqC;AACrC,iCAAiC;AACjC;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC2B;;AAE5B;;;ACrN4D;AAC5D,IAAI,iFAAwC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAmB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmD;;AAEpD;;;ACrD+C;AAC/C,IAAI,uCAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,0FAA0F,QAAQ,sCAAS;AAC3G;AACA;AACA,2BAA2B,wCAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+EAA+E,EAAE;AAChJ,8DAA8D,gBAAgB,EAAE;AAChF;AACA;AACA;AACA;AACA,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA,0JAA0J,8CAA8C,EAAE;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB,EAAE,EAAE;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC8B;;AAE/B;;;ACnHkE;AAClE,IAAI,uFAA2C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAsB;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACsD;;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;ACrDiF;AAC7B;AAC8C;AAC5B;AACqC;AACd;AACI;AACN;AAC3C;AACwB;AACS;AACf;AACgD;AACvC;AACgD;AAC7E;AACmD;AACvC;AACS;AACN;AACyB;AACa;AAC/B;AAClB;AACE;AACgC;AACZ;AACL;AACnE;AACA;AACA;AACA,IAAI,qCAAkB;AACtB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU,uBAAuB,EAAE,EAAE;AAClH;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,2CAA2C,sDAAsD;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU,uBAAuB,EAAE,EAAE;AACpJ;AACA;AACA;AACA;AACA,6CAA6C,uEAAuE;AACpH;AACA;AACA,6CAA6C,sDAAsD;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,wDAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B,GAAG,0BAA0B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,iCAAiC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,8CAA8C,gFAAkC;AAChF;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAmB;AACzD;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,sCAAsC,0EAA+B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,gCAAgC,sCAAa;AAC7C;AACA;AACA;AACA,0DAA0D;AAC1D,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0CAAa,KAAK,mCAAM;AACtE,wDAAwD,0CAAa,KAAK,mCAAM;AAChF;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAAa,KAAK,mCAAM;AAC1E,4DAA4D,0CAAa,KAAK,mCAAM;AACpF;AACA;AACA,uFAAuF,6CAA6C,EAAE;AACtI;AACA,qCAAqC,kDAAkD;AACvF,6FAA6F,6CAA6C,EAAE;AAC5I;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC,+CAA+C,EAAE;AACxF,wCAAwC,yBAAyB,uFAAuF,EAAE,EAAE;AAC5J;AACA;AACA,6BAA6B,iBAAiB;AAC9C;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qEAAqE,EAAE;AAC7G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0DAA0D,6FAA6F,EAAE;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,qDAAc;AAC5C,0EAA0E,uCAAuC,EAAE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,kDAAW,sCAAsC,0DAAmB,sCAAsC,gDAAS;AACtK;AACA;AACA;AACA;AACA;AACA,0BAA0B,kFAAmC;AAC7D;AACA,mDAAmD,oDAAoB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mDAAY;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB;AAC1F;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,mDAAY;AACvD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,kDAAW,sBAAsB,0DAAmB,sBAAsB,mDAAY;AAC5H;AACA;AACA,2CAA2C,qDAAc;AACzD;AACA;AACA,2CAA2C,sDAAe;AAC1D;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA,2CAA2C,kDAAW;AACtD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA,sCAAsC,qDAAc;AACpD;AACA;AACA;AACA,8BAA8B,gFAAkC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,uCAAuC,EAAE;AACvH;AACA;AACA,wCAAwC,0CAAa,KAAK,mCAAM,4CAA4C,iCAAiC,EAAE;AAC/I;AACA,oCAAoC,0CAAa,KAAK,mCAAM;AAC5D,uEAAuE,mEAAmE,EAAE;AAC5I,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kIAAkI,8CAA8C,EAAE;AAClL,yBAAyB,0CAAa,CAAC,0CAAa,KAAK,mCAAM,YAAY,mCAAM;AACjF;AACA,gFAAgF,mEAAmE,EAAE;AACrJ;AACA;AACA,uDAAuD,kDAAW,uCAAuC,0DAAmB;AAC5H;AACA;AACA;AACA;AACA,uDAAuD,qDAAc;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,sDAAe;AACtE;AACA;AACA;AACA;AACA,oFAAoF,kCAAW;AAC/F;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,4EAA4E,uCAAuC,EAAE;AACrH;AACA;AACA;AACA,4DAA4D,mEAAmE,EAAE;AACjI,SAAS;AACT;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,sDAAe,sCAAsC,qDAAc;AACjH;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,kDAAW;AACzD;AACA;AACA;AACA,iDAAiD,2DAA2D,EAAE;AAC9G;AACA;AACA,8CAA8C,sDAAe;AAC7D;AACA;AACA;AACA;AACA,iFAAiF,uEAAuE,EAAE,aAAa;AACvK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,2DAA2D,EAAE,eAAe;AACzH;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sCAAsC,0FAAuC;AAC7E;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA,+CAA+C,iCAAgB;AAC/D,kDAAkD,uCAAmB;AACrE,4DAA4D,iFAAwC;AACpG;AACA,+DAA+D,uFAA2C;AAC1G;AACA;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA,2DAA2D,kCAAW;AACtE;AACA;AACA,wCAAwC,kCAAW;AACnD;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA,sCAAsC,kCAAW;AACjD,oEAAoE,wBAAwB,EAAE;AAC9F,qEAAqE,+BAA+B,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,4CAA4C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4EAAgC;AAC1E;AACA;AACA,8CAA8C,8CAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,kCAAW;AACjF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,kCAAW;AACxF;AACA;AACA,wEAAwE,iFAAiF,EAAE;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,6BAA6B,mCAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,kCAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,oCAAY;AACgB;;AAE9B;;;;;;;;ACtoDA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,uCAAuC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AAC8B;;AAE/B;;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAA+B;AAC0B;AACJ;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,0CAA0C;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB,4DAAM;AAC3B;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA,qBAAqB,4DAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACiC;;AAElC;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAA+C;AACH;AACiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,sGAAsG,QAAQ,+DAAS;AACvH;AACA;AACA,uCAAuC,iEAAW;AAClD;AACA;AACA;AACA,8FAA8F,gFAAY;AAC1G;AACA;AACA;AACA,iDAAiD,IAAI;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G,wDAAwD,EAAE;AACrK,yHAAyH,wDAAwD,EAAE;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B,EAAE,EAAE;AACjC;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,+EAA+E,gFAAY;AAC3F;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAAQ;AAChD;AACA,iCAAiC;AACjC;AACA,mGAAmG;AACnG;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,uFAAuF,wDAAwD,EAAE;AACjJ,mFAAmF,wDAAwD,EAAE;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K,yBAAyB;AACzB;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACwC;;AAEzC;;;;;;;;ACvLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AACtD;AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;ACrBa;AACb;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZa;;AAEb,cAAc,mBAAO,CAAC,GAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBa;AACb,mBAAO,CAAC,GAAmB;AAC3B,eAAe,mBAAO,CAAC,EAAa;AACpC,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,EAAU;AAC9B,cAAc,mBAAO,CAAC,EAAY;AAClC,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;;AAEzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,aAAa;AAC3D;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;AC/FA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAc;AACjC,kBAAkB,mBAAO,CAAC,GAAkB;AAC5C,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,GAA4B;AACpD;AACA;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA,mEAAmE,gBAAgB;AACnF;AACA;AACA,GAAG,4CAA4C,gCAAgC;AAC/E;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxBA,aAAa,mBAAO,CAAC,EAAW;AAChC;;AAEA;;;;;;;;ACHa;AACb,aAAa,mBAAO,CAAC,EAAW;AAChC,cAAc,mBAAO,CAAC,CAAW;AACjC,eAAe,mBAAO,CAAC,EAAa;AACpC,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,WAAW,mBAAO,CAAC,EAAS;AAC5B,YAAY,mBAAO,CAAC,GAAW;AAC/B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,eAAe,mBAAO,CAAC,EAAc;AACrC,YAAY,mBAAO,CAAC,EAAU;AAC9B,kBAAkB,mBAAO,CAAC,GAAgB;AAC1C,qBAAqB,mBAAO,CAAC,GAAsB;AACnD,wBAAwB,mBAAO,CAAC,GAAwB;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,mCAAmC,gCAAgC,aAAa;AACvF,8BAA8B,mCAAmC,aAAa;AAC9E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qDAAqD;AACrD;AACA,kDAAkD,iBAAiB,EAAE;AACrE;AACA,wDAAwD,aAAa,EAAE,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;ACpFA,aAAa,mBAAO,CAAC,EAAW;AAChC,WAAW,mBAAO,CAAC,EAAS;AAC5B,UAAU,mBAAO,CAAC,EAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;;AACA;;AACA;;AACA;;AACA;AAGA;;AAEG;;;IACU,Y;;;;;AAgBT;;;;AAIG;AACH,wBAAY,WAAZ,EAAyB,IAAzB,EAA6B;AAAA;;AAAA;;AACzB,+BAAM,IAAN;AAlBJ,0BAAyB,KAAzB;AAoBI,UAAK,aAAL,GAAqB,KAArB,CAHyB,CAKzB;;AACA,UAAK,sBAAL,GAA8B;AAC1B,aAAO,EAAE,IADiB;AAE1B,YAAM,EAAE;AAFkB,KAA9B;AAIA,UAAK,cAAL,GAAsB,IAAI,OAAJ,CAAY,UAAC,OAAD,EAAU,MAAV,EAAoB;AAClD,YAAK,sBAAL,GAA8B;AAAC,eAAO,EAAE,OAAV;AAAmB,cAAM,EAAE;AAA3B,OAA9B;AACH,KAFqB,CAAtB,CAVyB,CAczB;;AACA,UAAK,mBAAL,GAA2B,IAA3B;AACA,UAAK,WAAL,GAAmB,EAAnB;AACA,UAAK,OAAL,GAAe,IAAf;AAEA,UAAK,YAAL,GAAoB,WAApB;AACA,UAAK,MAAL,GAAc;AACV,aAAO,EAAE,IADC;AAEV,UAAI,EAAE;AAFI,KAAd;AAKA,UAAK,cAAL,GAAsB,IAAtB,CAzByB,CA2BzB;;AACA,UAAK,UAAL,GAAkB,IAAlB;AA5ByB;AA6B5B;;;;WAED,oBAAQ;AACJ,aAAO,KAAK,MAAZ;AACH;;;WAEK,qBAAY,mBAAZ,EAA+B;AAAA;;;;;;;;;;;;;;;;AAC7B,mB,GAAM,OAAM,WAAN,CAAiB,IAAjB,CAAiB,IAAjB,EAAkB,mBAAlB,C;AACV,qBAAK,aAAL,CAAmB,gBAAO,OAAP,CAAe,mBAAf,EAAoC,EAApC,CAAnB;AACA,4CAAa,OAAb,CAAqB,YAAY,CAAC,KAAb,CAAmB,YAAxC,EAAsD;AAClD,sBAAI,EAAE,IAD4C;AACtC,wBAAM,EAAE;AAD8B,iBAAtD;iDAGO,G;;;;;;;;;AACV;;;WAEK,iBAAQ,cAAR,EAAsB;AAAA;;;;;;;;;;;;;;;;AACxB,uBAAM,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,cAAd,CAAN;;;AACA,qBAAK,YAAL;;AACA,qBAAK,SAAL,CAAe,KAAK,WAApB;AACA,4CAAa,OAAb,CAAqB,YAAY,CAAC,KAAb,CAAmB,QAAxC,EAAkD;AAC9C,sBAAI,EAAE,IADwC;AAClC,wBAAM,EAAE;AAD0B,iBAAlD;;;;;;;;;AAGH;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AACV,4CAAa,OAAb,CAAqB,YAAY,CAAC,KAAb,CAAmB,cAAxC,EAAwD;AACpD,sBAAI,EAAE;AAD8C,iBAAxD;kDAGO,G;;;;;;;;;AACV;;;WAEK,mBAAO;AAAA;;;;;;;;;;;;;;;;AACL,mB,GAAM,OAAM,OAAN,CAAa,IAAb,CAAa,IAAb,C;AACV,4CAAa,OAAb,CAAqB,YAAY,CAAC,KAAb,CAAmB,QAAxC,EAAkD;AAC9C,sBAAI,EAAE;AADwC,iBAAlD;kDAGO,G;;;;;;;;;AACV;;;WAEK,qBAAS;AAAA;;;;;;;;;;;;;;;;AACP,mB,GAAM,OAAM,SAAN,CAAe,IAAf,CAAe,IAAf,C;AACV,4CAAa,OAAb,CAAqB,YAAY,CAAC,KAAb,CAAmB,UAAxC,EAAoD;AAChD,sBAAI,EAAE;AAD0C,iBAApD;kDAGO,G;;;;;;;;;AACV;AAED;;;;;AAKG;;;;WACH,kBAAS,YAAT,EAA6C,KAA7C,EAAmD;AAC/C,UAAI,OAAO,YAAP,KAAwB,QAA5B,EAAsC;AAClC,YAAI,IAAI,GAAG,KAAX;AACA,aAAK,GAAG,YAAR;AACA,oBAAY,GAAG,wBAAW,yBAAX,CAAqC,KAArC,EAA4C,IAA5C,CAAf;AACH;;AACD,WAAK,GAAG,gBAAO,OAAP,CAAe,KAAf,EAAsB,YAAY,CAAC,WAAnC,CAAR;AAEA,WAAK,MAAL,GAAc;AACV,eAAO,EAAE,YADC;AAEV,YAAI,EAAE;AAFI,OAAd;;AAKA,WAAK,YAAL;AACH;;;WAED,sBAAa,IAAb,EAAmB,KAAnB,EAAwB;AACpB,WAAK,WAAL,CAAiB,IAAjB,IAAyB,KAAzB;AACA,WAAK,SAAL,CAAe,KAAK,WAApB;AACH;;;WAED,uBAAc,UAAd,EAAwB;AACpB,WAAK,WAAL,GAAmB,UAAnB;AACA,WAAK,SAAL,CAAe,KAAK,WAApB;AACH;;;WAED,yBAAa;AACT,aAAO,KAAK,WAAZ;AACH;;;WAEK,6BAAiB;;;;;;;qBACf,gBAAO,MAAP,CAAc,KAAK,cAAnB,C;;;;;AACA,qBAAK,cAAL,GAAsB,4BAAa,mBAAb,CAAiC,SAAjC,CAAtB;;AACW,uBAAM,KAAK,cAAL,EAAN;;;AAAP,oB;;AACJ,oBAAI,gBAAO,SAAP,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACvC,sBAAI,CAAC,WAAL,CAAiB,KAAK,cAAtB;AACH;;;;;;;;;AAER;;;WAEK,+BAAmB;;;;;;AACrB,oBAAI,gBAAO,SAAP,CAAiB,KAAK,cAAtB,CAAJ,EAA2C;AACvC,uBAAK,cAAL,CAAoB,MAApB;;AACA,uBAAK,cAAL,GAAsB,IAAtB;AACH;;;;;;;;;AACJ;;;WAED,wBAAe,CAAf,EAAgB;AACZ,aAAO,IAAP;AACH;AAED;;;AAGG;;;;WACH,wBAAY;AACR,UAAI,KAAK,MAAL,KAAgB,kBAAQ,aAA5B,EAA2C;AACvC,aAAK,YAAL,CAAkB,WAAlB,CAA8B,KAAK,MAAL,CAAY,IAA1C;AACH;AACJ;;;WAED,mBAAU,IAAV,EAAc;AACV,UAAI,KAAK,MAAL,KAAgB,kBAAQ,aAA5B,EAA2C;AACvC,aAAK,YAAL,CAAkB,SAAlB,CAA4B,IAA5B,EAAkC,IAAlC;AACH;AACJ;AAED;;;;;;AAMG;;;;WACH,mBAAU,IAAV,EAAgB,IAAhB,EAAqB;AACjB,aAAO,KAAK,YAAL,CAAkB,SAAlB,CAA4B,IAA5B,EAAkC,IAAlC,CAAP;AACH;AAED;;;;;;;;;AASG;;;;WACH,4BAAmB,IAAnB,EAAyB,IAAzB,EAAgC,MAAhC,EAAuC;AACnC,UAAI,GAAG,GAAG,KAAK,SAAL,CAAe,IAAf,EAAqB,IAArB,CAAV;AACA,WAAK,MAAL,CAAY,MAAZ;AACA,aAAO,GAAP;AACH;AAED;;;;AAIG;;;;WACH,gBAAO,MAAP,EAAc;AACV,UAAI,EAAE,KAAK,aAAL,IAAsB,KAAK,MAAL,KAAgB,kBAAQ,eAAhD,CAAJ,EAAsE;AAClE,aAAK,aAAL,GAAqB,IAArB;;AACA,YAAI,gBAAO,SAAP,CAAiB,MAAjB,CAAJ,EAA8B;AAC1B,eAAK,SAAL,CAAe,MAAf;AACH;;AACD,eAAO,KAAK,YAAL,CAAkB,OAAlB,CAA0B,IAA1B,CAAP;AACH;AACJ;;;WAED,kBAAM;AACF,UAAI,KAAK,MAAL,KAAgB,kBAAQ,aAA5B,EAA2C;AACvC,aAAK,YAAL,CAAkB,MAAlB;AACH;AACJ;AAED;;AAEG;;;;WACH,yBAAa,CACZ;AAED;;AAEG;;;;WACH,yBAAa,CACZ;AAED;;AAEG;;;;WACH,2BAAe,CACd;AAED;;;AAGG;;;;WACH,4BAAgB;AACZ,aAAO,KAAK,cAAZ;AACH;AAED;;;AAGG;;;;WACH,mBAAU,MAAV,EAAgB;AACZ,WAAK,OAAL,GAAe,MAAf;AACH;AAED;;;AAGG;;;;WACH,6BAAiB;AACb,aAAO,KAAK,sBAAZ;AACH;;;WAED,0BAAiB,SAAjB,EAA4B,QAA5B,EAAoC;AAAA;;AAChC,aAAO,4BAAa,WAAb,GAA2B,WAA3B,CAAuC,SAAvC,EAAkD,cAAI,EAAG;AAC5D,YAAI,IAAI,CAAC,IAAL,IAAa,IAAI,CAAC,IAAL,YAAqB,MAAI,CAAC,WAA3C,EAAwD;AACpD,kBAAQ,CAAC,IAAD,CAAR;AACH;AACJ,OAJM,CAAP;AAKH;;;WAED,wBAAY;AACR,aAAO,KAAK,aAAZ;AACH;;;;EA/Q6B,iB;;AAAlC;AAkRA,YAAY,CAAC,KAAb,GAAqB;AACjB,cAAY,EAAE,4BADG;AAEjB,gBAAc,EAAE,8BAFC;AAGjB,UAAQ,EAAE,wBAHO;AAIjB,UAAQ,EAAE,wBAJO;AAKjB,YAAU,EAAE;AALK,CAArB,C;;;;;;;AC5Ra;AACb;AACA;AACA,kCAAkC,oCAAoC,aAAa,EAAE,EAAE;AACvF,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,aAAa,mBAAO,CAAC,GAA6B;AAClD,aAAa,mBAAO,CAAC,GAAiC;AACtD,aAAa,mBAAO,CAAC,GAAwB;AAC7C,aAAa,mBAAO,CAAC,GAAsB;AAC3C,aAAa,mBAAO,CAAC,EAAqB;AAC1C,kC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;;AAGA,IAAI,OAAO,GAAG,QAAd;;IAIa,Y;AAST,wBAAY,QAAZ,EAAqB;AAAA;;AACjB,QAAI,OAAO,GAAG,KAAK,wBAAL,CAA8B,QAA9B,CAAd;;AACA,SAAK,kBAAL,GAA0B,KAAK,iBAAL,CAAuB,OAAvB,CAA1B;AACH;;;;WAEK,2BAAkB,OAAlB,EAAyB;;;;;;sBACvB,OAAO,CAAC,IAAR,KAAiB,O;;;;;;AAED,uBAAM,MAAM,CAAC,WAAD,CAAN,EAAN;;;AAAhB,sBAAM,CAAC,KAAD,C;;;iDAEH,OAAO,CAAC,gBAAR,CAAyB,OAAzB,EAAkC,KAAlC,CAAwC,WAAC,EAAG;AAC/C,yBAAO,CAAC,KAAR,CAAc,CAAd;AACA,yBAAO,OAAO,CAAC,MAAR,CAAe,CAAf,CAAP;AACH,iBAHM,C;;;;;;;;;AAIV;;;WAED,kCAAyB,QAAzB,EAAiC;AAC7B,UAAI,OAAO,GAAG,YAAY,CAAC,kBAA3B;;AAEA,UAAI,OAAO,MAAP,KAAkB,WAAlB,IAAiC,MAAM,CAAC,QAAP,KAAoB,SAAzD,EAAoE;AAChE,eAAO,CAAC,IAAR,GAAe,SAAf;AACA,eAAO,CAAC,QAAR,GAAmB,QAAnB;AACH,OAHD,MAGO;AACH,YAAI,WAAW,GAAG,IAAlB;AAEA,eAAO,CAAC,IAAR,GAAe,OAAf;AACA,eAAO,CAAC,QAAR,GAAmB,QAAnB;AACA,eAAO,CAAC,QAAR,GAAmB,IAAnB;AACA,eAAO,CAAC,cAAR,GAAyB,IAAzB,CANG,CAQH;AACA;AACA;AACA;AACA;AACA;AACA;AACH;;AAED,aAAO,CAAC,QAAR,GAAmB,KAAK,oBAAL,EAAnB,CAvB6B,CAwB7B;;AACA,aAAO,OAAP;AACH;;;WAED,gCAAoB;AAAA;;AAChB,UAAI,QAAQ,GAAG,EAAf;AACA,YAAM,CAAC,IAAP,CAAY,YAAY,CAAC,OAAzB,EAAkC,OAAlC,CAA0C,mBAAS,EAAG;AAClD,oBAAY,CAAC,OAAb,CAAqB,SAArB,EAAgC,SAAhC,GAA4C,KAA5C;AACA,gBAAQ,CAAC,IAAT,CAAc,IAAI,OAAO,CAAC,YAAZ,CAAyB,YAAY,CAAC,OAAb,CAAqB,SAArB,EAAgC,mBAAhC,EAAzB,CAAd;AACH,OAHD,EAFgB,CAMhB;;AACA,aAAO,QAAP;AACH;;;WAEK,oBAAW,MAAX,EAAiB;;;;;;;AACf,0B,GAAa,I;;qBACb,KAAK,CAAC,OAAN,CAAc,MAAd,C;;;;;sBACI,MAAM,CAAC,MAAP,KAAkB,C;;;;;kDACX,M;;;;AAEE,uBAAM,KAAK,cAAL,CAAoB,MAAM,CAAC,CAAD,CAAN,CAAU,WAA9B,CAAN;;;AAAb,0B;;;;;;AAEa,uBAAM,KAAK,cAAL,CAAoB,MAAM,CAAC,WAA3B,CAAN;;;AAAb,0B;;;kDAEG,UAAU,CAAC,IAAX,CAAgB,MAAhB,C;;;;;;;;;AACV;;;WAmCK,sBAAa,KAAb,EAAoB,KAApB,EAA4B,KAA5B,EAAoC,KAApC,EAA4C,MAA5C,EAAqD,SAArD,EAA+D;;;;;;;;AAChD,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;kDACG,YAAY,CAAC,UAAb,CAAwB,UAAU,CAAC,IAAX,CAAgB,YAAY,CAAC,WAAb,CAAyB,KAAzB,EAAgC,KAAhC,EAAuC,KAAvC,EAA8C,MAA9C,EAAsD,SAAtD,CAAhB,CAAxB,C;;;;;;;;;AACV;;;WAEK,8BAAqB,KAArB,EAA4B,KAA5B,EAAoC,KAApC,EAA4C,KAA5C,EAAoD,MAApD,EAA6D,SAA7D,EAAuE;;;;;;;;AACxD,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;kDACG,YAAY,CAAC,UAAb,CAAwB,UAAU,CAAC,YAAX,CAAwB,YAAY,CAAC,WAAb,CAAyB,KAAzB,EAAgC,KAAhC,EAAuC,KAAvC,EAA8C,MAA9C,EAAsD,SAAtD,CAAxB,CAAxB,C;;;;;;;;;AACV;;;WAEK,uBAAc,KAAd,EAAqB,KAArB,EAA6B,KAA7B,EAAqC,MAArC,EAA8C,SAA9C,EAAwD;;;;;;;;AACzC,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;kDACG,YAAY,CAAC,UAAb,CAAwB,UAAU,CAAC,OAAX,CAAmB,YAAY,CAAC,WAAb,CAAyB,KAAzB,EAAgC,KAAhC,EAAuC,SAAvC,EAAkD,MAAlD,EAA0D,SAA1D,CAAnB,CAAxB,C;;;;;;;;;AACV;;;WAEK,kBAAS,KAAT,EAAgB,EAAhB,EAAoB,SAApB,EAA8B;;;;;;;;AACf,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;kDACG,YAAY,CAAC,UAAb,CAAwB,UAAU,CAAC,OAAX,CAAmB,EAAnB,EAAuB,YAAY,CAAC,WAAb,CAAyB,SAAzB,EAAoC,SAApC,EAA+C,SAA/C,EAA0D,SAA1D,EAAqE,SAArE,CAAvB,CAAxB,C;;;;;;;;;AACV;;;WAEK,mBAAU,KAAV,EAAiB,GAAjB,EAAsB,SAAtB,EAAgC;;;;;;;;AACjB,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;kDACG,YAAY,CAAC,UAAb,CAAwB,UAAU,CAAC,SAAX,CAAqB,GAArB,EAA0B,YAAY,CAAC,WAAb,CAAyB,SAAzB,EAAoC,SAApC,EAA+C,SAA/C,EAA0D,SAA1D,EAAqE,SAArE,CAA1B,CAAxB,C;;;;;;;;;AACV;;;WAEK,oBAAW,KAAX,EAAgB;;;;;;;;AACD,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;kDACG,UAAU,CAAC,KAAX,E;;;;;;;;;AACV;;;WAEK,wBAAe,KAAf,EAAoB;;;;;;;;AACL,uBAAM,KAAK,kBAAX;;;AAAb,0B;kDACG,UAAU,CAAC,aAAX,CAAyB,KAAzB,C;;;;;;;;;AACV;;;WAEK,4BAAmB,KAAnB,EAAyB;;;;;;;qBACvB,K;;;;;;AACW,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAP,oB;mDACG,IAAI,CAAC,kBAAL,CAAwB,KAAK,CAAC,aAAN,EAAxB,C;;;;AAGU,uBAAM,KAAK,kBAAX;;;AAAb,0B;mDACG,UAAU,CAAC,kBAAX,E;;;;;;;;;AAEd;;;WAEK,6BAAiB;;;;;;;;AACF,uBAAM,KAAK,kBAAX;;;AAAb,0B;mDACG,UAAU,CAAC,iBAAX,E;;;;;;;;;AACV;;;WAEK,sBAAa,MAAb,EAAqB,KAArB,EAA2B;;;;;;;qBACzB,KAAK,CAAC,OAAN,CAAc,MAAd,C;;;;;sBACI,MAAM,CAAC,MAAP,KAAkB,C;;;;;mDACX,M;;;AAEX,oBAAI,CAAC,KAAL,EAAY;AACR,uBAAK,GAAG,MAAM,CAAC,CAAD,CAAN,CAAU,WAAlB;AACH;;AACD,oBAAI,OAAO,MAAM,CAAC,CAAD,CAAb,KAAqB,QAAzB,EAAmC;AAC3B,qBAD2B,GACrB,EADqB;AAE/B,wBAAM,CAAC,OAAP,CAAe,aAAG;AAAA,2BAAI,GAAG,CAAC,IAAJ,CAAS,GAAG,CAAC,EAAb,CAAJ;AAAA,mBAAlB;AACA,wBAAM,GAAG,GAAT;AACH;;;;;;AAED,oBAAI,CAAC,KAAL,EAAY;AACR,uBAAK,GAAG,MAAM,CAAC,WAAf;AACH;;AACD,oBAAI,OAAO,MAAP,KAAkB,QAAtB,EAAgC;AAC5B,wBAAM,GAAG,MAAM,CAAC,EAAhB;AACH;;;;AAEY,uBAAM,KAAK,cAAL,CAAoB,KAApB,CAAN;;;AAAb,0B;mDACG,UAAU,CAAC,MAAX,CAAkB,MAAlB,C;;;;;;;;;AACV;;;WAEK,kBAAS,GAAT,EAAc,MAAd,EAAqB;;;;;;;AACf,uBAAM,KAAK,kBAAX;;;mEAA+B,K,CAAM,G,EAAK,M;;;;;;;;;AACrD;;;WAEK,6BAAiB;;;;;;mDACZ,KAAK,kB;;;;;;;;;AACf;AAED;;AAEG;;;;WAvHH,qBAAmB,KAAnB,EAA0B,KAA1B,EAAiC,KAAjC,EAAwC,MAAxC,EAAgD,SAAhD,EAAyD;AACrD,UAAI,KAAK,GAAG,EAAZ;;AACA,UAAI,KAAJ,EAAW;AACP,aAAK,CAAC,OAAD,CAAL,GAAiB,KAAjB;AACH;;AACD,UAAI,KAAJ,EAAW;AACP,aAAK,CAAC,OAAD,CAAL,GAAiB,KAAjB;AACH;;AACD,UAAI,KAAJ,EAAW;AACP,aAAK,CAAC,MAAD,CAAL,GAAgB,KAAhB;AACH;;AACD,UAAI,MAAJ,EAAY;AACR,aAAK,CAAC,MAAD,CAAL,GAAgB,MAAhB;AACH;;AACD,UAAI,SAAJ,EAAe;AACX,aAAK,CAAC,WAAD,CAAL,GAAqB,SAArB;AACH;;AACD,aAAO,KAAP;AACH;;;WAED,oBAAwB,MAAxB,EAA8B;;;;;;;;AACjB,uBAAM,MAAN;;;AAAT,sB;;sBACI,MAAM,KAAK,IAAX,IAAmB,MAAM,KAAK,S;;;;;mDACvB,I;;;AAEP,uB,GAAU,KAAK,CAAC,OAAN,CAAc,MAAd,C;;AACd,oBAAI,CAAC,OAAL,EAAc;AACV,wBAAM,GAAG,CAAC,MAAD,CAAT;AACH;;AACD,sBAAM,CAAC,OAAP,CAAe,gBAAM;AAAA,yBAAI,MAAM,CAAC,SAAP,CAAiB,IAAjB,CAAJ;AAAA,iBAArB;mDACQ,OAAD,GAAY,MAAZ,GAAqB,MAAM,CAAC,CAAD,C;;;;;;;;;AACrC;;;WAyFD,uBAAkB;AACd,UAAI,CAAC,KAAK,QAAV,EAAoB;AAChB,aAAK,QAAL,GAAgB,IAAI,IAAJ,EAAhB;AACH;;AACD,aAAO,KAAK,QAAZ;AACH;;;WAED,kBAAgB,KAAhB,EAAqB;AACjB,kBAAY,CAAC,OAAb,CAAqB,KAAK,CAAC,aAAN,EAArB,IAA8C,KAA9C;AACH;;;WAED,kBAAgB,SAAhB,EAA0B;AACtB,UAAI,SAAJ,EAAe;AACX,eAAO,KAAK,OAAL,CAAa,SAAb,CAAP;AACH,OAFD,MAEO;AACH,eAAO,KAAK,OAAZ;AACH;AACJ;;;;;;AArNL;AAwNA,YAAY,CAAC,OAAb,GAAuB,EAAvB;AAEA,YAAY,CAAC,kBAAb,GAAkC;AAC9B,UAAQ,EAAE,SADoB;AAE9B;AACA,SAAO,EAAE,CAAC,OAAD,EAAU,MAAV,CAHqB;AAI9B,aAAW,EAAE;AAJiB,CAAlC;AASA,YAAY,CAAC,KAAb,GAAqB;AACjB,SAAO,EAAE,KADQ;AAEjB,OAAK,EAAE,OAFU;AAGjB,MAAI,EAAE,UAHW;AAIjB,QAAM,EAAE,SAJS;AAKjB,MAAI,EAAE,MALW;AAMjB,YAAU,EAAE,YANK;AAOjB,SAAO,EAAE,SAPQ;AAQjB,MAAI,EAAE,MARW;AASjB,aAAW,EAAE,aATI;AAUjB,SAAO,EAAC;AAVS,CAArB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1OA;;AACA;;AAEA,IAAM,IAAI,GAAG,mBAAO,CAAE,GAAF,CAApB;;AACA;;AACA;;AACA;;AACA;;IAEa,S;;;;;AAOT,qBAAY,WAAZ,EAAuB;AAAA;;AAAA;;AACnB,+BAAM,WAAN,EAAmB,IAAnB;;AACA,UAAK,WAAL,CAAiB,IAAI,mBAAJ,gCAAmB,SAAS,CAAC,MAA7B,CAAjB;;AAFmB;AAGtB;;;;WAEK,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AACN,oB,GAAO,IAAI,aAAJ,CAAS,KAAK,MAAL,CAAY,aAAZ,CAAT,EAAqC,UAAM,IAAN;AAAA,yBAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAErD,mCAAM,0BAAY,WAAZ,GAA0B,KAA1B,CAAgC,IAAI,CAAC,OAAD,CAApC,EAA+C,IAAI,CAAC,UAAD,CAAnD,EAAiE,gBAAO,SAAP,CAAiB,IAAI,CAAC,WAAD,CAArB,CAAjE,CAAN;;AAFqD;AAAA;AAAA;AAAA;AAAA;;AAGrD,gCAAI,cAAJ,CAAU,cAAV,EAA0B,IAA1B;AAHqD;AAIrD,mCAAM,KAAK,MAAL,EAAN;;AAJqD;AAAA;AAAA;;AAAA;AAMrD,gCAAI,CAAC,SAAL,CAAe;AACX,uCAAS;AADE,6BAAf,EANqD,CASrD;;AATqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAb;AAAA,iBAArC,C;;AAaP,wB,GAAW,SAAX,QAAW;AAAA,yBAAM,IAAI,CAAC,WAAL,EAAN;AAAA,iB;;AACf,qBAAK,MAAL,CAAY,0BAAZ,EAAwC,gBAAxC,CAAyD,SAAzD,EAAoE,QAApE;AACA,qBAAK,MAAL,CAAY,6BAAZ,EAA2C,gBAA3C,CAA4D,SAA5D,EAAuE,QAAvE;AAEA,qBAAK,MAAL,CAAY,YAAZ,EAA0B,gBAA1B,CAA2C,OAA3C,EAAoD;AAAA,yBAAW;AAAA;AAAA;AAAA;AAAA;AAC3D,iCAAK,SAAL,CAAe,uCAAf;;AAD2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAX;AAAA,iBAApD;kDAIO,G;;;;;;;;;AACV;;;;EApC0B,iB;;AAA/B;AAuCA,SAAS,CAAC,MAAV,GAAmB,WAAnB;AACA,SAAS,CAAC,aAAV,GAA0B,UAA1B;AACA,SAAS,CAAC,gBAAV,GAA6B,IAA7B;AACA,SAAS,CAAC,iBAAV,GAA8B,IAA9B;AAEA,aAAI,iBAAJ,CAAsB,aAAG,EAAG;AACxB,MAAI,SAAS,CAAC,gBAAd,EAAgC;AAC5B,4BAAe,cAAf,CAA8B,IAA9B,CAAmC,IAAI,iDAAJ,CAA4B,OAA5B,EAAqC,SAAS,CAAC,MAA/C,EAAuD,SAAvD,CAAnC;AACH;;AACD,MAAI,SAAS,CAAC,iBAAd,EAAiC;AAC7B,4BAAe,cAAf,CAA8B,IAA9B,CAAmC,IAAI,+BAAJ,CAAmB,QAAnB,EAA6B,SAAS,CAAC,aAAvC,EAAsD;AAAA,aAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAChG,uBAAM,0BAAY,WAAZ,GAA0B,MAA1B,EAAN;;AADgG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAX;AAAA,KAAtD,CAAnC;AAGH;;AACD,KAAG,CAAC,WAAJ,CAAgB,OAAhB,EAAyB,SAAzB;AACH,CAVD,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;;AACA;;AACA;;IAEa,c;;;;;AAIT,0BAAY,IAAZ,EAAmB,MAAnB,EAA4B,MAA5B,EAAqC,OAArC,EAA+C,KAA/C,EAAuD,IAAvD,EAA4D;AAAA;;AAAA;;AACxD,8BAAM,IAAN,EAAY,MAAZ,EAAoB,OAApB,EAA6B,KAA7B,EAAoC,IAApC;AACA,UAAK,OAAL,GAAe,MAAf;AACA,UAAK,uBAAL,GAA+B,0BAAY,WAAZ,GAA0B,sBAA1B,CAAiD,YAAK;AACjF,YAAK,MAAL;AACH,KAF8B,CAA/B;AAHwD;AAM3D;;;;WAED,qBAAS;AACL,aAAQ,iFAAqB,0BAAY,WAAZ,GAA0B,SAA1B,CAAoC,KAAK,OAAzC,CAA7B;AACH;;;WAED,uBAAW;AACP,aAAQ,mFAAuB,0BAAY,WAAZ,GAA0B,SAA1B,CAAoC,KAAK,OAAzC,CAA/B;AACH;;;WAED,cAAK,MAAL,EAAW;AACP,UAAI,YAAY,GAAG,gBAAO,OAAP,CAAe,MAAf,EAAuB,IAAI,cAAJ,EAAvB,CAAnB;AACA,kBAAY,CAAC,OAAb,GAAuB,KAAK,OAA5B;AACA,sFAAkB,YAAlB;AACH;;;;EAxB+B,mB;;AAApC,wC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;;AACA;;AACA;;AACA;;IAIa,gB;;;;;AAAb;AAAA;;AAAA;;;AAGc,wBAAuB,IAAvB;AACA,0BAAyB,IAAzB;AAJd;AAyCC;;;;WAnCG,mBAAU,QAAV,EAAuB;AAAA;;AACnB;AACA,sFAAgB,QAAhB;;AACA,WAAK,aAAL,GAAqB,IAArB;AACA,gCAAY,IAAZ,CAAiB,KAAK,GAAtB,EAA2B;AAAC,cAAM,EAAE;AAAT,OAA3B,EAA4C,IAA5C,CAAiD;AAAA,eAAM,MAAI,CAAC,aAAL,GAAqB,IAA3B;AAAA,OAAjD,EAAkF,KAAlF,CAAwF,WAAC,EAAG;AACxF,eAAO,CAAC,GAAR,CAAY,sBAAZ;AACA,cAAI,CAAC,aAAL,GAAqB,KAArB;;AACA,wBAAgB,CAAC,aAAjB,CAA+B,MAA/B;AACH,OAJD;AAKH;;;WAEK,gBAAI;AAAA;;;;;;;;;;;;;;;;AACN,uBAAM,gBAAgB,CAAC,aAAjB,CAA+B,IAA/B,CAAN;;;iDACO,OAAM,IAAN,CAAU,IAAV,CAAU,IAAV,C;;;;;;;;;AACV;;;WAED,kBAAsB,QAAtB,EAA8B;AAAA;;;;;;;;;;;;;;;;AAC1B,uBAAM,gBAAgB,CAAC,aAAjB,CAA+B,QAA/B,CAAN;;;kDACO,OAAM,QAAN,CAAc,IAAd,CAAc,IAAd,EAAe,QAAf,C;;;;;;;;;AACV;;;WAED,uBAA2B,QAA3B,EAAmC;;;;;;;;;AAC3B,uB,GAAU,KAAK,CAAC,OAAN,CAAc,QAAd,C;;AACd,oBAAI,CAAC,OAAL,EAAc;AACV,0BAAQ,GAAG,CAAC,QAAD,CAAX;AACH;;;AACD,uBAAM,gBAAO,YAAP,CAAoB,QAApB,EAA8B,UAAM,MAAN;AAAA,yBAAe;AAAA;AAAA;AAAA;AAAA;AAAA,kCAC3C,MAAM,CAAC,WAAP,IAAsB,MAAM,CAAC,QAAP,KAAoB,SAA1C,IAAuD,CAAC,MAAM,CAAC,GAAP,CAAW,UAAX,CAAsB,MAAtB,CAAxD,IAAyF,CAAC,MAAM,CAAC,GAAP,CAAW,UAAX,CAAsB,MAAtB,CAA1F,IAA2H,CAAC,MAAM,CAAC,GAAP,CAAW,UAAX,CAAsB,IAAtB,CADjF;AAAA;AAAA;AAAA;;AAAA;AAE3C,mCAAM,IAAI,yCAAJ,CAAwB,MAAM,CAAC,YAAP,CAAoB,KAApB,CAAxB,EAAoD,MAAM,CAAC,GAA3D,EAAgE,QAAhE,GAA2E,KAA3E,CAAiF,WAAC;AAAA,qCAAI,OAAO,CAAC,GAAR,CAAY,CAAZ,CAAJ;AAAA,6BAAlF,CAAN;;AAF2C;AAG3C,kCAAM,CAAC,aAAP,GAAuB,IAAvB;;AAH2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAf;AAAA,iBAA9B,EAKH,IALG,CAAN;;;;;;;;;AAOH;;;;EAvCiC,qC;;AAAtC,4C;;;;;;;ACPA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA;AACA;AACA,CAAC;AACuC;;AAExC;;;;;;;;ACtBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkD;;AAEnD;;;;;;;;ACjBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2C;;AAE5C;;;;;;;;ACjBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmB;;AAEpB;;;;;;;;ACfA;AAAA;AAA+C;AAC/C;AACA;AACA,aAAa;AACb;AACO;AACP,eAAe,kEAAY;AAC3B;;AAEA;;;;;;;;ACTA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACmC;;AAEpC;;;;;;;;ACjBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;;AAExB;;;;;;;;ACVA;AAAA;AAAkC;AAClC;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuC;;AAExC;;;;;;;;AChBA;AAAA;AAAkC;AAClC;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8C;;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;;AAEA,IAAM,iBAAiB,GAAG,mBAAO,CAAC,GAAD,CAAjC;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AAGA;;;;;;;AAOG;;;IACU,c;;;;;AAgBT;;;;AAIG;AACH,0BAAY,IAAZ,EAAkB,UAAlB,EAA6B;AAAA;;AAAA;;AACzB,+BAAM,IAAN,EAAY,gBAAO,OAAP,CAAe,UAAf,EAA2B,iBAA3B,CAAZ;AACA,UAAK,KAAL,GAAa,IAAb;AAEA,UAAK,eAAL,GAAuB,IAAvB;AACA,UAAK,gBAAL,GAAwB,EAAxB;AAEA,UAAK,YAAL,GAAoB,EAApB;AACA,kBAAc,CAAC,cAAf,CAA8B,OAA9B,CAAsC,gBAAM,EAAG;AAC3C,YAAK,YAAL,CAAkB,IAAlB,CAAuB,MAAM,CAAC,IAAP,EAAvB;AACH,KAFD;AAIA,UAAK,aAAL,GAAqB,IAArB;AAEA,UAAK,UAAL,GAAkB,IAAlB;AAEA,UAAK,KAAL,GAAa,UAAI,OAAJ,EAAb;AAhByB;AAiB5B;;;;WAED,iBAAQ,IAAR,EAAY;AACR,WAAK,KAAL,GAAa,IAAb;;AACA,UAAI,KAAK,KAAT,EAAgB;AACZ,YAAI,gBAAO,SAAP,CAAiB,KAAK,KAAtB,CAAJ,EAAkC;AAC9B,eAAK,MAAL,CAAY,OAAZ,EAAqB,SAArB,CAA+B,MAA/B,CAAsC,QAAtC;AACA,eAAK,MAAL,CAAY,WAAZ,EAAyB,GAAzB,GAA+B,KAAK,KAApC;AACH,SAHD,MAGO;AACH,eAAK,MAAL,CAAY,OAAZ,EAAqB,SAArB,CAA+B,GAA/B,CAAmC,QAAnC;AACH;AACJ;AACJ;;;WAED,sBAAa,SAAb,EAAsB;AAClB,WAAK,UAAL,GAAkB,SAAlB;;AACA,UAAI,KAAK,KAAT,EAAgB;AACZ,YAAI,KAAK,UAAT,EAAqB;AACjB,eAAK,MAAL,CAAY,cAAZ,EAA4B,SAA5B,CAAsC,MAAtC,CAA6C,QAA7C;AACH,SAFD,MAEO;AACH,eAAK,MAAL,CAAY,cAAZ,EAA4B,SAA5B,CAAsC,GAAtC,CAA0C,QAA1C;AACH;AACJ;AACJ;;;WAED,yBAAgB,YAAhB,EAA4B;AAAA;;AACxB,WAAK,aAAL,GAAqB,YAArB;;AACA,UAAI,KAAK,KAAL,IAAc,KAAK,aAAvB,EAAsC;AAClC,YAAI,GAAG,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAAV;AACA,YAAI,UAAU,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAAjB;;AAEA,YAAI,QAAQ,GAAG,SAAX,QAAW,GAAK;AAChB,cAAI,UAAU,GAAG,MAAI,CAAC,MAAL,CAAY,aAAZ,CAAjB;;AACA,cAAI,GAAG,CAAC,qBAAJ,GAA4B,MAA5B,IAAsC,UAAU,CAAC,qBAAX,GAAmC,MAA7E,EAAqF;AACjF,sBAAU,CAAC,SAAX,CAAqB,GAArB,CAAyB,OAAzB;AACH,WAFD,MAEO;AACH,sBAAU,CAAC,SAAX,CAAqB,MAArB,CAA4B,OAA5B;AACH;AACJ,SAPD;;AASA,kBAAU,CAAC,gBAAX,CAA4B,MAA5B,EAAoC,QAApC;AACA,oBAAY,CAAC,gBAAb,CAA8B,QAA9B,EAAwC,QAAxC;AACA,6BAAqB,CAAC,QAAD,CAArB;AACH;AACJ;;;WAED,4BAAmB,eAAnB,EAAkC;AAAA;;AAC9B,WAAK,gBAAL,GAAwB,eAAxB;;AACA,UAAI,KAAK,KAAT,EAAgB;AACZ,YAAI,UAAU,GAAG,KAAK,MAAL,CAAY,aAAZ,CAAjB;;AACA,YAAI,gBAAO,SAAP,CAAiB,KAAK,gBAAtB,CAAJ,EAA6C;AACzC,cAAI,OAAO,GAAG,KAAK,MAAL,CAAY,iBAAZ,CAAd;AAEA,cAAI,cAAc,GAAG,gCAAe,WAAf,EAArB,CAHyC,CAKzC;;AACA,iBAAO,CAAC,gBAAR,CAAyB,MAAzB,EAAiC,YAAK;AAClC,gBAAI,MAAI,CAAC,gBAAL,KAA0B,EAA9B,EAAkC;AAC9B,kBAAI,KAAK,GAAI,cAAc,CAAC,kBAAf,CAAkC,OAAlC,EAA2C,SAA3C,EAAsD,GAAtD,CAAb;AACA,kBAAI,SAAS,GAAG,cAAc,CAAC,aAAf,CAA6B,KAA7B,CAAhB;;AAEA,kBAAI,SAAS,CAAC,CAAV,KAAgB,CAAhB,IAAqB,SAAS,CAAC,CAAV,KAAgB,CAArC,IAA0C,SAAS,CAAC,CAAV,KAAgB,CAA9D,EAAiE;AAC7D,0BAAU,CAAC,SAAX,CAAqB,MAArB,CAA4B,aAA5B;AACA,0BAAU,CAAC,SAAX,CAAqB,GAArB,CAAyB,aAAzB;AACH,eAHD,MAGO;AACH,0BAAU,CAAC,SAAX,CAAqB,MAArB,CAA4B,aAA5B;AACA,0BAAU,CAAC,SAAX,CAAqB,GAArB,CAAyB,aAAzB;AACH;AACJ,aAXD,MAWO;AACH,wBAAU,CAAC,SAAX,CAAqB,MAArB,CAA4B,aAA5B;AACA,wBAAU,CAAC,SAAX,CAAqB,MAArB,CAA4B,aAA5B;AACH;AACJ,WAhBD;AAkBA,+BAAqB,CAAC,YAAK;AACvB,gBAAI,aAAa,GAAG,UAAU,CAAC,aAAX,CAAyB,iBAAzB,CAApB;AACA,sBAAU,CAAC,KAAX,GAAmB,gBAAgB,aAAa,CAAC,qBAAd,GAAsC,MAAtD,GAA+D,IAAlF;;AACA,gBAAI,oBAAoB,MAAxB,EAAgC;AAC5B;AACA,kBAAM,cAAc,GAAG,IAAI,cAAJ,CAAmB,iBAAO,EAAG;AAChD,uBAAO,CAAC,OAAR,CAAgB,eAAK,EAAG;AACpB,sBAAI,KAAK,CAAC,aAAV,EAAyB;AACrB,8BAAU,CAAC,KAAX,GAAmB,gBAAgB,KAAK,CAAC,aAAN,CAAoB,CAApB,EAAuB,SAAvC,GAAmD,IAAtE;AACH,mBAFD,MAGK,IAAI,KAAK,CAAC,WAAV,EAAsB;AACvB,8BAAU,CAAC,KAAX,GAAmB,gBAAgB,KAAK,CAAC,WAAN,CAAkB,MAAlC,GAA2C,IAA9D;AACH,mBAFI,MAGA;AACD,2BAAO,CAAC,GAAR,CAAY,OAAZ,EAAqB,KAArB;AACH;AACJ,iBAVD;AAWH,eAZsB,CAAvB;AAaA,4BAAc,CAAC,OAAf,CAAuB,aAAvB;AACH;;AACD,sBAAU,CAAC,YAAK;AACZ,wBAAU,CAAC,KAAX,GAAmB,gBAAgB,aAAa,CAAC,qBAAd,GAAsC,MAAtD,GAA+D,IAAlF;AACH,aAFS,EAEP,GAFO,CAAV;AAGA,sBAAU,CAAC,YAAK;AACZ,wBAAU,CAAC,KAAX,GAAmB,gBAAgB,aAAa,CAAC,qBAAd,GAAsC,MAAtD,GAA+D,IAAlF;AACH,aAFS,EAEP,IAFO,CAAV;AAGA,sBAAU,CAAC,YAAK;AACZ,wBAAU,CAAC,KAAX,GAAmB,gBAAgB,aAAa,CAAC,qBAAd,GAAsC,MAAtD,GAA+D,IAAlF;AACH,aAFS,EAEP,IAFO,CAAV;AAGH,WA7BoB,CAArB;AA+BA,iBAAO,CAAC,GAAR,GAAc,KAAK,gBAAnB;AACA,oBAAU,CAAC,SAAX,CAAqB,GAArB,CAAyB,YAAzB;AAEH,SA1DD,MA0DO;AACH,oBAAU,CAAC,SAAX,CAAqB,MAArB,CAA4B,YAA5B;AACH;AACJ;AACJ;AAED;;;AAGG;;;;WACG,wBAAY;AAAA;;;;;;;;;;;;;;;;;;AACV,mB,GAAM,OAAM,YAAN,CAAkB,IAAlB,CAAkB,IAAlB,C;AAEV,qBAAK,eAAL,CAAqB,QAAQ,CAAC,cAAT,CAAwB,cAAc,CAAC,KAAvC,CAArB,E,CAEA;;AACI,yB,GAAY,E;AAChB,yBAAS,CAAC,IAAV,CAAe,IAAI,mCAAJ,CAAqB,KAAK,MAAL,CAAY,sBAAZ,CAArB,CAAf;AACA,yBAAS,CAAC,IAAV,CAAe,IAAI,qCAAJ,CAAsB,KAAK,MAAL,CAAY,qBAAZ,CAAtB,CAAf;AACA,qBAAK,KAAL,GAAa,IAAI,WAAJ,CAAS,SAAT,EAAoB,KAAK,YAAzB,CAAb;AACA,qBAAK,uBAAL,GAA+B,KAAK,MAAL,CAAY,kCAAZ,CAA/B,C,CAEA;;AACA,qBAAK,KAAL,CAAW,sBAAX,CAAkC,YAAK;AACnC,wBAAI,CAAC,kBAAL;AACH,iBAFD,E,CAIA;AACA;;;AACI,2B,GAAc,KAAK,KAAL,CAAW,kBAAX,E;;AAClB,qBAAK,KAAL,CAAW,kBAAX,CAA8B,WAAC,EAAG;AAC9B,sBAAI,EAAE,WAAW,CAAC,CAAD,CAAX,YAA0B,qCAA5B,CAAJ,EAAoD;AAChD,0BAAI,CAAC,SAAL;AACH;AACJ,iBAJD,E,CAMA;;;AACA,qBAAK,eAAL,GAAuB,KAAK,MAAL,CAAY,kBAAZ,CAAvB;;AACA,qBAAK,MAAL,CAAY,yBAAZ,EAAuC,OAAvC,GAAiD,YAAK;AAClD,sBAAI,MAAI,CAAC,eAAL,CAAqB,SAArB,CAA+B,QAA/B,CAAwC,SAAxC,CAAJ,EAAwD;AACpD,0BAAI,CAAC,SAAL;AACH,mBAFD,MAEO;AACH,0BAAI,CAAC,QAAL;AACH;AACJ,iBAND,C,CAQA;AACA;AACA;;;AACI,8B,GAAiB,I;AACrB,qBAAK,MAAL,CAAY,wBAAZ,EAAsC,gBAAtC,CAAuD,OAAvD,EAAgE,UAAU,CAAV,EAAW;AACvE,sBAAI,CAAC,CAAC,MAAF,KAAa,IAAjB,EAAuB;AACnB,kCAAc,CAAC,SAAf;AACH;AACJ,iBAJD,E,CAOA;;AACA,sBAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,YAAK;AACnC;AACA,sBAAI,MAAI,CAAC,MAAL,KAAgB,kBAAQ,aAA5B,EAA2C;AACvC,0BAAI,CAAC,kBAAL;AACH;AACJ,iBALD,E,CAOA;;AACA,qBAAK,QAAL;AAEA,qBAAK,MAAL,CAAY,cAAZ,EAA4B,gBAA5B,CAA6C,OAA7C,EAAsD,YAAK;AACvD,wBAAI,CAAC,MAAL;AACH,iBAFD;AAIA,qBAAK,MAAL,CAAY,OAAZ,EAAqB,gBAArB,CAAsC,OAAtC,EAA+C,YAAK;AAChD,sBAAI,cAAc,CAAC,mBAAnB,EAAuC;AACnC,kCAAc,CAAC,mBAAf,CAAmC,MAAI,CAAC,OAAL,EAAnC;AACH;AACJ,iBAJD;AAMA,qBAAK,YAAL,CAAkB,KAAK,UAAvB;AACA,qBAAK,kBAAL,CAAwB,KAAK,gBAA7B;AACA,qBAAK,eAAL,CAAqB,KAAK,aAA1B;AACA,qBAAK,OAAL,CAAa,KAAK,KAAlB;iDAEO,G;;;;;;;;;AACV;;;WAED,kBAAM;AACF,UAAI,KAAK,UAAT,EAAqB;AACjB,aAAK,OAAL,GAAe,MAAf;AACH;AACJ;AAED;;;;;AAKG;;;;WACG,iBAAQ,cAAR,EAAsB;AAAA;;;;;;;;;;;;;;;AACxB,uBAAM,OAAN,CAAa,IAAb,CAAa,IAAb,EAAc,cAAd;;AACA,qBAAK,kBAAL;;;;;;;;;AACH;;;WAED,8BAAkB;AACd,UAAI,KAAK,uBAAT,EAAkC;AAC9B,aAAK,uBAAL,CAA6B,KAA7B,CAAmC,OAAnC,GAA6C,OAA7C;AACH;AACJ;AAED;;AAEG;;;;WACH,qBAAS;AACL,UAAI,gBAAO,SAAP,CAAiB,KAAK,eAAtB,CAAJ,EAA4C;AACxC,aAAK,eAAL,CAAqB,SAArB,CAA+B,MAA/B,CAAsC,SAAtC;;AACA,aAAK,KAAL,CAAW,SAAX,CAAqB,MAArB,CAA4B,gBAA5B;AACH;;AACD,UAAI,KAAK,uBAAT,EAAkC;AAC9B,aAAK,uBAAL,CAA6B,KAA7B,CAAmC,OAAnC,GAA6C,MAA7C;AACH;;AACD,UAAI,KAAK,KAAT,EAAgB;AACZ,aAAK,KAAL,CAAW,KAAX;AACH;AACJ;AAED;;AAEG;;;;WACH,oBAAQ;AACJ,UAAI,gBAAO,SAAP,CAAiB,KAAK,eAAtB,CAAJ,EAA4C;AACxC;AACA,aAAK,eAAL,CAAqB,SAArB,CAA+B,GAA/B,CAAmC,SAAnC;;AACA,aAAK,KAAL,CAAW,SAAX,CAAqB,GAArB,CAAyB,gBAAzB;AACH;;AACD,WAAK,kBAAL;AACH;AAGD;;AAEG;;;;WACH,oBAAQ;AACJ,UAAI,gBAAO,SAAP,CAAiB,KAAK,KAAtB,CAAJ,EAAkC;AAC9B,aAAK,KAAL,CAAW,IAAX;AACH;AACJ;AAED;;AAEG;;;;WACH,8BAAkB;AACd;AACA,UAAI,IAAI,GAAG,cAAc,CAAC,eAAf,EAAX,CAFc,CAId;;;AACA,UAAI,kBAAkB,GAAG,KAAK,MAAL,CAAY,sBAAZ,CAAzB;;AAEA,WACI;AACA,OAAC,IAAI,KAAK,QAAT,IAAqB,IAAI,KAAK,SAA9B,IAA2C,IAAI,KAAK,OAArD,KACA,kBAAkB,CAAC,gBAAnB,CAAoC,MAAM,wBAAW,cAAjB,GAAkC,eAAtE,EAAuF,MAAvF,GAAgG,CADhG,IAGA;AACA,OAAC,IAAI,KAAK,SAAT,IAAsB,IAAI,KAAK,OAAhC,KACA,kBAAkB,CAAC,gBAAnB,CAAoC,MAAM,wBAAW,eAAjB,GAAmC,eAAvE,EAAwF,MAAxF,GAAiG,CALjG,IAOA;AACC,UAAI,KAAK,OAAV,IACA,kBAAkB,CAAC,gBAAnB,CAAoC,MAAM,wBAAW,gBAAjB,GAAoC,eAAxE,EAAyF,MAAzF,GAAkG,CATlG,IAWA;AACA,wBAAkB,CAAC,gBAAnB,CAAoC,MAAM,wBAAW,UAAjB,GAA8B,eAAlE,EAAmF,MAAnF,GAA4F,CAdhG,EAcmG;AAE/F,gBAAQ,CAAC,cAAT,CAAwB,wBAAxB,EAAkD,KAAlD,CAAwD,OAAxD,GAAkE,OAAlE;AACH,OAjBD,MAiBO;AACH,gBAAQ,CAAC,cAAT,CAAwB,wBAAxB,EAAkD,KAAlD,CAAwD,OAAxD,GAAkE,MAAlE,CADG,CAGH;;AACA,aAAK,SAAL;AACH;AACJ;AAED;;;AAGG;;;;WACH,mBAAU,MAAV,EAAgB;AACZ,WAAK,YAAL,CAAkB,IAAlB,CAAuB,MAAvB,EADY,CAGZ;;;AACA,UAAI,gBAAO,SAAP,CAAiB,KAAK,KAAtB,CAAJ,EAAkC;AAC9B,aAAK,KAAL,CAAW,SAAX,CAAqB,MAArB;AACH;AACJ;AAED;;;AAGG;;;;WACH,0BAAiB,MAAjB,EAAuB;AACnB,WAAK,YAAL,GAAoB,EAApB,CADmB,CAGnB;;AACA,UAAI,gBAAO,SAAP,CAAiB,KAAK,KAAtB,CAAJ,EAAkC;AAC9B,aAAK,KAAL,CAAW,gBAAX,CAA4B,MAA5B;AACH;AACJ;AAED;;;AAGG;;;;WACH,yBAAgB,YAAhB,EAA4B;AACxB,sBAAO,iBAAP,CAAyB,KAAK,MAAL,CAAY,0BAAZ,CAAzB,EAAkE,WAAlE,CAA8E,YAA9E;AACH;AAED;;;;;AAKG;;;;WACH,2BAAsB;AAClB,UAAI,OAAJ,CADkB,CAGlB;AACA;;AACA,UAAI,OAAO,GAAG,cAAc,CAAC,eAAf,EAAd;;AAEA,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,OAAO,CAAC,MAA5B,EAAoC,CAAC,EAArC,EAAyC;AACrC,YAAI,KAAK,GAAG,OAAO,CAAC,CAAD,CAAnB,CADqC,CAGrC;;AACA,YAAI,UAAU,CAAC,KAAK,CAAC,MAAP,CAAV,CAAyB,OAA7B,EAAsC;AAClC,iBAAO,GAAG,KAAV;AACH;AACJ;;AAED,UAAI,QAAO,OAAP,MAAmB,QAAvB,EAAiC;AAC7B,eAAO,OAAO,CAAC,KAAf;AACH,OAFD,MAEO;AACH,eAAO,OAAP;AACH;AACJ;AAED;;;;;AAKG;;;;WACH,2BAAsB;AAClB,UAAI,cAAc,CAAC,OAAf,CAAuB,MAAvB,KAAkC,CAAtC,EAAyC;AACrC,sBAAc,CAAC,OAAf,GAAyB,cAAc,CAAC,qBAAf,EAAzB;AACH;;AACD,aAAO,cAAc,CAAC,OAAtB;AACH;AAED;;;;;;AAMG;;;;WACH,iCAA4B;AAExB;AACA,eAAS,kBAAT,CAA4B,GAA5B,EAA+B;AAC3B,YAAI,WAAW,GAAG,EAAlB;;AAEA,YAAI,OAAO,GAAP,KAAe,QAAnB,EAA6B;AACzB,iBAAO,WAAP;AACH;;AAED,WAAG,GAAG,GAAG,CAAC,IAAJ,GAAW,KAAX,CAAiB,CAAjB,EAAoB,CAAC,CAArB,CAAN,CAP2B,CAOI;;AAE/B,YAAI,CAAC,GAAL,EAAU;AACN,iBAAO,WAAP;AACH;;AAED,mBAAW,GAAG,GAAG,CAAC,KAAJ,CAAU,GAAV,EAAe,MAAf,CAAsB,UAAU,GAAV,EAAe,KAAf,EAAoB;AACpD,cAAM,KAAK,GAAG,KAAK,CAAC,OAAN,CAAc,KAAd,EAAqB,GAArB,EAA0B,KAA1B,CAAgC,GAAhC,CAAd;AACA,cAAI,GAAG,GAAG,KAAK,CAAC,CAAD,CAAf;AACA,cAAI,GAAG,GAAG,KAAK,CAAC,CAAD,CAAf;AACA,aAAG,GAAG,kBAAkB,CAAC,GAAD,CAAxB,CAJoD,CAMpD;AACA;;AACA,aAAG,GAAG,GAAG,KAAK,SAAR,GAAoB,IAApB,GAA2B,kBAAkB,CAAC,GAAD,CAAnD;;AAEA,cAAI,CAAC,GAAG,CAAC,cAAJ,CAAmB,GAAnB,CAAL,EAA8B;AAC1B,eAAG,CAAC,GAAD,CAAH,GAAW,GAAX;AACH,WAFD,MAEO,IAAI,KAAK,CAAC,OAAN,CAAc,GAAG,CAAC,GAAD,CAAjB,CAAJ,EAA6B;AAChC,eAAG,CAAC,GAAD,CAAH,CAAS,IAAT,CAAc,GAAd;AACH,WAFM,MAEA;AACH,eAAG,CAAC,GAAD,CAAH,GAAW,CAAC,GAAG,CAAC,GAAD,CAAJ,EAAW,GAAX,CAAX;AACH;;AACD,iBAAO,GAAP;AACH,SAlBa,EAkBX,EAlBW,CAAd;AAoBA,eAAO,WAAP;AACH,OArCuB,CAuCxB;AACA;;;AACA,UAAI,QAAQ,GAAG,QAAQ,CAAC,sBAAT,CAAgC,eAAhC,CAAf;;AACA,UAAI,QAAQ,CAAC,MAAT,KAAoB,CAAxB,EAA2B;AACvB;AACH;;AAED,UAAI,OAAO,GAAG,EAAd,CA9CwB,CAgDxB;;AACA,UAAI,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,gBAAP,CAAwB,QAAQ,CAAC,CAAD,CAAhC,EAAqC,gBAArC,CAAsD,aAAtD,CAAD,CAAzC;;AACA,WAAK,IAAI,GAAT,IAAgB,gBAAhB,EAAkC;AAC9B,YAAI,gBAAgB,CAAC,cAAjB,CAAgC,GAAhC,CAAJ,EAA0C;AACtC;AACA,iBAAO,CAAC,IAAR,CAAa;AACT,iBAAK,EAAE,GADE;AAET,kBAAM,EAAE,iCAAiC,gBAAgB,CAAC,GAAD,CAAjD,GAAyD;AAFxD,WAAb;AAIH;AACJ;;AACD,aAAO,OAAP;AACH;AAED;;;;AAIG;;;;WACH,gCAA8B,QAA9B,EAAoE;AAChE,WAAK,mBAAL,GAA2B,QAA3B;AACH;;;;EAhe+B,mC;;AAApC;AAamB,yBAAe,EAAf;;AACA,qCAA2D;AAAA,SAAM,UAAI,iBAAJ,CAAsB,aAAG;AAAA,WAAI,GAAG,CAAC,iBAAJ,EAAJ;AAAA,GAAzB,CAAN;AAAA,CAA3D;;AAqdnB,cAAc,CAAC,KAAf,GAAuB,cAAvB;AACA,cAAc,CAAC,cAAf,GAAgC,EAAhC,C;;;;;;;AC1fA;AAAA;AAAA;AAAA;AAAiC;AACuB;AACN;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qEAAW,iCAAiC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC,+FAA+F,0EAA0E,EAAE;AAC3K,oCAAoC;AACpC;AACA;AACA,sCAAsC,8DAAQ,mDAAmD,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,gBAAgB;AAC3D;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4EAAiB;AAClC;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4EAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,CAAC;AACwB;;AAEzB;;;;;;;;;;;;;;;;;;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;;AAEvB;;;ACZgF;AACxC;AACY;AACpD,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA,6BAA6B,qCAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,sEAAsE,+BAA+B,EAAE;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,yEAAyE,iCAAiC,EAAE;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wEAAwE,wCAAwC,EAAE;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA,iDAAiD,sBAAK;AACtD;AACA,mDAAmD,sBAAK;AACxD;AACA,yEAAyE,0CAAa,KAAK,mCAAM;AACjG,2EAA2E,0CAAa,KAAK,mCAAM;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qCAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;;;;;ACpcA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;ACNA,YAAY,mBAAO,CAAC,EAAQ;;;;;;;ACA5B,aAAa,mBAAO,CAAC,GAAW;AAChC,UAAU,mBAAO,CAAC,EAAQ;AAC1B;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;;;;;;;ACHA,eAAe,mBAAO,CAAC,EAAW;AAClC;;;;;;;ACDA;AACA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc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AEA;AACA;AACA;;;;;;;;ACjCa;;AAEb,kBAAkB,mBAAO,CAAC,GAAU;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACzDa;AACb,SAAS,mBAAO,CAAC,GAAc;;AAE/B;AACA;AACA;AACA;AACA;;;;;;;ACPA,UAAU,mBAAO,CAAC,EAAQ;AAC1B,aAAa,mBAAO,CAAC,GAAW;AAChC,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAe;AACjC,aAAa,mBAAO,CAAC,EAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,EAAQ;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnFa;AACb,aAAa,mBAAO,CAAC,EAAW;AAChC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAY;AAClC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,EAAS;AAC5B,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,YAAY,mBAAO,CAAC,EAAU;AAC9B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,GAAa;AACnC,WAAW,mBAAO,CAAC,EAAgB;AACnC,SAAS,mBAAO,CAAC,EAAc;AAC/B,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,QAAQ,UAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB,uBAAuB,EAAE,EAAE;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB,GAAG;AACH,uBAAuB;AACvB,0BAA0B;AAC1B,0BAA0B;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnRA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;ACLzC;AACA;AACA;;;;;;;ACFA;AACA,kBAAkB,mBAAO,CAAC,GAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;ACHY;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;ACjKA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACT;AACA;AACL;AAC8C;AACtB;AACG;AACM;AAC5B;AACU;AACP;AACA;AACuB;AACpF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,yEAAY;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA,4FAA4F,wFAAY;AACxG;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wFAAiB;AACjE;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,iCAAiC,EAAE;AACnJ;AACA;AACA;AACA,2FAA2F,+CAA+C,EAAE;AAC5I;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH,mGAAmG,6CAA6C,EAAE;AAClJ;AACA,uDAAuD,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AACpL,mGAAmG,qEAAqE,EAAE;AAC1K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D,qEAAqE,wFAAY,8EAA8E;AAC/J;AACA;AACA,8CAA8C,uFAAW,sCAAsC,+FAAmB;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,uFAAW,sCAAsC,+FAAmB;AAC5I;AACA;AACA;AACA,qEAAqE,2FAAe;AACpF;AACA;AACA;AACA;AACA,kDAAkD,wFAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB,GAAG;AACzH;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0FAAc,sCAAsC,yGAAoB,sCAAsC,2FAAe;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uFAAW,sCAAsC,+FAAmB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA;AACA;AACA,8CAA8C,2FAAe;AAC7D;AACA;AACA,2CAA2C,+IAA+I,EAAE;AAC5L,yCAAyC,wDAAwD,EAAE;AACnG,8DAA8D,eAAe;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,wFAAY;AACpE,wDAAwD,yGAAoB;AAC5E,wDAAwD,uFAAW;AACnE,wDAAwD,+FAAmB;AAC3E,wDAAwD,2FAAe;AACvE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0CAA0C,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA,4EAA4E,iCAAiC,EAAE;AAC/G;AACA;AACA,2EAA2E,iCAAiC,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wFAAY;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,YAAY,QAAQ,EAAE,0BAA0B;AACpG;AACA,+GAA+G;AAC/G;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,sFAAsF,gBAAgB,gBAAgB,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,gCAAgC,6EAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wFAAY,gEAAgE,yGAAoB,uCAAuC,qFAAS,GAAG;AACnN,0FAA0F;AAC1F;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,wFAAY;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yGAAoB,uCAAuC,qFAAS;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gGAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC5kBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACpB;AACN;AACwB;AACH;AACP;AACP;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AAC5B;AACgB;AACR;AACe;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA,yHAAyH,2FAAe;AACxI;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA,iGAAiG,oBAAoB,EAAE,SAAS;AAChI;AACA;AACA,8DAA8D,0FAAc;AAC5E;AACA;AACA;AACA,mEAAmE,uFAAW;AAC9E;AACA;AACA;AACA,mEAAmE,+FAAmB;AACtF;AACA;AACA;AACA,mEAAmE,+FAAmB,GAAG;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW;AAC3E,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA,YAAY,+EAAc;AAC1B;AACA;AACA;AACA,8BAA8B,yFAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,gEAAgE,qFAAS;AACzE;AACA;AACA;AACA,+DAA+D,2FAAe;AAC9E;AACA,gCAAgC;AAChC;AACA;AACA,+DAA+D,uFAAW;AAC1E,+DAA+D,+FAAmB;AAClF,+DAA+D,wFAAY;AAC3E,+DAA+D,yGAAoB;AACnF,+DAA+D,qFAAS;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uFAAW,uCAAuC,+FAAmB;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,0FAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,2FAAe;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,yHAAyH;AACzH;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,4DAA4D,qFAAS;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uFAAW;AACtE,2DAA2D,+FAAmB;AAC9E,2DAA2D,wFAAY;AACvE,2DAA2D,yGAAoB;AAC/E,2DAA2D,qFAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,+FAAmB;AACjE,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE,8CAA8C,qFAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW,sCAAsC,+FAAmB;AACtH;AACA;AACA;AACA,0BAA0B,6GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iGAAwB;AAC1C;AACA;AACA,CAAC,CAAC,kEAAY;AACgB;;AAE9B;;;;;;;;AC1gBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AACX;AACf;AACwB;AACH;AACd;AAC8C;AACzC;AACA;AACU;AAC5B;AAC4C;AACD;AACnF;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA,6BAA6B,4DAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD;AACA;AACA;AACA,mDAAmD,+FAAmB;AACtE;AACA;AACA;AACA,mDAAmD,2FAAe,sBAAsB,0FAAc,sBAAsB,2FAAe;AAC3I;AACA;AACA;AACA;AACA,mDAAmD,wFAAY;AAC/D;AACA;AACA,mDAAmD,+FAAmB,GAAG;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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mB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA,6EAA6E,mDAAY,mDAAmD,gDAAS;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACpJsE;AACtE;AACA;AACA;AACA;AACA;AACA,IAAI,+BAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,0CAAa,KAAK,mCAAM;AAC1F,uCAAuC,0CAAa,CAAC,0CAAa,KAAK,mCAAM;AAC7E;AACA;AACA;AACA,iCAAiC,KAAK,mCAAM;AAC5C;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B,yBAAyB;AACzB,qEAAqE,wBAAwB,EAAE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,CAAC;AAC0B;;AAE3B;;;ACvG0D;AACZ;AACM;AACA;AACpD;AACA;AACA;AACA;AACA;AACA,IAAI,yCAAoB;AACxB,IAAI,sCAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,wCAAwC;AACjK,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sCAAS;AACxB;AACA,mBAAmB,wCAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAAe;AAC7C;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA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AO,CAAC,GAAS;AAC5B,gBAAgB,mBAAO,CAAC,GAAc;AACtC,iCAAiC,mBAAO,CAAC,GAA2B;AACpE,cAAc,mBAAO,CAAC,GAAY;AAClC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,qBAAqB,mBAAO,CAAC,GAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C,EAAE,mBAAO,CAAC,EAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,kCAAkC;AACrD,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,yBAAyB,KAAK;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB;AACA,uBAAuB,mBAAO,CAAC,GAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,oBAAoB;AAC9E,mBAAO,CAAC,GAAsB;AAC9B,mBAAO,CAAC,GAAgB;AACxB,UAAU,mBAAO,CAAC,EAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gDAAgD,mBAAO,CAAC,GAAgB;AACxE;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;;AC7RY;AACb;AACA,gBAAgB,mBAAO,CAAC,EAAe;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACjBA,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,2BAA2B,mBAAO,CAAC,GAA2B;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACXa;AACb,SAAS,mBAAO,CAAC,EAAc;AAC/B,aAAa,mBAAO,CAAC,EAAkB;AACvC,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,UAAU,mBAAO,CAAC,EAAQ;AAC1B,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,kBAAkB,mBAAO,CAAC,GAAgB;AAC1C,WAAW,mBAAO,CAAC,GAAc;AACjC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C,cAAc,mBAAO,CAAC,EAAS;AAC/B,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,GAAW;AAC/B,wBAAwB,mBAAO,CAAC,EAAkB;AAClD,WAAW,mBAAO,CAAC,EAAQ;AAC3B,eAAe,mBAAO,CAAC,EAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACpFA;AACA,gBAAgB,mBAAO,CAAC,EAAe;AACvC,eAAe,mBAAO,CAAC,EAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,WAAW,mBAAO,CAAC,EAAgB;AACnC,WAAW,mBAAO,CAAC,GAAgB;AACnC,eAAe,mBAAO,CAAC,EAAc;AACrC,cAAc,mBAAO,CAAC,EAAW;AACjC;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA,eAAe,mBAAO,CAAC,EAAc;AACrC,aAAa,mBAAO,CAAC,GAAkB;AACvC,cAAc,mBAAO,CAAC,EAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA,kBAAkB,mBAAO,CAAC,EAAgB;AAC1C,cAAc,mBAAO,CAAC,EAAgB;AACtC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,aAAa,mBAAO,CAAC,GAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpBA,6BAA6B;AAC7B,uCAAuC;;;;;;;ACDvC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACNA;AAEA;;AAEG;;;IACU,U;AAiBT;;;A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I,CAAC,MAAD,CAAjC,GAA4C,KAAnD;AACH,OAFM,CAAP;AAGH;;;;;;AAnLL;AAsLA,UAAU,CAAC,aAAX,GAA2B,EAA3B;AAEA,UAAU,CAAC,QAAX,GAAsB,IAAtB,C;;;;;;AC7LA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACtIA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACnQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkE;AACM;AAC1B;AACwB;AACH;AACd;AAC8C;AACnB;AACtB;AACA;AACU;AACkB;AACG;AACJ;AACxB;AACgB;AAChB;AAC7D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,oGAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,6BAA6B,4DAAM;AACnC,2CAA2C,yEAAY;AACvD;AACA;AACA;AACA;AACA,8CAA8C,0FAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,uFAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,6EAAW;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,iFAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,0CAA0C,uCAAuC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4DAA4D;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,2DAA2D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sHAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,cAAc,6BAA6B;AACrG;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yGAA4B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH;AACrH;AACA,sBAAsB,iGAAwB;AAC9C;AACA;AACA;AACA,8CAA8C,uFAAW;AACzD,8CAA8C,wFAAY;AAC1D,8CAA8C,yGAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,0FAAc,sCAAsC,wFAAY,sCAAsC,2FAAe;AAC3L;AACA;AACA,0EAA0E,2FAAe;AACzF;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,uFAAW;AAC7D;AACA;AACA;AACA,0BAA0B,4GAA8B;AACxD;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,kEAAY;AACoB;;AAElC;;;;;;;;AC3Ya;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB,sBAAsB;AACtB,wBAAwB;AACxB,wBAAwB;AACxB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB,kBAAkB;AAC5D,SAAS;AACT;AACA;AACA;AACA,qC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;AAEA;;AAEG;;;IACU,W;AAoBT;;AAEG;AACH;AAAA;;AACI,SAAK,OAAL,GAAe,KAAf;AACH;AAhBD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ACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gFAAgB;AAC7C;AACA;AACA,aAAa;AACb,SAAS,EAAE,EAAE;AACb;AACA;AACA,CAAC,CAAC,4GAAyB;AACC;;AAE5B;;;;;;;;ACzFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACqB;AACX;AACU;AACc;AAC5F;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8FAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAS;AACxB;AACA,mBAAmB,iEAAW;AAC9B;AACA;AACA;AACA,qBAAqB;AACrB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,wFAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,4GAA8B;AACpD;AACA;AACA;AACA,CAAC,CAAC,kGAAoB;AACQ;;AAE9B;;;;;;;;;ACzGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAC4D;AAC9B;AACyB;AAC9B;AAC3D;AACA;AACA;AACA;AACA,IAAI,+DAAS;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2EAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8GAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gFAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,qEAAqE,iCAAiC,EAAE;AACxG;AACA;AACA,CAAC,CAAC,4GAAyB;AACQ;;AAEnC;;;;;;;;ACxEA;AAAA;AAAA;AAAA;AAA8C;AACC;AACQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,uBAAuB,EAAE;AAChH;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,+CAA+C,QAAQ,uEAAW,iEAAiE,EAAE;AAC/L;AACA;AACA,kCAAkC,mEAAa,KAAK,4DAAM,sDAAsD,QAAQ,uEAAW,iEAAiE,EAAE;AACtM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0EAA0E,eAAe,uEAAW,8FAA8F,EAAE;AACpM;AACA,2EAA2E,yDAAyD,EAAE;AACtI,aAAa;AACb;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F,mCAAmC,EAAE,eAAe;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH,wBAAwB,EAAE;AAC7I;AACA,sCAAsC,uEAAW;AACjD;AACA;AACA;AACA;AACA,qEAAqE,uGAAuG,EAAE;AAC9K;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,mCAAmC,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA,kBAAkB;AAClB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+DAAQ;AAC5B;AACA;AACA;AACA,8EAA8E,mBAAmB,EAAE;AACnG;AACA;AACA,uGAAuG,mBAAmB,EAAE;AAC5H,uHAAuH;AACvH;AACA,sBAAsB;AACtB;AACA,yFAAyF,mBAAmB,EAAE;AAC9G;AACA;AACA,kGAAkG,mBAAmB,EAAE;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA;AACA;AACA;AACA,+BAA+B,+DAAQ;AACvC;AACA,iBAAiB,IAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4BAA4B,6BAA6B,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,iFAAiF,EAAE;AAC1I;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA,wDAAwD,uEAAW,kEAAkE;AACrI;AACA;AACA;AACA,+CAA+C,oDAAoD,EAAE;AACrG;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF,mBAAmB,EAA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B,mBAAO,CAAC,EAAkB;AAC3C,cAAc,mBAAO,CAAC,EAAkB;AACxC,cAAc,mBAAO,CAAC,GAAoB;AAC1C,YAAY,mBAAO,CAAC,EAAgB;AACpC,YAAY,mBAAO,CAAC,GAAgB;AACpC,UAAU,mBAAO,CAAC,EAAc;AAChC,YAAY,mBAAO,CAAC,EAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,sBAAsB,uBAAuB,WAAW,IAAI;AAC5D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,KAAK;AACL;AACA,sBAAsB,mCAAmC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,EAAE,mBAAO,CAAC,EAAgB;AAC1B,EAAE,mBAAO,CAAC,GAAe;AACzB;;AAEA,sBAAsB,mBAAO,CAAC,EAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAA0D,kBAAkB;;AAE5E;AACA;AACA;AACA,oBAAoB,uBAAuB;;AAE3C,oDAAoD,6BAA6B;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,eAAe,EAAE;AAC3C,0BA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;AACjC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,mBAAmB,mBAAO,CAAC,GAAmB;AAC9C,aAAa,mBAAO,CAAC,GAAkB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,EAAU;AACxB;AACA,kBAAkB;AAClB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACjHY;AACb,cAAc,mBAAO,CAAC,CAAW;AACjC,aAAa,mBAAO,CAAC,EAAU;AAC/B,mBAAmB,mBAAO,CAAC,GAAmB;AAC9C;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,sBAAsB;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACjBD;AACA,cAAc,mBAAO,CAAC,CAAW;;AAEjC,8BAA8B,4BAA4B;;;;;;;ACH1D;AACA,cAAc,mBAAO,CAAC,CAAW;AACjC,gBAAgB,mBAAO,CAAC,EAAW;;AAEnC;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA,cAAc,mBAAO,CAAC,CAAW;;AAEjC,8BAA8B,YAAY,mBAAO,CAAC,GAAe,GAAG;;;;;;;ACHpE;AACA,cAAc,mBAAO,CAAC,CAAW;;AAEjC;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AA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CA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACvCY;;AAEb,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,EAAe;AACvC,yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,iBAAiB,mBAAO,CAAC,GAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACrHY;;AAEb,eAAe,mBAAO,CAAC,EAAc;AACrC,gBAAgB,mBAAO,CAAC,GAAe;AACvC,iBAAiB,mBAAO,CAAC,GAAyB;;AAElD;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AC9BY;;AAEb,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,EAAc;AACrC,yBAAyB,mBAAO,CAAC,GAAwB;AACzD,yBAAyB,mBAAO,CAAC,GAAyB;AAC1D,eAAe,mBAAO,CAAC,EAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAyB;AACtD,iBAAiB,mBAAO,CAAC,GAAgB;AACzC,YAAY,mBAAO,CAAC,EAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,yBAAyB,EAAE;;AAEhE;AACA,mBAAO,CAAC,GAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACrID,aAAa,mBAAO,CAAC,EAAW;AAChC,gBAAgB,mBAAO,CAAC,GAAS;AACjC;AACA;AACA;AACA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uCAAuC,sBAAsB,EAAE;AAC/D;AACA;AAC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A;AACA;AACA;AACA;;AAEA,oDAAoD,wBAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,KAA0B,oBAAoB,SAAE;AAClD;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3uBA,mBAAO,CAAC,GAAuB;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;;;;;;;ACD3C;AACA,cAAc,mBAAO,CAAC,GAAW;;AAEjC,oBAAoB,SAAS,mBAAO,CAAC,GAAW,GAAG;;;;;;;ACHnD,aAAa,mBAAO,CAAC,GAAW;AAChC,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B,WAAW,mBAAO,CAAC,GAAS;AAC5B,UAAU,mBAAO,CAAC,GAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;AC7DA;AACA,gBAAgB,mBAAO,CAAC,GAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;;;;;;;ACHA,SAAS,mBAAO,CAAC,GAAc;AAC/B,iBAAiB,mBAAO,CAAC,GAAkB;AAC3C,iBAAiB,mBAAO,CAAC,GAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA,eAAe,mBAAO,CAAC,GAAc;AACrC,qBAAqB,mBAAO,CAAC,GAAmB;AAChD,kBAAkB,mBAAO,CAAC,GAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,GAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;ACfA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;;;;;;;ACJA,kBAAkB,mBAAO,CAAC,GAAgB,MAAM,mBAAO,CAAC,GAAU;AAClE,+BAA+B,mBAAO,CAAC,GAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;ACFD,eAAe,mBAAO,CAAC,GAAc;AACrC,eAAe,mBAAO,CAAC,GAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA,eAAe,mBAAO,CAAC,GAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA,uBAAuB;AACvB;AACA;AACA;;;;;;;;ACHa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mC;;;;;;;ACrBa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,sC;;;;;;;AClFa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,kBAAkB,mBAAO,CAAC,EAAS;AACnC,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,2JAA2J;AAC3J,mEAAmE;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2C;;;;;;ACnNA;AACA;AACA,+DAA+D;AAC/D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mDAAmD;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,6BAA6B,gBAAgB,kBAAkB;AAC/D;AACA;AACA;AACA;AACA,+BAA+B,4CAA4C;AAC3E;AACA,mCAAmC,wBAAwB,kBAAkB,EAAE;AAC/E,mCAAmC,yBAAyB,EAAE,EAAE;AAChE;AACA,uCAAuC,8BAA8B;AACrE,uCAAuC,mBAAmB,EAAE;AAC5D;AACA,uCAAuC,qDAAqD;AAC5F,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,2CAA2C;AAC3C,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,aAAa;AAChF,qEAAqE,aAAa;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B,EAAE;AAClE;AACA;AACA,iBAAiB;AACjB,oDAAoD,+CAA+C;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,0DAA0D;AAC5G,oDAAoD,4DAA4D;AAChH,qDAAqD,4DAA4D;AACjH,2DAA2D,uBAAuB;AAClF,6DAA6D,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,uBAAuB,EAAE;AAC/D;AACA;AACA,iBAAiB;AACjB,sDAAsD,6BAA6B;AACnF,sDAAsD,0CAA0C;AAChG,yDAAyD,gCAAgC;AACzF,mDAAmD,mBAAmB;AACtE,kDAAkD,yBAAyB;AAC3E,oDAAoD,2BAA2B;AAC/E,qDAAqD,4BAA4B;AACjF,2DAA2D,oBAAoB;AAC/E,6DAA6D,oBAAoB;AACjF;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B;AACtF;AACA;AACA;AACA;AACA,+BAA+B,UAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,0BAA0B;;;;;;;;AC1mC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;AC7FY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;ACpFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACpDA,eAAe,mBAAO,CAAC,GAAU;AACjC,aAAa,mBAAO,CAAC,GAAU;AAC/B,WAAW,mBAAO,CAAC,GAAQ;AAC3B,aAAa,mBAAO,CAAC,EAAa;;AAElC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;ACvDA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAO,CAAC,GAAI;AACpC;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,cAAc;AAC1B;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;ACpQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACjKa;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uC;;;;;;;AClHa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+C;;;;;;;AC7Ba;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,kC;;;;;;;AChCa;AACb,8CAA8C,cAAc;AAC5D;AACA,yBAAyB,mBAAO,CAAC,GAAkB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,mDAAmD;AAClF;AACA,SAAS;AACT;AACA;AACA,+BAA+B,6BAA6B;AAC5D;AACA,SAAS;AACT;AACA;AACA,+BAA+B,iEAAiE;AAChG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA,SAAS;AACT;AACA;AACA;AACA,gCAAgC,iEAAiE;AACjG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;ACxEa;AACb,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kCAAkC;AAClC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yC;;;;;;;ACtEa;AACb,8CAA8C,cAAc;AAC5D;AACA,iBAAiB,mBAAO,CAAC,CAAkB;AAC3C,qBAAqB,mBAAO,CAAC,EAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,uC;;;;;;;ACpIa;AACb;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D,SAAS,mBAAO,CAAC,GAAuB;;;;;;;;ACL3B;AACb;AACA,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;AACA,8CAA8C,cAAc;AAC5D,oBAAoB,mBAAO,CAAC,EAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;;AACA,IAAM,iBAAiB,GAAG,mBAAO,CAAE,GAAF,CAAjC;AAEA;;AAEG;;;IACU,a;;;;;AAET;;;;;AAKG;AACH,yBAAY,WAAZ,EAAyB,IAAzB,EAA6B;AAAA;;AAAA,6BACnB,WADmB,EACN,IADM,EACA,iBADA,EACmB,eADn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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 289);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Dummy driver classes for replacement via `package.json` in browser builds.\n * Using those classes reduces the build size by one third.\n *\n * If we don't include those dummy classes (and just disable the driver import\n * with `false` in `package.json`) typeorm will throw an error on runtime and\n * during webpack builds even if those driver are not used.\n */\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoDriver = /** @class */ (function () {\n function MongoDriver() {\n }\n return MongoDriver;\n}());\nexport { MongoDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoQueryRunner = /** @class */ (function () {\n function MongoQueryRunner() {\n }\n return MongoQueryRunner;\n}());\nexport { MongoQueryRunner };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoEntityManager = /** @class */ (function () {\n function MongoEntityManager() {\n }\n return MongoEntityManager;\n}());\nexport { MongoEntityManager };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MongoRepository = /** @class */ (function () {\n function MongoRepository() {\n }\n return MongoRepository;\n}());\nexport { MongoRepository };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar PostgresDriver = /** @class */ (function () {\n function PostgresDriver() {\n }\n return PostgresDriver;\n}());\nexport { PostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiDriver = /** @class */ (function () {\n function AuroraDataApiDriver() {\n }\n return AuroraDataApiDriver;\n}());\nexport { AuroraDataApiDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar CockroachDriver = /** @class */ (function () {\n function CockroachDriver() {\n }\n return CockroachDriver;\n}());\nexport { CockroachDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar AuroraDataApiPostgresDriver = /** @class */ (function () {\n function AuroraDataApiPostgresDriver() {\n }\n return AuroraDataApiPostgresDriver;\n}());\nexport { AuroraDataApiPostgresDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqlServerDriver = /** @class */ (function () {\n function SqlServerDriver() {\n }\n return SqlServerDriver;\n}());\nexport { SqlServerDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SapDriver = /** @class */ (function () {\n function SapDriver() {\n }\n return SapDriver;\n}());\nexport { SapDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar MysqlDriver = /** @class */ (function () {\n function MysqlDriver() {\n }\n return MysqlDriver;\n}());\nexport { MysqlDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar OracleDriver = /** @class */ (function () {\n function OracleDriver() {\n }\n return OracleDriver;\n}());\nexport { OracleDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar SqliteDriver = /** @class */ (function () {\n function SqliteDriver() {\n }\n return SqliteDriver;\n}());\nexport { SqliteDriver };\n/**\n * DO NOT IMPORT THIS CLASS -\n * This is a dummy class for replacement via `package.json` in browser builds\n */\nvar BetterSqlite3Driver = /** @class */ (function () {\n function BetterSqlite3Driver() {\n }\n return BetterSqlite3Driver;\n}());\nexport { BetterSqlite3Driver };\n\n//# sourceMappingURL=BrowserDisabledDriversDummy.js.map\n","/**\n * This class stores query and its parameters\n */\nvar Query = /** @class */ (function () {\n function Query(query, parameters) {\n this.query = query;\n this.parameters = parameters;\n }\n return Query;\n}());\nexport { Query };\n\n//# sourceMappingURL=Query.js.map\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/js/Context/UserSite\"), exports);\n__exportStar(require(\"./client/js/Dialog/SelectUserDialog\"), exports);\n__exportStar(require(\"./client/js/MenuAction/StartUserSiteMenuAction\"), exports);\n__exportStar(require(\"./client/js/MenuAction/UserMenuAction\"), exports);\n__exportStar(require(\"./client/js/OfflineUserManager\"), exports);\n__exportStar(require(\"./client/js/Site/ChangeUserSite\"), exports);\n__exportStar(require(\"./client/js/Site/ForgotPasswordSite\"), exports);\n__exportStar(require(\"./client/js/Site/LoginSite\"), exports);\n__exportStar(require(\"./client/js/Site/NotAllowedSite\"), exports);\n__exportStar(require(\"./client/js/Site/RegistrationSite\"), exports);\n__exportStar(require(\"./client/js/UserManager\"), exports);\n__exportStar(require(\"./client/js/translationInit\"), exports);\n//# sourceMappingURL=client.js.map","import { TableColumn } from \"./TableColumn\";\nimport { TableIndex } from \"./TableIndex\";\nimport { TableForeignKey } from \"./TableForeignKey\";\nimport { TableUtils } from \"../util/TableUtils\";\nimport { TableUnique } from \"./TableUnique\";\nimport { TableCheck } from \"./TableCheck\";\nimport { TableExclusion } from \"./TableExclusion\";\n/**\n * Table in the database represented in this class.\n */\nvar Table = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Table(options) {\n /**\n * Table columns.\n */\n this.columns = [];\n /**\n * Table indices.\n */\n this.indices = [];\n /**\n * Table foreign keys.\n */\n this.foreignKeys = [];\n /**\n * Table unique constraints.\n */\n this.uniques = [];\n /**\n * Table check constraints.\n */\n this.checks = [];\n /**\n * Table exclusion constraints.\n */\n this.exclusions = [];\n /**\n * Indicates if table was just created.\n * This is needed, for example to check if we need to skip primary keys creation\n * for new tables.\n */\n this.justCreated = false;\n if (options) {\n this.name = options.name;\n if (options.columns)\n this.columns = options.columns.map(function (column) { return new TableColumn(column); });\n if (options.indices)\n this.indices = options.indices.map(function (index) { return new TableIndex(index); });\n if (options.foreignKeys)\n this.foreignKeys = options.foreignKeys.map(function (foreignKey) { return new TableForeignKey(foreignKey); });\n if (options.uniques)\n this.uniques = options.uniques.map(function (unique) { return new TableUnique(unique); });\n if (options.checks)\n this.checks = options.checks.map(function (check) { return new TableCheck(check); });\n if (options.exclusions)\n this.exclusions = options.exclusions.map(function (exclusion) { return new TableExclusion(exclusion); });\n if (options.justCreated !== undefined)\n this.justCreated = options.justCreated;\n this.engine = options.engine;\n }\n }\n Object.defineProperty(Table.prototype, \"primaryColumns\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n get: function () {\n return this.columns.filter(function (column) { return column.isPrimary; });\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n Table.prototype.clone = function () {\n return new Table({\n name: this.name,\n columns: this.columns.map(function (column) { return column.clone(); }),\n indices: this.indices.map(function (constraint) { return constraint.clone(); }),\n foreignKeys: this.foreignKeys.map(function (constraint) { return constraint.clone(); }),\n uniques: this.uniques.map(function (constraint) { return constraint.clone(); }),\n checks: this.checks.map(function (constraint) { return constraint.clone(); }),\n exclusions: this.exclusions.map(function (constraint) { return constraint.clone(); }),\n justCreated: this.justCreated,\n engine: this.engine,\n });\n };\n /**\n * Add column and creates its constraints.\n */\n Table.prototype.addColumn = function (column) {\n this.columns.push(column);\n };\n /**\n * Remove column and its constraints.\n */\n Table.prototype.removeColumn = function (column) {\n var foundColumn = this.columns.find(function (c) { return c.name === column.name; });\n if (foundColumn)\n this.columns.splice(this.columns.indexOf(foundColumn), 1);\n };\n /**\n * Adds unique constraint.\n */\n Table.prototype.addUniqueConstraint = function (uniqueConstraint) {\n this.uniques.push(uniqueConstraint);\n if (uniqueConstraint.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === uniqueConstraint.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = true;\n }\n };\n /**\n * Removes unique constraint.\n */\n Table.prototype.removeUniqueConstraint = function (removedUnique) {\n var foundUnique = this.uniques.find(function (unique) { return unique.name === removedUnique.name; });\n if (foundUnique) {\n this.uniques.splice(this.uniques.indexOf(foundUnique), 1);\n if (foundUnique.columnNames.length === 1) {\n var uniqueColumn = this.columns.find(function (column) { return column.name === foundUnique.columnNames[0]; });\n if (uniqueColumn)\n uniqueColumn.isUnique = false;\n }\n }\n };\n /**\n * Adds check constraint.\n */\n Table.prototype.addCheckConstraint = function (checkConstraint) {\n this.checks.push(checkConstraint);\n };\n /**\n * Removes check constraint.\n */\n Table.prototype.removeCheckConstraint = function (removedCheck) {\n var foundCheck = this.checks.find(function (check) { return check.name === removedCheck.name; });\n if (foundCheck) {\n this.checks.splice(this.checks.indexOf(foundCheck), 1);\n }\n };\n /**\n * Adds exclusion constraint.\n */\n Table.prototype.addExclusionConstraint = function (exclusionConstraint) {\n this.exclusions.push(exclusionConstraint);\n };\n /**\n * Removes exclusion constraint.\n */\n Table.prototype.removeExclusionConstraint = function (removedExclusion) {\n var foundExclusion = this.exclusions.find(function (exclusion) { return exclusion.name === removedExclusion.name; });\n if (foundExclusion) {\n this.exclusions.splice(this.exclusions.indexOf(foundExclusion), 1);\n }\n };\n /**\n * Adds foreign keys.\n */\n Table.prototype.addForeignKey = function (foreignKey) {\n this.foreignKeys.push(foreignKey);\n };\n /**\n * Removes foreign key.\n */\n Table.prototype.removeForeignKey = function (removedForeignKey) {\n var fk = this.foreignKeys.find(function (foreignKey) { return foreignKey.name === removedForeignKey.name; });\n if (fk)\n this.foreignKeys.splice(this.foreignKeys.indexOf(fk), 1);\n };\n /**\n * Adds index.\n */\n Table.prototype.addIndex = function (index, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n this.indices.push(index);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we mark this column as unique\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column)\n column.isUnique = true;\n }\n };\n /**\n * Removes index.\n */\n Table.prototype.removeIndex = function (tableIndex, isMysql) {\n if (isMysql === void 0) { isMysql = false; }\n var index = this.indices.find(function (index) { return index.name === tableIndex.name; });\n if (index) {\n this.indices.splice(this.indices.indexOf(index), 1);\n // in Mysql unique indices and unique constraints are the same thing\n // if index is unique and have only one column, we move `unique` attribute from its column\n if (index.columnNames.length === 1 && index.isUnique && isMysql) {\n var column_1 = this.columns.find(function (c) { return c.name === index.columnNames[0]; });\n if (column_1)\n column_1.isUnique = this.indices.some(function (ind) { return ind.columnNames.length === 1 && ind.columnNames[0] === column_1.name && !!index.isUnique; });\n }\n }\n };\n Table.prototype.findColumnByName = function (name) {\n return this.columns.find(function (column) { return column.name === name; });\n };\n /**\n * Returns all column indices.\n */\n Table.prototype.findColumnIndices = function (column) {\n return this.indices.filter(function (index) {\n return !!index.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column foreign keys.\n */\n Table.prototype.findColumnForeignKeys = function (column) {\n return this.foreignKeys.filter(function (foreignKey) {\n return !!foreignKey.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column uniques.\n */\n Table.prototype.findColumnUniques = function (column) {\n return this.uniques.filter(function (unique) {\n return !!unique.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n /**\n * Returns all column checks.\n */\n Table.prototype.findColumnChecks = function (column) {\n return this.checks.filter(function (check) {\n return !!check.columnNames.find(function (columnName) { return columnName === column.name; });\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table from a given entity metadata.\n */\n Table.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n engine: entityMetadata.engine,\n columns: entityMetadata.columns\n .filter(function (column) { return column; })\n .map(function (column) { return TableUtils.createTableColumnOptions(column, driver); }),\n indices: entityMetadata.indices\n .filter(function (index) { return index.synchronize === true; })\n .map(function (index) { return TableIndex.create(index); }),\n uniques: entityMetadata.uniques.map(function (unique) { return TableUnique.create(unique); }),\n checks: entityMetadata.checks.map(function (check) { return TableCheck.create(check); }),\n exclusions: entityMetadata.exclusions.map(function (exclusion) { return TableExclusion.create(exclusion); }),\n };\n return new Table(options);\n };\n return Table;\n}());\nexport { Table };\n\n//# sourceMappingURL=Table.js.map\n","import { __read, __spreadArray } from \"tslib\";\nvar OrmUtils = /** @class */ (function () {\n function OrmUtils() {\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Chunks array into peaces.\n */\n OrmUtils.chunk = function (array, size) {\n return Array.from(Array(Math.ceil(array.length / size)), function (_, i) {\n return array.slice(i * size, i * size + size);\n });\n };\n OrmUtils.splitClassesAndStrings = function (clsesAndStrings) {\n return [\n (clsesAndStrings).filter(function (cls) { return typeof cls !== \"string\"; }),\n (clsesAndStrings).filter(function (str) { return typeof str === \"string\"; }),\n ];\n };\n OrmUtils.groupBy = function (array, propertyCallback) {\n return array.reduce(function (groupedArray, value) {\n var key = propertyCallback(value);\n var grouped = groupedArray.find(function (i) { return i.id === key; });\n if (!grouped) {\n grouped = { id: key, items: [] };\n groupedArray.push(grouped);\n }\n grouped.items.push(value);\n return groupedArray;\n }, []);\n };\n OrmUtils.uniq = function (array, criteriaOrProperty) {\n return array.reduce(function (uniqueArray, item) {\n var found = false;\n if (criteriaOrProperty instanceof Function) {\n var itemValue_1 = criteriaOrProperty(item);\n found = !!uniqueArray.find(function (uniqueItem) { return criteriaOrProperty(uniqueItem) === itemValue_1; });\n }\n else if (typeof criteriaOrProperty === \"string\") {\n found = !!uniqueArray.find(function (uniqueItem) { return uniqueItem[criteriaOrProperty] === item[criteriaOrProperty]; });\n }\n else {\n found = uniqueArray.indexOf(item) !== -1;\n }\n if (!found)\n uniqueArray.push(item);\n return uniqueArray;\n }, []);\n };\n OrmUtils.isObject = function (item) {\n return (item && typeof item === \"object\" && !Array.isArray(item));\n };\n /**\n * Deep Object.assign.\n *\n * @see http://stackoverflow.com/a/34749873\n */\n OrmUtils.mergeDeep = function (target) {\n var _a, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n if (!sources.length)\n return target;\n var source = sources.shift();\n if (this.isObject(target) && this.isObject(source)) {\n for (var key in source) {\n var value = source[key];\n if (key === \"__proto__\" || value instanceof Promise)\n continue;\n if (this.isObject(value)\n && !(value instanceof Map)\n && !(value instanceof Set)\n && !(value instanceof Date)\n && !(value instanceof Buffer)\n && !(value instanceof RegExp)) {\n if (!target[key])\n Object.assign(target, (_a = {}, _a[key] = Object.create(Object.getPrototypeOf(value)), _a));\n this.mergeDeep(target[key], value);\n }\n else {\n Object.assign(target, (_b = {}, _b[key] = value, _b));\n }\n }\n }\n return this.mergeDeep.apply(this, __spreadArray([target], __read(sources)));\n };\n /**\n * Deep compare objects.\n *\n * @see http://stackoverflow.com/a/1144249\n */\n OrmUtils.deepCompare = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var i, l, leftChain, rightChain;\n if (arguments.length < 1) {\n return true; // Die silently? Don't know how to handle such case, please help...\n // throw \"Need two or more arguments to compare\";\n }\n for (i = 1, l = arguments.length; i < l; i++) {\n leftChain = []; // Todo: this can be cached\n rightChain = [];\n if (!this.compare2Objects(leftChain, rightChain, arguments[0], arguments[i])) {\n return false;\n }\n }\n return true;\n };\n /**\n * Check if two entity-id-maps are the same\n */\n OrmUtils.compareIds = function (firstId, secondId) {\n if (firstId === undefined || firstId === null || secondId === undefined || secondId === null)\n return false;\n // Optimized version for the common case\n if (((typeof firstId.id === \"string\" && typeof secondId.id === \"string\") ||\n (typeof firstId.id === \"number\" && typeof secondId.id === \"number\")) &&\n Object.keys(firstId).length === 1 &&\n Object.keys(secondId).length === 1) {\n return firstId.id === secondId.id;\n }\n return OrmUtils.deepCompare(firstId, secondId);\n };\n /**\n * Transforms given value into boolean value.\n */\n OrmUtils.toBoolean = function (value) {\n if (typeof value === \"boolean\")\n return value;\n if (typeof value === \"string\")\n return value === \"true\" || value === \"1\";\n if (typeof value === \"number\")\n return value > 0;\n return false;\n };\n /**\n * Composes an object from the given array of keys and values.\n */\n OrmUtils.zipObject = function (keys, values) {\n return keys.reduce(function (object, column, index) {\n object[column] = values[index];\n return object;\n }, {});\n };\n /**\n * Compares two arrays.\n */\n OrmUtils.isArraysEqual = function (arr1, arr2) {\n if (arr1.length !== arr2.length)\n return false;\n return arr1.every(function (element) {\n return arr2.indexOf(element) !== -1;\n });\n };\n // -------------------------------------------------------------------------\n // Private methods\n // -------------------------------------------------------------------------\n OrmUtils.compare2Objects = function (leftChain, rightChain, x, y) {\n var p;\n // remember that NaN === NaN returns false\n // and isNaN(undefined) returns true\n if (Number.isNaN(x) && Number.isNaN(y))\n return true;\n // Compare primitives and functions.\n // Check if both arguments link to the same object.\n // Especially useful on the step where we compare prototypes\n if (x === y)\n return true;\n // Unequal, but either is null or undefined (use case: jsonb comparasion)\n // PR #3776, todo: add tests\n if (x === null || y === null || x === undefined || y === undefined)\n return false;\n // Fix the buffer compare bug.\n // See: https://github.com/typeorm/typeorm/issues/3654\n if ((typeof x.equals === \"function\" || x.equals instanceof Function) && x.equals(y))\n return true;\n // Works in case when functions are created in constructor.\n // Comparing dates is a common scenario. Another built-ins?\n // We can even handle functions passed across iframes\n if ((typeof x === \"function\" && typeof y === \"function\") ||\n (x instanceof Date && y instanceof Date) ||\n (x instanceof RegExp && y instanceof RegExp) ||\n (x instanceof String && y instanceof String) ||\n (x instanceof Number && y instanceof Number))\n return x.toString() === y.toString();\n // At last checking prototypes as good as we can\n if (!(x instanceof Object && y instanceof Object))\n return false;\n if (x.isPrototypeOf(y) || y.isPrototypeOf(x))\n return false;\n if (x.constructor !== y.constructor)\n return false;\n if (x.prototype !== y.prototype)\n return false;\n // Check for infinitive linking loops\n if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1)\n return false;\n // Quick checking of one object being a subset of another.\n // todo: cache the structure of arguments[0] for performance\n for (p in y) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n }\n for (p in x) {\n if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n return false;\n }\n else if (typeof y[p] !== typeof x[p]) {\n return false;\n }\n switch (typeof (x[p])) {\n case \"object\":\n case \"function\":\n leftChain.push(x);\n rightChain.push(y);\n if (!this.compare2Objects(leftChain, rightChain, x[p], y[p])) {\n return false;\n }\n leftChain.pop();\n rightChain.pop();\n break;\n default:\n if (x[p] !== y[p]) {\n return false;\n }\n break;\n }\n }\n return true;\n };\n return OrmUtils;\n}());\nexport { OrmUtils };\n\n//# sourceMappingURL=OrmUtils.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst JsonHelper_1 = require(\"./JsonHelper\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable, ...args) {\n return Helper.isAllNull(...arguments);\n }\n static isAllNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if (!(args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable, ...args) {\n return Helper.isAllNotNull(...arguments);\n }\n static isAllNotNull(...args) {\n for (let i = 0; i < args.length; i++) {\n if ((args[i] === null || args[i] === undefined)) {\n return false;\n }\n }\n return true;\n }\n static isAtLeastOneNotNull(...args) {\n return !Helper.isAllNull(...args);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n return JsonHelper_1.JsonHelper.deepCopy(obj);\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n static isMobileApp() {\n return (typeof device !== \"undefined\" && device.platform !== \"browser\");\n }\n static toSnakeCase(camelCase) {\n return camelCase.replace(/([A-Z])/g, function (find, something, position) { return ((position > 0) ? \"_\" : \"\") + find[0].toLowerCase(); });\n }\n static wait(timeout, result) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(() => {\n r(result);\n }, timeout);\n });\n });\n }\n static timeout(time, otherPromise, timeoutResult) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.race([otherPromise, Helper.wait(time).then(() => {\n if (timeoutResult === undefined) {\n return Promise.reject();\n }\n else {\n return timeoutResult;\n }\n })]);\n });\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","/**\n * Broadcaster execution result - promises executed by operations and number of executed listeners and subscribers.\n */\nvar BroadcasterResult = /** @class */ (function () {\n function BroadcasterResult() {\n /**\n * Number of executed listeners and subscribers.\n */\n this.count = 0;\n /**\n * Promises returned by listeners and subscribers which needs to be awaited.\n */\n this.promises = [];\n }\n return BroadcasterResult;\n}());\nexport { BroadcasterResult };\n\n//# sourceMappingURL=BroadcasterResult.js.map\n","/**\n * Find Operator used in Find Conditions.\n */\nvar FindOperator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function FindOperator(type, value, useParameter, multipleParameters, getSql, objectLiteralParameters) {\n if (useParameter === void 0) { useParameter = true; }\n if (multipleParameters === void 0) { multipleParameters = false; }\n this._type = type;\n this._value = value;\n this._useParameter = useParameter;\n this._multipleParameters = multipleParameters;\n this._getSql = getSql;\n this._objectLiteralParameters = objectLiteralParameters;\n }\n Object.defineProperty(FindOperator.prototype, \"useParameter\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Indicates if parameter is used or not for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.useParameter;\n return this._useParameter;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"multipleParameters\", {\n /**\n * Indicates if multiple parameters must be used for this operator.\n * Extracts final value if value is another find operator.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.multipleParameters;\n return this._multipleParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"type\", {\n /**\n * Gets the Type of this FindOperator\n */\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"value\", {\n /**\n * Gets the final value needs to be used as parameter value.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.value;\n return this._value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"objectLiteralParameters\", {\n /**\n * Gets ObjectLiteral parameters.\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.objectLiteralParameters;\n return this._objectLiteralParameters;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"child\", {\n /**\n * Gets the child FindOperator if it exists\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value;\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FindOperator.prototype, \"getSql\", {\n /**\n * Gets the SQL generator\n */\n get: function () {\n if (this._value instanceof FindOperator)\n return this._value.getSql;\n return this._getSql;\n },\n enumerable: false,\n configurable: true\n });\n return FindOperator;\n}());\nexport { FindOperator };\n\n//# sourceMappingURL=FindOperator.js.map\n","/**\n * Browser's implementation of the platform-specific tools.\n *\n * This file gonna replace PlatformTools for browser environment.\n * For node.js environment this class is not getting packaged.\n * Don't use methods of this class in the code, use PlatformTools methods instead.\n */\nvar PlatformTools = /** @class */ (function () {\n function PlatformTools() {\n }\n /**\n * Gets global variable where global stuff can be stored.\n */\n PlatformTools.getGlobalVariable = function () {\n if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n // NativeScript uses global, not window\n return global;\n }\n };\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n PlatformTools.load = function (name) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: require(\\\"\" + name + \"\\\").\");\n return \"\";\n };\n /**\n * Normalizes given path. Does \"path.normalize\".\n */\n PlatformTools.pathNormalize = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.normalize(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Gets file extension. Does \"path.extname\".\n */\n PlatformTools.pathExtname = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.extname(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n PlatformTools.pathResolve = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: path.resolve(\\\"\" + pathStr + \"\\\").\");\n return \"\";\n };\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n PlatformTools.fileExist = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.existsSync(\\\"\" + pathStr + \"\\\").\");\n return false;\n };\n PlatformTools.dotenv = function (pathStr) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: dotenv.config({ path: \\\"\" + pathStr + \"\\\" }).\");\n };\n /**\n * Gets environment variable.\n */\n PlatformTools.getEnvVariable = function (name) {\n // if (this.type === \"browser\")\n // throw new Error(`This option/function is not supported in the browser environment. Failed operation: process.env[\"${name}\"].`);\n return undefined;\n };\n PlatformTools.readFileSync = function (filename) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.readFileSync(\\\"\" + filename + \"\\\").\");\n return null;\n };\n PlatformTools.appendFileSync = function (filename, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.appendFileSync(\\\"\" + filename + \"\\\").\");\n };\n PlatformTools.writeFile = function (path, data) {\n if (this.type === \"browser\")\n throw new Error(\"This option/function is not supported in the browser environment. Failed operation: fs.writeFile(\\\"\" + path + \"\\\").\");\n return Promise.reject(null);\n };\n /**\n * Highlights sql string to be print in the console.\n */\n PlatformTools.highlightSql = function (sql) {\n return sql;\n };\n /**\n * Highlights json string to be print in the console.\n */\n PlatformTools.highlightJson = function (json) {\n return json;\n };\n /**\n * Logging functions needed by AdvancedConsoleLogger (but here without chalk)\n */\n PlatformTools.logInfo = function (prefix, info) {\n console.info(prefix + \" \", info);\n };\n PlatformTools.logError = function (prefix, error) {\n console.error(prefix + \" \", error);\n };\n PlatformTools.logWarn = function (prefix, warning) {\n console.warn(prefix + \" \", warning);\n };\n PlatformTools.log = function (message) {\n console.log(message);\n };\n PlatformTools.warn = function (message) {\n return message;\n };\n /**\n * Type of the currently running platform.\n */\n PlatformTools.type = \"browser\";\n return PlatformTools;\n}());\nexport { PlatformTools };\n/**\n * These classes are needed for stream operations or\n * in the mongodb driver. Both aren't supported in the browser.\n */\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n }\n return EventEmitter;\n}());\nexport { EventEmitter };\nvar Readable = /** @class */ (function () {\n function Readable() {\n }\n return Readable;\n}());\nexport { Readable };\nvar Writable = /** @class */ (function () {\n function Writable() {\n }\n return Writable;\n}());\nexport { Writable };\nif (typeof window !== \"undefined\") {\n window.Buffer = require(\"buffer/\").Buffer;\n}\n// NativeScript uses global, not window\nif (typeof global !== \"undefined\") {\n global.Buffer = require(\"buffer/\").Buffer;\n}\n\n//# sourceMappingURL=BrowserPlatformTools.js.map\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Helper = void 0;\n/**\n * Eine Klasse mit häufig genutzten, nützlichen Funktionen\n */\nconst Translator_1 = require(\"../Translator\");\nclass Helper {\n /**\n * Testet, ob eine Variable null oder Undefined ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNull(variable) {\n return (variable === null || variable === undefined);\n }\n /**\n * Testet, ob eine Variable nicht (null oder undefined) ist\n *\n * @param variable\n * @returns {boolean}\n */\n static isNotNull(variable) {\n return !Helper.isNull(variable);\n }\n /**\n * Gibt den ersten übergebenen Wert, der nicht (null oder undefined) ist, zurück\n *\n * @param val1\n * @param val2\n * @param args\n * @returns {*}\n */\n static nonNull(val1, val2, ...args) {\n for (let i = 0; i < arguments.length; i++) {\n if (Helper.isNotNull(arguments[i])) {\n return arguments[i];\n }\n }\n return null;\n }\n /**\n * Testet, ob der übergebene Index am Objekt gesetzt ist. Werden mehrere Indexes übergeben, so wird getestet,\n * ob die \"Index-Kette\" gesetzt ist.\n * Bsp.:\n * Helper.isSet({\"index1\":{\"index2\":value}}, \"index1\", \"index2\") ist wahr\n *\n * @param object\n * @param indexes\n * @returns {*}\n */\n static isSet(object, ...indexes) {\n if (Helper.isNotNull(object)) {\n if (indexes.length === 0) {\n return true;\n }\n return (Helper.isSet.apply(null, [object[indexes[0]]].concat(indexes.slice(1))));\n }\n return false;\n }\n /**\n * Testet, ob ein Wert null oder Leerstring, bzw nur aus leerzeichend bestehender String ist\n *\n * @param value\n * @returns {boolean}\n */\n static empty(value) {\n return (Helper.isNull(value) || (typeof value === 'string' && value.trim() === \"\"));\n }\n /**\n * Testet, ob ein Wert NICHT (null oder Leerstring, bzw nur aus leerzeichend bestehender String ist)\n *\n * @param value\n * @returns {boolean}\n */\n static notEmpty(value) {\n return !Helper.empty(value);\n }\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string|never}\n */\n static strftime(sFormat, date, useUTC, makePersistentTranslation) {\n useUTC = Helper.nonNull(useUTC, false);\n makePersistentTranslation = Helper.nonNull(makePersistentTranslation, true);\n date = Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, function (sMatch) {\n return {\n '%a': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDaysShort[nDay]).outerHTML : Translator_1.Translator.translate(aDaysShort[nDay]),\n '%A': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aDays[nDay]).outerHTML : Translator_1.Translator.translate(aDays[nDay]),\n '%b': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth].slice(0, 3)).outerHTML : Translator_1.Translator.translate(aMonths[nMonth].slice(0, 3)),\n '%B': (makePersistentTranslation) ? Translator_1.Translator.makePersistentTranslation(aMonths[nMonth]).outerHTML : Translator_1.Translator.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static arrayToObject(array, indexFunction) {\n let obj = {};\n array.forEach(val => {\n obj[indexFunction(val)] = val;\n });\n return obj;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static cloneJson(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = Helper.cloneJson(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = Helper.cloneJson(obj[i]);\n }\n return cloneO;\n }\n /**\n * Erstellt ein FormData-Object von JSON-Data. Nützlich für fetch\n *\n * @param obj\n * @returns {FormData}\n */\n static formDataFromObject(obj) {\n let formData = new FormData();\n for (let k in obj) {\n formData.set(k, obj[k]);\n }\n return formData;\n }\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n static shuffleArray(array) {\n let currentIndex = array.length, temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = temporaryValue;\n }\n return array;\n }\n static padZero(n, width, z) {\n z = Helper.nonNull(z, '0');\n n = n + '';\n width = Helper.nonNull(width, 1);\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n static deepEqual(a, b) {\n // debugger;\n if (a === b) {\n return true;\n }\n if (typeof a === \"object\" && typeof b === \"object\") {\n let keysOfB = Object.keys(b);\n let childrenDeepEqual = Object.keys(a).every((key) => {\n let index = keysOfB.indexOf(key);\n if (index < 0) {\n return false;\n }\n keysOfB.splice(index, 1);\n return Helper.deepEqual(a[key], b[key]);\n });\n return (childrenDeepEqual && keysOfB.length === 0);\n }\n return false;\n }\n //Ältere evtl nützliche Funktionen\n static htmlspecialcharsDecode(text) {\n const map = {\n '&': '&',\n '&': \"&\",\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n '’': \"’\",\n '‘': \"‘\",\n '–': \"–\",\n '—': \"—\",\n '…': \"…\",\n '”': '”'\n };\n if (Helper.isNotNull(text) && typeof text.replace === \"function\") {\n return text.replace(/\\&[\\w\\d\\#]{2,5}\\;/g, function (m) {\n return map[m];\n });\n }\n return text;\n }\n // static getIndexedObject(array, keyValue) {\n // let obj = {};\n // for (let i = 0, n = array.length; i < n; i++) {\n // obj[array[i][keyValue]] = array[i];\n // }\n // return obj;\n // }\n /**\n * Inverts the key-Values for an object\n * @param obj\n * @return {*}\n */\n static invertKeyValues(obj) {\n let new_obj = {};\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n new_obj[obj[prop]] = prop;\n }\n }\n return new_obj;\n }\n static asyncForEach(array, callback, runAsyncronous) {\n return __awaiter(this, void 0, void 0, function* () {\n runAsyncronous = Helper.nonNull(runAsyncronous, false);\n if (array instanceof Map) {\n array = Array.from(array.values());\n }\n let validPromises = [];\n for (let i = 0; i < array.length; i++) {\n let index = i;\n let currentPromise = Promise.resolve(callback(array[index], index, array));\n if (!runAsyncronous) {\n yield currentPromise;\n }\n validPromises.push(currentPromise);\n }\n return Promise.all(validPromises);\n });\n }\n static escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n }\n static objectForEach(object, callback) {\n Object.keys(object).forEach(key => {\n callback(object[key], key, object);\n });\n }\n static toArray(object) {\n let res = [];\n for (let k in object) {\n res.push(object[k]);\n }\n return res;\n }\n static imageUrlIsEmpty(url) {\n return (Helper.isNull(url) || url.trim() === \"\" || url.trim() === \"data:\");\n }\n static newPromiseWithResolve() {\n let resolver = null;\n let rejecter = null;\n let promise = new Promise((resolve, reject) => {\n resolver = resolve;\n rejecter = reject;\n });\n promise[\"resolve\"] = resolver;\n promise[\"reject\"] = rejecter;\n return promise;\n }\n}\nexports.Helper = Helper;\n//# sourceMappingURL=Helper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { Table } from \"./table/Table\";\nimport { TableColumn } from \"./table/TableColumn\";\nimport { TableForeignKey } from \"./table/TableForeignKey\";\nimport { TableIndex } from \"./table/TableIndex\";\nimport { TableUtils } from \"./util/TableUtils\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { TableUnique } from \"./table/TableUnique\";\nimport { TableCheck } from \"./table/TableCheck\";\nimport { TableExclusion } from \"./table/TableExclusion\";\nimport { View } from \"./view/View\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates complete tables schemas in the database based on the entity metadatas.\n *\n * Steps how schema is being built:\n * 1. load list of all tables with complete column and keys information from the db\n * 2. drop all (old) foreign keys that exist in the table, but does not exist in the metadata\n * 3. create new tables that does not exist in the db, but exist in the metadata\n * 4. drop all columns exist (left old) in the db table, but does not exist in the metadata\n * 5. add columns from metadata which does not exist in the table\n * 6. update all exist columns which metadata has changed\n * 7. update primary keys - update old and create new primary key from changed columns\n * 8. create foreign keys which does not exist in the table yet\n * 9. create indices which are missing in db yet, and drops indices which exist in the db, but does not exist in the metadata anymore\n */\nvar RdbmsSchemaBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RdbmsSchemaBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates complete schemas for the given entity metadatas.\n */\n RdbmsSchemaBuilder.prototype.build = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 12, 18, 20]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 7:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 9];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 11];\n return [4 /*yield*/, this.queryRunner.commitTransaction()];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 20];\n case 12:\n error_1 = _a.sent();\n _a.label = 13;\n case 13:\n _a.trys.push([13, 16, , 17]);\n if (!!(this.connection.driver instanceof CockroachDriver)) return [3 /*break*/, 15];\n return [4 /*yield*/, this.queryRunner.rollbackTransaction()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18: return [4 /*yield*/, this.queryRunner.release()];\n case 19:\n _a.sent();\n return [7 /*endfinally*/];\n case 20: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns sql queries to be executed by schema builder.\n */\n RdbmsSchemaBuilder.prototype.log = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tablePaths;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.queryRunner = this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 9, 11]);\n tablePaths = this.entityToSyncMetadatas.map(function (metadata) { return metadata.tablePath; });\n if (!(this.viewEntityToSyncMetadatas.length > 0)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createTypeormMetadataTable()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [4 /*yield*/, this.queryRunner.getTables(tablePaths)];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.queryRunner.getViews([])];\n case 5:\n _a.sent();\n this.queryRunner.enableSqlMemory();\n return [4 /*yield*/, this.executeSchemaSyncOperationsInProperOrder()];\n case 6:\n _a.sent();\n if (!this.connection.queryResultCache) return [3 /*break*/, 8];\n return [4 /*yield*/, this.connection.queryResultCache.synchronize(this.queryRunner)];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [2 /*return*/, this.queryRunner.getMemorySql()];\n case 9:\n // its important to disable this mode despite the fact we are release query builder\n // because there exist drivers which reuse same query runner. Also its important to disable\n // sql memory after call of getMemorySql() method because last one flushes sql memory.\n this.queryRunner.disableSqlMemory();\n return [4 /*yield*/, this.queryRunner.release()];\n case 10:\n _a.sent();\n return [7 /*endfinally*/];\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"entityToSyncMetadatas\", {\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.synchronize && metadata.tableType !== \"entity-child\" && metadata.tableType !== \"view\"; });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RdbmsSchemaBuilder.prototype, \"viewEntityToSyncMetadatas\", {\n /**\n * Returns only entities that should be synced in the database.\n */\n get: function () {\n return this.connection.entityMetadatas.filter(function (metadata) { return metadata.tableType === \"view\" && metadata.synchronize; });\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Executes schema sync operations in a proper order.\n * Order of operations matter here.\n */\n RdbmsSchemaBuilder.prototype.executeSchemaSyncOperationsInProperOrder = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.dropOldViews()];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.dropOldForeignKeys()];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.dropOldIndices()];\n case 3:\n _a.sent();\n return [4 /*yield*/, this.dropOldChecks()];\n case 4:\n _a.sent();\n return [4 /*yield*/, this.dropOldExclusions()];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.dropCompositeUniqueConstraints()];\n case 6:\n _a.sent();\n // await this.renameTables();\n return [4 /*yield*/, this.renameColumns()];\n case 7:\n // await this.renameTables();\n _a.sent();\n return [4 /*yield*/, this.createNewTables()];\n case 8:\n _a.sent();\n return [4 /*yield*/, this.dropRemovedColumns()];\n case 9:\n _a.sent();\n return [4 /*yield*/, this.addNewColumns()];\n case 10:\n _a.sent();\n return [4 /*yield*/, this.updatePrimaryKeys()];\n case 11:\n _a.sent();\n return [4 /*yield*/, this.updateExistColumns()];\n case 12:\n _a.sent();\n return [4 /*yield*/, this.createNewIndices()];\n case 13:\n _a.sent();\n return [4 /*yield*/, this.createNewChecks()];\n case 14:\n _a.sent();\n return [4 /*yield*/, this.createNewExclusions()];\n case 15:\n _a.sent();\n return [4 /*yield*/, this.createCompositeUniqueConstraints()];\n case 16:\n _a.sent();\n return [4 /*yield*/, this.createForeignKeys()];\n case 17:\n _a.sent();\n return [4 /*yield*/, this.createViews()];\n case 18:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all (old) foreign keys that exist in the tables, but do not exist in the entity metadata.\n */\n RdbmsSchemaBuilder.prototype.dropOldForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_1, this_1, _a, _b, metadata, e_1_1;\n var e_1, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_1 = function (metadata) {\n var table, tableForeignKeysToDrop;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_1.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n tableForeignKeysToDrop = table.foreignKeys.filter(function (tableForeignKey) {\n var metadataFK = metadata.foreignKeys.find(function (metadataForeignKey) { return foreignKeysMatch(tableForeignKey, metadataForeignKey); });\n return !metadataFK\n || (metadataFK.onDelete && metadataFK.onDelete !== tableForeignKey.onDelete)\n || (metadataFK.onUpdate && metadataFK.onUpdate !== tableForeignKey.onUpdate);\n });\n if (tableForeignKeysToDrop.length === 0)\n return [2 /*return*/, \"continue\"];\n this_1.connection.logger.logSchemaBuild(\"dropping old foreign keys of \" + table.name + \": \" + tableForeignKeysToDrop.map(function (dbForeignKey) { return dbForeignKey.name; }).join(\", \"));\n // drop foreign keys from the database\n return [4 /*yield*/, this_1.queryRunner.dropForeignKeys(table, tableForeignKeysToDrop)];\n case 1:\n // drop foreign keys from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_1(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _d.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rename tables\n */\n RdbmsSchemaBuilder.prototype.renameTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Renames columns.\n * Works if only one column per table was changed.\n * Changes only column name. If something besides name was changed, these changes will be ignored.\n */\n RdbmsSchemaBuilder.prototype.renameColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_2, this_2, _a, _b, metadata, e_2_1;\n var e_2, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_2 = function (metadata) {\n var table, renamedMetadataColumns, renamedTableColumns, renamedColumn;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_2.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n if (metadata.columns.length !== table.columns.length)\n return [2 /*return*/, \"continue\"];\n renamedMetadataColumns = metadata.columns.filter(function (column) {\n return !table.columns.find(function (tableColumn) {\n return tableColumn.name === column.databaseName\n && tableColumn.type === _this.connection.driver.normalizeType(column)\n && tableColumn.isNullable === column.isNullable\n && tableColumn.isUnique === _this.connection.driver.normalizeIsUnique(column);\n });\n });\n if (renamedMetadataColumns.length === 0 || renamedMetadataColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (column) {\n return column.databaseName === tableColumn.name\n && _this.connection.driver.normalizeType(column) === tableColumn.type\n && column.isNullable === tableColumn.isNullable\n && _this.connection.driver.normalizeIsUnique(column) === tableColumn.isUnique;\n });\n });\n if (renamedTableColumns.length === 0 || renamedTableColumns.length > 1)\n return [2 /*return*/, \"continue\"];\n renamedColumn = renamedTableColumns[0].clone();\n renamedColumn.name = renamedMetadataColumns[0].databaseName;\n this_2.connection.logger.logSchemaBuild(\"renaming column \\\"\" + renamedTableColumns[0].name + \"\\\" in to \\\"\" + renamedColumn.name + \"\\\"\");\n return [4 /*yield*/, this_2.queryRunner.renameColumn(table, renamedTableColumns[0], renamedColumn)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_2(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_2_1 = _d.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_3, this_3, _a, _b, metadata, e_3_1;\n var e_3, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_3 = function (metadata) {\n var table, dropQueries;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_3.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n dropQueries = table.indices\n .filter(function (tableIndex) {\n var indexMetadata = metadata.indices.find(function (index) { return index.name === tableIndex.name; });\n if (indexMetadata) {\n if (indexMetadata.synchronize === false)\n return false;\n if (indexMetadata.isUnique !== tableIndex.isUnique)\n return true;\n if (indexMetadata.isSpatial !== tableIndex.isSpatial)\n return true;\n if (_this.connection.driver.isFullTextColumnTypeSupported() && indexMetadata.isFulltext !== tableIndex.isFulltext)\n return true;\n if (indexMetadata.columns.length !== tableIndex.columnNames.length)\n return true;\n return !indexMetadata.columns.every(function (column) { return tableIndex.columnNames.indexOf(column.databaseName) !== -1; });\n }\n return true;\n })\n .map(function (tableIndex) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.connection.logger.logSchemaBuild(\"dropping an index: \\\"\" + tableIndex.name + \"\\\" from table \" + table.name);\n return [4 /*yield*/, this.queryRunner.dropIndex(table, tableIndex)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(dropQueries)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_3 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_3(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _d.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_4, this_4, _a, _b, metadata, e_4_1;\n var e_4, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_4 = function (metadata) {\n var table, oldChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_4.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldChecks = table.checks.filter(function (tableCheck) {\n return !metadata.checks.find(function (checkMetadata) { return checkMetadata.name === tableCheck.name; });\n });\n if (oldChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_4.connection.logger.logSchemaBuild(\"dropping old check constraint: \" + oldChecks.map(function (check) { return \"\\\"\" + check.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_4.queryRunner.dropCheckConstraints(table, oldChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_4 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_4(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_4_1 = _d.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_5, this_5, _a, _b, metadata, e_5_1;\n var e_5, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_5 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_5.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = table.uniques.filter(function (tableUnique) {\n return tableUnique.columnNames.length > 1 && !metadata.uniques.find(function (uniqueMetadata) { return uniqueMetadata.name === tableUnique.name; });\n });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_5.connection.logger.logSchemaBuild(\"dropping old unique constraint: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_5.queryRunner.dropUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_5 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_5(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_5_1 = _d.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_6, this_6, _a, _b, metadata, e_6_1;\n var e_6, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_6 = function (metadata) {\n var table, oldExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_6.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n oldExclusions = table.exclusions.filter(function (tableExclusion) {\n return !metadata.exclusions.find(function (exclusionMetadata) { return exclusionMetadata.name === tableExclusion.name; });\n });\n if (oldExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_6.connection.logger.logSchemaBuild(\"dropping old exclusion constraint: \" + oldExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" from table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_6.queryRunner.dropExclusionConstraints(table, oldExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_6 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_6(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_6_1 = _d.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates tables that do not exist in the database yet.\n * New tables are created without foreign and primary keys.\n * Primary key only can be created in conclusion with auto generated column.\n */\n RdbmsSchemaBuilder.prototype.createNewTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_7, this_7, _a, _b, metadata, e_7_1;\n var e_7, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_7 = function (metadata) {\n var existTable, table;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existTable = this_7.queryRunner.loadedTables.find(function (table) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullTableName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n return table.name === fullTableName;\n });\n if (existTable)\n return [2 /*return*/, \"continue\"];\n this_7.connection.logger.logSchemaBuild(\"creating a new table: \" + metadata.tablePath);\n table = Table.create(metadata, this_7.connection.driver);\n return [4 /*yield*/, this_7.queryRunner.createTable(table, false, false)];\n case 1:\n _e.sent();\n this_7.queryRunner.loadedTables.push(table);\n return [2 /*return*/];\n }\n });\n };\n this_7 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_7(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_7_1 = _d.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_8, this_8, _a, _b, metadata, e_8_1;\n var e_8, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_8 = function (metadata) {\n var existView, view;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existView = this_8.queryRunner.loadedViews.find(function (view) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existView)\n return [2 /*return*/, \"continue\"];\n this_8.connection.logger.logSchemaBuild(\"creating a new view: \" + metadata.tablePath);\n view = View.create(metadata, this_8.connection.driver);\n return [4 /*yield*/, this_8.queryRunner.createView(view)];\n case 1:\n _e.sent();\n this_8.queryRunner.loadedViews.push(view);\n return [2 /*return*/];\n }\n });\n };\n this_8 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.viewEntityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_8(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_8_1 = _d.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.dropOldViews = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_9, this_9, _a, _b, view, e_9_1;\n var e_9, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_9 = function (view) {\n var existViewMetadata;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n existViewMetadata = this_9.viewEntityToSyncMetadatas.find(function (metadata) {\n var database = metadata.database && metadata.database !== _this.connection.driver.database ? metadata.database : undefined;\n var schema = metadata.schema || _this.connection.driver.options.schema;\n var fullViewName = _this.connection.driver.buildTableName(metadata.tableName, schema, database);\n var viewExpression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(_this.connection).getQuery();\n var metadataExpression = typeof metadata.expression === \"string\" ? metadata.expression.trim() : metadata.expression(_this.connection).getQuery();\n return view.name === fullViewName && viewExpression === metadataExpression;\n });\n if (existViewMetadata)\n return [2 /*return*/, \"continue\"];\n this_9.connection.logger.logSchemaBuild(\"dropping an old view: \" + view.name);\n // drop an old view\n return [4 /*yield*/, this_9.queryRunner.dropView(view)];\n case 1:\n // drop an old view\n _e.sent();\n this_9.queryRunner.loadedViews.splice(this_9.queryRunner.loadedViews.indexOf(view), 1);\n return [2 /*return*/];\n }\n });\n };\n this_9 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.queryRunner.loadedViews), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n view = _b.value;\n return [5 /*yield**/, _loop_9(view)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_9_1 = _d.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all columns that exist in the table, but does not exist in the metadata (left old).\n * We drop their keys too, since it should be safe.\n */\n RdbmsSchemaBuilder.prototype.dropRemovedColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_10, this_10, _a, _b, metadata, e_10_1;\n var e_10, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_10 = function (metadata) {\n var table, droppedTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_10.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n droppedTableColumns = table.columns.filter(function (tableColumn) {\n return !metadata.columns.find(function (columnMetadata) { return columnMetadata.databaseName === tableColumn.name; });\n });\n if (droppedTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_10.connection.logger.logSchemaBuild(\"columns dropped in \" + table.name + \": \" + droppedTableColumns.map(function (column) { return column.name; }).join(\", \"));\n // drop columns from the database\n return [4 /*yield*/, this_10.queryRunner.dropColumns(table, droppedTableColumns)];\n case 1:\n // drop columns from the database\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_10 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_10(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_10_1 = _d.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Adds columns from metadata which does not exist in the table.\n * Columns are created without keys.\n */\n RdbmsSchemaBuilder.prototype.addNewColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_11, this_11, _a, _b, metadata, e_11_1;\n var e_11, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_11 = function (metadata) {\n var table, newColumnMetadatas, newTableColumnOptions, newTableColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_11.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newColumnMetadatas = metadata.columns.filter(function (columnMetadata) {\n return !table.columns.find(function (tableColumn) { return tableColumn.name === columnMetadata.databaseName; });\n });\n if (newColumnMetadatas.length === 0)\n return [2 /*return*/, \"continue\"];\n newTableColumnOptions = this_11.metadataColumnsToTableColumnOptions(newColumnMetadatas);\n newTableColumns = newTableColumnOptions.map(function (option) { return new TableColumn(option); });\n if (newTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_11.connection.logger.logSchemaBuild(\"new columns added: \" + newColumnMetadatas.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_11.queryRunner.addColumns(table, newTableColumns)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_11 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_11(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_11_1 = _d.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n RdbmsSchemaBuilder.prototype.updatePrimaryKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_12, this_12, _a, _b, metadata, e_12_1;\n var e_12, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_12 = function (metadata) {\n var table, primaryMetadataColumns, primaryTableColumns, changedPrimaryColumns;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_12.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n primaryMetadataColumns = metadata.columns.filter(function (column) { return column.isPrimary; });\n primaryTableColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (!(primaryTableColumns.length !== primaryMetadataColumns.length && primaryMetadataColumns.length > 1)) return [3 /*break*/, 2];\n changedPrimaryColumns = primaryMetadataColumns.map(function (primaryMetadataColumn) {\n return new TableColumn(TableUtils.createTableColumnOptions(primaryMetadataColumn, _this.connection.driver));\n });\n return [4 /*yield*/, this_12.queryRunner.updatePrimaryKeys(table, changedPrimaryColumns)];\n case 1:\n _e.sent();\n _e.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n };\n this_12 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_12(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_12_1 = _d.sent();\n e_12 = { error: e_12_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_12) throw e_12.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Update all exist columns which metadata has changed.\n * Still don't create keys. Also we don't touch foreign keys of the changed columns.\n */\n RdbmsSchemaBuilder.prototype.updateExistColumns = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_13, this_13, _a, _b, metadata, e_13_1;\n var e_13, _c;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_13 = function (metadata) {\n var table, changedColumns, changedColumns_1, changedColumns_1_1, changedColumn, e_14_1, changedColumns_2, changedColumns_2_1, changedColumn, e_15_1, changedColumns_3, changedColumns_3_1, changedColumn, e_16_1, newAndOldTableColumns;\n var e_14, _e, e_15, _f, e_16, _g;\n return __generator(this, function (_h) {\n switch (_h.label) {\n case 0:\n table = this_13.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n changedColumns = this_13.connection.driver.findChangedColumns(table.columns, metadata.columns);\n if (changedColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n _h.label = 1;\n case 1:\n _h.trys.push([1, 6, 7, 8]);\n changedColumns_1 = (e_14 = void 0, __values(changedColumns)), changedColumns_1_1 = changedColumns_1.next();\n _h.label = 2;\n case 2:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 5];\n changedColumn = changedColumns_1_1.value;\n return [4 /*yield*/, this_13.dropColumnReferencedForeignKeys(metadata.tablePath, changedColumn.databaseName)];\n case 3:\n _h.sent();\n _h.label = 4;\n case 4:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_14_1 = _h.sent();\n e_14 = { error: e_14_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_e = changedColumns_1.return)) _e.call(changedColumns_1);\n }\n finally { if (e_14) throw e_14.error; }\n return [7 /*endfinally*/];\n case 8:\n _h.trys.push([8, 13, 14, 15]);\n changedColumns_2 = (e_15 = void 0, __values(changedColumns)), changedColumns_2_1 = changedColumns_2.next();\n _h.label = 9;\n case 9:\n if (!!changedColumns_2_1.done) return [3 /*break*/, 12];\n changedColumn = changedColumns_2_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeIndices(metadata.tablePath, changedColumn.databaseName)];\n case 10:\n _h.sent();\n _h.label = 11;\n case 11:\n changedColumns_2_1 = changedColumns_2.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_15_1 = _h.sent();\n e_15 = { error: e_15_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (changedColumns_2_1 && !changedColumns_2_1.done && (_f = changedColumns_2.return)) _f.call(changedColumns_2);\n }\n finally { if (e_15) throw e_15.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!!(this_13.connection.driver instanceof MysqlDriver || this_13.connection.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 23];\n _h.label = 16;\n case 16:\n _h.trys.push([16, 21, 22, 23]);\n changedColumns_3 = (e_16 = void 0, __values(changedColumns)), changedColumns_3_1 = changedColumns_3.next();\n _h.label = 17;\n case 17:\n if (!!changedColumns_3_1.done) return [3 /*break*/, 20];\n changedColumn = changedColumns_3_1.value;\n return [4 /*yield*/, this_13.dropColumnCompositeUniques(metadata.tablePath, changedColumn.databaseName)];\n case 18:\n _h.sent();\n _h.label = 19;\n case 19:\n changedColumns_3_1 = changedColumns_3.next();\n return [3 /*break*/, 17];\n case 20: return [3 /*break*/, 23];\n case 21:\n e_16_1 = _h.sent();\n e_16 = { error: e_16_1 };\n return [3 /*break*/, 23];\n case 22:\n try {\n if (changedColumns_3_1 && !changedColumns_3_1.done && (_g = changedColumns_3.return)) _g.call(changedColumns_3);\n }\n finally { if (e_16) throw e_16.error; }\n return [7 /*endfinally*/];\n case 23:\n newAndOldTableColumns = changedColumns.map(function (changedColumn) {\n var oldTableColumn = table.columns.find(function (column) { return column.name === changedColumn.databaseName; });\n var newTableColumnOptions = TableUtils.createTableColumnOptions(changedColumn, _this.connection.driver);\n var newTableColumn = new TableColumn(newTableColumnOptions);\n return {\n oldColumn: oldTableColumn,\n newColumn: newTableColumn\n };\n });\n if (newAndOldTableColumns.length === 0)\n return [2 /*return*/, \"continue\"];\n this_13.connection.logger.logSchemaBuild(\"columns changed in \\\"\" + table.name + \"\\\". updating: \" + changedColumns.map(function (column) { return column.databaseName; }).join(\", \"));\n return [4 /*yield*/, this_13.queryRunner.changeColumns(table, newAndOldTableColumns)];\n case 24:\n _h.sent();\n return [2 /*return*/];\n }\n });\n };\n this_13 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_13(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_13_1 = _d.sent();\n e_13 = { error: e_13_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_13) throw e_13.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite indices which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewIndices = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_14, this_14, _a, _b, metadata, e_17_1;\n var e_17, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_14 = function (metadata) {\n var table, newIndices;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_14.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newIndices = metadata.indices\n .filter(function (indexMetadata) { return !table.indices.find(function (tableIndex) { return tableIndex.name === indexMetadata.name; }) && indexMetadata.synchronize === true; })\n .map(function (indexMetadata) { return TableIndex.create(indexMetadata); });\n if (newIndices.length === 0)\n return [2 /*return*/, \"continue\"];\n this_14.connection.logger.logSchemaBuild(\"adding new indices \" + newIndices.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_14.queryRunner.createIndices(table, newIndices)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_14 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_14(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_17_1 = _d.sent();\n e_17 = { error: e_17_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_17) throw e_17.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n RdbmsSchemaBuilder.prototype.createNewChecks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_15, this_15, _a, _b, metadata, e_18_1;\n var e_18, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Mysql does not support check constraints\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)\n return [2 /*return*/];\n _loop_15 = function (metadata) {\n var table, newChecks;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_15.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newChecks = metadata.checks\n .filter(function (checkMetadata) { return !table.checks.find(function (tableCheck) { return tableCheck.name === checkMetadata.name; }); })\n .map(function (checkMetadata) { return TableCheck.create(checkMetadata); });\n if (newChecks.length === 0)\n return [2 /*return*/, \"continue\"];\n this_15.connection.logger.logSchemaBuild(\"adding new check constraints: \" + newChecks.map(function (index) { return \"\\\"\" + index.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_15.queryRunner.createCheckConstraints(table, newChecks)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_15 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_15(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_18_1 = _d.sent();\n e_18 = { error: e_18_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_18) throw e_18.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates composite uniques which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createCompositeUniqueConstraints = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_16, this_16, _a, _b, metadata, e_19_1;\n var e_19, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_16 = function (metadata) {\n var table, compositeUniques;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_16.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n compositeUniques = metadata.uniques\n .filter(function (uniqueMetadata) { return uniqueMetadata.columns.length > 1 && !table.uniques.find(function (tableUnique) { return tableUnique.name === uniqueMetadata.name; }); })\n .map(function (uniqueMetadata) { return TableUnique.create(uniqueMetadata); });\n if (compositeUniques.length === 0)\n return [2 /*return*/, \"continue\"];\n this_16.connection.logger.logSchemaBuild(\"adding new unique constraints: \" + compositeUniques.map(function (unique) { return \"\\\"\" + unique.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_16.queryRunner.createUniqueConstraints(table, compositeUniques)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_16 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_16(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_19_1 = _d.sent();\n e_19 = { error: e_19_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_19) throw e_19.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates exclusions which are missing in db yet.\n */\n RdbmsSchemaBuilder.prototype.createNewExclusions = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_17, this_17, _a, _b, metadata, e_20_1;\n var e_20, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Only PostgreSQL supports exclusion constraints\n if (!(this.connection.driver instanceof PostgresDriver))\n return [2 /*return*/];\n _loop_17 = function (metadata) {\n var table, newExclusions;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_17.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newExclusions = metadata.exclusions\n .filter(function (exclusionMetadata) { return !table.exclusions.find(function (tableExclusion) { return tableExclusion.name === exclusionMetadata.name; }); })\n .map(function (exclusionMetadata) { return TableExclusion.create(exclusionMetadata); });\n if (newExclusions.length === 0)\n return [2 /*return*/, \"continue\"];\n this_17.connection.logger.logSchemaBuild(\"adding new exclusion constraints: \" + newExclusions.map(function (exclusion) { return \"\\\"\" + exclusion.name + \"\\\"\"; }).join(\", \") + \" in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_17.queryRunner.createExclusionConstraints(table, newExclusions)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_17 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_17(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_20_1 = _d.sent();\n e_20 = { error: e_20_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_20) throw e_20.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates foreign keys which does not exist in the table yet.\n */\n RdbmsSchemaBuilder.prototype.createForeignKeys = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _loop_18, this_18, _a, _b, metadata, e_21_1;\n var e_21, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _loop_18 = function (metadata) {\n var table, newKeys, dbForeignKeys;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n table = this_18.queryRunner.loadedTables.find(function (table) { return table.name === metadata.tablePath; });\n if (!table)\n return [2 /*return*/, \"continue\"];\n newKeys = metadata.foreignKeys\n .filter(function (foreignKey) {\n return !table.foreignKeys.find(function (dbForeignKey) { return foreignKeysMatch(dbForeignKey, foreignKey); });\n });\n if (newKeys.length === 0)\n return [2 /*return*/, \"continue\"];\n dbForeignKeys = newKeys.map(function (foreignKeyMetadata) { return TableForeignKey.create(foreignKeyMetadata); });\n this_18.connection.logger.logSchemaBuild(\"creating a foreign keys: \" + newKeys.map(function (key) { return key.name; }).join(\", \") + \" on table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this_18.queryRunner.createForeignKeys(table, dbForeignKeys)];\n case 1:\n _e.sent();\n return [2 /*return*/];\n }\n });\n };\n this_18 = this;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 6, 7, 8]);\n _a = __values(this.entityToSyncMetadatas), _b = _a.next();\n _d.label = 2;\n case 2:\n if (!!_b.done) return [3 /*break*/, 5];\n metadata = _b.value;\n return [5 /*yield**/, _loop_18(metadata)];\n case 3:\n _d.sent();\n _d.label = 4;\n case 4:\n _b = _a.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_21_1 = _d.sent();\n e_21 = { error: e_21_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_21) throw e_21.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all foreign keys where given column of the given table is being used.\n */\n RdbmsSchemaBuilder.prototype.dropColumnReferencedForeignKeys = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, tablesWithFK, columnForeignKey, clonedTable, tablesWithFK_1, tablesWithFK_1_1, tableWithFK, e_22_1;\n var e_22, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n tablesWithFK = [];\n columnForeignKey = table.foreignKeys.find(function (foreignKey) { return foreignKey.columnNames.indexOf(columnName) !== -1; });\n if (columnForeignKey) {\n clonedTable = table.clone();\n clonedTable.foreignKeys = [columnForeignKey];\n tablesWithFK.push(clonedTable);\n table.removeForeignKey(columnForeignKey);\n }\n this.queryRunner.loadedTables.forEach(function (loadedTable) {\n var dependForeignKeys = loadedTable.foreignKeys.filter(function (foreignKey) {\n return foreignKey.referencedTableName === tablePath && foreignKey.referencedColumnNames.indexOf(columnName) !== -1;\n });\n if (dependForeignKeys.length > 0) {\n var clonedTable = loadedTable.clone();\n clonedTable.foreignKeys = dependForeignKeys;\n tablesWithFK.push(clonedTable);\n dependForeignKeys.forEach(function (dependForeignKey) { return loadedTable.removeForeignKey(dependForeignKey); });\n }\n });\n if (!(tablesWithFK.length > 0)) return [3 /*break*/, 8];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, 7, 8]);\n tablesWithFK_1 = __values(tablesWithFK), tablesWithFK_1_1 = tablesWithFK_1.next();\n _b.label = 2;\n case 2:\n if (!!tablesWithFK_1_1.done) return [3 /*break*/, 5];\n tableWithFK = tablesWithFK_1_1.value;\n this.connection.logger.logSchemaBuild(\"dropping related foreign keys of \" + tableWithFK.name + \": \" + tableWithFK.foreignKeys.map(function (foreignKey) { return foreignKey.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropForeignKeys(tableWithFK, tableWithFK.foreignKeys)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4:\n tablesWithFK_1_1 = tablesWithFK_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_22_1 = _b.sent();\n e_22 = { error: e_22_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (tablesWithFK_1_1 && !tablesWithFK_1_1.done && (_a = tablesWithFK_1.return)) _a.call(tablesWithFK_1);\n }\n finally { if (e_22) throw e_22.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite indices, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeIndices = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedIndices;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedIndices = table.indices.filter(function (index) { return index.columnNames.length > 1 && index.columnNames.indexOf(columnName) !== -1; });\n if (relatedIndices.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related indices of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedIndices.map(function (index) { return index.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropIndices(table, relatedIndices)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops all composite uniques, related to given column.\n */\n RdbmsSchemaBuilder.prototype.dropColumnCompositeUniques = function (tablePath, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, relatedUniques;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.queryRunner.loadedTables.find(function (table) { return table.name === tablePath; });\n if (!table)\n return [2 /*return*/];\n relatedUniques = table.uniques.filter(function (unique) { return unique.columnNames.length > 1 && unique.columnNames.indexOf(columnName) !== -1; });\n if (relatedUniques.length === 0)\n return [2 /*return*/];\n this.connection.logger.logSchemaBuild(\"dropping related unique constraints of \\\"\" + tablePath + \"\\\".\\\"\" + columnName + \"\\\": \" + relatedUniques.map(function (unique) { return unique.name; }).join(\", \"));\n return [4 /*yield*/, this.queryRunner.dropUniqueConstraints(table, relatedUniques)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new columns from the given column metadatas.\n */\n RdbmsSchemaBuilder.prototype.metadataColumnsToTableColumnOptions = function (columns) {\n var _this = this;\n return columns.map(function (columnMetadata) { return TableUtils.createTableColumnOptions(columnMetadata, _this.connection.driver); });\n };\n /**\n * Creates typeorm service table for storing user defined Views.\n */\n RdbmsSchemaBuilder.prototype.createTypeormMetadataTable = function () {\n return __awaiter(this, void 0, void 0, function () {\n var options, typeormMetadataTable;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n options = this.connection.driver.options;\n typeormMetadataTable = this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n return [4 /*yield*/, this.queryRunner.createTable(new Table({\n name: typeormMetadataTable,\n columns: [\n {\n name: \"type\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataType }),\n isNullable: false\n },\n {\n name: \"database\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataDatabase }),\n isNullable: true\n },\n {\n name: \"schema\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataSchema }),\n isNullable: true\n },\n {\n name: \"table\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataTable }),\n isNullable: true\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataName }),\n isNullable: true\n },\n {\n name: \"value\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.metadataValue }),\n isNullable: true\n },\n ]\n }), true)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return RdbmsSchemaBuilder;\n}());\nexport { RdbmsSchemaBuilder };\nfunction foreignKeysMatch(tableForeignKey, metadataForeignKey) {\n return (tableForeignKey.name === metadataForeignKey.name)\n && (tableForeignKey.referencedTableName === metadataForeignKey.referencedTablePath);\n}\n\n//# sourceMappingURL=RdbmsSchemaBuilder.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { DateUtils } from \"../../util/DateUtils\";\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\n/**\n * Organizes communication with sqlite DBMS.\n */\nvar AbstractSqliteDriver = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteDriver(connection) {\n /**\n * Indicates if replication is enabled.\n */\n this.isReplicated = false;\n /**\n * Indicates if tree tables are supported by this driver.\n */\n this.treeSupport = true;\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm\n * @see https://sqlite.org/datatype3.html\n */\n this.supportedDataTypes = [\n \"int\",\n \"integer\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"unsigned big int\",\n \"int2\",\n \"int8\",\n \"integer\",\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"clob\",\n \"text\",\n \"blob\",\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"boolean\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support length by a driver.\n */\n this.withLengthColumnTypes = [\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"blob\",\n \"clob\"\n ];\n /**\n * Gets list of spatial column data types.\n */\n this.spatialTypes = [];\n /**\n * Gets list of column data types that support precision by a driver.\n */\n this.withPrecisionColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n /**\n * Gets list of column data types that support scale by a driver.\n */\n this.withScaleColumnTypes = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n ];\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n this.mappedDataTypes = {\n createDate: \"datetime\",\n createDateDefault: \"datetime('now')\",\n updateDate: \"datetime\",\n updateDateDefault: \"datetime('now')\",\n deleteDate: \"datetime\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\n };\n this.connection = connection;\n this.options = connection.options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n AbstractSqliteDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AbstractSqliteDriver.prototype.afterConnect = function () {\n return Promise.resolve();\n };\n /**\n * Closes connection with database.\n */\n AbstractSqliteDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(function (err) { return err ? fail(err) : ok(); });\n })];\n });\n });\n };\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n AbstractSqliteDriver.prototype.createSchemaBuilder = function () {\n return new RdbmsSchemaBuilder(this.connection);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AbstractSqliteDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n if (value === null || value === undefined)\n return value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n return value === true ? 1 : 0;\n }\n else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n // to string conversation needs because SQLite stores date as integer number, when date came as Object\n // TODO: think about `toUTC` conversion\n return DateUtils.mixedDateToUtcDatetimeString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value);\n }\n return value;\n };\n /**\n * Prepares given value to a value to be hydrated, based on its column type or metadata.\n */\n AbstractSqliteDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n }\n else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n /**\n * Fix date conversion issue\n *\n * If the format of the date string is \"2018-03-14 02:33:33.906\", Safari (and iOS WKWebView) will convert it to an invalid date object.\n * We need to modify the date string to \"2018-03-14T02:33:33.906Z\" and Safari will convert it correctly.\n *\n * ISO 8601\n * https://www.w3.org/TR/NOTE-datetime\n */\n if (value && typeof value === \"string\") {\n // There are various valid time string formats a sqlite time string might have:\n // https://www.sqlite.org/lang_datefunc.html\n // There are two separate fixes we may need to do:\n // 1) Add 'T' separator if space is used instead\n // 2) Add 'Z' UTC suffix if no timezone or offset specified\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d/.test(value)) {\n value = value.replace(\" \", \"T\");\n }\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d(:\\d\\d(\\.\\d\\d\\d)?)?$/.test(value)) {\n value += \"Z\";\n }\n }\n value = DateUtils.normalizeHydratedDate(value);\n }\n else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n }\n else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n }\n else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n }\n else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n }\n else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return value;\n };\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n AbstractSqliteDriver.prototype.escapeQueryWithParameters = function (sql, parameters, nativeParameters) {\n var builtParameters = Object.keys(nativeParameters).map(function (key) {\n // Mapping boolean values to their numeric representation\n if (typeof nativeParameters[key] === \"boolean\") {\n return nativeParameters[key] === true ? 1 : 0;\n }\n return nativeParameters[key];\n });\n if (!parameters || !Object.keys(parameters).length)\n return [sql, builtParameters];\n var keys = Object.keys(parameters).map(function (parameter) { return \"(:(\\\\.\\\\.\\\\.)?\" + parameter + \"\\\\b)\"; }).join(\"|\");\n sql = sql.replace(new RegExp(keys, \"g\"), function (key) {\n var value;\n var isArray = false;\n if (key.substr(0, 4) === \":...\") {\n isArray = true;\n value = parameters[key.substr(4)];\n }\n else {\n value = parameters[key.substr(1)];\n }\n if (isArray) {\n return value.map(function (v) {\n builtParameters.push(v);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }).join(\", \");\n }\n else if (value instanceof Function) {\n return value();\n }\n else {\n builtParameters.push(value);\n return \"?\";\n // return \"$\" + builtParameters.length;\n }\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, builtParameters];\n };\n /**\n * Escapes a column name.\n */\n AbstractSqliteDriver.prototype.escape = function (columnName) {\n return \"\\\"\" + columnName + \"\\\"\";\n };\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. \"myDB\".\"mySchema\".\"myTable\"\n *\n * Returns only simple table name because all inherited drivers does not supports schema and database.\n */\n AbstractSqliteDriver.prototype.buildTableName = function (tableName, schema, database) {\n return tableName;\n };\n /**\n * Creates a database type from a given column metadata.\n */\n AbstractSqliteDriver.prototype.normalizeType = function (column) {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\";\n }\n else if (column.type === String) {\n return \"varchar\";\n }\n else if (column.type === Date) {\n return \"datetime\";\n }\n else if (column.type === Boolean) {\n return \"boolean\";\n }\n else if (column.type === \"uuid\") {\n return \"varchar\";\n }\n else if (column.type === \"simple-array\") {\n return \"text\";\n }\n else if (column.type === \"simple-json\") {\n return \"text\";\n }\n else if (column.type === \"simple-enum\") {\n return \"varchar\";\n }\n else {\n return column.type || \"\";\n }\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeDefault = function (columnMetadata) {\n var defaultValue = columnMetadata.default;\n if (typeof defaultValue === \"number\") {\n return \"\" + defaultValue;\n }\n else if (typeof defaultValue === \"boolean\") {\n return defaultValue === true ? \"1\" : \"0\";\n }\n else if (typeof defaultValue === \"function\") {\n return defaultValue();\n }\n else if (typeof defaultValue === \"string\") {\n return \"'\" + defaultValue + \"'\";\n }\n else if (defaultValue === null) {\n return undefined;\n }\n else {\n return defaultValue;\n }\n };\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n AbstractSqliteDriver.prototype.normalizeIsUnique = function (column) {\n return column.entityMetadata.uniques.some(function (uq) { return uq.columns.length === 1 && uq.columns[0] === column; });\n };\n /**\n * Calculates column length taking into account the default length values.\n */\n AbstractSqliteDriver.prototype.getColumnLength = function (column) {\n return column.length ? column.length.toString() : \"\";\n };\n /**\n * Normalizes \"default\" value of the column.\n */\n AbstractSqliteDriver.prototype.createFullType = function (column) {\n var type = column.type;\n if (column.enum) {\n return \"varchar\";\n }\n if (column.length) {\n type += \"(\" + column.length + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += \"(\" + column.precision + \",\" + column.scale + \")\";\n }\n else if (column.precision !== null && column.precision !== undefined) {\n type += \"(\" + column.precision + \")\";\n }\n if (column.isArray)\n type += \" array\";\n return type;\n };\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainMasterConnection = function () {\n return Promise.resolve();\n };\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n AbstractSqliteDriver.prototype.obtainSlaveConnection = function () {\n return Promise.resolve();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n AbstractSqliteDriver.prototype.createGeneratedMap = function (metadata, insertResult, entityIndex, entityNum) {\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n var value;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult) {\n // NOTE: When INSERT statement is successfully completed, the last inserted row ID is returned.\n // see also: SqliteQueryRunner.query()\n value = insertResult - entityNum + entityIndex + 1;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // value = insertValue[generatedColumn.databaseName];\n }\n if (!value)\n return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n AbstractSqliteDriver.prototype.findChangedColumns = function (tableColumns, columnMetadatas) {\n var _this = this;\n return columnMetadatas.filter(function (columnMetadata) {\n var tableColumn = tableColumns.find(function (c) { return c.name === columnMetadata.databaseName; });\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"comment:\", tableColumn.comment, columnMetadata.comment);\n // console.log(\"default:\", this.normalizeDefault(columnMetadata), columnMetadata.default);\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log(\"==========================================\");\n return tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== _this.normalizeType(columnMetadata)\n || tableColumn.length !== columnMetadata.length\n || tableColumn.precision !== columnMetadata.precision\n || tableColumn.scale !== columnMetadata.scale\n // || tableColumn.comment !== columnMetadata.comment || // todo\n || _this.normalizeDefault(columnMetadata) !== tableColumn.default\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== _this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\n });\n };\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n AbstractSqliteDriver.prototype.isReturningSqlSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n AbstractSqliteDriver.prototype.isUUIDGenerationSupported = function () {\n return false;\n };\n /**\n * Returns true if driver supports fulltext indices.\n */\n AbstractSqliteDriver.prototype.isFullTextColumnTypeSupported = function () {\n return false;\n };\n /**\n * Creates an escaped parameter.\n */\n AbstractSqliteDriver.prototype.createParameter = function (parameterName, index) {\n // return \"$\" + (index + 1);\n return \"?\";\n // return \"$\" + parameterName;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n AbstractSqliteDriver.prototype.createDatabaseConnection = function () {\n throw new Error(\"Do not use AbstractSqlite directly, it has to be used with one of the sqlite drivers\");\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AbstractSqliteDriver.prototype.loadDependencies = function () {\n // dependencies have to be loaded in the specific driver\n };\n return AbstractSqliteDriver;\n}());\nexport { AbstractSqliteDriver };\n\n//# sourceMappingURL=AbstractSqliteDriver.js.map\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Counter\"), exports);\n__exportStar(require(\"./shared/DateHelper\"), exports);\n__exportStar(require(\"./shared/Helper\"), exports);\n__exportStar(require(\"./shared/JsonHelper\"), exports);\n__exportStar(require(\"./shared/MigrationHelper\"), exports);\n__exportStar(require(\"./shared/Prioritized\"), exports);\n__exportStar(require(\"./shared/PromiseWithHandlers\"), exports);\n__exportStar(require(\"./shared/Random\"), exports);\n__exportStar(require(\"./shared/XSSHelper\"), exports);\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SoundManager = void 0;\nconst AudioChain_1 = require(\"./AudioChain\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst App_1 = require(\"../App\");\nconst DataManager_1 = require(\"../DataManager\");\nclass SoundManager {\n constructor() {\n this.channels = {};\n if ('AudioContext' in window) {\n this.context = new AudioContext();\n }\n else if ('webkitAudioContext' in window) {\n // @ts-ignore\n this.context = new webkitAudioContext();\n }\n else {\n throw new Error(\"No audio context found!\");\n }\n this.context.onstatechange = function () {\n console.log(\"stateChange from context\", arguments);\n };\n this.context.oncomplete = function () {\n console.log(\"onComplete from context\", arguments);\n };\n window.addEventListener(\"visibilitychange\", (e) => {\n // console.log(\"visibility Change event\", e);\n this.handleVisibilityChange();\n });\n //For safari\n let checkVisibility = () => {\n this.handleVisibilityChange();\n setTimeout(checkVisibility, 500);\n };\n checkVisibility();\n }\n static getInstance() {\n if (Helper_1.Helper.isNull(SoundManager._instance)) {\n SoundManager._instance = new SoundManager();\n }\n return SoundManager._instance;\n }\n isNotSuspended() {\n // return false;\n return this.context.state !== \"suspended\";\n }\n set(options, channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let audioObject = Helper_1.Helper.nonNull(this.channels[channel], {});\n if (typeof options === \"string\") {\n options = { audio: options };\n }\n let audio = options.audio;\n if (Helper_1.Helper.isNotNull(audio)) {\n audioObject.loadedPromise = DataManager_1.DataManager.loadAsset(audio, \"raw\").then(res => res.arrayBuffer()).then(arrayBuffer => {\n return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n }).catch(e => console.error(e));\n // audioObject.loadedPromise = fetch(audio).then(res => res.arrayBuffer()).then(arrayBuffer => {\n // return new Promise((r, reject) => this.context.decodeAudioData(arrayBuffer, r));\n // }).catch(e => console.error(e));\n this.stop(channel);\n }\n audioObject.muted = Helper_1.Helper.nonNull(options.muted, audioObject.muted, false);\n audioObject.volume = Helper_1.Helper.nonNull(options.volume, audioObject.volume, 1);\n audioObject.loop = Helper_1.Helper.nonNull(options.loop, audioObject.loop, false);\n audioObject.timeOffset = Helper_1.Helper.nonNull(options.timeOffset, audioObject.timeOffset, 0);\n this.channels[channel] = audioObject;\n if (audioObject.muted) {\n this.stop(channel);\n }\n return this.channels[channel];\n }\n resumeContext() {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.context.resume === \"function\") {\n return this.context.resume();\n }\n });\n }\n play(channel, audioOrOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n this.resumeContext();\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNull(audioOrOptions)) {\n audioOrOptions = {};\n }\n else if (!(typeof audioOrOptions === \"object\")) {\n audioOrOptions = {\n audio: audioOrOptions\n };\n }\n audioOrOptions.timeOffset = Helper_1.Helper.nonNull(audioOrOptions.timeOffset, 0);\n this.stop(channel);\n this.set(audioOrOptions, channel);\n if (!this.channels[channel].muted) {\n let buffer = yield this.channels[channel].loadedPromise;\n let source = new AudioChain_1.AudioChain(this.context, buffer, (sourceNode) => {\n let gain = this.context.createGain();\n gain.gain.value = this.channels[channel].volume;\n sourceNode.connect(gain);\n gain.connect(this.context.destination);\n });\n source.setBuffer(buffer);\n //to prevent gap in mp3-files\n source.setLooping(this.channels[channel].loop, 0.3, buffer.duration - 0.3);\n this.channels[channel].source = source;\n yield source.start();\n }\n return this.channels[channel];\n });\n }\n stop(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n let oldAudio = this.channels[channel];\n if (Helper_1.Helper.isNotNull(oldAudio) && Helper_1.Helper.isNotNull(oldAudio.source)) {\n oldAudio.source.stop();\n }\n }\n get(channel) {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n return this.channels[channel];\n }\n resume(channel) {\n return __awaiter(this, void 0, void 0, function* () {\n channel = Helper_1.Helper.nonNull(channel, SoundManager.CHANNELS.DEFAULT);\n if (Helper_1.Helper.isNotNull(this.channels[channel]) && !this.channels[channel].muted && Helper_1.Helper.isNotNull(this.channels[channel].source)) {\n return this.channels[channel].source.resume();\n }\n });\n }\n stopAll() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.stop();\n }\n }\n }\n resumeAllIfNotMuted() {\n for (let k in this.channels) {\n if (Helper_1.Helper.isNotNull(this.channels[k]) && !this.channels[k].muted && Helper_1.Helper.isNotNull(this.channels[k].source)) {\n this.channels[k].source.resume();\n }\n }\n }\n handleVisibilityChange() {\n if (document.hidden) {\n this.stopAll();\n }\n else {\n this.resumeAllIfNotMuted();\n }\n }\n}\nexports.SoundManager = SoundManager;\nSoundManager.CHANNELS = {\n MUSIC: \"music\",\n SOUND: \"sound\",\n DEFAULT: \"default\"\n};\nApp_1.App.addInitialization(app => {\n // PauseSite.onPauseListeners.push(() => {\n // SoundManager.getInstance().stopAll();\n // });\n // PauseSite.onStartListeners.push(() => {\n // SoundManager.getInstance().resumeAllIfNotMuted();\n // });\n});\n// AndroidBridge.addDefinition(() => {\n// window[\"soundManagerInstance\"] = SoundManager.getInstance();\n// window[\"soundManagerInstance\"][\"stopAll\"] = window[\"soundManagerInstance\"].stopAll;\n// window[\"soundManagerInstance\"][\"resumeAllIfNotMuted\"] = window[\"soundManagerInstance\"].resumeAllIfNotMuted;\n// });\n//# sourceMappingURL=SoundManager.js.map","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./BaseDatabase\"));\n__export(require(\"./BaseModel\"));\n__export(require(\"./cordova-sites-database\"));\n//# sourceMappingURL=cordova-sites-database.js.map","import { __read, __values } from \"tslib\";\nimport { hash } from \"../util/StringUtils\";\n/**\n * Common driver utility functions.\n */\nvar DriverUtils = /** @class */ (function () {\n function DriverUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes and builds a new driver options.\n * Extracts settings from connection url and sets to a new options object.\n */\n DriverUtils.buildDriverOptions = function (options, buildOptions) {\n var e_1, _a;\n if (options.url) {\n var urlDriverOptions = this.parseConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * buildDriverOptions for MongodDB only to support replica set\n */\n DriverUtils.buildMongoDBDriverOptions = function (options, buildOptions) {\n var e_2, _a;\n if (options.url) {\n var urlDriverOptions = this.parseMongoDBConnectionUrl(options.url);\n if (buildOptions && buildOptions.useSid && urlDriverOptions.database) {\n urlDriverOptions.sid = urlDriverOptions.database;\n }\n try {\n for (var _b = __values(Object.keys(urlDriverOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key];\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return Object.assign({}, options, urlDriverOptions);\n }\n return Object.assign({}, options);\n };\n /**\n * Builds column alias from given alias name and column name.\n *\n * If alias length is greater than the limit (if any) allowed by the current\n * driver, replaces it with a hashed string.\n *\n * @param driver Current `Driver`.\n * @param alias Alias part.\n * @param column Name of the column to be concatened to `alias`.\n *\n * @return An alias allowing to select/transform the target `column`.\n */\n DriverUtils.buildColumnAlias = function (_a, alias, column) {\n var maxAliasLength = _a.maxAliasLength;\n var columnAliasName = alias + \"_\" + column;\n if (maxAliasLength && maxAliasLength > 0 && columnAliasName.length > maxAliasLength) {\n return hash(columnAliasName, { length: maxAliasLength });\n }\n return columnAliasName;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Extracts connection data from the connection url.\n */\n DriverUtils.parseConnectionUrl = function (url) {\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n var _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n return {\n type: type,\n host: host,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined\n };\n };\n /**\n * Extracts connection data from the connection url for MongoDB to support replica set.\n */\n DriverUtils.parseMongoDBConnectionUrl = function (url) {\n var _a;\n var type = url.split(\":\")[0];\n var firstSlashes = url.indexOf(\"//\");\n var preBase = url.substr(firstSlashes + 2);\n var secondSlash = preBase.indexOf(\"/\");\n var base = (secondSlash !== -1) ? preBase.substr(0, secondSlash) : preBase;\n var afterBase = (secondSlash !== -1) ? preBase.substr(secondSlash + 1) : undefined;\n var afterQuestionMark = \"\";\n var host = undefined;\n var port = undefined;\n var hostReplicaSet = undefined;\n var replicaSet = undefined;\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n // split params to get replica set\n afterQuestionMark = afterBase.substr((afterBase.indexOf(\"?\") + 1), afterBase.length);\n replicaSet = afterQuestionMark.split(\"=\")[1];\n afterBase = afterBase.substr(0, afterBase.indexOf(\"?\"));\n }\n var lastAtSign = base.lastIndexOf(\"@\");\n var usernameAndPassword = base.substr(0, lastAtSign);\n var hostAndPort = base.substr(lastAtSign + 1);\n var username = usernameAndPassword;\n var password = \"\";\n var firstColon = usernameAndPassword.indexOf(\":\");\n if (firstColon !== -1) {\n username = usernameAndPassword.substr(0, firstColon);\n password = usernameAndPassword.substr(firstColon + 1);\n }\n if (replicaSet) {\n hostReplicaSet = hostAndPort;\n }\n else {\n _a = __read(hostAndPort.split(\":\"), 2), host = _a[0], port = _a[1];\n }\n return {\n type: type,\n host: host,\n hostReplicaSet: hostReplicaSet,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase || undefined,\n replicaSet: replicaSet || undefined\n };\n };\n return DriverUtils;\n}());\nexport { DriverUtils };\n\n//# sourceMappingURL=DriverUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Provides utilities to transform hydrated and persisted data.\n */\nvar DateUtils = /** @class */ (function () {\n function DateUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Normalizes date object hydrated from the database.\n */\n DateUtils.normalizeHydratedDate = function (mixedDate) {\n if (!mixedDate)\n return mixedDate;\n return typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n };\n /**\n * Converts given value into date string in a \"YYYY-MM-DD\" format.\n */\n DateUtils.mixedDateToDateString = function (value) {\n if (value instanceof Date)\n return this.formatZerolessValue(value.getFullYear()) + \"-\" + this.formatZerolessValue(value.getMonth() + 1) + \"-\" + this.formatZerolessValue(value.getDate());\n return value;\n };\n /**\n * Converts given value into date object.\n */\n DateUtils.mixedDateToDate = function (mixedDate, toUtc, useMilliseconds) {\n if (toUtc === void 0) { toUtc = false; }\n if (useMilliseconds === void 0) { useMilliseconds = true; }\n var date = typeof mixedDate === \"string\" ? new Date(mixedDate) : mixedDate;\n if (toUtc)\n date = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n if (!useMilliseconds)\n date.setUTCMilliseconds(0);\n return date;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedDateToTimeString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n if (value instanceof Date)\n return this.formatZerolessValue(value.getHours()) +\n \":\" + this.formatZerolessValue(value.getMinutes()) +\n (!skipSeconds ? \":\" + this.formatZerolessValue(value.getSeconds()) : \"\");\n return value;\n };\n /**\n * Converts given value into time string in a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToDate = function (value) {\n if (typeof value === \"string\") {\n var _a = __read(value.split(\":\"), 3), hours = _a[0], minutes = _a[1], seconds = _a[2];\n var date = new Date();\n if (hours)\n date.setHours(parseInt(hours));\n if (minutes)\n date.setMinutes(parseInt(minutes));\n if (seconds)\n date.setSeconds(parseInt(seconds));\n return date;\n }\n return value;\n };\n /**\n * Converts given string value with \"-\" separator into a \"HH:mm:ss\" format.\n */\n DateUtils.mixedTimeToString = function (value, skipSeconds) {\n if (skipSeconds === void 0) { skipSeconds = false; }\n value = value instanceof Date ? (value.getHours() + \":\" + value.getMinutes() + (!skipSeconds ? \":\" + value.getSeconds() : \"\")) : value;\n if (typeof value === \"string\") {\n return value.split(\":\")\n .map(function (v) { return v.length === 1 ? \"0\" + v : v; }) // append zero at beginning if we have a first-zero-less number\n .join(\":\");\n }\n return value;\n };\n /**\n * Converts given value into datetime string in a \"YYYY-MM-DD HH-mm-ss\" format.\n */\n DateUtils.mixedDateToDatetimeString = function (value, useMilliseconds) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n var finalValue = this.formatZerolessValue(value.getFullYear()) + \"-\" +\n this.formatZerolessValue(value.getMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getDate()) + \" \" +\n this.formatZerolessValue(value.getHours()) + \":\" +\n this.formatZerolessValue(value.getMinutes()) + \":\" +\n this.formatZerolessValue(value.getSeconds());\n if (useMilliseconds)\n finalValue += \".\" + this.formatMilliseconds(value.getMilliseconds());\n value = finalValue;\n }\n return value;\n };\n /**\n * Converts given value into utc datetime string in a \"YYYY-MM-DD HH-mm-ss.sss\" format.\n */\n DateUtils.mixedDateToUtcDatetimeString = function (value) {\n if (typeof value === \"string\") {\n value = new Date(value);\n }\n if (value instanceof Date) {\n return this.formatZerolessValue(value.getUTCFullYear()) + \"-\" +\n this.formatZerolessValue(value.getUTCMonth() + 1) + \"-\" +\n this.formatZerolessValue(value.getUTCDate()) + \" \" +\n this.formatZerolessValue(value.getUTCHours()) + \":\" +\n this.formatZerolessValue(value.getUTCMinutes()) + \":\" +\n this.formatZerolessValue(value.getUTCSeconds()) + \".\" +\n this.formatMilliseconds(value.getUTCMilliseconds());\n }\n return value;\n };\n /**\n * Converts each item in the given array to string joined by \",\" separator.\n */\n DateUtils.simpleArrayToString = function (value) {\n if (Array.isArray(value)) {\n return value\n .map(function (i) { return String(i); })\n .join(\",\");\n }\n return value;\n };\n /**\n * Converts given string to simple array split by \",\" separator.\n */\n DateUtils.stringToSimpleArray = function (value) {\n if (value instanceof String || typeof value === \"string\") {\n if (value.length > 0) {\n return value.split(\",\");\n }\n else {\n return [];\n }\n }\n return value;\n };\n DateUtils.simpleJsonToString = function (value) {\n return JSON.stringify(value);\n };\n DateUtils.stringToSimpleJson = function (value) {\n return typeof value === \"string\" ? JSON.parse(value) : value;\n };\n DateUtils.simpleEnumToString = function (value) {\n return \"\" + value;\n };\n DateUtils.stringToSimpleEnum = function (value, columnMetadata) {\n if (columnMetadata.enum\n && !isNaN(value)\n && columnMetadata.enum.indexOf(parseInt(value)) >= 0) {\n // convert to number if that exists in poosible enum options\n value = parseInt(value);\n }\n return value;\n };\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatZerolessValue = function (value) {\n if (value < 10)\n return \"0\" + value;\n return String(value);\n };\n /**\n * Formats given number to \"0x\" format, e.g. if it is 1 then it will return \"01\".\n */\n DateUtils.formatMilliseconds = function (value) {\n if (value < 10) {\n return \"00\" + value;\n }\n else if (value < 100) {\n return \"0\" + value;\n }\n else {\n return String(value);\n }\n };\n return DateUtils;\n}());\nexport { DateUtils };\n\n//# sourceMappingURL=DateUtils.js.map\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","import { __values } from \"tslib\";\nvar ObjectUtils = /** @class */ (function () {\n function ObjectUtils() {\n }\n /**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target The target object to copy to.\n * @param sources One or more source objects from which to copy properties\n */\n ObjectUtils.assign = function (target) {\n var e_1, _a, e_2, _b;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n try {\n for (var sources_1 = __values(sources), sources_1_1 = sources_1.next(); !sources_1_1.done; sources_1_1 = sources_1.next()) {\n var source = sources_1_1.value;\n try {\n for (var _c = (e_2 = void 0, __values(Object.getOwnPropertyNames(source))), _d = _c.next(); !_d.done; _d = _c.next()) {\n var prop = _d.value;\n target[prop] = source[prop];\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n return ObjectUtils;\n}());\nexport { ObjectUtils };\n\n//# sourceMappingURL=ObjectUtils.js.map\n","/**\n * Table's columns in the database represented in this class.\n */\nvar TableColumn = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableColumn(options) {\n /**\n * Indicates if column is NULL, or is NOT NULL in the database.\n */\n this.isNullable = false;\n /**\n * Indicates if column is auto-generated sequence.\n */\n this.isGenerated = false;\n /**\n * Indicates if column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if column has unique value.\n */\n this.isUnique = false;\n /**\n * Indicates if column stores array.\n */\n this.isArray = false;\n /**\n * Column type's length. Used only on some column types.\n * For example type = \"string\" and length = \"100\" means that ORM will create a column with type varchar(100).\n */\n this.length = \"\";\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n if (options) {\n this.name = options.name;\n this.type = options.type || \"\";\n this.length = options.length || \"\";\n this.width = options.width;\n this.charset = options.charset;\n this.collation = options.collation;\n this.precision = options.precision;\n this.scale = options.scale;\n this.zerofill = options.zerofill || false;\n this.unsigned = this.zerofill ? true : (options.unsigned || false);\n this.default = options.default;\n this.onUpdate = options.onUpdate;\n this.isNullable = options.isNullable || false;\n this.isGenerated = options.isGenerated || false;\n this.generationStrategy = options.generationStrategy;\n this.isPrimary = options.isPrimary || false;\n this.isUnique = options.isUnique || false;\n this.isArray = options.isArray || false;\n this.comment = options.comment;\n this.enum = options.enum;\n this.enumName = options.enumName;\n this.asExpression = options.asExpression;\n this.generatedType = options.generatedType;\n this.spatialFeatureType = options.spatialFeatureType;\n this.srid = options.srid;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this column to a new column with exact same properties as this column has.\n */\n TableColumn.prototype.clone = function () {\n return new TableColumn({\n name: this.name,\n type: this.type,\n length: this.length,\n width: this.width,\n charset: this.charset,\n collation: this.collation,\n precision: this.precision,\n scale: this.scale,\n zerofill: this.zerofill,\n unsigned: this.unsigned,\n enum: this.enum,\n enumName: this.enumName,\n asExpression: this.asExpression,\n generatedType: this.generatedType,\n default: this.default,\n onUpdate: this.onUpdate,\n isNullable: this.isNullable,\n isGenerated: this.isGenerated,\n generationStrategy: this.generationStrategy,\n isPrimary: this.isPrimary,\n isUnique: this.isUnique,\n isArray: this.isArray,\n comment: this.comment,\n spatialFeatureType: this.spatialFeatureType,\n srid: this.srid\n });\n };\n return TableColumn;\n}());\nexport { TableColumn };\n\n//# sourceMappingURL=TableColumn.js.map\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewHelper = void 0;\nclass ViewHelper {\n /**\n * Entfernt alle Children eines Elements\n *\n * @param element\n * @returns {Node}\n */\n static removeAllChildren(element) {\n if (element instanceof Node) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n return element;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n from.childNodes.forEach(child => {\n children.push(child);\n });\n children.forEach(child => {\n from.removeChild(child);\n to.appendChild(child);\n });\n return to;\n }\n static insertAfter(newChild, referenceChild) {\n const parent = referenceChild.parentNode;\n if (parent) {\n if (parent.lastChild === referenceChild) {\n parent.appendChild(newChild);\n }\n else {\n parent.insertBefore(newChild, referenceChild.nextSibling);\n }\n return true;\n }\n return false;\n }\n}\nexports.ViewHelper = ViewHelper;\n//# sourceMappingURL=ViewHelper.js.map","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst NativeStoragePromise_1 = require(\"./NativeStoragePromise\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"../../shared/Translator\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator extends Translator_1.Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config) {\n super(config);\n config = Helper_1.Helper.nonNull(config, {});\n this._currentLanguage = config.currentLanguage || this._fallbackLanguage;\n this._nativeStorageKey = config.nativeStorageKey || \"language\";\n this._translationClass = config.translationClass || \"translation\";\n this._initPromise = this.loadUserLanguage().then(userLanguage => this.setLanguage(userLanguage.toLowerCase()));\n }\n /**\n * Setzt die neue Sprache, updated alle Übersetzungen. Speichert danach die aktuelle Sprache in NativeStorage\n * @param language\n */\n setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._currentLanguage === language) {\n yield this.updateTranslations();\n return;\n }\n if (!this._translations[language]) {\n return;\n }\n if (typeof document !== 'undefined') {\n document.getElementsByTagName(\"html\")[0].setAttribute(\"lang\", language);\n }\n this._currentLanguage = language;\n yield this.updateTranslations();\n //zum schluss => Falls setzen des Keys fehlschlägt, wird trotzdem noch übersetzt\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this._nativeStorageKey, this._currentLanguage);\n });\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @returns {*}\n */\n translate(key, args, language) {\n return super.translate(key, args, Helper_1.Helper.nonNull(language, this._currentLanguage));\n }\n /**\n * Fügt eine Callback hinzu, die aufgerufen wird, sobald die Seite übersetzt wird. Sollte genutzt werden, um Teile\n * zu übersetzen, die nicht per HTML übersetzt werden können, die der Document Title\n *\n * wenn callImmediately true ist (default), wird die Callback sofort einmal ausgeführt\n *\n * Gibt die CallbackId zurück\n *\n * @param callback\n * @param callImmediately\n * @returns {number}\n */\n addTranslationCallback(callback, callImmediately) {\n callImmediately = Helper_1.Helper.nonNull(callImmediately, true);\n this._lastTranslationCallbackId++;\n this._translationCallbacks.set(this._lastTranslationCallbackId, callback);\n if (callImmediately) {\n callback();\n }\n return this._lastTranslationCallbackId;\n }\n /**\n * Entfernt die Callback anhand der gegebenen ID\n *\n * @param callbackId\n */\n removeTranslationCallback(callbackId) {\n this._translationCallbacks.delete(callbackId);\n }\n /**\n * Updated die aktuellen übersetzungen\n */\n updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n baseElement = Helper_1.Helper.nonNull(baseElement, document);\n if (typeof baseElement !== 'undefined') {\n let elements = baseElement.getElementsByClassName(this._translationClass);\n for (let i = 0, max = elements.length; i < max; i++) {\n let key = (Translator._isValid(elements[i].dataset[\"translation\"]) ? elements[i].dataset[\"translation\"] : (elements[i].innerText || \"\"));\n if (key !== \"\" && !elements[i].dataset[\"onlyTranslateAttributes\"]) {\n try {\n let translation = this.translate(key, (elements[i].dataset[\"translationArgs\"] !== undefined) ? JSON.parse(elements[i].dataset[\"translationArgs\"]) : undefined);\n if (elements[i].dataset[\"translationUseText\"] === \"1\") {\n elements[i].innerText = translation;\n }\n else {\n elements[i].innerHTML = translation;\n }\n elements[i].dataset[\"translation\"] = key;\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n //Übersetzung von Attributen\n for (let k in elements[i].dataset) {\n if (k.startsWith(\"translation\") && !k.endsWith(\"Args\")) {\n try {\n elements[i][k.substr(11).toLowerCase()] = this.translate(elements[i].dataset[k], (elements[i].dataset[k + \"Args\"] !== undefined) ? JSON.parse(elements[i].dataset[k + \"Args\"]) : undefined);\n }\n catch (err) {\n console.error(\"wrong configured translation: \" + err);\n }\n }\n }\n }\n }\n //Call translation callbacks\n yield Helper_1.Helper.asyncForEach(this._translationCallbacks, (callback) => __awaiter(this, void 0, void 0, function* () { return callback(baseElement); }));\n // this._translationCallbacks.forEach(callback => callback(baseElement));\n });\n }\n /**\n * Lädt die im NativeStorage gespeicherte Sprache oder - falls diese nicht vorhanden ist - die vom User untersütze Sprache im Browser\n * @returns {Promise<*>}\n */\n loadUserLanguage() {\n return __awaiter(this, void 0, void 0, function* () {\n let userLanguage = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this._nativeStorageKey);\n if (!Translator._isValid(userLanguage) || !(userLanguage in this._translations)) {\n let userLanguages = [];\n if (navigator.language !== undefined) {\n userLanguages.push(navigator.language);\n }\n if (\"languages\" in navigator) {\n //.slice(0) klont das Array. Behebt einen Bug in Firefox\n userLanguages = navigator.languages.slice(0);\n }\n //sicherstellen, dass überhaupt eine Sprache gefunden wird\n userLanguages.push(this._fallbackLanguage);\n // if (userLanguages !== undefined) {\n for (let i = 0, numLanguages = userLanguages.length; i < numLanguages; i++) {\n if (userLanguages[i] in this._translations) {\n userLanguage = userLanguages[i];\n break;\n }\n }\n // }\n }\n return userLanguage;\n });\n }\n /**\n * Erstellt eine neue Übersetzung, welche auch übersetzt wird, wenn die Sprache geändert wird\n * @param key\n * @param args\n * @param tag\n * @param useText\n * @returns {any}\n */\n makePersistentTranslation(key, args, tag, useText) {\n useText = Helper_1.Helper.nonNull(useText, tag, args, false);\n tag = tag || \"span\";\n if (typeof document !== 'undefined') {\n let htmlElem = document.createElement(tag);\n htmlElem.dataset[\"translation\"] = key;\n htmlElem.classList.add(this._translationClass);\n if (args !== undefined) {\n htmlElem.dataset[\"translationArgs\"] = JSON.stringify(args);\n }\n if (useText === true) {\n htmlElem.innerText = this.translate(key, args);\n htmlElem.dataset[\"translationUseText\"] = \"1\";\n }\n else {\n htmlElem.innerHTML = this.translate(key, args);\n }\n return htmlElem;\n }\n }\n getTranslationClass() {\n return this._translationClass;\n }\n getCurrentLanguage() {\n return this._currentLanguage;\n }\n static getInstance() {\n return Translator_1.Translator.getInstance();\n }\n static setLanguage(language) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.setLanguage(language);\n }\n });\n }\n static makePersistentTranslation(key, args, tag, useText) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.makePersistentTranslation(key, args, tag, useText);\n }\n }\n static addTranslationCallback(callback, callImmediately) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addTranslationCallback(callback, callImmediately);\n }\n }\n static removeTranslationCallback(callbackId) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.removeTranslationCallback(callbackId);\n }\n }\n static updateTranslations(baseElement) {\n return __awaiter(this, void 0, void 0, function* () {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.updateTranslations(baseElement);\n }\n });\n }\n static init(config) {\n Translator_1.Translator.instance = new Translator(config);\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.logMissingTranslations = true;\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table unique constraint stored in this class.\n */\nvar TableUnique = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableUnique(options) {\n /**\n * Columns that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableUnique.prototype.clone = function () {\n return new TableUnique({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames))\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates unique from the unique metadata object.\n */\n TableUnique.create = function (uniqueMetadata) {\n return new TableUnique({\n name: uniqueMetadata.name,\n columnNames: uniqueMetadata.columns.map(function (column) { return column.databaseName; })\n });\n };\n return TableUnique;\n}());\nexport { TableUnique };\n\n//# sourceMappingURL=TableUnique.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * This metadata contains all information about entity's column.\n */\nvar ColumnMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ColumnMetadata(options) {\n /**\n * Type's length in the database.\n */\n this.length = \"\";\n /**\n * Indicates if this column is a primary key.\n */\n this.isPrimary = false;\n /**\n * Indicates if this column is generated (auto increment or generated other way).\n */\n this.isGenerated = false;\n /**\n * Indicates if column can contain nulls or not.\n */\n this.isNullable = false;\n /**\n * Indicates if column is selected by query builder or not.\n */\n this.isSelect = true;\n /**\n * Indicates if column is inserted by default or not.\n */\n this.isInsert = true;\n /**\n * Indicates if column allows updates or not.\n */\n this.isUpdate = true;\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n this.zerofill = false;\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n this.unsigned = false;\n /**\n * Indicates if this column is an array.\n */\n this.isArray = false;\n /**\n * Indicates if column is virtual. Virtual columns are not mapped to the entity.\n */\n this.isVirtual = false;\n /**\n * Indicates if column is discriminator. Discriminator columns are not mapped to the entity.\n */\n this.isDiscriminator = false;\n /**\n * Indicates if column is tree-level column. Tree-level columns are used in closure entities.\n */\n this.isTreeLevel = false;\n /**\n * Indicates if this column contains an entity creation date.\n */\n this.isCreateDate = false;\n /**\n * Indicates if this column contains an entity update date.\n */\n this.isUpdateDate = false;\n /**\n * Indicates if this column contains an entity delete date.\n */\n this.isDeleteDate = false;\n /**\n * Indicates if this column contains an entity version.\n */\n this.isVersion = false;\n /**\n * Indicates if this column contains an object id.\n */\n this.isObjectId = false;\n /**\n * Indicates if this column is nested set's left column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetLeft = false;\n /**\n * Indicates if this column is nested set's right column.\n * Used only in tree entities with nested-set type.\n */\n this.isNestedSetRight = false;\n /**\n * Indicates if this column is materialized path's path column.\n * Used only in tree entities with materialized path type.\n */\n this.isMaterializedPath = false;\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.referencedColumn = options.referencedColumn;\n if (options.args.target)\n this.target = options.args.target;\n if (options.args.propertyName)\n this.propertyName = options.args.propertyName;\n if (options.args.options.name)\n this.givenDatabaseName = options.args.options.name;\n if (options.args.options.type)\n this.type = options.args.options.type;\n if (options.args.options.length)\n this.length = options.args.options.length ? options.args.options.length.toString() : \"\";\n if (options.args.options.width)\n this.width = options.args.options.width;\n if (options.args.options.charset)\n this.charset = options.args.options.charset;\n if (options.args.options.collation)\n this.collation = options.args.options.collation;\n if (options.args.options.primary)\n this.isPrimary = options.args.options.primary;\n if (options.args.options.default === null) // to make sure default: null is the same as nullable: true\n this.isNullable = true;\n if (options.args.options.nullable !== undefined)\n this.isNullable = options.args.options.nullable;\n if (options.args.options.select !== undefined)\n this.isSelect = options.args.options.select;\n if (options.args.options.insert !== undefined)\n this.isInsert = options.args.options.insert;\n if (options.args.options.update !== undefined)\n this.isUpdate = options.args.options.update;\n if (options.args.options.readonly !== undefined)\n this.isUpdate = !options.args.options.readonly;\n if (options.args.options.comment)\n this.comment = options.args.options.comment;\n if (options.args.options.default !== undefined)\n this.default = options.args.options.default;\n if (options.args.options.onUpdate)\n this.onUpdate = options.args.options.onUpdate;\n if (options.args.options.scale !== null && options.args.options.scale !== undefined)\n this.scale = options.args.options.scale;\n if (options.args.options.zerofill) {\n this.zerofill = options.args.options.zerofill;\n this.unsigned = true; // if you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n }\n if (options.args.options.unsigned)\n this.unsigned = options.args.options.unsigned;\n if (options.args.options.precision !== undefined)\n this.precision = options.args.options.precision;\n if (options.args.options.enum) {\n if (options.args.options.enum instanceof Object && !Array.isArray(options.args.options.enum)) {\n this.enum = Object.keys(options.args.options.enum)\n .filter(function (key) { return isNaN(+key); }) // remove numeric keys - typescript numeric enum types generate them\n .map(function (key) { return options.args.options.enum[key]; });\n }\n else {\n this.enum = options.args.options.enum;\n }\n }\n if (options.args.options.enumName) {\n this.enumName = options.args.options.enumName;\n }\n if (options.args.options.asExpression) {\n this.asExpression = options.args.options.asExpression;\n this.generatedType = options.args.options.generatedType ? options.args.options.generatedType : \"VIRTUAL\";\n }\n if (options.args.options.hstoreType)\n this.hstoreType = options.args.options.hstoreType;\n if (options.args.options.array)\n this.isArray = options.args.options.array;\n if (options.args.mode) {\n this.isVirtual = options.args.mode === \"virtual\";\n this.isTreeLevel = options.args.mode === \"treeLevel\";\n this.isCreateDate = options.args.mode === \"createDate\";\n this.isUpdateDate = options.args.mode === \"updateDate\";\n this.isDeleteDate = options.args.mode === \"deleteDate\";\n this.isVersion = options.args.mode === \"version\";\n this.isObjectId = options.args.mode === \"objectId\";\n }\n if (options.args.options.transformer)\n this.transformer = options.args.options.transformer;\n if (options.args.options.spatialFeatureType)\n this.spatialFeatureType = options.args.options.spatialFeatureType;\n if (options.args.options.srid !== undefined)\n this.srid = options.args.options.srid;\n if (this.isTreeLevel)\n this.type = options.connection.driver.mappedDataTypes.treeLevel;\n if (this.isCreateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.createDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.createDateDefault; };\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.createDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.createDatePrecision;\n }\n if (this.isUpdateDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.updateDate;\n if (!this.default)\n this.default = function () { return options.connection.driver.mappedDataTypes.updateDateDefault; };\n if (!this.onUpdate)\n this.onUpdate = options.connection.driver.mappedDataTypes.updateDateDefault;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.updateDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.updateDatePrecision;\n }\n if (this.isDeleteDate) {\n if (!this.type)\n this.type = options.connection.driver.mappedDataTypes.deleteDate;\n if (!this.isNullable)\n this.isNullable = options.connection.driver.mappedDataTypes.deleteDateNullable;\n if (this.precision === undefined && options.connection.driver.mappedDataTypes.deleteDatePrecision)\n this.precision = options.connection.driver.mappedDataTypes.deleteDatePrecision;\n }\n if (this.isVersion)\n this.type = options.connection.driver.mappedDataTypes.version;\n if (options.closureType)\n this.closureType = options.closureType;\n if (options.nestedSetLeft)\n this.isNestedSetLeft = options.nestedSetLeft;\n if (options.nestedSetRight)\n this.isNestedSetRight = options.nestedSetRight;\n if (options.materializedPath)\n this.isMaterializedPath = options.materializedPath;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates entity id map from the given entity ids array.\n */\n ColumnMetadata.prototype.createValueMap = function (value, useDatabaseName) {\n var _a;\n var _this = this;\n if (useDatabaseName === void 0) { useDatabaseName = false; }\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_1 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_1(propertyNames, map[propertyName]);\n return map;\n }\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((_this.generationStrategy === \"increment\" || _this.generationStrategy === \"rowid\") && _this.type === \"bigint\" && value !== null)\n value = String(value);\n map[useDatabaseName ? _this.databaseName : _this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_1(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n // this is bugfix for #720 when increment number is bigint we need to make sure its a string\n if ((this.generationStrategy === \"increment\" || this.generationStrategy === \"rowid\") && this.type === \"bigint\" && value !== null)\n value = String(value);\n return _a = {}, _a[useDatabaseName ? this.databaseName : this.propertyName] = value, _a;\n }\n };\n /**\n * Extracts column value and returns its column name with this value in a literal object.\n * If column is in embedded (or recursive embedded) it returns complex literal object.\n *\n * Examples what this method can return depend if this column is in embeds.\n * { id: 1 } or { title: \"hello\" }, { counters: { code: 1 } }, { data: { information: { counters: { code: 1 } } } }\n */\n ColumnMetadata.prototype.getEntityValueMap = function (entity, options) {\n var _a, _b;\n var _this = this;\n var returnNulls = false; // options && options.skipNulls === false ? false : true; // todo: remove if current will not bring problems, uncomment if it will.\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_2 = function (propertyNames, value, map) {\n var propertyName = propertyNames.shift();\n if (value === undefined)\n return map;\n if (propertyName) {\n var submap = {};\n extractEmbeddedColumnValue_2(propertyNames, value[propertyName], submap);\n if (Object.keys(submap).length > 0) {\n map[propertyName] = submap;\n }\n return map;\n }\n if (value[_this.propertyName] !== undefined && (returnNulls === false || value[_this.propertyName] !== null))\n map[_this.propertyName] = value[_this.propertyName];\n return map;\n };\n var map = {};\n extractEmbeddedColumnValue_2(propertyNames, entity, map);\n return Object.keys(map).length > 0 ? map : undefined;\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n if (this.relationMetadata && entity[this.relationMetadata.propertyName] && entity[this.relationMetadata.propertyName] instanceof Object) {\n var map = this.relationMetadata.joinColumns.reduce(function (map, joinColumn) {\n var value = joinColumn.referencedColumn.getEntityValueMap(entity[_this.relationMetadata.propertyName]);\n if (value === undefined)\n return map;\n return OrmUtils.mergeDeep(map, value);\n }, {});\n if (Object.keys(map).length > 0)\n return _a = {}, _a[this.propertyName] = map, _a;\n return undefined;\n }\n else {\n if (entity[this.propertyName] !== undefined && (returnNulls === false || entity[this.propertyName] !== null))\n return _b = {}, _b[this.propertyName] = entity[this.propertyName], _b;\n return undefined;\n }\n }\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n ColumnMetadata.prototype.getEntityValue = function (entity, transform) {\n if (transform === void 0) { transform = false; }\n if (entity === undefined || entity === null)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n var value = undefined;\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_3 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n return propertyName && value ? extractEmbeddedColumnValue_3(propertyNames, value[propertyName]) : value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_3(propertyNames, entity);\n if (embeddedObject) {\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(embeddedObject);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (embeddedObject[this.propertyName] && embeddedObject[this.propertyName] instanceof Object && !(embeddedObject[this.propertyName] instanceof FindOperator)) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(embeddedObject[this.propertyName]);\n }\n else {\n value = embeddedObject[this.propertyName];\n }\n }\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.relationMetadata && this.referencedColumn) {\n var relatedEntity = this.relationMetadata.getEntityValue(entity);\n if (relatedEntity && relatedEntity instanceof Object && !(relatedEntity instanceof FindOperator) && !(relatedEntity instanceof Function)) {\n value = this.referencedColumn.getEntityValue(relatedEntity);\n }\n else if (entity[this.propertyName] && entity[this.propertyName] instanceof Object && !(entity[this.propertyName] instanceof FindOperator) && !(entity[this.propertyName] instanceof Function)) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n else if (this.referencedColumn) {\n value = this.referencedColumn.getEntityValue(entity[this.propertyName]);\n }\n else {\n value = entity[this.propertyName];\n }\n }\n if (transform && this.transformer)\n value = ApplyValueTransformers.transformTo(this.transformer, value);\n return value;\n };\n /**\n * Sets given entity's column value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n */\n ColumnMetadata.prototype.setEntityValue = function (entity, value) {\n var _this = this;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_4 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_4(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_4(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n // we write a deep object in this entity only if the column is virtual\n // because if its not virtual it means the user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName) {\n if (!(this.propertyName in entity)) {\n entity[this.propertyName] = {};\n }\n entity[this.propertyName][this.referencedColumn.propertyName] = value;\n }\n else {\n entity[this.propertyName] = value;\n }\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n ColumnMetadata.prototype.build = function (connection) {\n this.propertyPath = this.buildPropertyPath();\n this.propertyAliasName = this.propertyPath.replace(\".\", \"_\");\n this.databaseName = this.buildDatabaseName(connection);\n this.databasePath = this.buildDatabasePath();\n this.databaseNameWithoutPrefixes = connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, []);\n return this;\n };\n ColumnMetadata.prototype.buildPropertyPath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.propertyName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.propertyName !== this.propertyName)\n path += \".\" + this.referencedColumn.propertyName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabasePath = function () {\n var path = \"\";\n if (this.embeddedMetadata && this.embeddedMetadata.parentPropertyNames.length)\n path = this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\";\n path += this.databaseName;\n // we add reference column to property path only if this column is virtual\n // because if its not virtual it means user defined a real column for this relation\n // also we don't do it if column is inside a junction table\n if (!this.entityMetadata.isJunction && this.isVirtual && this.referencedColumn && this.referencedColumn.databaseName !== this.databaseName)\n path += \".\" + this.referencedColumn.databaseName;\n return path;\n };\n ColumnMetadata.prototype.buildDatabaseName = function (connection) {\n var propertyNames = this.embeddedMetadata ? this.embeddedMetadata.parentPrefixes : [];\n if (connection.driver instanceof MongoDriver) // we don't need to include embedded name for the mongodb column names\n propertyNames = [];\n return connection.namingStrategy.columnName(this.propertyName, this.givenDatabaseName, propertyNames);\n };\n return ColumnMetadata;\n}());\nexport { ColumnMetadata };\n\n//# sourceMappingURL=ColumnMetadata.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.App = void 0;\n/**\n * Eine Klasse, welche als Ursprung für die App genutzt wird\n */\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst SiteManager_1 = require(\"./Context/SiteManager\");\nclass App {\n /**\n * Erstellt eine neue App, speichert ein internes Promise, welches resolved wird, sobald das deviceready-Event gefeuert wird\n */\n constructor() {\n this._resolver = { resolve: null, reject: null };\n this._readyPromise = new Promise(r => document.addEventListener(\"deviceready\", r, false));\n this._deepLinks = {};\n this._siteManager = SiteManager_1.SiteManager.getInstance();\n }\n addDeepLink(link, siteConstructor) {\n this._deepLinks[link] = siteConstructor;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._siteManager) {\n return this._siteManager.startSite(site, args);\n }\n });\n }\n static setLogo(logo) {\n this._logo = logo;\n }\n static getLogo() {\n return this._logo;\n }\n start(startSiteConstructor) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.ready();\n let initialSiteConstructor = startSiteConstructor;\n let params = App._getStartParams();\n this.startingSite = initialSiteConstructor;\n this.startingSiteParameters = params;\n if (Helper_1.Helper.isNotNull(params[\"s\"])) {\n startSiteConstructor = Helper_1.Helper.nonNull(this._deepLinks[params[\"s\"]], startSiteConstructor);\n delete params[\"s\"];\n }\n this.startingSiteParameters = null;\n let siteManager = this._siteManager;\n siteManager.init(\"site\", this._deepLinks);\n Helper_1.Helper.removeAllChildren(document.getElementById(\"site\"));\n siteManager.startSite(startSiteConstructor, params);\n siteManager.setAppEndedListener(manager => {\n manager.startSite(initialSiteConstructor);\n });\n });\n }\n /**\n * Startet die erste Seite\n */\n startStartingSite() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.startingSite) {\n return this.startSite(this.startingSite, this.startingSiteParameters);\n }\n });\n }\n /**\n * Führt die Callback aus, sobald das interne Promise aufgelöst wird und App._promises fertig sind oder gibt das interne Promise zurück\n *\n * @param callback\n * @returns {Promise<*>}\n */\n ready(callback) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._readyPromise.then(() => {\n App._resolver.resolve(this);\n return Promise.all(App._promises);\n });\n if (callback) {\n return promise.then(callback);\n }\n else {\n return promise;\n }\n });\n }\n static addInitialization(callbackOrPromise) {\n if (typeof callbackOrPromise === \"function\") {\n let promise = callbackOrPromise;\n callbackOrPromise = App._mainPromise.then((app) => {\n return promise(app);\n });\n }\n App._promises.push(callbackOrPromise);\n }\n static _getStartParams() {\n return Object.assign(App._extractParams(window.location.search.substr(1)), App._startParams);\n }\n static _extractParams(paramString) {\n if (Helper_1.Helper.isNull(paramString)) {\n return null;\n }\n let result = {}, tmp = [];\n let items = paramString.split(\"&\");\n for (let index = 0; index < items.length; index++) {\n tmp = items[index].split(\"=\");\n if (tmp[0].trim().length > 0) {\n result[tmp[0]] = decodeURIComponent(tmp[1]);\n }\n }\n return result;\n }\n static setStartParam(name, value) {\n this._startParams[name] = value;\n }\n}\nexports.App = App;\nApp._promises = [];\nApp._resolver = {\n resolve: null,\n reject: null,\n};\nApp._mainPromise = new Promise((res, rej) => {\n App._resolver = {\n resolve: res,\n reject: rej,\n };\n});\nApp._startParams = {};\n//# sourceMappingURL=App.js.map","import { __extends } from \"tslib\";\n/**\n */\nvar QueryRunnerAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerAlreadyReleasedError, _super);\n function QueryRunnerAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerAlreadyReleasedError.prototype);\n _this.message = \"Query runner already released. Cannot run queries anymore.\";\n return _this;\n }\n return QueryRunnerAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerAlreadyReleasedError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { CannotCreateEntityIdMapError } from \"../error/CannotCreateEntityIdMapError\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Contains all entity metadata.\n */\nvar EntityMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityMetadata(options) {\n /**\n * Children entity metadatas. Used in inheritance patterns.\n */\n this.childEntityMetadatas = [];\n /**\n * All \"inheritance tree\" from a target entity.\n * For example for target Post < ContentModel < Unit it will be an array of [Post, ContentModel, Unit].\n * It also contains child entities for single table inheritance.\n */\n this.inheritanceTree = [];\n /**\n * Table type. Tables can be abstract, closure, junction, embedded, etc.\n */\n this.tableType = \"regular\";\n /**\n * Enables Sqlite \"WITHOUT ROWID\" modifier for the \"CREATE TABLE\" statement\n */\n this.withoutRowid = false;\n /**\n * Indicates if schema will be synchronized for this entity or not.\n */\n this.synchronize = true;\n /**\n * Checks if there any non-nullable column exist in this entity.\n */\n this.hasNonNullableRelations = false;\n /**\n * Indicates if this entity metadata of a junction table, or not.\n * Junction table is a table created by many-to-many relationship.\n *\n * Its also possible to understand if entity is junction via tableType.\n */\n this.isJunction = false;\n /**\n * Checks if this table is a junction table of the closure table.\n * This type is for tables that contain junction metadata of the closure tables.\n */\n this.isClosureJunction = false;\n /**\n * Checks if entity's table has multiple primary columns.\n */\n this.hasMultiplePrimaryKeys = false;\n /**\n * Indicates if this entity metadata has uuid generated columns.\n */\n this.hasUUIDGeneratedColumns = false;\n /**\n * Entity's column metadatas defined by user.\n */\n this.ownColumns = [];\n /**\n * Columns of the entity, including columns that are coming from the embeddeds of this entity.\n */\n this.columns = [];\n /**\n * Ancestor columns used only in closure junction tables.\n */\n this.ancestorColumns = [];\n /**\n * Descendant columns used only in closure junction tables.\n */\n this.descendantColumns = [];\n /**\n * All columns except for virtual columns.\n */\n this.nonVirtualColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of owner entity.\n */\n this.ownerColumns = [];\n /**\n * In the case if this entity metadata is junction table's entity metadata,\n * this will contain all referenced columns of inverse entity.\n */\n this.inverseColumns = [];\n /**\n * Gets the column with generated flag.\n */\n this.generatedColumns = [];\n /**\n * Gets the primary columns.\n */\n this.primaryColumns = [];\n /**\n * Entity's relation metadatas.\n */\n this.ownRelations = [];\n /**\n * Relations of the entity, including relations that are coming from the embeddeds of this entity.\n */\n this.relations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.eagerRelations = [];\n /**\n * List of eager relations this metadata has.\n */\n this.lazyRelations = [];\n /**\n * Gets only one-to-one relations of the entity.\n */\n this.oneToOneRelations = [];\n /**\n * Gets only owner one-to-one relations of the entity.\n */\n this.ownerOneToOneRelations = [];\n /**\n * Gets only one-to-many relations of the entity.\n */\n this.oneToManyRelations = [];\n /**\n * Gets only many-to-one relations of the entity.\n */\n this.manyToOneRelations = [];\n /**\n * Gets only many-to-many relations of the entity.\n */\n this.manyToManyRelations = [];\n /**\n * Gets only owner many-to-many relations of the entity.\n */\n this.ownerManyToManyRelations = [];\n /**\n * Gets only owner one-to-one and many-to-one relations.\n */\n this.relationsWithJoinColumns = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationIds = [];\n /**\n * Entity's relation id metadatas.\n */\n this.relationCounts = [];\n /**\n * Entity's foreign key metadatas.\n */\n this.foreignKeys = [];\n /**\n * Entity's embedded metadatas.\n */\n this.embeddeds = [];\n /**\n * All embeddeds - embeddeds from this entity metadata and from all child embeddeds, etc.\n */\n this.allEmbeddeds = [];\n /**\n * Entity's own indices.\n */\n this.ownIndices = [];\n /**\n * Entity's index metadatas.\n */\n this.indices = [];\n /**\n * Entity's unique metadatas.\n */\n this.uniques = [];\n /**\n * Entity's own uniques.\n */\n this.ownUniques = [];\n /**\n * Entity's check metadatas.\n */\n this.checks = [];\n /**\n * Entity's exclusion metadatas.\n */\n this.exclusions = [];\n /**\n * Entity's own listener metadatas.\n */\n this.ownListeners = [];\n /**\n * Entity listener metadatas.\n */\n this.listeners = [];\n /**\n * Listener metadatas with \"AFTER LOAD\" type.\n */\n this.afterLoadListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.beforeInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER INSERT\" type.\n */\n this.afterInsertListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.beforeUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER UPDATE\" type.\n */\n this.afterUpdateListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.beforeRemoveListeners = [];\n /**\n * Listener metadatas with \"AFTER REMOVE\" type.\n */\n this.afterRemoveListeners = [];\n this.connection = options.connection;\n this.inheritanceTree = options.inheritanceTree || [];\n this.inheritancePattern = options.inheritancePattern;\n this.treeType = options.tableTree ? options.tableTree.type : undefined;\n this.treeOptions = options.tableTree ? options.tableTree.options : undefined;\n this.parentClosureEntityMetadata = options.parentClosureEntityMetadata;\n this.tableMetadataArgs = options.args;\n this.target = this.tableMetadataArgs.target;\n this.tableType = this.tableMetadataArgs.type;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new entity.\n */\n EntityMetadata.prototype.create = function (queryRunner) {\n var _this = this;\n // if target is set to a function (e.g. class) that can be created then create it\n var ret;\n if (this.target instanceof Function) {\n ret = new this.target();\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, ret, queryRunner); });\n return ret;\n }\n // otherwise simply return a new empty object\n var newObject = {};\n this.lazyRelations.forEach(function (relation) { return _this.connection.relationLoader.enableLazyLoad(relation, newObject, queryRunner); });\n return newObject;\n };\n /**\n * Checks if given entity has an id.\n */\n EntityMetadata.prototype.hasId = function (entity) {\n if (!entity)\n return false;\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined && value !== \"\";\n });\n };\n /**\n * Checks if given entity / object contains ALL primary keys entity must have.\n * Returns true if it contains all of them, false if at least one of them is not defined.\n */\n EntityMetadata.prototype.hasAllPrimaryKeys = function (entity) {\n return this.primaryColumns.every(function (primaryColumn) {\n var value = primaryColumn.getEntityValue(entity);\n return value !== null && value !== undefined;\n });\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n EntityMetadata.prototype.ensureEntityIdMap = function (id) {\n if (id instanceof Object)\n return id;\n if (this.hasMultiplePrimaryKeys)\n throw new CannotCreateEntityIdMapError(this, id);\n return this.primaryColumns[0].createValueMap(id);\n };\n /**\n * Gets primary keys of the entity and returns them in a literal object.\n * For example, for Post{ id: 1, title: \"hello\" } where id is primary it will return { id: 1 }\n * For multiple primary keys it returns multiple keys in object.\n * For primary keys inside embeds it returns complex object literal with keys in them.\n */\n EntityMetadata.prototype.getEntityIdMap = function (entity) {\n if (!entity)\n return undefined;\n return EntityMetadata.getValueMap(entity, this.primaryColumns, { skipNulls: true });\n };\n /**\n * Creates a \"mixed id map\".\n * If entity has multiple primary keys (ids) then it will return just regular id map, like what getEntityIdMap returns.\n * But if entity has a single primary key then it will return just value of the id column of the entity, just value.\n * This is called mixed id map.\n */\n EntityMetadata.prototype.getEntityIdMixedMap = function (entity) {\n if (!entity)\n return entity;\n var idMap = this.getEntityIdMap(entity);\n if (this.hasMultiplePrimaryKeys) {\n return idMap;\n }\n else if (idMap) {\n return this.primaryColumns[0].getEntityValue(idMap); // todo: what about parent primary column?\n }\n return idMap;\n };\n /**\n * Compares two different entities by their ids.\n * Returns true if they match, false otherwise.\n */\n EntityMetadata.prototype.compareEntities = function (firstEntity, secondEntity) {\n var firstEntityIdMap = this.getEntityIdMap(firstEntity);\n if (!firstEntityIdMap)\n return false;\n var secondEntityIdMap = this.getEntityIdMap(secondEntity);\n if (!secondEntityIdMap)\n return false;\n return OrmUtils.compareIds(firstEntityIdMap, secondEntityIdMap);\n };\n /**\n * Finds column with a given property name.\n */\n EntityMetadata.prototype.findColumnWithPropertyName = function (propertyName) {\n return this.columns.find(function (column) { return column.propertyName === propertyName; });\n };\n /**\n * Finds column with a given database name.\n */\n EntityMetadata.prototype.findColumnWithDatabaseName = function (databaseName) {\n return this.columns.find(function (column) { return column.databaseName === databaseName; });\n };\n /**\n * Finds column with a given property path.\n */\n EntityMetadata.prototype.findColumnWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return column;\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns.length === 1)\n return relation.joinColumns[0];\n return undefined;\n };\n /**\n * Finds columns with a given property path.\n * Property path can match a relation, and relations can contain multiple columns.\n */\n EntityMetadata.prototype.findColumnsWithPropertyPath = function (propertyPath) {\n var column = this.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (column)\n return [column];\n // in the case if column with property path was not found, try to find a relation with such property path\n // if we find relation and it has a single join column then its the column user was seeking\n var relation = this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n if (relation && relation.joinColumns)\n return relation.joinColumns;\n return [];\n };\n /**\n * Finds relation with the given property path.\n */\n EntityMetadata.prototype.findRelationWithPropertyPath = function (propertyPath) {\n return this.relations.find(function (relation) { return relation.propertyPath === propertyPath; });\n };\n /**\n * Checks if there is an embedded with a given property path.\n */\n EntityMetadata.prototype.hasEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.some(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Finds embedded with a given property path.\n */\n EntityMetadata.prototype.findEmbeddedWithPropertyPath = function (propertyPath) {\n return this.allEmbeddeds.find(function (embedded) { return embedded.propertyPath === propertyPath; });\n };\n /**\n * Iterates through entity and finds and extracts all values from relations in the entity.\n * If relation value is an array its being flattened.\n */\n EntityMetadata.prototype.extractRelationValuesFromEntity = function (entity, relations) {\n var _this = this;\n var relationsAndValues = [];\n relations.forEach(function (relation) {\n var value = relation.getEntityValue(entity);\n if (Array.isArray(value)) {\n value.forEach(function (subValue) { return relationsAndValues.push([relation, subValue, _this.getInverseEntityMetadata(subValue, relation)]); });\n }\n else if (value) {\n relationsAndValues.push([relation, value, _this.getInverseEntityMetadata(value, relation)]);\n }\n });\n return relationsAndValues;\n };\n EntityMetadata.prototype.getInverseEntityMetadata = function (value, relation) {\n var childEntityMetadata = relation.inverseEntityMetadata.childEntityMetadatas.find(function (metadata) {\n return metadata.target === value.constructor;\n });\n return childEntityMetadata ? childEntityMetadata : relation.inverseEntityMetadata;\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a property paths for a given entity.\n */\n EntityMetadata.createPropertyPath = function (metadata, entity, prefix) {\n var _this = this;\n if (prefix === void 0) { prefix = \"\"; }\n var paths = [];\n Object.keys(entity).forEach(function (key) {\n // check for function is needed in the cases when createPropertyPath used on values containg a function as a value\n // example: .update().set({ name: () => `SUBSTR('', 1, 2)` })\n var parentPath = prefix ? prefix + \".\" + key : key;\n if (metadata.hasEmbeddedWithPropertyPath(parentPath)) {\n var subPaths = _this.createPropertyPath(metadata, entity[key], parentPath);\n paths.push.apply(paths, __spreadArray([], __read(subPaths)));\n }\n else {\n var path = prefix ? prefix + \".\" + key : key;\n paths.push(path);\n }\n });\n return paths;\n };\n /**\n * Finds difference between two entity id maps.\n * Returns items that exist in the first array and absent in the second array.\n */\n EntityMetadata.difference = function (firstIdMaps, secondIdMaps) {\n return firstIdMaps.filter(function (firstIdMap) {\n return !secondIdMaps.find(function (secondIdMap) { return OrmUtils.compareIds(firstIdMap, secondIdMap); });\n });\n };\n /**\n * Creates value map from the given values and columns.\n * Examples of usages are primary columns map and join columns map.\n */\n EntityMetadata.getValueMap = function (entity, columns, options) {\n return columns.reduce(function (map, column) {\n var value = column.getEntityValueMap(entity, options);\n // make sure that none of the values of the columns are not missing\n if (map === undefined || value === null || value === undefined)\n return undefined;\n return column.isObjectId ? Object.assign(map, value) : OrmUtils.mergeDeep(map, value);\n }, {});\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n EntityMetadata.prototype.build = function () {\n var namingStrategy = this.connection.namingStrategy;\n var entityPrefix = this.connection.options.entityPrefix;\n this.engine = this.tableMetadataArgs.engine;\n this.database = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.database : this.tableMetadataArgs.database;\n if (this.tableMetadataArgs.schema) {\n this.schema = this.tableMetadataArgs.schema;\n }\n else if ((this.tableMetadataArgs.type === \"entity-child\") && this.parentEntityMetadata) {\n this.schema = this.parentEntityMetadata.schema;\n }\n else {\n this.schema = this.connection.options.schema;\n }\n this.givenTableName = this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata ? this.parentEntityMetadata.givenTableName : this.tableMetadataArgs.name;\n this.synchronize = this.tableMetadataArgs.synchronize === false ? false : true;\n this.targetName = this.tableMetadataArgs.target instanceof Function ? this.tableMetadataArgs.target.name : this.tableMetadataArgs.target;\n if (this.tableMetadataArgs.type === \"closure-junction\") {\n this.tableNameWithoutPrefix = namingStrategy.closureJunctionTableName(this.givenTableName);\n }\n else if (this.tableMetadataArgs.type === \"entity-child\" && this.parentEntityMetadata) {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.parentEntityMetadata.targetName, this.parentEntityMetadata.givenTableName);\n }\n else {\n this.tableNameWithoutPrefix = namingStrategy.tableName(this.targetName, this.givenTableName);\n if (this.connection.driver.maxAliasLength && this.connection.driver.maxAliasLength > 0 && this.tableNameWithoutPrefix.length > this.connection.driver.maxAliasLength) {\n this.tableNameWithoutPrefix = shorten(this.tableNameWithoutPrefix, { separator: \"_\", segmentLength: 3 });\n }\n }\n this.tableName = entityPrefix ? namingStrategy.prefixTableName(entityPrefix, this.tableNameWithoutPrefix) : this.tableNameWithoutPrefix;\n this.target = this.target ? this.target : this.tableName;\n this.name = this.targetName ? this.targetName : this.tableName;\n this.expression = this.tableMetadataArgs.expression;\n this.withoutRowid = this.tableMetadataArgs.withoutRowid === true ? true : false;\n this.tablePath = this.buildTablePath();\n this.schemaPath = this.buildSchemaPath();\n this.orderBy = (this.tableMetadataArgs.orderBy instanceof Function) ? this.tableMetadataArgs.orderBy(this.propertiesMap) : this.tableMetadataArgs.orderBy; // todo: is propertiesMap available here? Looks like its not\n this.isJunction = this.tableMetadataArgs.type === \"closure-junction\" || this.tableMetadataArgs.type === \"junction\";\n this.isClosureJunction = this.tableMetadataArgs.type === \"closure-junction\";\n };\n /**\n * Registers a new column in the entity and recomputes all depend properties.\n */\n EntityMetadata.prototype.registerColumn = function (column) {\n if (this.ownColumns.indexOf(column) !== -1)\n return;\n this.ownColumns.push(column);\n this.columns = this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, this.ownColumns);\n this.primaryColumns = this.columns.filter(function (column) { return column.isPrimary; });\n this.hasMultiplePrimaryKeys = this.primaryColumns.length > 1;\n this.hasUUIDGeneratedColumns = this.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n this.propertiesMap = this.createPropertiesMap();\n if (this.childEntityMetadatas)\n this.childEntityMetadatas.forEach(function (entityMetadata) { return entityMetadata.registerColumn(column); });\n };\n /**\n * Creates a special object - all columns and relations of the object (plus columns and relations from embeds)\n * in a special format - { propertyName: propertyName }.\n *\n * example: Post{ id: number, name: string, counterEmbed: { count: number }, category: Category }.\n * This method will create following object:\n * { id: \"id\", counterEmbed: { count: \"counterEmbed.count\" }, category: \"category\" }\n */\n EntityMetadata.prototype.createPropertiesMap = function () {\n var map = {};\n this.columns.forEach(function (column) { return OrmUtils.mergeDeep(map, column.createValueMap(column.propertyPath)); });\n this.relations.forEach(function (relation) { return OrmUtils.mergeDeep(map, relation.createValueMap(relation.propertyPath)); });\n return map;\n };\n /**\n * Builds table path using database name, schema name and table name.\n */\n EntityMetadata.prototype.buildTablePath = function () {\n var tablePath = this.tableName;\n if (this.schema && ((this.connection.driver instanceof OracleDriver) || (this.connection.driver instanceof PostgresDriver) || (this.connection.driver instanceof SqlServerDriver) || (this.connection.driver instanceof SapDriver))) {\n tablePath = this.schema + \".\" + tablePath;\n }\n if (this.database && !(this.connection.driver instanceof PostgresDriver)) {\n if (!this.schema && this.connection.driver instanceof SqlServerDriver) {\n tablePath = this.database + \"..\" + tablePath;\n }\n else {\n tablePath = this.database + \".\" + tablePath;\n }\n }\n return tablePath;\n };\n /**\n * Builds table path using schema name and database name.\n */\n EntityMetadata.prototype.buildSchemaPath = function () {\n if (!this.schema)\n return undefined;\n return this.database && !(this.connection.driver instanceof PostgresDriver) ? this.database + \".\" + this.schema : this.schema;\n };\n return EntityMetadata;\n}());\nexport { EntityMetadata };\n\n//# sourceMappingURL=EntityMetadata.js.map\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","import { __extends } from \"tslib\";\n/**\n * Thrown if some required driver's option is not set.\n */\nvar DriverOptionNotSetError = /** @class */ (function (_super) {\n __extends(DriverOptionNotSetError, _super);\n function DriverOptionNotSetError(optionName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverOptionNotSetError\";\n Object.setPrototypeOf(_this, DriverOptionNotSetError.prototype);\n _this.message = \"Driver option (\" + optionName + \") is not set. Please set it to perform connection to the database.\";\n return _this;\n }\n return DriverOptionNotSetError;\n}(Error));\nexport { DriverOptionNotSetError };\n\n//# sourceMappingURL=DriverOptionNotSetError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table index stored in this class.\n */\nvar TableIndex = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableIndex(options) {\n /**\n * Columns included in this index.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.isUnique = !!options.isUnique;\n this.isSpatial = !!options.isSpatial;\n this.isFulltext = !!options.isFulltext;\n this.parser = options.parser;\n this.where = options.where ? options.where : \"\";\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this index with exactly same properties.\n */\n TableIndex.prototype.clone = function () {\n return new TableIndex({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n isUnique: this.isUnique,\n isSpatial: this.isSpatial,\n isFulltext: this.isFulltext,\n parser: this.parser,\n where: this.where\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates index from the index metadata object.\n */\n TableIndex.create = function (indexMetadata) {\n return new TableIndex({\n name: indexMetadata.name,\n columnNames: indexMetadata.columns.map(function (column) { return column.databaseName; }),\n isUnique: indexMetadata.isUnique,\n isSpatial: indexMetadata.isSpatial,\n isFulltext: indexMetadata.isFulltext,\n parser: indexMetadata.parser,\n where: indexMetadata.where\n });\n };\n return TableIndex;\n}());\nexport { TableIndex };\n\n//# sourceMappingURL=TableIndex.js.map\n","import { __assign, __extends } from \"tslib\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Thrown when query execution has failed.\n*/\nvar QueryFailedError = /** @class */ (function (_super) {\n __extends(QueryFailedError, _super);\n function QueryFailedError(query, parameters, driverError) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, QueryFailedError.prototype);\n _this.message = driverError.toString()\n .replace(/^error: /, \"\")\n .replace(/^Error: /, \"\")\n .replace(/^Request/, \"\");\n ObjectUtils.assign(_this, __assign(__assign({}, driverError), { name: \"QueryFailedError\", query: query, parameters: parameters || [] }));\n return _this;\n }\n return QueryFailedError;\n}(Error));\nexport { QueryFailedError };\n\n//# sourceMappingURL=QueryFailedError.js.map\n","import { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n */\nvar Alias = /** @class */ (function () {\n function Alias(alias) {\n ObjectUtils.assign(this, alias || {});\n }\n Object.defineProperty(Alias.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"hasMetadata\", {\n get: function () {\n return !!this._metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Alias.prototype, \"metadata\", {\n get: function () {\n if (!this._metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.name + \"\\\"\");\n return this._metadata;\n },\n set: function (metadata) {\n this._metadata = metadata;\n },\n enumerable: false,\n configurable: true\n });\n return Alias;\n}());\nexport { Alias };\n\n//# sourceMappingURL=Alias.js.map\n","import { __assign, __read } from \"tslib\";\nimport { Alias } from \"./Alias\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nvar QueryExpressionMap = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryExpressionMap(connection) {\n this.connection = connection;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n this.queryEntity = false;\n /**\n * All aliases (including main alias) used in the query.\n */\n this.aliases = [];\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n this.queryType = \"select\";\n /**\n * Data needs to be SELECT-ed.\n */\n this.selects = [];\n /**\n * Whether SELECT is DISTINCT.\n */\n this.selectDistinct = false;\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n this.selectDistinctOn = [];\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n this.extraReturningColumns = [];\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n this.onConflict = \"\";\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n this.onIgnore = false;\n /**\n * JOIN queries.\n */\n this.joinAttributes = [];\n /**\n * RelationId queries.\n */\n this.relationIdAttributes = [];\n /**\n * Relation count queries.\n */\n this.relationCountAttributes = [];\n /**\n * WHERE queries.\n */\n this.wheres = [];\n /**\n * HAVING queries.\n */\n this.havings = [];\n /**\n * ORDER BY queries.\n */\n this.orderBys = {};\n /**\n * GROUP BY queries.\n */\n this.groupBys = [];\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n this.withDeleted = false;\n /**\n * Parameters used to be escaped in final query.\n */\n this.parameters = {};\n /**\n * Indicates if alias, table names and column names will be ecaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n this.disableEscaping = true;\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n this.enableRelationIdValues = false;\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n this.extraAppendedAndWhereCondition = \"\";\n /**\n * Indicates if query builder creates a subquery.\n */\n this.subQuery = false;\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n this.aliasNamePrefixingEnabled = true;\n /**\n * Indicates if query result cache is enabled or not.\n */\n this.cache = false;\n /**\n * Options that define QueryBuilder behaviour.\n */\n this.options = [];\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n this.insertColumns = [];\n /**\n * Used if user wants to update or delete a specific entities.\n */\n this.whereEntities = [];\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n this.updateEntity = true;\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n this.callListeners = true;\n /**\n * Indicates if query must be wrapped into transaction.\n */\n this.useTransaction = false;\n /**\n * Extra parameters.\n * Used in InsertQueryBuilder to avoid default parameters mechanizm and execute high performance insertions.\n */\n this.nativeParameters = {};\n }\n Object.defineProperty(QueryExpressionMap.prototype, \"allOrderBys\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get: function () {\n var _this = this;\n if (!Object.keys(this.orderBys).length && this.mainAlias.hasMetadata && this.options.indexOf(\"disable-global-order\") === -1) {\n var entityOrderBy_1 = this.mainAlias.metadata.orderBy || {};\n return Object.keys(entityOrderBy_1).reduce(function (orderBy, key) {\n orderBy[_this.mainAlias.name + \".\" + key] = entityOrderBy_1[key];\n return orderBy;\n }, {});\n }\n return this.orderBys;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.setMainAlias = function (alias) {\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n // set new main alias\n this.mainAlias = alias;\n return alias;\n };\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n QueryExpressionMap.prototype.createAlias = function (options) {\n var aliasName = options.name;\n if (!aliasName && options.tablePath)\n aliasName = options.tablePath;\n if (!aliasName && options.target instanceof Function)\n aliasName = options.target.name;\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target;\n var alias = new Alias();\n alias.type = options.type;\n if (aliasName)\n alias.name = aliasName;\n if (options.metadata)\n alias.metadata = options.metadata;\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target);\n if (options.tablePath)\n alias.tablePath = options.tablePath;\n if (options.subQuery)\n alias.subQuery = options.subQuery;\n this.aliases.push(alias);\n return alias;\n };\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n QueryExpressionMap.prototype.findAliasByName = function (aliasName) {\n var alias = this.aliases.find(function (alias) { return alias.name === aliasName; });\n if (!alias)\n throw new Error(\"\\\"\" + aliasName + \"\\\" alias was not found. Maybe you forgot to join it?\");\n return alias;\n };\n QueryExpressionMap.prototype.findColumnByAliasExpression = function (aliasExpression) {\n var _a = __read(aliasExpression.split(\".\"), 2), aliasName = _a[0], propertyPath = _a[1];\n var alias = this.findAliasByName(aliasName);\n return alias.metadata.findColumnWithPropertyName(propertyPath);\n };\n Object.defineProperty(QueryExpressionMap.prototype, \"relationMetadata\", {\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get: function () {\n if (!this.mainAlias)\n throw new Error(\"Entity to work with is not specified!\"); // todo: better message\n var relationMetadata = this.mainAlias.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \" + this.relationPropertyPath + \" was not found in entity \" + this.mainAlias.name); // todo: better message\n return relationMetadata;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n QueryExpressionMap.prototype.clone = function () {\n var _this = this;\n var map = new QueryExpressionMap(this.connection);\n map.queryType = this.queryType;\n map.selects = this.selects.map(function (select) { return select; });\n map.selectDistinct = this.selectDistinct;\n map.selectDistinctOn = this.selectDistinctOn;\n this.aliases.forEach(function (alias) { return map.aliases.push(new Alias(alias)); });\n map.mainAlias = this.mainAlias;\n map.valuesSet = this.valuesSet;\n map.returning = this.returning;\n map.onConflict = this.onConflict;\n map.onIgnore = this.onIgnore;\n map.onUpdate = this.onUpdate;\n map.joinAttributes = this.joinAttributes.map(function (join) { return new JoinAttribute(_this.connection, _this, join); });\n map.relationIdAttributes = this.relationIdAttributes.map(function (relationId) { return new RelationIdAttribute(_this, relationId); });\n map.relationCountAttributes = this.relationCountAttributes.map(function (relationCount) { return new RelationCountAttribute(_this, relationCount); });\n map.wheres = this.wheres.map(function (where) { return (__assign({}, where)); });\n map.havings = this.havings.map(function (having) { return (__assign({}, having)); });\n map.orderBys = Object.assign({}, this.orderBys);\n map.groupBys = this.groupBys.map(function (groupBy) { return groupBy; });\n map.limit = this.limit;\n map.offset = this.offset;\n map.skip = this.skip;\n map.take = this.take;\n map.lockMode = this.lockMode;\n map.lockVersion = this.lockVersion;\n map.lockTables = this.lockTables;\n map.withDeleted = this.withDeleted;\n map.parameters = Object.assign({}, this.parameters);\n map.disableEscaping = this.disableEscaping;\n map.enableRelationIdValues = this.enableRelationIdValues;\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition;\n map.subQuery = this.subQuery;\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled;\n map.cache = this.cache;\n map.cacheId = this.cacheId;\n map.cacheDuration = this.cacheDuration;\n map.relationPropertyPath = this.relationPropertyPath;\n map.of = this.of;\n map.insertColumns = this.insertColumns;\n map.whereEntities = this.whereEntities;\n map.updateEntity = this.updateEntity;\n map.callListeners = this.callListeners;\n map.useTransaction = this.useTransaction;\n map.nativeParameters = Object.assign({}, this.nativeParameters);\n map.comment = this.comment;\n return map;\n };\n return QueryExpressionMap;\n}());\nexport { QueryExpressionMap };\n\n//# sourceMappingURL=QueryExpressionMap.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { QueryExpressionMap } from \"./QueryExpressionMap\";\nimport { Brackets } from \"./Brackets\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { EntitySchema } from \"../\";\nimport { FindOperator } from \"../find-options/FindOperator\";\nimport { In } from \"../find-options/operator/In\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\n// todo: completely cover query builder with tests\n// todo: entityOrProperty can be target name. implement proper behaviour if it is.\n// todo: check in persistment if id exist on object and throw exception (can be in partial selection?)\n// todo: fix problem with long aliases eg getMaxIdentifierLength\n// todo: fix replacing in .select(\"COUNT(post.id) AS cnt\") statement\n// todo: implement joinAlways in relations and relationId\n// todo: finish partial selection\n// todo: sugar methods like: .addCount and .selectCount, selectCountAndMap, selectSum, selectSumAndMap, ...\n// todo: implement @Select decorator\n// todo: add select and map functions\n// todo: implement relation/entity loading and setting them into properties within a separate query\n// .loadAndMap(\"post.categories\", \"post.categories\", qb => ...)\n// .loadAndMap(\"post.categories\", Category, qb => ...)\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar QueryBuilder = /** @class */ (function () {\n /**\n * QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.\n */\n function QueryBuilder(connectionOrQueryBuilder, queryRunner) {\n if (connectionOrQueryBuilder instanceof QueryBuilder) {\n this.connection = connectionOrQueryBuilder.connection;\n this.queryRunner = connectionOrQueryBuilder.queryRunner;\n this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();\n }\n else {\n this.connection = connectionOrQueryBuilder;\n this.queryRunner = queryRunner;\n this.expressionMap = new QueryExpressionMap(this.connection);\n }\n }\n Object.defineProperty(QueryBuilder.prototype, \"alias\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the main alias string used in this query builder.\n */\n get: function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Main alias is not set\"); // todo: better exception\n return this.expressionMap.mainAlias.name;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n QueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n // loading it dynamically because of circular issue\n var SelectQueryBuilderCls = require(\"./SelectQueryBuilder\").SelectQueryBuilder;\n if (this instanceof SelectQueryBuilderCls)\n return this;\n return new SelectQueryBuilderCls(this);\n };\n /**\n * Creates INSERT query.\n */\n QueryBuilder.prototype.insert = function () {\n this.expressionMap.queryType = \"insert\";\n // loading it dynamically because of circular issue\n var InsertQueryBuilderCls = require(\"./InsertQueryBuilder\").InsertQueryBuilder;\n if (this instanceof InsertQueryBuilderCls)\n return this;\n return new InsertQueryBuilderCls(this);\n };\n /**\n * Creates UPDATE query and applies given update values.\n */\n QueryBuilder.prototype.update = function (entityOrTableNameUpdateSet, maybeUpdateSet) {\n var updateSet = maybeUpdateSet ? maybeUpdateSet : entityOrTableNameUpdateSet;\n entityOrTableNameUpdateSet = entityOrTableNameUpdateSet instanceof EntitySchema ? entityOrTableNameUpdateSet.options.name : entityOrTableNameUpdateSet;\n if (entityOrTableNameUpdateSet instanceof Function || typeof entityOrTableNameUpdateSet === \"string\") {\n var mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);\n this.expressionMap.setMainAlias(mainAlias);\n }\n this.expressionMap.queryType = \"update\";\n this.expressionMap.valuesSet = updateSet;\n // loading it dynamically because of circular issue\n var UpdateQueryBuilderCls = require(\"./UpdateQueryBuilder\").UpdateQueryBuilder;\n if (this instanceof UpdateQueryBuilderCls)\n return this;\n return new UpdateQueryBuilderCls(this);\n };\n /**\n * Creates DELETE query.\n */\n QueryBuilder.prototype.delete = function () {\n this.expressionMap.queryType = \"delete\";\n // loading it dynamically because of circular issue\n var DeleteQueryBuilderCls = require(\"./DeleteQueryBuilder\").DeleteQueryBuilder;\n if (this instanceof DeleteQueryBuilderCls)\n return this;\n return new DeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.softDelete = function () {\n this.expressionMap.queryType = \"soft-delete\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n QueryBuilder.prototype.restore = function () {\n this.expressionMap.queryType = \"restore\";\n // loading it dynamically because of circular issue\n var SoftDeleteQueryBuilderCls = require(\"./SoftDeleteQueryBuilder\").SoftDeleteQueryBuilder;\n if (this instanceof SoftDeleteQueryBuilderCls)\n return this;\n return new SoftDeleteQueryBuilderCls(this);\n };\n /**\n * Sets entity's relation with which this query builder gonna work.\n */\n QueryBuilder.prototype.relation = function (entityTargetOrPropertyPath, maybePropertyPath) {\n var entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;\n var propertyPath = arguments.length === 2 ? maybePropertyPath : entityTargetOrPropertyPath;\n this.expressionMap.queryType = \"relation\";\n this.expressionMap.relationPropertyPath = propertyPath;\n if (entityTarget) {\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n }\n // loading it dynamically because of circular issue\n var RelationQueryBuilderCls = require(\"./RelationQueryBuilder\").RelationQueryBuilder;\n if (this instanceof RelationQueryBuilderCls)\n return this;\n return new RelationQueryBuilderCls(this);\n };\n /**\n * Checks if given relation or relations exist in the entity.\n * Returns true if relation exists, false otherwise.\n *\n * todo: move this method to manager? or create a shortcut?\n */\n QueryBuilder.prototype.hasRelation = function (target, relation) {\n var entityMetadata = this.connection.getMetadata(target);\n var relations = Array.isArray(relation) ? relation : [relation];\n return relations.every(function (relation) {\n return !!entityMetadata.findRelationWithPropertyPath(relation);\n });\n };\n /**\n * Sets parameter name and its value.\n */\n QueryBuilder.prototype.setParameter = function (key, value) {\n this.expressionMap.parameters[key] = value;\n return this;\n };\n /**\n * Adds all parameters from the given object.\n */\n QueryBuilder.prototype.setParameters = function (parameters) {\n var _this = this;\n // remove function parameters\n Object.keys(parameters).forEach(function (key) {\n if (parameters[key] instanceof Function) {\n throw new Error(\"Function parameter isn't supported in the parameters. Please check \\\"\" + key + \"\\\" parameter.\");\n }\n });\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setParameters(parameters);\n Object.keys(parameters).forEach(function (key) { return _this.setParameter(key, parameters[key]); });\n return this;\n };\n /**\n * Adds native parameters from the given object.\n */\n QueryBuilder.prototype.setNativeParameters = function (parameters) {\n var _this = this;\n // set parent query builder parameters as well in sub-query mode\n if (this.expressionMap.parentQueryBuilder)\n this.expressionMap.parentQueryBuilder.setNativeParameters(parameters);\n Object.keys(parameters).forEach(function (key) {\n _this.expressionMap.nativeParameters[key] = parameters[key];\n });\n return this;\n };\n /**\n * Gets all parameters.\n */\n QueryBuilder.prototype.getParameters = function () {\n var parameters = Object.assign({}, this.expressionMap.parameters);\n // add discriminator column parameter if it exist\n if (this.expressionMap.mainAlias && this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var values = metadata.childEntityMetadatas\n .filter(function (childMetadata) { return childMetadata.discriminatorColumn; })\n .map(function (childMetadata) { return childMetadata.discriminatorValue; });\n values.push(metadata.discriminatorValue);\n parameters[\"discriminatorColumnValues\"] = values;\n }\n }\n return parameters;\n };\n /**\n * Prints sql to stdout using console.log.\n */\n QueryBuilder.prototype.printSql = function () {\n var _a = __read(this.getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n this.connection.logger.logQuery(query, parameters);\n return this;\n };\n /**\n * Gets generated sql that will be executed.\n * Parameters in the query are escaped for the currently used driver.\n */\n QueryBuilder.prototype.getSql = function () {\n return this.getQueryAndParameters()[0];\n };\n /**\n * Gets query to be executed with all parameters used in it.\n */\n QueryBuilder.prototype.getQueryAndParameters = function () {\n // this execution order is important because getQuery method generates this.expressionMap.nativeParameters values\n var query = this.getQuery();\n var parameters = this.getParameters();\n return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n QueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 3, 8]);\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 2: return [2 /*return*/, _b.sent()]; // await is needed here because we are using finally\n case 3:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n if (!(this.connection.driver instanceof SqljsDriver)) return [3 /*break*/, 7];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 6:\n _b.sent();\n _b.label = 7;\n case 7: return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a completely new query builder.\n * Uses same query runner as current QueryBuilder.\n */\n QueryBuilder.prototype.createQueryBuilder = function () {\n return new this.constructor(this.connection, this.queryRunner);\n };\n /**\n * Clones query builder as it is.\n * Note: it uses new query runner, if you want query builder that uses exactly same query runner,\n * you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)\n * where queryBuilder is cloned QueryBuilder.\n */\n QueryBuilder.prototype.clone = function () {\n return new this.constructor(this);\n };\n /**\n * Includes a Query comment in the query builder. This is helpful for debugging purposes,\n * such as finding a specific query in the database server's logs, or for categorization using\n * an APM product.\n */\n QueryBuilder.prototype.comment = function (comment) {\n this.expressionMap.comment = comment;\n return this;\n };\n /**\n * Disables escaping.\n */\n QueryBuilder.prototype.disableEscaping = function () {\n this.expressionMap.disableEscaping = false;\n return this;\n };\n /**\n * Escapes table name, column name or alias name using current database's escaping character.\n */\n QueryBuilder.prototype.escape = function (name) {\n if (!this.expressionMap.disableEscaping)\n return name;\n return this.connection.driver.escape(name);\n };\n /**\n * Sets or overrides query builder's QueryRunner.\n */\n QueryBuilder.prototype.setQueryRunner = function (queryRunner) {\n this.queryRunner = queryRunner;\n return this;\n };\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n * Enabled by default.\n */\n QueryBuilder.prototype.callListeners = function (enabled) {\n this.expressionMap.callListeners = enabled;\n return this;\n };\n /**\n * If set to true the query will be wrapped into a transaction.\n */\n QueryBuilder.prototype.useTransaction = function (enabled) {\n this.expressionMap.useTransaction = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets escaped table name with schema name if SqlServer driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n QueryBuilder.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.escape(i);\n }).join(\".\");\n };\n /**\n * Gets name of the table where insert should be performed.\n */\n QueryBuilder.prototype.getMainTableName = function () {\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Entity where values should be inserted is not specified. Call \\\"qb.into(entity)\\\" method to specify it.\");\n if (this.expressionMap.mainAlias.hasMetadata)\n return this.expressionMap.mainAlias.metadata.tablePath;\n return this.expressionMap.mainAlias.tablePath;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n QueryBuilder.prototype.createFromAlias = function (entityTarget, aliasName) {\n // if table has a metadata then find it to properly escape its properties\n // const metadata = this.connection.entityMetadatas.find(metadata => metadata.tableName === tableName);\n if (this.connection.hasMetadata(entityTarget)) {\n var metadata = this.connection.getMetadata(entityTarget);\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n metadata: this.connection.getMetadata(entityTarget),\n tablePath: metadata.tablePath\n });\n }\n else {\n if (typeof entityTarget === \"string\") {\n var isSubquery = entityTarget.substr(0, 1) === \"(\" && entityTarget.substr(-1) === \")\";\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n tablePath: !isSubquery ? entityTarget : undefined,\n subQuery: isSubquery ? entityTarget : undefined,\n });\n }\n var subQueryBuilder = entityTarget(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n var subquery = subQueryBuilder.getQuery();\n return this.expressionMap.createAlias({\n type: \"from\",\n name: aliasName,\n subQuery: subquery\n });\n }\n };\n /**\n * Replaces all entity's propertyName to name in the given statement.\n */\n QueryBuilder.prototype.replacePropertyNames = function (statement) {\n var e_1, _a;\n var _this = this;\n // Escape special characters in regular expressions\n // Per https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n var escapeRegExp = function (s) { return s.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); };\n var _loop_1 = function (alias) {\n var e_2, _d, e_3, _e, e_4, _f, e_5, _g, e_6, _h, e_7, _j;\n if (!alias.hasMetadata)\n return \"continue\";\n var replaceAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? alias.name + \".\" : \"\";\n var replacementAliasNamePrefix = this_1.expressionMap.aliasNamePrefixingEnabled ? this_1.escape(alias.name) + \".\" : \"\";\n var replacements = {};\n try {\n // Insert & overwrite the replacements from least to most relevant in our replacements object.\n // To do this we iterate and overwrite in the order of relevance.\n // Least to Most Relevant:\n // * Relation Property Path to first join column key\n // * Relation Property Path + Column Path\n // * Column Database Name\n // * Column Propety Name\n // * Column Property Path\n for (var _k = (e_2 = void 0, __values(alias.metadata.relations)), _l = _k.next(); !_l.done; _l = _k.next()) {\n var relation = _l.value;\n if (relation.joinColumns.length > 0)\n replacements[relation.propertyPath] = relation.joinColumns[0].databaseName;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_d = _k.return)) _d.call(_k);\n }\n finally { if (e_2) throw e_2.error; }\n }\n try {\n for (var _m = (e_3 = void 0, __values(alias.metadata.relations)), _o = _m.next(); !_o.done; _o = _m.next()) {\n var relation = _o.value;\n try {\n for (var _p = (e_4 = void 0, __values(__spreadArray(__spreadArray([], __read(relation.joinColumns)), __read(relation.inverseJoinColumns)))), _q = _p.next(); !_q.done; _q = _p.next()) {\n var joinColumn = _q.value;\n var propertyKey = relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n replacements[propertyKey] = joinColumn.databaseName;\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_q && !_q.done && (_f = _p.return)) _f.call(_p);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_o && !_o.done && (_e = _m.return)) _e.call(_m);\n }\n finally { if (e_3) throw e_3.error; }\n }\n try {\n for (var _r = (e_5 = void 0, __values(alias.metadata.columns)), _s = _r.next(); !_s.done; _s = _r.next()) {\n var column = _s.value;\n replacements[column.databaseName] = column.databaseName;\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (_s && !_s.done && (_g = _r.return)) _g.call(_r);\n }\n finally { if (e_5) throw e_5.error; }\n }\n try {\n for (var _t = (e_6 = void 0, __values(alias.metadata.columns)), _u = _t.next(); !_u.done; _u = _t.next()) {\n var column = _u.value;\n replacements[column.propertyName] = column.databaseName;\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (_u && !_u.done && (_h = _t.return)) _h.call(_t);\n }\n finally { if (e_6) throw e_6.error; }\n }\n try {\n for (var _v = (e_7 = void 0, __values(alias.metadata.columns)), _w = _v.next(); !_w.done; _w = _v.next()) {\n var column = _w.value;\n replacements[column.propertyPath] = column.databaseName;\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (_w && !_w.done && (_j = _v.return)) _j.call(_v);\n }\n finally { if (e_7) throw e_7.error; }\n }\n var replacementKeys = Object.keys(replacements);\n if (replacementKeys.length) {\n statement = statement.replace(new RegExp(\n // Avoid a lookbehind here since it's not well supported\n \"([ =(]|^.{0})\" +\n (escapeRegExp(replaceAliasNamePrefix) + \"(\" + replacementKeys.map(escapeRegExp).join(\"|\") + \")\") +\n \"(?=[ =),]|.{0}$)\", \"gm\"), function (_, pre, p) {\n return \"\" + pre + replacementAliasNamePrefix + _this.escape(replacements[p]);\n });\n }\n };\n var this_1 = this;\n try {\n for (var _b = __values(this.expressionMap.aliases), _c = _b.next(); !_c.done; _c = _b.next()) {\n var alias = _c.value;\n _loop_1(alias);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return statement;\n };\n QueryBuilder.prototype.createComment = function () {\n if (!this.expressionMap.comment) {\n return \"\";\n }\n // ANSI SQL 2003 support C style comments - comments that start with `/*` and end with `*/`\n // In some dialects query nesting is available - but not all. Because of this, we'll need\n // to scrub \"ending\" characters from the SQL but otherwise we can leave everything else\n // as-is and it should be valid.\n return \"/* \" + this.expressionMap.comment.replace(\"*/\", \"\") + \" */ \";\n };\n /**\n * Creates \"WHERE\" expression.\n */\n QueryBuilder.prototype.createWhereExpression = function () {\n var conditionsArray = [];\n var whereExpression = this.createWhereExpressionString();\n whereExpression.trim() && conditionsArray.push(this.createWhereExpressionString());\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n // Adds the global condition of \"non-deleted\" for the entity with delete date columns in select query.\n if (this.expressionMap.queryType === \"select\" && !this.expressionMap.withDeleted && metadata.deleteDateColumn) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.deleteDateColumn.propertyName\n : metadata.deleteDateColumn.propertyName;\n var condition = this.replacePropertyNames(column) + \" IS NULL\";\n conditionsArray.push(condition);\n }\n if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {\n var column = this.expressionMap.aliasNamePrefixingEnabled\n ? this.expressionMap.mainAlias.name + \".\" + metadata.discriminatorColumn.databaseName\n : metadata.discriminatorColumn.databaseName;\n var condition = this.replacePropertyNames(column) + \" IN (:...discriminatorColumnValues)\";\n conditionsArray.push(condition);\n }\n }\n if (this.expressionMap.extraAppendedAndWhereCondition) {\n var condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);\n conditionsArray.push(condition);\n }\n if (!conditionsArray.length) {\n return \"\";\n }\n else if (conditionsArray.length === 1) {\n return \" WHERE \" + conditionsArray[0];\n }\n else {\n return \" WHERE ( \" + conditionsArray.join(\" ) AND ( \") + \" )\";\n }\n };\n /**\n * Creates \"RETURNING\" / \"OUTPUT\" expression.\n */\n QueryBuilder.prototype.createReturningExpression = function () {\n var _this = this;\n var columns = this.getReturningColumns();\n var driver = this.connection.driver;\n // also add columns we must auto-return to perform entity updation\n // if user gave his own returning\n if (typeof this.expressionMap.returning !== \"string\" &&\n this.expressionMap.extraReturningColumns.length > 0 &&\n driver.isReturningSqlSupported()) {\n columns.push.apply(columns, __spreadArray([], __read(this.expressionMap.extraReturningColumns.filter(function (column) {\n return columns.indexOf(column) === -1;\n }))));\n }\n if (columns.length) {\n var columnsExpression = columns.map(function (column) {\n var name = _this.escape(column.databaseName);\n if (driver instanceof SqlServerDriver) {\n if (_this.expressionMap.queryType === \"insert\" || _this.expressionMap.queryType === \"update\" || _this.expressionMap.queryType === \"soft-delete\" || _this.expressionMap.queryType === \"restore\") {\n return \"INSERTED.\" + name;\n }\n else {\n return _this.escape(_this.getMainTableName()) + \".\" + name;\n }\n }\n else {\n return name;\n }\n }).join(\", \");\n if (driver instanceof OracleDriver) {\n columnsExpression += \" INTO \" + columns.map(function (column) {\n var parameterName = \"output_\" + column.databaseName;\n _this.expressionMap.nativeParameters[parameterName] = { type: driver.columnTypeToNativeParameter(column.type), dir: driver.oracle.BIND_OUT };\n return _this.connection.driver.createParameter(parameterName, Object.keys(_this.expressionMap.nativeParameters).length);\n }).join(\", \");\n }\n if (driver instanceof SqlServerDriver) {\n if (this.expressionMap.queryType === \"insert\" || this.expressionMap.queryType === \"update\") {\n columnsExpression += \" INTO @OutputTable\";\n }\n }\n return columnsExpression;\n }\n else if (typeof this.expressionMap.returning === \"string\") {\n return this.expressionMap.returning;\n }\n return \"\";\n };\n /**\n * If returning / output cause is set to array of column names,\n * then this method will return all column metadatas of those column names.\n */\n QueryBuilder.prototype.getReturningColumns = function () {\n var _this = this;\n var columns = [];\n if (Array.isArray(this.expressionMap.returning)) {\n this.expressionMap.returning.forEach(function (columnName) {\n if (_this.expressionMap.mainAlias.hasMetadata) {\n columns.push.apply(columns, __spreadArray([], __read(_this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName))));\n }\n });\n }\n return columns;\n };\n /**\n * Concatenates all added where expressions into one string.\n */\n QueryBuilder.prototype.createWhereExpressionString = function () {\n var _this = this;\n return this.expressionMap.wheres.map(function (where, index) {\n switch (where.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(where.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(where.condition);\n default:\n return _this.replacePropertyNames(where.condition);\n }\n }).join(\" \");\n };\n /**\n * Creates \"WHERE\" expression and variables for the given \"ids\".\n */\n QueryBuilder.prototype.createWhereIdsExpression = function (ids) {\n var _a;\n var _this = this;\n var metadata = this.expressionMap.mainAlias.metadata;\n var normalized = (Array.isArray(ids) ? ids : [ids]).map(function (id) { return metadata.ensureEntityIdMap(id); });\n // using in(...ids) for single primary key entities\n if (!metadata.hasMultiplePrimaryKeys\n && metadata.embeddeds.length === 0) {\n var primaryColumn_1 = metadata.primaryColumns[0];\n // getEntityValue will try to transform `In`, it is a bug\n // todo: remove this transformer check after #2390 is fixed\n if (!primaryColumn_1.transformer) {\n return this.computeWhereParameter((_a = {},\n _a[primaryColumn_1.propertyName] = In(normalized.map(function (id) { return primaryColumn_1.getEntityValue(id, false); })),\n _a));\n }\n }\n // create shortcuts for better readability\n var alias = this.expressionMap.aliasNamePrefixingEnabled ? this.escape(this.expressionMap.mainAlias.name) + \".\" : \"\";\n var parameterIndex = Object.keys(this.expressionMap.nativeParameters).length;\n var whereStrings = normalized.map(function (id, index) {\n var whereSubStrings = [];\n metadata.primaryColumns.forEach(function (primaryColumn, secondIndex) {\n var parameterName = \"id_\" + index + \"_\" + secondIndex;\n // whereSubStrings.push(alias + this.escape(primaryColumn.databaseName) + \"=:id_\" + index + \"_\" + secondIndex);\n whereSubStrings.push(alias + _this.escape(primaryColumn.databaseName) + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex));\n _this.expressionMap.nativeParameters[parameterName] = primaryColumn.getEntityValue(id, true);\n parameterIndex++;\n });\n return whereSubStrings.join(\" AND \");\n });\n return whereStrings.length > 1\n ? \"(\" + whereStrings.map(function (whereString) { return \"(\" + whereString + \")\"; }).join(\" OR \") + \")\"\n : whereStrings[0];\n };\n /**\n * Computes given where argument - transforms to a where string all forms it can take.\n */\n QueryBuilder.prototype.computeWhereParameter = function (where) {\n var _this = this;\n if (typeof where === \"string\")\n return where;\n if (where instanceof Brackets) {\n var whereQueryBuilder = this.createQueryBuilder();\n whereQueryBuilder.expressionMap.mainAlias = this.expressionMap.mainAlias;\n whereQueryBuilder.expressionMap.aliasNamePrefixingEnabled = this.expressionMap.aliasNamePrefixingEnabled;\n whereQueryBuilder.expressionMap.nativeParameters = this.expressionMap.nativeParameters;\n where.whereFactory(whereQueryBuilder);\n var whereString = whereQueryBuilder.createWhereExpressionString();\n this.setParameters(whereQueryBuilder.getParameters());\n return whereString ? \"(\" + whereString + \")\" : \"\";\n }\n else if (where instanceof Function) {\n return where(this);\n }\n else if (where instanceof Object) {\n var wheres = Array.isArray(where) ? where : [where];\n var andConditions = void 0;\n var parameterIndex_1 = Object.keys(this.expressionMap.nativeParameters).length;\n if (this.expressionMap.mainAlias.hasMetadata) {\n andConditions = wheres.map(function (where, whereIndex) {\n var propertyPaths = EntityMetadata.createPropertyPath(_this.expressionMap.mainAlias.metadata, where);\n return propertyPaths.map(function (propertyPath, propertyIndex) {\n var columns = _this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(propertyPath);\n if (!columns.length) {\n throw new EntityColumnNotFound(propertyPath);\n }\n return columns.map(function (column, columnIndex) {\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + propertyPath : column.propertyPath;\n var parameterValue = column.getEntityValue(where, true);\n var parameterName = \"where_\" + whereIndex + \"_\" + propertyIndex + \"_\" + columnIndex;\n var parameterBaseCount = Object.keys(_this.expressionMap.nativeParameters).filter(function (x) { return x.startsWith(parameterName); }).length;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else if (parameterValue instanceof FindOperator) {\n var parameters_1 = [];\n if (parameterValue.useParameter) {\n if (parameterValue.objectLiteralParameters) {\n _this.setParameters(parameterValue.objectLiteralParameters);\n }\n else {\n var realParameterValues = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];\n realParameterValues.forEach(function (realParameterValue, realParameterValueIndex) {\n _this.expressionMap.nativeParameters[parameterName + (parameterBaseCount + realParameterValueIndex)] = realParameterValue;\n parameterIndex_1++;\n parameters_1.push(_this.connection.driver.createParameter(parameterName + (parameterBaseCount + realParameterValueIndex), parameterIndex_1 - 1));\n });\n }\n }\n return _this.computeFindOperatorExpression(parameterValue, aliasPath, parameters_1);\n }\n else {\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex_1++;\n var parameter = _this.connection.driver.createParameter(parameterName, parameterIndex_1 - 1);\n return aliasPath + \" = \" + parameter;\n }\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n }).filter(function (expression) { return !!expression; }).join(\" AND \");\n });\n }\n else {\n andConditions = wheres.map(function (where, whereIndex) {\n return Object.keys(where).map(function (key, parameterIndex) {\n var parameterValue = where[key];\n var aliasPath = _this.expressionMap.aliasNamePrefixingEnabled ? _this.alias + \".\" + key : key;\n if (parameterValue === null) {\n return aliasPath + \" IS NULL\";\n }\n else {\n var parameterName = \"where_\" + whereIndex + \"_\" + parameterIndex;\n _this.expressionMap.nativeParameters[parameterName] = parameterValue;\n parameterIndex++;\n return aliasPath + \" = \" + _this.connection.driver.createParameter(parameterName, parameterIndex - 1);\n }\n }).join(\" AND \");\n });\n }\n if (andConditions.length > 1)\n return andConditions.map(function (where) { return \"(\" + where + \")\"; }).join(\" OR \");\n return andConditions.join(\"\");\n }\n return \"\";\n };\n /**\n * Gets SQL needs to be inserted into final query.\n */\n QueryBuilder.prototype.computeFindOperatorExpression = function (operator, aliasPath, parameters) {\n var driver = this.connection.driver;\n switch (operator.type) {\n case \"not\":\n if (operator.child) {\n return \"NOT(\" + this.computeFindOperatorExpression(operator.child, aliasPath, parameters) + \")\";\n }\n else {\n return aliasPath + \" != \" + parameters[0];\n }\n case \"lessThan\":\n return aliasPath + \" < \" + parameters[0];\n case \"lessThanOrEqual\":\n return aliasPath + \" <= \" + parameters[0];\n case \"moreThan\":\n return aliasPath + \" > \" + parameters[0];\n case \"moreThanOrEqual\":\n return aliasPath + \" >= \" + parameters[0];\n case \"equal\":\n return aliasPath + \" = \" + parameters[0];\n case \"ilike\":\n if (driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n return aliasPath + \" ILIKE \" + parameters[0];\n }\n return \"UPPER(\" + aliasPath + \") LIKE UPPER(\" + parameters[0] + \")\";\n case \"like\":\n return aliasPath + \" LIKE \" + parameters[0];\n case \"between\":\n return aliasPath + \" BETWEEN \" + parameters[0] + \" AND \" + parameters[1];\n case \"in\":\n if (parameters.length === 0) {\n return \"0=1\";\n }\n return aliasPath + \" IN (\" + parameters.join(\", \") + \")\";\n case \"any\":\n return aliasPath + \" = ANY(\" + parameters[0] + \")\";\n case \"isNull\":\n return aliasPath + \" IS NULL\";\n case \"raw\":\n if (operator.getSql) {\n return operator.getSql(aliasPath);\n }\n else {\n return aliasPath + \" = \" + operator.value;\n }\n }\n throw new TypeError(\"Unsupported FindOperator \" + FindOperator.constructor.name);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n QueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner();\n };\n return QueryBuilder;\n}());\nexport { QueryBuilder };\n\n//# sourceMappingURL=QueryBuilder.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsQueryRunner } from \"./SqljsQueryRunner\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nvar SqljsDriver = /** @class */ (function (_super) {\n __extends(SqljsDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // If autoSave is enabled by user, location or autoSaveCallback have to be set\n // because either autoSave saves to location or calls autoSaveCallback.\n if (_this.options.autoSave && !_this.options.location && !_this.options.autoSaveCallback) {\n throw new DriverOptionNotSetError(\"location or autoSaveCallback\");\n }\n // load sql.js package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n */\n SqljsDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.createDatabaseConnection()];\n case 1:\n _a.databaseConnection = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Closes connection with database.\n */\n SqljsDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection.close();\n ok();\n }\n catch (e) {\n fail(e);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n SqljsDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new SqljsQueryRunner(this);\n return this.queryRunner;\n };\n /**\n * Loads a database from a given file (Node.js), local storage key (browser) or array.\n * This will delete the current database!\n */\n SqljsDriver.prototype.load = function (fileNameOrLocalStorageOrData, checkIfFileOrLocalStorageExists) {\n if (checkIfFileOrLocalStorageExists === void 0) { checkIfFileOrLocalStorageExists = true; }\n return __awaiter(this, void 0, void 0, function () {\n var database, localStorageContent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(typeof fileNameOrLocalStorageOrData === \"string\")) return [3 /*break*/, 8];\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 1];\n // Node.js\n // fileNameOrLocalStorageOrData should be a path to the file\n if (PlatformTools.fileExist(fileNameOrLocalStorageOrData)) {\n database = PlatformTools.readFileSync(fileNameOrLocalStorageOrData);\n return [2 /*return*/, this.createDatabaseConnectionWithImport(database)];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // File doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing an existing file.\n // File will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n return [3 /*break*/, 7];\n case 1:\n localStorageContent = null;\n if (!this.options.useLocalForage) return [3 /*break*/, 5];\n if (!window.localforage) return [3 /*break*/, 3];\n return [4 /*yield*/, window.localforage.getItem(fileNameOrLocalStorageOrData)];\n case 2:\n localStorageContent = _a.sent();\n return [3 /*break*/, 4];\n case 3: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 4: return [3 /*break*/, 6];\n case 5:\n localStorageContent = PlatformTools.getGlobalVariable().localStorage.getItem(fileNameOrLocalStorageOrData);\n _a.label = 6;\n case 6:\n if (localStorageContent != null) {\n // localStorage value exists.\n return [2 /*return*/, this.createDatabaseConnectionWithImport(JSON.parse(localStorageContent))];\n }\n else if (checkIfFileOrLocalStorageExists) {\n throw new Error(\"File \" + fileNameOrLocalStorageOrData + \" does not exist\");\n }\n else {\n // localStorage value doesn't exist and checkIfFileOrLocalStorageExists is set to false.\n // Therefore open a database without importing anything.\n // localStorage value will be written on first write operation.\n return [2 /*return*/, this.createDatabaseConnectionWithImport()];\n }\n _a.label = 7;\n case 7: return [3 /*break*/, 9];\n case 8: return [2 /*return*/, this.createDatabaseConnectionWithImport(fileNameOrLocalStorageOrData)];\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saved the current database to the given file (Node.js), local storage key (browser) or\n * indexedDB key (browser with enabled useLocalForage option).\n * If no location path is given, the location path in the options (if specified) will be used.\n */\n SqljsDriver.prototype.save = function (location) {\n return __awaiter(this, void 0, void 0, function () {\n var path, content, e_1, database, databaseArray;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!location && !this.options.location) {\n throw new Error(\"No location is set, specify a location parameter or add the location option to your configuration\");\n }\n path = \"\";\n if (location) {\n path = location;\n }\n else if (this.options.location) {\n path = this.options.location;\n }\n if (!(PlatformTools.type === \"node\")) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n content = Buffer.from(this.databaseConnection.export());\n return [4 /*yield*/, PlatformTools.writeFile(path, content)];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n throw new Error(\"Could not save database, error: \" + e_1);\n case 4: return [3 /*break*/, 10];\n case 5:\n database = this.databaseConnection.export();\n databaseArray = [].slice.call(database);\n if (!this.options.useLocalForage) return [3 /*break*/, 9];\n if (!window.localforage) return [3 /*break*/, 7];\n return [4 /*yield*/, window.localforage.setItem(path, JSON.stringify(databaseArray))];\n case 6:\n _a.sent();\n return [3 /*break*/, 8];\n case 7: throw new Error(\"localforage is not defined - please import localforage.js into your site\");\n case 8: return [3 /*break*/, 10];\n case 9:\n PlatformTools.getGlobalVariable().localStorage.setItem(path, JSON.stringify(databaseArray));\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * This gets called by the QueryRunner when a change to the database is made.\n * If a custom autoSaveCallback is specified, it get's called with the database as Uint8Array,\n * otherwise the save method is called which saves it to file (Node.js), local storage (browser)\n * or indexedDB (browser with enabled useLocalForage option).\n */\n SqljsDriver.prototype.autoSave = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.options.autoSave) return [3 /*break*/, 4];\n if (!this.options.autoSaveCallback) return [3 /*break*/, 2];\n return [4 /*yield*/, this.options.autoSaveCallback(this.export())];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.save()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database as Uint8Array.\n */\n SqljsDriver.prototype.export = function () {\n return this.databaseConnection.export();\n };\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n SqljsDriver.prototype.createGeneratedMap = function (metadata, insertResult) {\n var _this = this;\n var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {\n // seems to be the only way to get the inserted id, see https://github.com/kripken/sql.js/issues/77\n if (generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\") {\n var query = \"SELECT last_insert_rowid()\";\n try {\n var result = _this.databaseConnection.exec(query);\n _this.connection.logger.logQuery(query);\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(result[0].values[0][0]));\n }\n catch (e) {\n _this.connection.logger.logQueryError(e, query, []);\n }\n }\n return map;\n }, {});\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n * If the location option is set, the database is loaded first.\n */\n SqljsDriver.prototype.createDatabaseConnection = function () {\n if (this.options.location) {\n return this.load(this.options.location, false);\n }\n return this.createDatabaseConnectionWithImport(this.options.database);\n };\n /**\n * Creates connection with an optional database.\n * If database is specified it is loaded, otherwise a new empty database is created.\n */\n SqljsDriver.prototype.createDatabaseConnectionWithImport = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n var isLegacyVersion, sqlite, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isLegacyVersion = typeof this.sqlite.Database === \"function\";\n if (!isLegacyVersion) return [3 /*break*/, 1];\n _a = this.sqlite;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.sqlite(this.options.sqlJsConfig)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n sqlite = _a;\n if (database && database.length > 0) {\n this.databaseConnection = new sqlite.Database(database);\n }\n else {\n this.databaseConnection = new sqlite.Database();\n }\n // Enable foreign keys for database\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.databaseConnection.exec(\"PRAGMA foreign_keys = ON;\");\n ok(_this.databaseConnection);\n }\n catch (e) {\n fail(e);\n }\n })];\n }\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n SqljsDriver.prototype.loadDependencies = function () {\n if (PlatformTools.type === \"browser\") {\n this.sqlite = window.SQL;\n }\n else {\n try {\n this.sqlite = PlatformTools.load(\"sql.js\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"sql.js\", \"sql.js\");\n }\n }\n };\n return SqljsDriver;\n}(AbstractSqliteDriver));\nexport { SqljsDriver };\n\n//# sourceMappingURL=SqljsDriver.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeStoragePromise = void 0;\n/**\n * Promise-Wrapper-Klasse für Native-Storage\n */\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst JsonHelper_1 = require(\"js-helper/dist/shared/JsonHelper\");\nclass NativeStoragePromise {\n static _isElectron() {\n return (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0);\n }\n /**\n * Setzt ein Item für NativeStorage\n *\n * @param key\n * @param value\n * @returns {Promise<*>}\n */\n static setItem(key, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.set(this.prefix + key, value, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.setItem(this.prefix + key, value, res, rej));\n }\n }\n else {\n this._cache[this.prefix + key] = value;\n }\n });\n }\n /**\n * Bekomme ein Item von NativeStorage\n *\n * @param key\n * @param defaultValue?\n * @returns {Promise<*>}\n */\n static getItem(key, defaultValue) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res, rej) => {\n if (this._isElectron()) {\n this.electronStorage.get(this.prefix + key, (e, data) => {\n if (e) {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }\n else {\n res(JsonHelper_1.JsonHelper.deepEqual(data, {}) ? defaultValue : data);\n }\n });\n }\n else {\n NativeStorage.getItem(this.prefix + key, data => res(Helper_1.Helper.nonNull(data, defaultValue)), (e => {\n res(Helper_1.Helper.nonNull(this._cache[this.prefix + key], defaultValue));\n }));\n }\n });\n });\n }\n /**\n * Bekomme die Keys vom NativeStorage\n *\n * @returns {Promise<*>}\n */\n static keys() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = [];\n if (this.persistent) {\n if (this._isElectron()) {\n keys = yield new Promise((res, rej) => this.electronStorage.keys((err, keys) => {\n if (err) {\n rej(err);\n }\n else {\n res(keys);\n }\n }));\n }\n else {\n keys = yield new Promise((res, rej) => NativeStorage.keys(res, rej));\n }\n }\n else {\n keys = Object.keys(this._cache);\n }\n return keys.filter(key => key.startsWith(this.prefix));\n });\n }\n /**\n * Entfernt ein Object aus dem NativeStorage\n *\n * @param key\n * @returns {Promise<*>}\n */\n static remove(key) {\n return __awaiter(this, void 0, void 0, function* () {\n delete this._cache[this.prefix + key];\n if (this._isElectron()) {\n return new Promise((res, rej) => this.electronStorage.remove(this.prefix + key, err => {\n if (err) {\n rej(err);\n }\n else {\n res();\n }\n }));\n }\n else {\n return new Promise((res, rej) => NativeStorage.remove(this.prefix + key, res, rej));\n }\n });\n }\n /**\n * Entfernt alle Objects aus dem NativeStorage\n *\n * @returns {Promise<*>}\n */\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n let keys = yield this.keys();\n yield Helper_1.Helper.asyncForEach((keys), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.remove(key);\n }), true);\n });\n }\n static makePersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistent) {\n this.persistent = true;\n yield Helper_1.Helper.asyncForEach(Object.keys(this._cache), (key) => __awaiter(this, void 0, void 0, function* () {\n yield this.setItem(key, this._cache[key]);\n }), true);\n }\n });\n }\n static makeUnpersistent() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.persistent) {\n let keys = yield this.keys();\n let values = {};\n yield Helper_1.Helper.asyncForEach(keys, (key) => __awaiter(this, void 0, void 0, function* () {\n values[key] = yield this.getItem(key);\n }));\n this.clear();\n this.persistent = false;\n this._cache = values;\n }\n });\n }\n}\nexports.NativeStoragePromise = NativeStoragePromise;\nNativeStoragePromise._cache = {};\nNativeStoragePromise.prefix = \"\";\nNativeStoragePromise.persistent = true;\nNativeStoragePromise.electronStorage = null;\n//# sourceMappingURL=NativeStoragePromise.js.map","import { __read, __spreadArray } from \"tslib\";\n/**\n * Database's table check constraint stored in this class.\n */\nvar TableCheck = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableCheck(options) {\n /**\n * Column that contains this constraint.\n */\n this.columnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableCheck.prototype.clone = function () {\n return new TableCheck({\n name: this.name,\n columnNames: this.columnNames ? __spreadArray([], __read(this.columnNames)) : [],\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates checks from the check metadata object.\n */\n TableCheck.create = function (checkMetadata) {\n return new TableCheck({\n name: checkMetadata.name,\n expression: checkMetadata.expression\n });\n };\n return TableCheck;\n}());\nexport { TableCheck };\n\n//# sourceMappingURL=TableCheck.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is not started yet and user tries to run commit or rollback.\n */\nvar TransactionNotStartedError = /** @class */ (function (_super) {\n __extends(TransactionNotStartedError, _super);\n function TransactionNotStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionNotStartedError\";\n Object.setPrototypeOf(_this, TransactionNotStartedError.prototype);\n _this.message = \"Transaction is not started yet, start transaction before committing or rolling it back.\";\n return _this;\n }\n return TransactionNotStartedError;\n}(Error));\nexport { TransactionNotStartedError };\n\n//# sourceMappingURL=TransactionNotStartedError.js.map\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","import { __read, __spreadArray } from \"tslib\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { camelCase, snakeCase, titleCase } from \"../util/StringUtils\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Naming strategy that is used by default.\n */\nvar DefaultNamingStrategy = /** @class */ (function () {\n function DefaultNamingStrategy() {\n this.nestedSetColumnNames = { left: \"nsleft\", right: \"nsright\" };\n this.materializedPathColumnName = \"mpath\";\n }\n /**\n * Normalizes table name.\n *\n * @param targetName Name of the target entity that can be used to generate a table name.\n * @param userSpecifiedName For example if user specified a table name in a decorator, e.g. @Entity(\"name\")\n */\n DefaultNamingStrategy.prototype.tableName = function (targetName, userSpecifiedName) {\n return userSpecifiedName ? userSpecifiedName : snakeCase(targetName);\n };\n /**\n * Creates a table name for a junction table of a closure table.\n *\n * @param originalClosureTableName Name of the closure table which owns this junction table.\n */\n DefaultNamingStrategy.prototype.closureJunctionTableName = function (originalClosureTableName) {\n return originalClosureTableName + \"_closure\";\n };\n DefaultNamingStrategy.prototype.columnName = function (propertyName, customName, embeddedPrefixes) {\n var name = customName || propertyName;\n if (embeddedPrefixes.length)\n return camelCase(embeddedPrefixes.join(\"_\")) + titleCase(name);\n return name;\n };\n DefaultNamingStrategy.prototype.relationName = function (propertyName) {\n return propertyName;\n };\n DefaultNamingStrategy.prototype.primaryKeyName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"PK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.uniqueConstraintName = function (tableOrName, columnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"UQ_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.relationConstraintName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"REL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.defaultConstraintName = function (tableOrName, columnName) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + columnName;\n return \"DF_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.foreignKeyName = function (tableOrName, columnNames, _referencedTablePath, _referencedColumnNames) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n return \"FK_\" + RandomGenerator.sha1(key).substr(0, 27);\n };\n DefaultNamingStrategy.prototype.indexName = function (tableOrName, columnNames, where) {\n // sort incoming column names to avoid issue when [\"id\", \"name\"] and [\"name\", \"id\"] arrays\n var clonedColumnNames = __spreadArray([], __read(columnNames));\n clonedColumnNames.sort();\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + clonedColumnNames.join(\"_\");\n if (where)\n key += \"_\" + where;\n return \"IDX_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.checkConstraintName = function (tableOrName, expression, isEnum) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n var name = \"CHK_\" + RandomGenerator.sha1(key).substr(0, 26);\n return isEnum ? name + \"_ENUM\" : name;\n };\n DefaultNamingStrategy.prototype.exclusionConstraintName = function (tableOrName, expression) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var replacedTableName = tableName.replace(\".\", \"_\");\n var key = replacedTableName + \"_\" + expression;\n return \"XCL_\" + RandomGenerator.sha1(key).substr(0, 26);\n };\n DefaultNamingStrategy.prototype.joinColumnName = function (relationName, referencedColumnName) {\n return camelCase(relationName + \"_\" + referencedColumnName);\n };\n DefaultNamingStrategy.prototype.joinTableName = function (firstTableName, secondTableName, firstPropertyName, secondPropertyName) {\n return snakeCase(firstTableName + \"_\" + firstPropertyName.replace(/\\./gi, \"_\") + \"_\" + secondTableName);\n };\n DefaultNamingStrategy.prototype.joinTableColumnDuplicationPrefix = function (columnName, index) {\n return columnName + \"_\" + index;\n };\n DefaultNamingStrategy.prototype.joinTableColumnName = function (tableName, propertyName, columnName) {\n return camelCase(tableName + \"_\" + (columnName ? columnName : propertyName));\n };\n DefaultNamingStrategy.prototype.joinTableInverseColumnName = function (tableName, propertyName, columnName) {\n return this.joinTableColumnName(tableName, propertyName, columnName);\n };\n /**\n * Adds globally set prefix to the table name.\n * This method is executed no matter if prefix was set or not.\n * Table name is either user's given table name, either name generated from entity target.\n * Note that table name comes here already normalized by #tableName method.\n */\n DefaultNamingStrategy.prototype.prefixTableName = function (prefix, tableName) {\n return prefix + tableName;\n };\n DefaultNamingStrategy.prototype.eagerJoinRelationAlias = function (alias, propertyPath) {\n return alias + \"_\" + propertyPath.replace(\".\", \"_\");\n };\n return DefaultNamingStrategy;\n}());\nexport { DefaultNamingStrategy };\n\n//# sourceMappingURL=DefaultNamingStrategy.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to execute operation allowed only if connection is opened.\n */\nvar CannotExecuteNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotExecuteNotConnectedError, _super);\n function CannotExecuteNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotExecuteNotConnectedError\";\n Object.setPrototypeOf(_this, CannotExecuteNotConnectedError.prototype);\n _this.message = \"Cannot execute operation on \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotExecuteNotConnectedError;\n}(Error));\nexport { CannotExecuteNotConnectedError };\n\n//# sourceMappingURL=CannotExecuteNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to connect when he already connected.\n */\nvar CannotConnectAlreadyConnectedError = /** @class */ (function (_super) {\n __extends(CannotConnectAlreadyConnectedError, _super);\n function CannotConnectAlreadyConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotConnectAlreadyConnectedError\";\n Object.setPrototypeOf(_this, CannotConnectAlreadyConnectedError.prototype);\n _this.message = \"Cannot create a \\\"\" + connectionName + \"\\\" connection because connection to the database already established.\";\n return _this;\n }\n return CannotConnectAlreadyConnectedError;\n}(Error));\nexport { CannotConnectAlreadyConnectedError };\n\n//# sourceMappingURL=CannotConnectAlreadyConnectedError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n */\nvar EntityMetadataNotFoundError = /** @class */ (function (_super) {\n __extends(EntityMetadataNotFoundError, _super);\n function EntityMetadataNotFoundError(target) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityMetadataNotFound\";\n Object.setPrototypeOf(_this, EntityMetadataNotFoundError.prototype);\n var targetName;\n if (target instanceof EntitySchema) {\n targetName = target.options.name;\n }\n else if (typeof target === \"function\") {\n targetName = target.name;\n }\n else if (typeof target === \"object\" && \"name\" in target) {\n targetName = target.name;\n }\n else {\n targetName = target;\n }\n _this.message = \"No metadata for \\\"\" + targetName + \"\\\" was found.\";\n return _this;\n }\n return EntityMetadataNotFoundError;\n}(Error));\nexport { EntityMetadataNotFoundError };\n\n//# sourceMappingURL=EntityMetadataNotFoundError.js.map\n","/**\n * Represents entity of the migration in the database.\n */\nvar Migration = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Migration(id, timestamp, name, instance) {\n this.id = id;\n this.timestamp = timestamp;\n this.name = name;\n this.instance = instance;\n }\n return Migration;\n}());\nexport { Migration };\n\n//# sourceMappingURL=Migration.js.map\n","/**\n * Sql server driver requires parameter types to be specified fo input parameters used in the query.\n *\n * @see https://github.com/patriksimek/node-mssql#data-types\n */\nvar MssqlParameter = /** @class */ (function () {\n function MssqlParameter(value, type) {\n var params = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n params[_i - 2] = arguments[_i];\n }\n this.value = value;\n this.type = type;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n this.params = [];\n this.params = params || [];\n }\n return MssqlParameter;\n}());\nexport { MssqlParameter };\n\n//# sourceMappingURL=MssqlParameter.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { Table } from \"../schema-builder/table/Table\";\nimport { Migration } from \"./Migration\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nvar MigrationExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MigrationExecutor(connection, queryRunner) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n this.transaction = \"all\";\n var options = this.connection.driver.options;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Tries to execute a single migration given.\n */\n MigrationExecutor.prototype.executeMigration = function (migration) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, migration.instance.up(queryRunner)];\n case 2:\n _a.sent();\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 3:\n _a.sent();\n return [2 /*return*/, migration];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all migrations.\n */\n MigrationExecutor.prototype.getAllMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(this.getMigrations())];\n });\n });\n };\n /**\n * Returns an array of all executed migrations.\n */\n MigrationExecutor.prototype.getExecutedMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, this.withQueryRunner(function (queryRunner) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); })];\n });\n });\n };\n /**\n * Returns an array of all pending migrations.\n */\n MigrationExecutor.prototype.getPendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var allMigrations, executedMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getAllMigrations()];\n case 1:\n allMigrations = _a.sent();\n return [4 /*yield*/, this.getExecutedMigrations()];\n case 2:\n executedMigrations = _a.sent();\n return [2 /*return*/, allMigrations.filter(function (migration) {\n return !executedMigrations.find(function (executedMigration) {\n return executedMigration.name === migration.name;\n });\n })];\n }\n });\n });\n };\n /**\n * Inserts an executed migration.\n */\n MigrationExecutor.prototype.insertMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.insertExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Deletes an executed migration.\n */\n MigrationExecutor.prototype.deleteMigration = function (migration) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.withQueryRunner(function (queryRunner) {\n _this.deleteExecutedMigration(queryRunner, migration)\n .then(resolve)\n .catch(reject);\n });\n });\n };\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n MigrationExecutor.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var hasUnappliedMigrations, queryRunner, executedMigrations, allMigrations, _loop_1, this_1, allMigrations_1, allMigrations_1_1, migration;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n hasUnappliedMigrations = false;\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n allMigrations = this.getMigrations();\n _loop_1 = function (migration) {\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration) {\n this_1.connection.logger.logSchemaBuild(\" [X] \" + migration.name);\n }\n else {\n hasUnappliedMigrations = true;\n this_1.connection.logger.logSchemaBuild(\" [ ] \" + migration.name);\n }\n };\n this_1 = this;\n try {\n for (allMigrations_1 = __values(allMigrations), allMigrations_1_1 = allMigrations_1.next(); !allMigrations_1_1.done; allMigrations_1_1 = allMigrations_1.next()) {\n migration = allMigrations_1_1.value;\n _loop_1(migration);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allMigrations_1_1 && !allMigrations_1_1.done && (_a = allMigrations_1.return)) _a.call(allMigrations_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, hasUnappliedMigrations];\n }\n });\n });\n };\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n MigrationExecutor.prototype.executePendingMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, successMigrations, pendingMigrations, transactionStartedByUs, _loop_2, this_2, pendingMigrations_1, pendingMigrations_1_1, migration, e_2_1, err_1, rollbackError_1;\n var e_2, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _b.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _b.sent();\n lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n allMigrations = this.getMigrations();\n successMigrations = [];\n pendingMigrations = allMigrations.filter(function (migration) {\n // check if we already have executed migration\n var executedMigration = executedMigrations.find(function (executedMigration) { return executedMigration.name === migration.name; });\n if (executedMigration)\n return false;\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new Error(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n if (!!pendingMigrations.length) return [3 /*break*/, 5];\n this.connection.logger.logSchemaBuild(\"No migrations are pending\");\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/, []];\n case 5:\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(allMigrations.length + \" migrations were found in the source code.\");\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(pendingMigrations.length + \" migrations are new migrations that needs to be executed.\");\n transactionStartedByUs = false;\n if (!(this.transaction === \"all\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 6:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 7;\n case 7:\n _b.trys.push([7, 18, 23, 26]);\n _loop_2 = function (migration) {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!(this_2.transaction === \"each\" && !queryRunner.isTransactionActive)) return [3 /*break*/, 2];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 1:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 2;\n case 2: return [4 /*yield*/, migration.instance.up(queryRunner)\n .then(function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: // now when migration is executed we need to insert record about it into the database\n return [4 /*yield*/, this.insertExecutedMigration(queryRunner, migration)];\n case 1:\n _a.sent();\n if (!(this.transaction === \"each\" && transactionStartedByUs)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); })\n .then(function () {\n successMigrations.push(migration);\n _this.connection.logger.logSchemaBuild(\"Migration \" + migration.name + \" has been executed successfully.\");\n })];\n case 3:\n _c.sent();\n return [2 /*return*/];\n }\n });\n };\n this_2 = this;\n _b.label = 8;\n case 8:\n _b.trys.push([8, 13, 14, 15]);\n pendingMigrations_1 = __values(pendingMigrations), pendingMigrations_1_1 = pendingMigrations_1.next();\n _b.label = 9;\n case 9:\n if (!!pendingMigrations_1_1.done) return [3 /*break*/, 12];\n migration = pendingMigrations_1_1.value;\n return [5 /*yield**/, _loop_2(migration)];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11:\n pendingMigrations_1_1 = pendingMigrations_1.next();\n return [3 /*break*/, 9];\n case 12: return [3 /*break*/, 15];\n case 13:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 15];\n case 14:\n try {\n if (pendingMigrations_1_1 && !pendingMigrations_1_1.done && (_a = pendingMigrations_1.return)) _a.call(pendingMigrations_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 15:\n if (!(this.transaction === \"all\" && transactionStartedByUs)) return [3 /*break*/, 17];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 16:\n _b.sent();\n _b.label = 17;\n case 17: return [3 /*break*/, 26];\n case 18:\n err_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 22];\n _b.label = 19;\n case 19:\n _b.trys.push([19, 21, , 22]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 20:\n _b.sent();\n return [3 /*break*/, 22];\n case 21:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 22];\n case 22: throw err_1;\n case 23:\n if (!!this.queryRunner) return [3 /*break*/, 25];\n return [4 /*yield*/, queryRunner.release()];\n case 24:\n _b.sent();\n _b.label = 25;\n case 25: return [7 /*endfinally*/];\n case 26: return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last migration that were run.\n */\n MigrationExecutor.prototype.undoLastMigration = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, migrationToRevert, transactionStartedByUs, err_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n return [4 /*yield*/, this.createMigrationsTableIfNotExist(queryRunner)];\n case 1:\n // create migrations table if its not created yet\n _a.sent();\n return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];\n case 2:\n executedMigrations = _a.sent();\n lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(\"No migrations was found in the database. Nothing to revert!\");\n return [2 /*return*/];\n }\n allMigrations = this.getMigrations();\n migrationToRevert = allMigrations.find(function (migration) { return migration.name === lastTimeExecutedMigration.name; });\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new Error(\"No migration \" + lastTimeExecutedMigration.name + \" was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.\");\n // log information about migration execution\n this.connection.logger.logSchemaBuild(executedMigrations.length + \" migrations are already loaded in the database.\");\n this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + \" is the last executed migration. It was executed on \" + new Date(lastTimeExecutedMigration.timestamp).toString() + \".\");\n this.connection.logger.logSchemaBuild(\"Now reverting it...\");\n transactionStartedByUs = false;\n if (!((this.transaction !== \"none\") && !queryRunner.isTransactionActive)) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 3:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 4;\n case 4:\n _a.trys.push([4, 9, 14, 17]);\n return [4 /*yield*/, migrationToRevert.instance.down(queryRunner)];\n case 5:\n _a.sent();\n return [4 /*yield*/, this.deleteExecutedMigration(queryRunner, migrationToRevert)];\n case 6:\n _a.sent();\n this.connection.logger.logSchemaBuild(\"Migration \" + migrationToRevert.name + \" has been reverted successfully.\");\n if (!transactionStartedByUs) return [3 /*break*/, 8];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n _a.label = 8;\n case 8: return [3 /*break*/, 17];\n case 9:\n err_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 13];\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw err_2;\n case 14:\n if (!!this.queryRunner) return [3 /*break*/, 16];\n return [4 /*yield*/, queryRunner.release()];\n case 15:\n _a.sent();\n _a.label = 16;\n case 16: return [7 /*endfinally*/];\n case 17: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n MigrationExecutor.prototype.createMigrationsTableIfNotExist = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, queryRunner.hasTable(this.migrationsTable)];\n case 1:\n tableExist = _a.sent();\n if (!!tableExist) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationId }),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n MigrationExecutor.prototype.loadExecutedMigrations = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var mongoRunner, migrationsRaw;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection\n .db(this.connection.driver.database)\n .collection(this.migrationsTableName)\n .find()\n .sort({ \"_id\": -1 })\n .toArray()];\n case 1: return [2 /*return*/, _a.sent()];\n case 2: return [4 /*yield*/, this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany()];\n case 3:\n migrationsRaw = _a.sent();\n return [2 /*return*/, migrationsRaw.map(function (migrationRaw) {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n })];\n }\n });\n });\n };\n /**\n * Gets all migrations that setup for this connection.\n */\n MigrationExecutor.prototype.getMigrations = function () {\n var migrations = this.connection.migrations.map(function (migration) {\n var migrationClassName = migration.name || migration.constructor.name;\n var migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new Error(migrationClassName + \" migration name is wrong. Migration class name should have a JavaScript timestamp appended.\");\n }\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n this.checkForDuplicateMigrations(migrations);\n // sort them by timestamp\n return migrations.sort(function (a, b) { return a.timestamp - b.timestamp; });\n };\n MigrationExecutor.prototype.checkForDuplicateMigrations = function (migrations) {\n var migrationNames = migrations.map(function (migration) { return migration.name; });\n var duplicates = Array.from(new Set(migrationNames.filter(function (migrationName, index) { return migrationNames.indexOf(migrationName) < index; })));\n if (duplicates.length > 0) {\n throw Error(\"Duplicate migrations: \" + duplicates.join(\", \"));\n }\n };\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n MigrationExecutor.prototype.getLatestTimestampMigration = function (migrations) {\n var sortedMigrations = migrations.map(function (migration) { return migration; }).sort(function (a, b) { return (a.timestamp - b.timestamp) * -1; });\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n MigrationExecutor.prototype.getLatestExecutedMigration = function (sortedMigrations) {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n };\n /**\n * Inserts new executed migration's data into migrations table.\n */\n MigrationExecutor.prototype.insertExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var values, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n values = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).insert(values)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n MigrationExecutor.prototype.deleteExecutedMigration = function (queryRunner, migration) {\n return __awaiter(this, void 0, void 0, function () {\n var conditions, mongoRunner, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n conditions = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }));\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }));\n }\n else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n if (!(this.connection.driver instanceof MongoDriver)) return [3 /*break*/, 2];\n mongoRunner = queryRunner;\n return [4 /*yield*/, mongoRunner.databaseConnection.db(this.connection.driver.database).collection(this.migrationsTableName).deleteOne(conditions)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n qb = queryRunner.manager.createQueryBuilder();\n return [4 /*yield*/, qb.delete()\n .from(this.migrationsTable)\n .where(qb.escape(\"timestamp\") + \" = :timestamp\")\n .andWhere(qb.escape(\"name\") + \" = :name\")\n .setParameters(conditions)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n MigrationExecutor.prototype.withQueryRunner = function (callback) {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 2, 5]);\n return [2 /*return*/, callback(queryRunner)];\n case 2:\n if (!!this.queryRunner) return [3 /*break*/, 4];\n return [4 /*yield*/, queryRunner.release()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n return MigrationExecutor;\n}());\nexport { MigrationExecutor };\n\n//# sourceMappingURL=MigrationExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingPrimaryColumnError = /** @class */ (function (_super) {\n __extends(MissingPrimaryColumnError, _super);\n function MissingPrimaryColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingPrimaryColumnError\";\n Object.setPrototypeOf(_this, MissingPrimaryColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have a primary column. Primary column is required to \" +\n \"have in all your entities. Use @PrimaryColumn decorator to add a primary column to your entity.\";\n return _this;\n }\n return MissingPrimaryColumnError;\n}(Error));\nexport { MissingPrimaryColumnError };\n\n//# sourceMappingURL=MissingPrimaryColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when circular relations detected with nullable set to false.\n */\nvar CircularRelationsError = /** @class */ (function (_super) {\n __extends(CircularRelationsError, _super);\n function CircularRelationsError(path) {\n var _this = _super.call(this) || this;\n _this.name = \"CircularRelationsError\";\n Object.setPrototypeOf(_this, CircularRelationsError.prototype);\n _this.message = \"Circular relations detected: \" + path + \". To resolve this issue you need to set nullable: true somewhere in this dependency structure.\";\n return _this;\n }\n return CircularRelationsError;\n}(Error));\nexport { CircularRelationsError };\n\n//# sourceMappingURL=CircularRelationsError.js.map\n","/**\n * This source code is from https://github.com/jriecken/dependency-graph\n * Just added \"any\" types here, wrapper everything into exported class.\n * We cant use a package itself because we want to package \"everything-in-it\" for the frontend users of TypeORM.\n */\n/**\n * A simple dependency graph\n */\n/**\n * Helper for creating a Depth-First-Search on\n * a set of edges.\n *\n * Detects cycles and throws an Error if one is detected.\n *\n * @param edges The set of edges to DFS through\n * @param leavesOnly Whether to only return \"leaf\" nodes (ones who have no edges)\n * @param result An array in which the results will be populated\n */\nfunction createDFS(edges, leavesOnly, result) {\n var currentPath = [];\n var visited = {};\n return function DFS(currentNode) {\n visited[currentNode] = true;\n currentPath.push(currentNode);\n edges[currentNode].forEach(function (node) {\n if (!visited[node]) {\n DFS(node);\n }\n else if (currentPath.indexOf(node) >= 0) {\n currentPath.push(node);\n throw new Error(\"Dependency Cycle Found: \" + currentPath.join(\" -> \"));\n }\n });\n currentPath.pop();\n if ((!leavesOnly || edges[currentNode].length === 0) && result.indexOf(currentNode) === -1) {\n result.push(currentNode);\n }\n };\n}\nvar DepGraph = /** @class */ (function () {\n function DepGraph() {\n this.nodes = {};\n this.outgoingEdges = {}; // Node -> [Dependency Node]\n this.incomingEdges = {}; // Node -> [Dependant Node]\n }\n /**\n * Add a node to the dependency graph. If a node already exists, this method will do nothing.\n */\n DepGraph.prototype.addNode = function (node, data) {\n if (!this.hasNode(node)) {\n // Checking the arguments length allows the user to add a node with undefined data\n if (arguments.length === 2) {\n this.nodes[node] = data;\n }\n else {\n this.nodes[node] = node;\n }\n this.outgoingEdges[node] = [];\n this.incomingEdges[node] = [];\n }\n };\n /**\n * Remove a node from the dependency graph. If a node does not exist, this method will do nothing.\n */\n DepGraph.prototype.removeNode = function (node) {\n if (this.hasNode(node)) {\n delete this.nodes[node];\n delete this.outgoingEdges[node];\n delete this.incomingEdges[node];\n [this.incomingEdges, this.outgoingEdges].forEach(function (edgeList) {\n Object.keys(edgeList).forEach(function (key) {\n var idx = edgeList[key].indexOf(node);\n if (idx >= 0) {\n edgeList[key].splice(idx, 1);\n }\n }, this);\n });\n }\n };\n /**\n * Check if a node exists in the graph\n */\n DepGraph.prototype.hasNode = function (node) {\n return this.nodes.hasOwnProperty(node);\n };\n /**\n * Get the data associated with a node name\n */\n DepGraph.prototype.getNodeData = function (node) {\n if (this.hasNode(node)) {\n return this.nodes[node];\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Set the associated data for a given node name. If the node does not exist, this method will throw an error\n */\n DepGraph.prototype.setNodeData = function (node, data) {\n if (this.hasNode(node)) {\n this.nodes[node] = data;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Add a dependency between two nodes. If either of the nodes does not exist,\n * an Error will be thrown.\n */\n DepGraph.prototype.addDependency = function (from, to) {\n if (!this.hasNode(from)) {\n throw new Error(\"Node does not exist: \" + from);\n }\n if (!this.hasNode(to)) {\n throw new Error(\"Node does not exist: \" + to);\n }\n if (this.outgoingEdges[from].indexOf(to) === -1) {\n this.outgoingEdges[from].push(to);\n }\n if (this.incomingEdges[to].indexOf(from) === -1) {\n this.incomingEdges[to].push(from);\n }\n return true;\n };\n /**\n * Remove a dependency between two nodes.\n */\n DepGraph.prototype.removeDependency = function (from, to) {\n var idx;\n if (this.hasNode(from)) {\n idx = this.outgoingEdges[from].indexOf(to);\n if (idx >= 0) {\n this.outgoingEdges[from].splice(idx, 1);\n }\n }\n if (this.hasNode(to)) {\n idx = this.incomingEdges[to].indexOf(from);\n if (idx >= 0) {\n this.incomingEdges[to].splice(idx, 1);\n }\n }\n };\n /**\n * Get an array containing the nodes that the specified node depends on (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned\n * in the array.\n */\n DepGraph.prototype.dependenciesOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.outgoingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * get an array containing the nodes that depend on the specified node (transitively).\n *\n * Throws an Error if the graph has a cycle, or the specified node does not exist.\n *\n * If `leavesOnly` is true, only nodes that do not have any dependants will be returned in the array.\n */\n DepGraph.prototype.dependantsOf = function (node, leavesOnly) {\n if (this.hasNode(node)) {\n var result = [];\n var DFS = createDFS(this.incomingEdges, leavesOnly, result);\n DFS(node);\n var idx = result.indexOf(node);\n if (idx >= 0) {\n result.splice(idx, 1);\n }\n return result;\n }\n else {\n throw new Error(\"Node does not exist: \" + node);\n }\n };\n /**\n * Construct the overall processing order for the dependency graph.\n *\n * Throws an Error if the graph has a cycle.\n *\n * If `leavesOnly` is true, only nodes that do not depend on any other nodes will be returned.\n */\n DepGraph.prototype.overallOrder = function (leavesOnly) {\n var self = this;\n var result = [];\n var keys = Object.keys(this.nodes);\n if (keys.length === 0) {\n return result; // Empty graph\n }\n else {\n // Look for cycles - we run the DFS starting at all the nodes in case there\n // are several disconnected subgraphs inside this dependency graph.\n var CycleDFS_1 = createDFS(this.outgoingEdges, false, []);\n keys.forEach(function (n) {\n CycleDFS_1(n);\n });\n var DFS_1 = createDFS(this.outgoingEdges, leavesOnly, result);\n // Find all potential starting points (nodes with nothing depending on them) an\n // run a DFS starting at these points to get the order\n keys.filter(function (node) {\n return self.incomingEdges[node].length === 0;\n }).forEach(function (n) {\n DFS_1(n);\n });\n return result;\n }\n };\n return DepGraph;\n}());\nexport { DepGraph };\n\n//# sourceMappingURL=DepGraph.js.map\n","import { __extends } from \"tslib\";\nvar DataTypeNotSupportedError = /** @class */ (function (_super) {\n __extends(DataTypeNotSupportedError, _super);\n function DataTypeNotSupportedError(column, dataType, database) {\n var _this = _super.call(this) || this;\n _this.name = \"DataTypeNotSupportedError\";\n Object.setPrototypeOf(_this, DataTypeNotSupportedError.prototype);\n var type = typeof dataType === \"string\" ? dataType : dataType.name;\n _this.message = \"Data type \\\"\" + type + \"\\\" in \\\"\" + column.entityMetadata.targetName + \".\" + column.propertyName + \"\\\" is not supported by \\\"\" + database + \"\\\" database.\";\n return _this;\n }\n return DataTypeNotSupportedError;\n}(Error));\nexport { DataTypeNotSupportedError };\n\n//# sourceMappingURL=DataTypeNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when some option is not set in the connection options.\n */\nvar NoConnectionOptionError = /** @class */ (function (_super) {\n __extends(NoConnectionOptionError, _super);\n function NoConnectionOptionError(optionName) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, NoConnectionOptionError.prototype);\n _this.message = \"Option \\\"\" + optionName + \"\\\" is not set in your connection options, please define \\\"\" + optionName + \"\\\" option in your connection options or ormconfig.json\";\n return _this;\n }\n return NoConnectionOptionError;\n}(Error));\nexport { NoConnectionOptionError };\n\n//# sourceMappingURL=NoConnectionOptionError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relation has array initialized which is forbidden my ORM.\n *\n * @see https://github.com/typeorm/typeorm/issues/1319\n * @see http://typeorm.io/#/relations-faq/avoid-relation-property-initializers\n */\nvar InitializedRelationError = /** @class */ (function (_super) {\n __extends(InitializedRelationError, _super);\n function InitializedRelationError(relation) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, InitializedRelationError.prototype);\n _this.message = \"Array initializations are not allowed in entity relations. \" +\n (\"Please remove array initialization (= []) from \\\"\" + relation.entityMetadata.targetName + \"#\" + relation.propertyPath + \"\\\". \") +\n \"This is ORM requirement to make relations to work properly. Refer docs for more information.\";\n return _this;\n }\n return InitializedRelationError;\n}(Error));\nexport { InitializedRelationError };\n\n//# sourceMappingURL=InitializedRelationError.js.map\n","import { MissingPrimaryColumnError } from \"../error/MissingPrimaryColumnError\";\nimport { CircularRelationsError } from \"../error/CircularRelationsError\";\nimport { DepGraph } from \"../util/DepGraph\";\nimport { DataTypeNotSupportedError } from \"../error/DataTypeNotSupportedError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { NoConnectionOptionError } from \"../error/NoConnectionOptionError\";\nimport { InitializedRelationError } from \"../error/InitializedRelationError\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n/**\n * Validates built entity metadatas.\n */\nvar EntityMetadataValidator = /** @class */ (function () {\n function EntityMetadataValidator() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given entity metadatas.\n */\n EntityMetadataValidator.prototype.validateMany = function (entityMetadatas, driver) {\n var _this = this;\n entityMetadatas.forEach(function (entityMetadata) { return _this.validate(entityMetadata, entityMetadatas, driver); });\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n };\n /**\n * Validates given entity metadata.\n */\n EntityMetadataValidator.prototype.validate = function (entityMetadata, allEntityMetadatas, driver) {\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new Error(\"Entity \" + entityMetadata.name + \" using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?\");\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new Error(\"Entity \" + entityMetadata.name + \" has an undefined discriminator value. Discriminator value should be defined.\");\n var sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(function (metadata) {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(function (parent) { return entityMetadata.inheritanceTree.indexOf(parent) !== -1; });\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new Error(\"Entities \" + entityMetadata.name + \" and \" + sameDiscriminatorValueEntityMetadata.name + \" have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.\");\n }\n entityMetadata.relationCounts.forEach(function (relationCount) {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new Error(\"Relation count can not be implemented on ManyToOne or OneToOne relations.\");\n });\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(function (column) {\n var normalizedColumn = driver.normalizeType(column);\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new Error(\"Column \" + column.propertyName + \" of Entity \" + entityMetadata.name + \" does not support length property.\");\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new Error(\"Column \\\"\" + column.propertyName + \"\\\" of Entity \\\"\" + entityMetadata.name + \"\\\" is defined as enum, but missing \\\"enum\\\" or \\\"enumName\\\" properties.\");\n });\n }\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n var generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated && column.generationStrategy !== \"uuid\"; });\n if (generatedColumns.length > 1)\n throw new Error(\"Error in \" + entityMetadata.name + \" entity. There can be only one auto-increment column in MySql table.\");\n }\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n var metadatasWithDatabase = allEntityMetadatas.filter(function (metadata) { return metadata.database; });\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n if (driver instanceof SqlServerDriver) {\n var charsetColumns = entityMetadata.columns.filter(function (column) { return column.charset; });\n if (charsetColumns.length > 1)\n throw new Error(\"Character set specifying is not supported in Sql Server\");\n }\n // check if relations are all without initialized properties\n var entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(function (relation) {\n if (relation.isManyToMany || relation.isOneToMany) {\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n // get entity relation value and check if its an array\n var relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n // validate relations\n entityMetadata.relations.forEach(function (relation) {\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new Error(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new Error(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n });\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(function (relation) {\n var isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new Error(\"Relation \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseRelation.entityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" both has cascade remove set. \" +\n \"This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.\");\n }); // todo: maybe better just deny removal from one to one relation without join column?\n entityMetadata.eagerRelations.forEach(function (relation) {\n });\n };\n /**\n * Validates dependencies of the entity metadatas.\n */\n EntityMetadataValidator.prototype.validateDependencies = function (entityMetadatas) {\n var graph = new DepGraph();\n entityMetadatas.forEach(function (entityMetadata) {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns\n .filter(function (relation) { return !relation.isNullable; })\n .forEach(function (relation) {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n }\n catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n };\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n EntityMetadataValidator.prototype.validateEagerRelations = function (entityMetadatas) {\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.eagerRelations.forEach(function (relation) {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new Error(\"Circular eager relations are disallowed. \" +\n (entityMetadata.targetName + \"#\" + relation.propertyPath + \" contains \\\"eager: true\\\", and its inverse side \") +\n (relation.inverseEntityMetadata.targetName + \"#\" + relation.inverseRelation.propertyPath + \" contains \\\"eager: true\\\" as well.\") +\n \" Remove \\\"eager: true\\\" from one side of the relation.\");\n });\n });\n };\n return EntityMetadataValidator;\n}());\nexport { EntityMetadataValidator };\n\n//# sourceMappingURL=EntityMetadataValidator.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use query runner from query runner provider after it was released.\n */\nvar QueryRunnerProviderAlreadyReleasedError = /** @class */ (function (_super) {\n __extends(QueryRunnerProviderAlreadyReleasedError, _super);\n function QueryRunnerProviderAlreadyReleasedError() {\n var _this = _super.call(this) || this;\n _this.name = \"QueryRunnerProviderAlreadyReleasedError\";\n Object.setPrototypeOf(_this, QueryRunnerProviderAlreadyReleasedError.prototype);\n _this.message = \"Database connection provided by a query runner was already released, cannot continue to use its querying methods anymore.\";\n return _this;\n }\n return QueryRunnerProviderAlreadyReleasedError;\n}(Error));\nexport { QueryRunnerProviderAlreadyReleasedError };\n\n//# sourceMappingURL=QueryRunnerProviderAlreadyReleasedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to release entity manager that does not use single database connection.\n */\nvar NoNeedToReleaseEntityManagerError = /** @class */ (function (_super) {\n __extends(NoNeedToReleaseEntityManagerError, _super);\n function NoNeedToReleaseEntityManagerError() {\n var _this = _super.call(this) || this;\n _this.name = \"NoNeedToReleaseEntityManagerError\";\n Object.setPrototypeOf(_this, NoNeedToReleaseEntityManagerError.prototype);\n _this.message = \"Entity manager is not using single database connection and cannot be released. \" +\n \"Only entity managers created by connection#createEntityManagerWithSingleDatabaseConnection \" +\n \"methods have a single database connection and they should be released.\";\n return _this;\n }\n return NoNeedToReleaseEntityManagerError;\n}(Error));\nexport { NoNeedToReleaseEntityManagerError };\n\n//# sourceMappingURL=NoNeedToReleaseEntityManagerError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nvar Repository = /** @class */ (function () {\n function Repository() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Repository.prototype.createQueryBuilder = function (alias, queryRunner) {\n return this.manager.createQueryBuilder(this.metadata.target, alias || this.metadata.targetName, queryRunner || this.queryRunner);\n };\n Object.defineProperty(Repository.prototype, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n Repository.prototype.hasId = function (entity) {\n return this.manager.hasId(this.metadata.target, entity);\n };\n /**\n * Gets entity mixed id.\n */\n Repository.prototype.getId = function (entity) {\n return this.manager.getId(this.metadata.target, entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n Repository.prototype.create = function (plainEntityLikeOrPlainEntityLikes) {\n return this.manager.create(this.metadata.target, plainEntityLikeOrPlainEntityLikes);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n Repository.prototype.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.manager).merge.apply(_a, __spreadArray([this.metadata.target, mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n Repository.prototype.preload = function (entityLike) {\n return this.manager.preload(this.metadata.target, entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n Repository.prototype.save = function (entityOrEntities, options) {\n return this.manager.save(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n Repository.prototype.remove = function (entityOrEntities, options) {\n return this.manager.remove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n Repository.prototype.softRemove = function (entityOrEntities, options) {\n return this.manager.softRemove(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Recovers one or many given entities.\n */\n Repository.prototype.recover = function (entityOrEntities, options) {\n return this.manager.recover(this.metadata.target, entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n Repository.prototype.insert = function (entity) {\n return this.manager.insert(this.metadata.target, entity);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.update = function (criteria, partialEntity) {\n return this.manager.update(this.metadata.target, criteria, partialEntity);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.delete = function (criteria) {\n return this.manager.delete(this.metadata.target, criteria);\n };\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.softDelete = function (criteria) {\n return this.manager.softDelete(this.metadata.target, criteria);\n };\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n Repository.prototype.restore = function (criteria) {\n return this.manager.restore(this.metadata.target, criteria);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n Repository.prototype.count = function (optionsOrConditions) {\n return this.manager.count(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n Repository.prototype.find = function (optionsOrConditions) {\n return this.manager.find(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n Repository.prototype.findAndCount = function (optionsOrConditions) {\n return this.manager.findAndCount(this.metadata.target, optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n Repository.prototype.findByIds = function (ids, optionsOrConditions) {\n return this.manager.findByIds(this.metadata.target, ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOne = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOne(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n Repository.prototype.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.manager.findOneOrFail(this.metadata.target, optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n Repository.prototype.query = function (query, parameters) {\n return this.manager.query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n Repository.prototype.clear = function () {\n return this.manager.clear(this.metadata.target);\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.increment = function (conditions, propertyPath, value) {\n return this.manager.increment(this.metadata.target, conditions, propertyPath, value);\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n Repository.prototype.decrement = function (conditions, propertyPath, value) {\n return this.manager.decrement(this.metadata.target, conditions, propertyPath, value);\n };\n return Repository;\n}());\nexport { Repository };\n\n//# sourceMappingURL=Repository.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { Repository } from \"./Repository\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\n/**\n * Repository with additional functions to work with trees.\n *\n * @see Repository\n */\nvar TreeRepository = /** @class */ (function (_super) {\n __extends(TreeRepository, _super);\n function TreeRepository() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // todo: implement moving\n // todo: implement removing\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Gets complete trees for all roots in the table.\n */\n TreeRepository.prototype.findTrees = function () {\n return __awaiter(this, void 0, void 0, function () {\n var roots;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.findRoots()];\n case 1:\n roots = _a.sent();\n return [4 /*yield*/, Promise.all(roots.map(function (root) { return _this.findDescendantsTree(root); }))];\n case 2:\n _a.sent();\n return [2 /*return*/, roots];\n }\n });\n });\n };\n /**\n * Roots are entities that have no ancestors. Finds them all.\n */\n TreeRepository.prototype.findRoots = function () {\n var _this = this;\n var escapeAlias = function (alias) { return _this.manager.connection.driver.escape(alias); };\n var escapeColumn = function (column) { return _this.manager.connection.driver.escape(column); };\n var parentPropertyName = this.manager.connection.namingStrategy.joinColumnName(this.metadata.treeParentRelation.propertyName, this.metadata.primaryColumns[0].propertyName);\n return this.createQueryBuilder(\"treeEntity\")\n .where(escapeAlias(\"treeEntity\") + \".\" + escapeColumn(parentPropertyName) + \" IS NULL\")\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all children (descendants) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findDescendantsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildChildrenEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of descendants of the entity.\n */\n TreeRepository.prototype.countDescendants = function (entity) {\n return this\n .createDescendantsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get descendants of the entities in a tree.\n */\n TreeRepository.prototype.createDescendantsQueryBuilder = function (alias, closureTableAlias, entity) {\n var _this = this;\n // create shortcuts for better readability\n var escape = function (alias) { return _this.manager.connection.driver.escape(alias); };\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = \" + escape(alias) + \".\" + escape(column.referencedColumn.propertyPath);\n }).join(\" AND \");\n var parameters_1 = {};\n var whereCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n parameters_1[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return escape(closureTableAlias) + \".\" + escape(column.propertyPath) + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_1);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var whereCondition = alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND joined.\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_2 = {};\n var joinCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_2[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", whereCondition)\n .where(joinCondition, parameters_2);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE \" + subQuery.getQuery() + \" || '%'\";\n }\n else {\n return alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" LIKE CONCAT(\" + subQuery.getQuery() + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them all in a flat array.\n */\n TreeRepository.prototype.findAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getMany();\n };\n /**\n * Gets all parents (ancestors) of the given entity. Returns them in a tree - nested into each other.\n */\n TreeRepository.prototype.findAncestorsTree = function (entity) {\n var _this = this;\n // todo: throw exception if there is no column of this relation?\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getRawAndEntities()\n .then(function (entitiesAndScalars) {\n var relationMaps = _this.createRelationMaps(\"treeEntity\", entitiesAndScalars.raw);\n _this.buildParentEntityTree(entity, entitiesAndScalars.entities, relationMaps);\n return entity;\n });\n };\n /**\n * Gets number of ancestors of the entity.\n */\n TreeRepository.prototype.countAncestors = function (entity) {\n return this\n .createAncestorsQueryBuilder(\"treeEntity\", \"treeClosure\", entity)\n .getCount();\n };\n /**\n * Creates a query builder used to get ancestors of the entities in the tree.\n */\n TreeRepository.prototype.createAncestorsQueryBuilder = function (alias, closureTableAlias, entity) {\n // create shortcuts for better readability\n // const escape = (alias: string) => this.manager.connection.driver.escape(alias);\n var _this = this;\n if (this.metadata.treeType === \"closure-table\") {\n var joinCondition = this.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return closureTableAlias + \".\" + column.propertyPath + \" = \" + alias + \".\" + column.referencedColumn.propertyPath;\n }).join(\" AND \");\n var parameters_3 = {};\n var whereCondition = this.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n parameters_3[column.referencedColumn.propertyName] = column.referencedColumn.getEntityValue(entity);\n return closureTableAlias + \".\" + column.propertyPath + \" = :\" + column.referencedColumn.propertyName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)\n .where(whereCondition)\n .setParameters(parameters_3);\n }\n else if (this.metadata.treeType === \"nested-set\") {\n var joinCondition = \"joined.\" + this.metadata.nestedSetLeftColumn.propertyPath + \" BETWEEN \" +\n alias + \".\" + this.metadata.nestedSetLeftColumn.propertyPath + \" AND \" + alias + \".\" + this.metadata.nestedSetRightColumn.propertyPath;\n var parameters_4 = {};\n var whereCondition = this.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n var parameterName = joinColumn.referencedColumn.propertyPath.replace(\".\", \"_\");\n parameters_4[parameterName] = joinColumn.referencedColumn.getEntityValue(entity);\n return \"joined.\" + joinColumn.referencedColumn.propertyPath + \" = :\" + parameterName;\n }).join(\" AND \");\n return this\n .createQueryBuilder(alias)\n .innerJoin(this.metadata.targetName, \"joined\", joinCondition)\n .where(whereCondition, parameters_4);\n }\n else if (this.metadata.treeType === \"materialized-path\") {\n // example: SELECT * FROM category category WHERE (SELECT mpath FROM `category` WHERE id = 2) LIKE CONCAT(category.mpath, '%');\n return this\n .createQueryBuilder(alias)\n .where(function (qb) {\n var subQuery = qb.subQuery()\n .select(_this.metadata.targetName + \".\" + _this.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(_this.metadata.target, _this.metadata.targetName)\n .whereInIds(_this.metadata.getEntityIdMap(entity));\n qb.setNativeParameters(subQuery.expressionMap.nativeParameters);\n if (_this.manager.connection.driver instanceof AbstractSqliteDriver) {\n return subQuery.getQuery() + \" LIKE \" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \" || '%'\";\n }\n else {\n return subQuery.getQuery() + \" LIKE CONCAT(\" + alias + \".\" + _this.metadata.materializedPathColumn.propertyPath + \", '%')\";\n }\n });\n }\n throw new Error(\"Supported only in tree entities\");\n };\n /**\n * Moves entity to the children of then given entity.\n *\n move(entity: Entity, to: Entity): Promise {\n return Promise.resolve();\n } */\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n TreeRepository.prototype.createRelationMaps = function (alias, rawResults) {\n var _this = this;\n return rawResults.map(function (rawResult) {\n var joinColumn = _this.metadata.treeParentRelation.joinColumns[0];\n // fixes issue #2518, default to databaseName property when givenDatabaseName is not set\n var joinColumnName = joinColumn.givenDatabaseName || joinColumn.databaseName;\n var id = rawResult[alias + \"_\" + _this.metadata.primaryColumns[0].databaseName];\n var parentId = rawResult[alias + \"_\" + joinColumnName];\n return {\n id: _this.manager.connection.driver.prepareHydratedValue(id, _this.metadata.primaryColumns[0]),\n parentId: _this.manager.connection.driver.prepareHydratedValue(parentId, joinColumn),\n };\n });\n };\n TreeRepository.prototype.buildChildrenEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var childProperty = this.metadata.treeChildrenRelation.propertyName;\n var parentEntityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var childRelationMaps = relationMaps.filter(function (relationMap) { return relationMap.parentId === parentEntityId; });\n var childIds = new Set(childRelationMaps.map(function (relationMap) { return relationMap.id; }));\n entity[childProperty] = entities.filter(function (entity) { return childIds.has(_this.metadata.primaryColumns[0].getEntityValue(entity)); });\n entity[childProperty].forEach(function (childEntity) {\n _this.buildChildrenEntityTree(childEntity, entities, relationMaps);\n });\n };\n TreeRepository.prototype.buildParentEntityTree = function (entity, entities, relationMaps) {\n var _this = this;\n var parentProperty = this.metadata.treeParentRelation.propertyName;\n var entityId = this.metadata.primaryColumns[0].getEntityValue(entity);\n var parentRelationMap = relationMaps.find(function (relationMap) { return relationMap.id === entityId; });\n var parentEntity = entities.find(function (entity) {\n if (!parentRelationMap)\n return false;\n return _this.metadata.primaryColumns[0].getEntityValue(entity) === parentRelationMap.parentId;\n });\n if (parentEntity) {\n entity[parentProperty] = parentEntity;\n this.buildParentEntityTree(entity[parentProperty], entities, relationMaps);\n }\n };\n return TreeRepository;\n}(Repository));\nexport { TreeRepository };\n\n//# sourceMappingURL=TreeRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when relations specified in the find options were not found in the entities.\n*/\nvar FindRelationsNotFoundError = /** @class */ (function (_super) {\n __extends(FindRelationsNotFoundError, _super);\n function FindRelationsNotFoundError(notFoundRelations) {\n var _this = _super.call(this) || this;\n Object.setPrototypeOf(_this, FindRelationsNotFoundError.prototype);\n if (notFoundRelations.length === 1) {\n _this.message = \"Relation \\\"\" + notFoundRelations[0] + \"\\\" was not found; please check if it is correct and really exists in your entity.\";\n }\n else {\n _this.message = \"Relations \" + notFoundRelations.map(function (relation) { return \"\\\"\" + relation + \"\\\"\"; }).join(\", \") + \" were not found; please check if relations are correct and they exist in your entities.\";\n }\n return _this;\n }\n return FindRelationsNotFoundError;\n}(Error));\nexport { FindRelationsNotFoundError };\n\n//# sourceMappingURL=FindRelationsNotFoundError.js.map\n","import { FindRelationsNotFoundError } from \"../error/FindRelationsNotFoundError\";\nimport { shorten } from \"../util/StringUtils\";\n/**\n * Utilities to work with FindOptions.\n */\nvar FindOptionsUtils = /** @class */ (function () {\n function FindOptionsUtils() {\n }\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if given object is really instance of FindOneOptions interface.\n */\n FindOptionsUtils.isFindOneOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions &&\n (Array.isArray(possibleOptions.select) ||\n possibleOptions.where instanceof Object ||\n typeof possibleOptions.where === \"string\" ||\n Array.isArray(possibleOptions.relations) ||\n possibleOptions.join instanceof Object ||\n possibleOptions.order instanceof Object ||\n possibleOptions.cache instanceof Object ||\n typeof possibleOptions.cache === \"boolean\" ||\n typeof possibleOptions.cache === \"number\" ||\n possibleOptions.lock instanceof Object ||\n possibleOptions.loadRelationIds instanceof Object ||\n typeof possibleOptions.loadRelationIds === \"boolean\" ||\n typeof possibleOptions.loadEagerRelations === \"boolean\" ||\n typeof possibleOptions.withDeleted === \"boolean\" ||\n typeof possibleOptions.transaction === \"boolean\");\n };\n /**\n * Checks if given object is really instance of FindManyOptions interface.\n */\n FindOptionsUtils.isFindManyOptions = function (obj) {\n var possibleOptions = obj;\n return possibleOptions && (this.isFindOneOptions(possibleOptions) ||\n typeof possibleOptions.skip === \"number\" ||\n typeof possibleOptions.take === \"number\" ||\n typeof possibleOptions.skip === \"string\" ||\n typeof possibleOptions.take === \"string\");\n };\n /**\n * Checks if given object is really instance of FindOptions interface.\n */\n FindOptionsUtils.extractFindManyOptionsAlias = function (object) {\n if (this.isFindManyOptions(object) && object.join)\n return object.join.alias;\n return undefined;\n };\n /**\n * Applies give find many options to the given query builder.\n */\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder = function (qb, options) {\n if (this.isFindManyOptions(options))\n return this.applyOptionsToQueryBuilder(qb, options);\n if (options)\n return qb.where(options);\n return qb;\n };\n /**\n * Applies give find options to the given query builder.\n */\n FindOptionsUtils.applyOptionsToQueryBuilder = function (qb, options) {\n // if options are not set then simply return query builder. This is made for simplicity of usage.\n if (!options || (!this.isFindOneOptions(options) && !this.isFindManyOptions(options)))\n return qb;\n if (options.transaction === true) {\n qb.expressionMap.useTransaction = true;\n }\n if (!qb.expressionMap.mainAlias || !qb.expressionMap.mainAlias.hasMetadata)\n return qb;\n var metadata = qb.expressionMap.mainAlias.metadata;\n // apply all options from FindOptions\n if (options.select) {\n qb.select([]);\n options.select.forEach(function (select) {\n if (!metadata.findColumnWithPropertyPath(String(select)))\n throw new Error(select + \" column was not found in the \" + metadata.name + \" entity.\");\n qb.addSelect(qb.alias + \".\" + select);\n });\n }\n if (options.where)\n qb.where(options.where);\n if (options.skip)\n qb.skip(options.skip);\n if (options.take)\n qb.take(options.take);\n if (options.order)\n Object.keys(options.order).forEach(function (key) {\n var order = options.order[key];\n if (!metadata.findColumnWithPropertyPath(key))\n throw new Error(key + \" column was not found in the \" + metadata.name + \" entity.\");\n switch (order) {\n case 1:\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case -1:\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n case \"ASC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"ASC\");\n break;\n case \"DESC\":\n qb.addOrderBy(qb.alias + \".\" + key, \"DESC\");\n break;\n }\n });\n if (options.relations) {\n var allRelations = options.relations.map(function (relation) { return relation; });\n this.applyRelationsRecursively(qb, allRelations, qb.expressionMap.mainAlias.name, qb.expressionMap.mainAlias.metadata, \"\");\n // recursive removes found relations from allRelations array\n // if there are relations left in this array it means those relations were not found in the entity structure\n // so, we give an exception about not found relations\n if (allRelations.length > 0)\n throw new FindRelationsNotFoundError(allRelations);\n }\n if (options.join) {\n if (options.join.leftJoin)\n Object.keys(options.join.leftJoin).forEach(function (key) {\n qb.leftJoin(options.join.leftJoin[key], key);\n });\n if (options.join.innerJoin)\n Object.keys(options.join.innerJoin).forEach(function (key) {\n qb.innerJoin(options.join.innerJoin[key], key);\n });\n if (options.join.leftJoinAndSelect)\n Object.keys(options.join.leftJoinAndSelect).forEach(function (key) {\n qb.leftJoinAndSelect(options.join.leftJoinAndSelect[key], key);\n });\n if (options.join.innerJoinAndSelect)\n Object.keys(options.join.innerJoinAndSelect).forEach(function (key) {\n qb.innerJoinAndSelect(options.join.innerJoinAndSelect[key], key);\n });\n }\n if (options.cache) {\n if (options.cache instanceof Object) {\n var cache = options.cache;\n qb.cache(cache.id, cache.milliseconds);\n }\n else {\n qb.cache(options.cache);\n }\n }\n if (options.lock) {\n if (options.lock.mode === \"optimistic\") {\n qb.setLock(options.lock.mode, options.lock.version);\n }\n else if (options.lock.mode === \"pessimistic_read\" || options.lock.mode === \"pessimistic_write\" || options.lock.mode === \"dirty_read\" || options.lock.mode === \"pessimistic_partial_write\" || options.lock.mode === \"pessimistic_write_or_fail\") {\n var tableNames = options.lock.tables ? options.lock.tables.map(function (table) {\n var tableAlias = qb.expressionMap.aliases.find(function (alias) {\n return alias.metadata.tableNameWithoutPrefix === table;\n });\n if (!tableAlias) {\n throw new Error(\"\\\"\" + table + \"\\\" is not part of this query\");\n }\n return qb.escape(tableAlias.name);\n }) : undefined;\n qb.setLock(options.lock.mode, undefined, tableNames);\n }\n }\n if (options.withDeleted) {\n qb.withDeleted();\n }\n if (options.loadRelationIds === true) {\n qb.loadAllRelationIds();\n }\n else if (options.loadRelationIds instanceof Object) {\n qb.loadAllRelationIds(options.loadRelationIds);\n }\n return qb;\n };\n // -------------------------------------------------------------------------\n // Protected Static Methods\n // -------------------------------------------------------------------------\n /**\n * Adds joins for all relations and sub-relations of the given relations provided in the find options.\n */\n FindOptionsUtils.applyRelationsRecursively = function (qb, allRelations, alias, metadata, prefix) {\n var _this = this;\n // find all relations that match given prefix\n var matchedBaseRelations = [];\n if (prefix) {\n var regexp_1 = new RegExp(\"^\" + prefix.replace(\".\", \"\\\\.\") + \"\\\\.\");\n matchedBaseRelations = allRelations\n .filter(function (relation) { return relation.match(regexp_1); })\n .map(function (relation) { return relation.replace(regexp_1, \"\"); })\n .filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n else {\n matchedBaseRelations = allRelations.filter(function (relation) { return metadata.findRelationWithPropertyPath(relation); });\n }\n // go through all matched relations and add join for them\n matchedBaseRelations.forEach(function (relation) {\n // generate a relation alias\n var relationAlias = alias + \"__\" + relation;\n // shorten it if needed by the driver\n if (qb.connection.driver.maxAliasLength && relationAlias.length > qb.connection.driver.maxAliasLength) {\n relationAlias = shorten(relationAlias);\n }\n // add a join for the found relation\n var selection = alias + \".\" + relation;\n qb.leftJoinAndSelect(selection, relationAlias);\n // join the eager relations of the found relation\n var relMetadata = metadata.relations.find(function (metadata) { return metadata.propertyName === relation; });\n if (relMetadata) {\n _this.joinEagerRelations(qb, relationAlias, relMetadata.inverseEntityMetadata);\n }\n // remove added relations from the allRelations array, this is needed to find all not found relations at the end\n allRelations.splice(allRelations.indexOf(prefix ? prefix + \".\" + relation : relation), 1);\n // try to find sub-relations\n var join = qb.expressionMap.joinAttributes.find(function (join) { return join.entityOrProperty === selection; });\n _this.applyRelationsRecursively(qb, allRelations, join.alias.name, join.metadata, prefix ? prefix + \".\" + relation : relation);\n });\n };\n FindOptionsUtils.joinEagerRelations = function (qb, alias, metadata) {\n var _this = this;\n metadata.eagerRelations.forEach(function (relation) {\n var relationAlias = qb.connection.namingStrategy.eagerJoinRelationAlias(alias, relation.propertyPath);\n qb.leftJoinAndSelect(alias + \".\" + relation.propertyPath, relationAlias);\n _this.joinEagerRelations(qb, relationAlias, relation.inverseEntityMetadata);\n });\n };\n return FindOptionsUtils;\n}());\nexport { FindOptionsUtils };\n\n//# sourceMappingURL=FindOptionsUtils.js.map\n","/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToNewEntityTransformer = /** @class */ (function () {\n function PlainObjectToNewEntityTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToNewEntityTransformer.prototype.transform = function (newEntity, object, metadata, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // console.log(\"groupAndTransform entity:\", newEntity);\n // console.log(\"groupAndTransform object:\", object);\n this.groupAndTransform(newEntity, object, metadata, getLazyRelationsPromiseValue);\n // console.log(\"result:\", newEntity);\n return newEntity;\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n PlainObjectToNewEntityTransformer.prototype.groupAndTransform = function (entity, object, metadata, getLazyRelationsPromiseValue) {\n // console.log(\"groupAndTransform entity:\", entity);\n // console.log(\"groupAndTransform object:\", object);\n var _this = this;\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n // copy regular column properties from the given object\n metadata.nonVirtualColumns.forEach(function (column) {\n var objectColumnValue = column.getEntityValue(object);\n if (objectColumnValue !== undefined)\n column.setEntityValue(entity, objectColumnValue);\n });\n // // copy relation properties from the given object\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n var entityRelatedValue = relation.getEntityValue(entity);\n var objectRelatedValue = relation.getEntityValue(object, getLazyRelationsPromiseValue);\n if (objectRelatedValue === undefined)\n return;\n if (relation.isOneToMany || relation.isManyToMany) {\n if (!Array.isArray(objectRelatedValue))\n return;\n if (!entityRelatedValue) {\n entityRelatedValue = [];\n relation.setEntityValue(entity, entityRelatedValue);\n }\n objectRelatedValue.forEach(function (objectRelatedValueItem) {\n // check if we have this item from the merging object in the original entity we merge into\n var objectRelatedValueEntity = entityRelatedValue.find(function (entityRelatedValueItem) {\n return relation.inverseEntityMetadata.compareEntities(objectRelatedValueItem, entityRelatedValueItem);\n });\n // if such item already exist then merge new data into it, if its not we create a new entity and merge it into the array\n if (!objectRelatedValueEntity) {\n objectRelatedValueEntity = relation.inverseEntityMetadata.create();\n entityRelatedValue.push(objectRelatedValueEntity);\n }\n _this.groupAndTransform(objectRelatedValueEntity, objectRelatedValueItem, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n });\n }\n else {\n // if related object isn't an object (direct relation id for example)\n // we just set it to the entity relation, we don't need anything more from it\n // however we do it only if original entity does not have this relation set to object\n // to prevent full overriding of objects\n if (!(objectRelatedValue instanceof Object)) {\n if (!(entityRelatedValue instanceof Object))\n relation.setEntityValue(entity, objectRelatedValue);\n return;\n }\n if (!entityRelatedValue) {\n entityRelatedValue = relation.inverseEntityMetadata.create();\n relation.setEntityValue(entity, entityRelatedValue);\n }\n _this.groupAndTransform(entityRelatedValue, objectRelatedValue, relation.inverseEntityMetadata, getLazyRelationsPromiseValue);\n }\n });\n }\n };\n return PlainObjectToNewEntityTransformer;\n}());\nexport { PlainObjectToNewEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToNewEntityTransformer.js.map\n","import { __awaiter, __generator, __read } from \"tslib\";\n/**\n */\nvar LoadMapItem = /** @class */ (function () {\n function LoadMapItem(plainEntity, metadata, parentLoadMapItem, relation) {\n this.plainEntity = plainEntity;\n this.metadata = metadata;\n this.parentLoadMapItem = parentLoadMapItem;\n this.relation = relation;\n }\n Object.defineProperty(LoadMapItem.prototype, \"target\", {\n get: function () {\n return this.metadata.target;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(LoadMapItem.prototype, \"id\", {\n get: function () {\n return this.metadata.getEntityIdMixedMap(this.plainEntity);\n },\n enumerable: false,\n configurable: true\n });\n return LoadMapItem;\n}());\nvar LoadMap = /** @class */ (function () {\n function LoadMap() {\n this.loadMapItems = [];\n }\n Object.defineProperty(LoadMap.prototype, \"mainLoadMapItem\", {\n get: function () {\n return this.loadMapItems.find(function (item) { return !item.relation && !item.parentLoadMapItem; });\n },\n enumerable: false,\n configurable: true\n });\n LoadMap.prototype.addLoadMap = function (newLoadMap) {\n var item = this.loadMapItems.find(function (item) { return item.target === newLoadMap.target && item.id === newLoadMap.id; });\n if (!item)\n this.loadMapItems.push(newLoadMap);\n };\n LoadMap.prototype.fillEntities = function (target, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n var item = _this.loadMapItems.find(function (loadMapItem) {\n return loadMapItem.target === target && loadMapItem.metadata.compareEntities(entity, loadMapItem.plainEntity);\n });\n if (item)\n item.entity = entity;\n });\n };\n LoadMap.prototype.groupByTargetIds = function () {\n var groups = [];\n this.loadMapItems.forEach(function (loadMapItem) {\n var group = groups.find(function (group) { return group.target === loadMapItem.target; });\n if (!group) {\n group = { target: loadMapItem.target, ids: [] };\n groups.push(group);\n }\n group.ids.push(loadMapItem.id);\n });\n return groups;\n };\n return LoadMap;\n}());\n/**\n * Transforms plain old javascript object\n * Entity is constructed based on its entity metadata.\n */\nvar PlainObjectToDatabaseEntityTransformer = /** @class */ (function () {\n function PlainObjectToDatabaseEntityTransformer(manager) {\n this.manager = manager;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n PlainObjectToDatabaseEntityTransformer.prototype.transform = function (plainObject, metadata) {\n return __awaiter(this, void 0, void 0, function () {\n var loadMap, fillLoadMap;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if plain object does not have id then nothing to load really\n if (!metadata.hasAllPrimaryKeys(plainObject))\n return [2 /*return*/, Promise.reject(\"Given object does not have a primary column, cannot transform it to database entity.\")];\n loadMap = new LoadMap();\n fillLoadMap = function (entity, entityMetadata, parentLoadMapItem, relation) {\n var item = new LoadMapItem(entity, entityMetadata, parentLoadMapItem, relation);\n loadMap.addLoadMap(item);\n entityMetadata\n .extractRelationValuesFromEntity(entity, metadata.relations)\n .filter(function (value) { return value !== null && value !== undefined; })\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], value = _b[1], inverseEntityMetadata = _b[2];\n return fillLoadMap(value, inverseEntityMetadata, item, relation);\n });\n };\n fillLoadMap(plainObject, metadata);\n // load all entities and store them in the load map\n return [4 /*yield*/, Promise.all(loadMap.groupByTargetIds().map(function (targetWithIds) {\n return _this.manager\n .findByIds(targetWithIds.target, targetWithIds.ids)\n .then(function (entities) { return loadMap.fillEntities(targetWithIds.target, entities); });\n }))];\n case 1:\n // load all entities and store them in the load map\n _a.sent();\n // go through each item in the load map and set their entity relationship using metadata stored in load map\n loadMap.loadMapItems.forEach(function (loadMapItem) {\n if (!loadMapItem.relation ||\n !loadMapItem.entity ||\n !loadMapItem.parentLoadMapItem ||\n !loadMapItem.parentLoadMapItem.entity)\n return;\n if (loadMapItem.relation.isManyToMany || loadMapItem.relation.isOneToMany) {\n if (!loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName])\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = [];\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName].push(loadMapItem.entity);\n }\n else {\n loadMapItem.parentLoadMapItem.entity[loadMapItem.relation.propertyName] = loadMapItem.entity;\n }\n });\n return [2 /*return*/, loadMap.mainLoadMapItem ? loadMap.mainLoadMapItem.entity : undefined];\n }\n });\n });\n };\n return PlainObjectToDatabaseEntityTransformer;\n}());\nexport { PlainObjectToDatabaseEntityTransformer };\n\n//# sourceMappingURL=PlainObjectToDatabaseEntityTransformer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository was not found.\n */\nvar CustomRepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(CustomRepositoryNotFoundError, _super);\n function CustomRepositoryNotFoundError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryNotFoundError\";\n Object.setPrototypeOf(_this, CustomRepositoryNotFoundError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" was not found. \" +\n \"Did you forgot to put @EntityRepository decorator on it?\";\n return _this;\n }\n return CustomRepositoryNotFoundError;\n}(Error));\nexport { CustomRepositoryNotFoundError };\n\n//# sourceMappingURL=CustomRepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repositories that extend AbstractRepository classes does not have managed entity.\n */\nvar CustomRepositoryDoesNotHaveEntityError = /** @class */ (function (_super) {\n __extends(CustomRepositoryDoesNotHaveEntityError, _super);\n function CustomRepositoryDoesNotHaveEntityError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryDoesNotHaveEntityError\";\n Object.setPrototypeOf(_this, CustomRepositoryDoesNotHaveEntityError.prototype);\n _this.message = \"Custom repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" does not have managed entity. \" +\n \"Did you forget to specify entity for it @EntityRepository(MyEntity)? \";\n return _this;\n }\n return CustomRepositoryDoesNotHaveEntityError;\n}(Error));\nexport { CustomRepositoryDoesNotHaveEntityError };\n\n//# sourceMappingURL=CustomRepositoryDoesNotHaveEntityError.js.map\n","import { CustomRepositoryDoesNotHaveEntityError } from \"../error/CustomRepositoryDoesNotHaveEntityError\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\n/**\n * Provides abstract class for custom repositories that do not inherit from original orm Repository.\n * Contains all most-necessary methods to simplify code in the custom repository.\n * All methods are protected thus not exposed and it allows to create encapsulated custom repository.\n *\n * @experimental\n */\nvar AbstractRepository = /** @class */ (function () {\n function AbstractRepository() {\n }\n Object.defineProperty(AbstractRepository.prototype, \"repository\", {\n // -------------------------------------------------------------------------\n // Protected Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the original ORM repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AbstractRepository.prototype, \"treeRepository\", {\n /**\n * Gets the original ORM tree repository for the entity that is managed by this repository.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n get: function () {\n var target = this.getCustomRepositoryTarget(this);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getTreeRepository(target);\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query builder for the repository's entity that can be used to build a sql query.\n * If current repository does not manage any entity, then exception will be thrown.\n */\n AbstractRepository.prototype.createQueryBuilder = function (alias) {\n var target = this.getCustomRepositoryTarget(this.constructor);\n if (!target)\n throw new CustomRepositoryDoesNotHaveEntityError(this.constructor);\n return this.manager.getRepository(target).createQueryBuilder(alias);\n };\n /**\n * Creates a new query builder for the given entity that can be used to build a sql query.\n */\n AbstractRepository.prototype.createQueryBuilderFor = function (entity, alias) {\n return this.getRepositoryFor(entity).createQueryBuilder(alias);\n };\n /**\n * Gets the original ORM repository for the given entity class.\n */\n AbstractRepository.prototype.getRepositoryFor = function (entity) {\n return this.manager.getRepository(entity);\n };\n /**\n * Gets the original ORM tree repository for the given entity class.\n */\n AbstractRepository.prototype.getTreeRepositoryFor = function (entity) {\n return this.manager.getTreeRepository(entity);\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n /**\n * Gets custom repository's managed entity.\n * If given custom repository does not manage any entity then undefined will be returned.\n */\n AbstractRepository.prototype.getCustomRepositoryTarget = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n return entityRepositoryMetadataArgs.entity;\n };\n return AbstractRepository;\n}());\nexport { AbstractRepository };\n\n//# sourceMappingURL=AbstractRepository.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown if custom repository inherits Repository class however entity is not set in @EntityRepository decorator.\n */\nvar CustomRepositoryCannotInheritRepositoryError = /** @class */ (function (_super) {\n __extends(CustomRepositoryCannotInheritRepositoryError, _super);\n function CustomRepositoryCannotInheritRepositoryError(repository) {\n var _this = _super.call(this) || this;\n _this.name = \"CustomRepositoryCannotInheritRepositoryError\";\n Object.setPrototypeOf(_this, CustomRepositoryCannotInheritRepositoryError.prototype);\n _this.message = \"Custom entity repository \" + (repository instanceof Function ? repository.name : repository.constructor.name) + \" \" +\n \" cannot inherit Repository class without entity being set in the @EntityRepository decorator.\";\n return _this;\n }\n return CustomRepositoryCannotInheritRepositoryError;\n}(Error));\nexport { CustomRepositoryCannotInheritRepositoryError };\n\n//# sourceMappingURL=CustomRepositoryCannotInheritRepositoryError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotFoundError = /** @class */ (function (_super) {\n __extends(RepositoryNotFoundError, _super);\n function RepositoryNotFoundError(connectionName, entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotFoundError\";\n Object.setPrototypeOf(_this, RepositoryNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"No repository for \\\"\" + targetName + \"\\\" was found. Looks like this entity is not registered in \" +\n (\"current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return RepositoryNotFoundError;\n}(Error));\nexport { RepositoryNotFoundError };\n\n//# sourceMappingURL=RepositoryNotFoundError.js.map\n","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when repository for the given class is not found.\n */\nvar RepositoryNotTreeError = /** @class */ (function (_super) {\n __extends(RepositoryNotTreeError, _super);\n function RepositoryNotTreeError(entityClass) {\n var _this = _super.call(this) || this;\n _this.name = \"RepositoryNotTreeError\";\n Object.setPrototypeOf(_this, RepositoryNotTreeError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n _this.message = \"Repository of the \\\"\" + targetName + \"\\\" class is not a TreeRepository. Try to apply @Tree decorator on your entity.\";\n return _this;\n }\n return RepositoryNotTreeError;\n}(Error));\nexport { RepositoryNotTreeError };\n\n//# sourceMappingURL=RepositoryNotTreeError.js.map\n","import { TreeRepository } from \"./TreeRepository\";\nimport { Repository } from \"./Repository\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoRepository } from \"./MongoRepository\";\n/**\n * Factory used to create different types of repositories.\n */\nvar RepositoryFactory = /** @class */ (function () {\n function RepositoryFactory() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a repository.\n */\n RepositoryFactory.prototype.create = function (manager, metadata, queryRunner) {\n if (metadata.treeType) {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = new TreeRepository();\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n else {\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n var repository = void 0;\n if (manager.connection.driver instanceof MongoDriver) {\n repository = new MongoRepository();\n }\n else {\n repository = new Repository();\n }\n Object.assign(repository, {\n manager: manager,\n metadata: metadata,\n queryRunner: queryRunner,\n });\n return repository;\n }\n };\n return RepositoryFactory;\n}());\nexport { RepositoryFactory };\n\n//# sourceMappingURL=RepositoryFactory.js.map\n","import { __extends } from \"tslib\";\nvar TreeRepositoryNotSupportedError = /** @class */ (function (_super) {\n __extends(TreeRepositoryNotSupportedError, _super);\n function TreeRepositoryNotSupportedError(driver) {\n var _this = _super.call(this) || this;\n _this.name = \"TreeRepositoryNotSupportedError\";\n Object.setPrototypeOf(_this, TreeRepositoryNotSupportedError.prototype);\n _this.message = \"Tree repositories are not supported in \" + driver.options.type + \" driver.\";\n return _this;\n }\n return TreeRepositoryNotSupportedError;\n}(Error));\nexport { TreeRepositoryNotSupportedError };\n\n//# sourceMappingURL=TreeRepositoryNotSupportedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when method expects entity but instead something else is given.\n */\nvar MustBeEntityError = /** @class */ (function (_super) {\n __extends(MustBeEntityError, _super);\n function MustBeEntityError(operation, wrongValue) {\n var _this = _super.call(this) || this;\n _this.name = \"MustBeEntityError\";\n Object.setPrototypeOf(_this, MustBeEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be an entity, instead \\\"\" + wrongValue + \"\\\" is given.\";\n return _this;\n }\n return MustBeEntityError;\n}(Error));\nexport { MustBeEntityError };\n\n//# sourceMappingURL=MustBeEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nvar SubjectTopoligicalSorter = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectTopoligicalSorter(subjects) {\n this.subjects = __spreadArray([], __read(subjects)); // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sorts (orders) subjects in their topological order.\n */\n SubjectTopoligicalSorter.prototype.sort = function (direction) {\n var _this = this;\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length)\n return this.subjects;\n var sortedSubjects = [];\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n var junctionSubjects = this.subjects.filter(function (subject) { return !subject.entity && !subject.databaseEntity; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(junctionSubjects)));\n this.removeAlreadySorted(junctionSubjects);\n }\n // next we always insert entities with non-nullable relations, sort them first\n var nonNullableDependencies = this.getNonNullableDependencies();\n var sortedNonNullableEntityTargets = this.toposort(nonNullableDependencies);\n if (direction === \"insert\")\n sortedNonNullableEntityTargets = sortedNonNullableEntityTargets.reverse();\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // next sort all other entities\n // same process as in above but with other entities\n var otherDependencies = this.getDependencies();\n var sortedOtherEntityTargets = this.toposort(otherDependencies);\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse();\n sortedOtherEntityTargets.forEach(function (sortedEntityTarget) {\n var entityTargetSubjects = _this.subjects.filter(function (subject) { return subject.metadata.targetName === sortedEntityTarget; });\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(entityTargetSubjects)));\n _this.removeAlreadySorted(entityTargetSubjects);\n });\n // if we have something left in the subjects add them as well\n sortedSubjects.push.apply(sortedSubjects, __spreadArray([], __read(this.subjects)));\n return sortedSubjects;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n SubjectTopoligicalSorter.prototype.removeAlreadySorted = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.subjects.splice(_this.subjects.indexOf(subject), 1);\n });\n };\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n SubjectTopoligicalSorter.prototype.getUniqueMetadatas = function (subjects) {\n var metadatas = [];\n subjects.forEach(function (subject) {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata);\n });\n return metadatas;\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getNonNullableDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n if (relation.isNullable)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n SubjectTopoligicalSorter.prototype.getDependencies = function () {\n return this.metadatas.reduce(function (dependencies, metadata) {\n metadata.relationsWithJoinColumns.forEach(function (relation) {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata)\n return;\n dependencies.push([metadata.targetName, relation.inverseEntityMetadata.targetName]);\n });\n return dependencies;\n }, []);\n };\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n SubjectTopoligicalSorter.prototype.toposort = function (edges) {\n function uniqueNodes(arr) {\n var res = [];\n for (var i_1 = 0, len = arr.length; i_1 < len; i_1++) {\n var edge = arr[i_1];\n if (res.indexOf(edge[0]) < 0)\n res.push(edge[0]);\n if (res.indexOf(edge[1]) < 0)\n res.push(edge[1]);\n }\n return res;\n }\n var nodes = uniqueNodes(edges);\n var cursor = nodes.length, sorted = new Array(cursor), visited = {}, i = cursor;\n while (i--) {\n if (!visited[i])\n visit(nodes[i], i, []);\n }\n function visit(node, i, predecessors) {\n if (predecessors.indexOf(node) >= 0) {\n throw new Error(\"Cyclic dependency: \" + JSON.stringify(node)); // todo: better error\n }\n if (!~nodes.indexOf(node)) {\n throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(node));\n }\n if (visited[i])\n return;\n visited[i] = true;\n // outgoing edges\n var outgoing = edges.filter(function (edge) {\n return edge[0] === node;\n });\n if (i = outgoing.length) {\n var preds = predecessors.concat(node);\n do {\n var child = outgoing[--i][1];\n visit(child, nodes.indexOf(child), preds);\n } while (i);\n }\n sorted[--cursor] = node;\n }\n return sorted;\n };\n return SubjectTopoligicalSorter;\n}());\nexport { SubjectTopoligicalSorter };\n\n//# sourceMappingURL=SubjectTopoligicalSorter.js.map\n","import { DateUtils } from \"../util/DateUtils\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\";\n/**\n * Finds what columns are changed in the subject entities.\n */\nvar SubjectChangedColumnsComputer = /** @class */ (function () {\n function SubjectChangedColumnsComputer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Finds what columns are changed in the subject entities.\n */\n SubjectChangedColumnsComputer.prototype.compute = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n _this.computeDiffColumns(subject);\n _this.computeDiffRelationalColumns(subjects, subject);\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffColumns = function (subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.columns.forEach(function (column) {\n // ignore special columns\n if (column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return;\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.column === column; });\n if (changeMap) {\n subject.changeMaps.splice(subject.changeMaps.indexOf(changeMap), 1);\n }\n // get user provided value - column value from the user provided persisted entity\n var entityValue = column.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined)\n return;\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // skip transform database value for json / jsonb for comparison later on\n var shouldTransformDatabaseEntity = column.type !== \"json\" && column.type !== \"jsonb\";\n // get database value of the column\n var databaseValue = column.getEntityValue(subject.databaseEntity, shouldTransformDatabaseEntity);\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n var value = column.relationMetadata.getEntityValue(subject.entity);\n if (value !== null && value !== undefined)\n return;\n }\n var normalizedValue = entityValue;\n // normalize special values to make proper comparision\n if (entityValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = DateUtils.mixedDateToDateString(entityValue);\n break;\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = DateUtils.mixedDateToTimeString(entityValue);\n break;\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = DateUtils.mixedDateToUtcDatetimeString(entityValue);\n databaseValue = DateUtils.mixedDateToUtcDatetimeString(databaseValue);\n break;\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (OrmUtils.deepCompare(entityValue, databaseValue))\n return;\n break;\n case \"simple-array\":\n normalizedValue = DateUtils.simpleArrayToString(entityValue);\n databaseValue = DateUtils.simpleArrayToString(databaseValue);\n break;\n case \"simple-enum\":\n normalizedValue = DateUtils.simpleEnumToString(entityValue);\n databaseValue = DateUtils.simpleEnumToString(databaseValue);\n break;\n case \"simple-json\":\n normalizedValue = DateUtils.simpleJsonToString(entityValue);\n databaseValue = DateUtils.simpleJsonToString(databaseValue);\n break;\n }\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(column.transformer, entityValue);\n }\n }\n // if value is not changed - then do nothing\n if (normalizedValue === databaseValue)\n return;\n }\n subject.diffColumns.push(column);\n subject.changeMaps.push({\n column: column,\n value: entityValue\n });\n });\n };\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n SubjectChangedColumnsComputer.prototype.computeDiffRelationalColumns = function (allSubjects, subject) {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n subject.metadata.relationsWithJoinColumns.forEach(function (relation) {\n // get the related entity from the persisted entity\n var relatedEntity = relation.getEntityValue(subject.entity);\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined)\n return;\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n var relatedEntityRelationIdMap = relatedEntity;\n if (relatedEntityRelationIdMap !== null && relatedEntityRelationIdMap instanceof Object)\n relatedEntityRelationIdMap = relation.getRelationIdMap(relatedEntityRelationIdMap);\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n var databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);\n // if relation ids are equal then we don't need to update anything\n var areRelatedIdsEqual = OrmUtils.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);\n if (areRelatedIdsEqual) {\n return;\n }\n else {\n subject.diffRelations.push(relation);\n }\n }\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n var valueSubject = allSubjects.find(function (subject) { return subject.mustBeInserted && subject.entity === relatedEntity; });\n if (valueSubject)\n relatedEntity = valueSubject;\n // find if there is already a relation to be changed\n var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.relation === relation; });\n if (changeMap) { // and update its value if it was found\n changeMap.value = relatedEntity;\n }\n else { // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity\n });\n }\n });\n };\n return SubjectChangedColumnsComputer;\n}());\nexport { SubjectChangedColumnsComputer };\n\n//# sourceMappingURL=SubjectChangedColumnsComputer.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when operation is going to be executed on a subject without identifier.\n * This error should never be thrown, however it still presents to prevent user from updation or removing the whole table.\n * If this error occurs still, it most probably is an ORM internal problem which must be reported and fixed.\n */\nvar SubjectWithoutIdentifierError = /** @class */ (function (_super) {\n __extends(SubjectWithoutIdentifierError, _super);\n function SubjectWithoutIdentifierError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectWithoutIdentifierError\";\n Object.setPrototypeOf(_this, SubjectWithoutIdentifierError.prototype);\n _this.message = \"Internal error. Subject \" + subject.metadata.targetName + \" must have an identifier to perform operation. \" +\n \"Please report a github issue if you face this error.\";\n return _this;\n }\n return SubjectWithoutIdentifierError;\n}(Error));\nexport { SubjectWithoutIdentifierError };\n\n//# sourceMappingURL=SubjectWithoutIdentifierError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when same object is scheduled for remove and updation at the same time.\n */\nvar SubjectRemovedAndUpdatedError = /** @class */ (function (_super) {\n __extends(SubjectRemovedAndUpdatedError, _super);\n function SubjectRemovedAndUpdatedError(subject) {\n var _this = _super.call(this) || this;\n _this.name = \"SubjectRemovedAndUpdatedError\";\n Object.setPrototypeOf(_this, SubjectRemovedAndUpdatedError.prototype);\n _this.message = \"Removed entity \\\"\" + subject.metadata.name + \"\\\" is also scheduled for update operation. \" +\n \"Make sure you are not updating and removing same object (note that update or remove may be executed by cascade operations).\";\n return _this;\n }\n return SubjectRemovedAndUpdatedError;\n}(Error));\nexport { SubjectRemovedAndUpdatedError };\n\n//# sourceMappingURL=SubjectRemovedAndUpdatedError.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Executes subject operations for nested set tree entities.\n */\nvar NestedSetSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NestedSetSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n NestedSetSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var escape, tableName, leftColumnName, rightColumnName, parent, parentId, parentNsRight;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n escape = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.tablePath);\n leftColumnName = escape(subject.metadata.nestedSetLeftColumn.databaseName);\n rightColumnName = escape(subject.metadata.nestedSetRightColumn.databaseName);\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentNsRight = undefined;\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.nestedSetRightColumn.propertyPath, \"right\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) {\n var value = result ? result[\"right\"] : undefined;\n // CockroachDB returns numeric types as string\n return typeof value === \"string\" ? parseInt(value) : value;\n })];\n case 1:\n parentNsRight = _a.sent();\n _a.label = 2;\n case 2:\n if (!(parentNsRight !== undefined)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.queryRunner.query(\"UPDATE \" + tableName + \" SET \" +\n (leftColumnName + \" = CASE WHEN \" + leftColumnName + \" > \" + parentNsRight + \" THEN \" + leftColumnName + \" + 2 ELSE \" + leftColumnName + \" END,\") +\n (rightColumnName + \" = \" + rightColumnName + \" + 2 \") +\n (\"WHERE \" + rightColumnName + \" >= \" + parentNsRight))];\n case 3:\n _a.sent();\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(parentNsRight), subject.metadata.nestedSetRightColumn.createValueMap(parentNsRight + 1));\n return [3 /*break*/, 5];\n case 4:\n OrmUtils.mergeDeep(subject.insertedValueSet, subject.metadata.nestedSetLeftColumn.createValueMap(1), subject.metadata.nestedSetRightColumn.createValueMap(2));\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n NestedSetSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return NestedSetSubjectExecutor;\n}());\nexport { NestedSetSubjectExecutor };\n\n//# sourceMappingURL=NestedSetSubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user saves tree children entity but its parent is not saved yet.\n*/\nvar CannotAttachTreeChildrenEntityError = /** @class */ (function (_super) {\n __extends(CannotAttachTreeChildrenEntityError, _super);\n function CannotAttachTreeChildrenEntityError(entityName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotAttachTreeChildrenEntityError\";\n Object.setPrototypeOf(_this, CannotAttachTreeChildrenEntityError.prototype);\n _this.message = \"Cannot attach entity \\\"\" + entityName + \"\\\" to its parent. Please make sure parent is saved in the database before saving children nodes.\";\n return _this;\n }\n return CannotAttachTreeChildrenEntityError;\n}(Error));\nexport { CannotAttachTreeChildrenEntityError };\n\n//# sourceMappingURL=CannotAttachTreeChildrenEntityError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { CannotAttachTreeChildrenEntityError } from \"../../error/CannotAttachTreeChildrenEntityError\";\n/**\n * Executes subject operations for closure entities.\n */\nvar ClosureSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Removes all children of the given subject's entity.\n\n async deleteChildrenOf(subject: Subject) {\n // const relationValue = subject.metadata.treeParentRelation.getEntityValue(subject.databaseEntity);\n // console.log(\"relationValue: \", relationValue);\n // this.queryRunner.manager\n // .createQueryBuilder()\n // .from(subject.metadata.closureJunctionTable.target, \"tree\")\n // .where(\"tree.\");\n }*/\n /**\n * Executes operations when subject is being inserted.\n */\n ClosureSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var closureJunctionInsertMap, parent, escape_1, tableName, ancestorColumnNames, descendantColumnNames, firstQueryParameters_1, childEntityIdValues_1, childEntityIds1, whereCondition;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n closureJunctionInsertMap = {};\n subject.metadata.closureJunctionTable.ancestorColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n subject.metadata.closureJunctionTable.descendantColumns.forEach(function (column) {\n closureJunctionInsertMap[column.databaseName] = subject.identifier;\n });\n // insert values into the closure junction table\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.closureJunctionTable.tablePath)\n .values(closureJunctionInsertMap)\n .updateEntity(false)\n .callListeners(false)\n .execute()];\n case 1:\n // insert values into the closure junction table\n _a.sent();\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n if (!parent) return [3 /*break*/, 3];\n escape_1 = function (alias) { return _this.queryRunner.connection.driver.escape(alias); };\n tableName = this.getTableName(subject.metadata.closureJunctionTable.tablePath);\n ancestorColumnNames = subject.metadata.closureJunctionTable.ancestorColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n descendantColumnNames = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n return escape_1(column.databaseName);\n });\n firstQueryParameters_1 = [];\n childEntityIdValues_1 = subject.metadata.primaryColumns.map(function (column) { return column.getEntityValue(subject.insertedValueSet); });\n childEntityIds1 = subject.metadata.primaryColumns.map(function (column, index) {\n firstQueryParameters_1.push(childEntityIdValues_1[index]);\n return _this.queryRunner.connection.driver.createParameter(\"child_entity_\" + column.databaseName, firstQueryParameters_1.length - 1);\n });\n whereCondition = subject.metadata.closureJunctionTable.descendantColumns.map(function (column) {\n var columnName = escape_1(column.databaseName);\n var parentId = column.referencedColumn.getEntityValue(parent);\n if (!parentId)\n throw new CannotAttachTreeChildrenEntityError(subject.metadata.name);\n firstQueryParameters_1.push(parentId);\n var parameterName = _this.queryRunner.connection.driver.createParameter(\"parent_entity_\" + column.referencedColumn.databaseName, firstQueryParameters_1.length - 1);\n return columnName + \" = \" + parameterName;\n }).join(\", \");\n return [4 /*yield*/, this.queryRunner.query(\"INSERT INTO \" + tableName + \" (\" + __spreadArray(__spreadArray([], __read(ancestorColumnNames)), __read(descendantColumnNames)).join(\", \") + \") \" +\n (\"SELECT \" + ancestorColumnNames.join(\", \") + \", \" + childEntityIds1.join(\", \") + \" FROM \" + tableName + \" WHERE \" + whereCondition), firstQueryParameters_1)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets escaped table name with schema name if SqlServer or Postgres driver used with custom\n * schema name, otherwise returns escaped table name.\n */\n ClosureSubjectExecutor.prototype.getTableName = function (tablePath) {\n var _this = this;\n return tablePath.split(\".\")\n .map(function (i) {\n // this condition need because in SQL Server driver when custom database name was specified and schema name was not, we got `dbName..tableName` string, and doesn't need to escape middle empty string\n if (i === \"\")\n return i;\n return _this.queryRunner.connection.driver.escape(i);\n }).join(\".\");\n };\n return ClosureSubjectExecutor;\n}());\nexport { ClosureSubjectExecutor };\n\n//# sourceMappingURL=ClosureSubjectExecutor.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Executes subject operations for materialized-path tree entities.\n */\nvar MaterializedPathSubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function MaterializedPathSubjectExecutor(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes operations when subject is being inserted.\n */\n MaterializedPathSubjectExecutor.prototype.insert = function (subject) {\n return __awaiter(this, void 0, void 0, function () {\n var parent, parentId, parentPath, insertedEntityId;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n parent = subject.metadata.treeParentRelation.getEntityValue(subject.entity);\n if (!parent && subject.parentSubject && subject.parentSubject.entity) // if entity was attached via children\n parent = subject.parentSubject.insertedValueSet ? subject.parentSubject.insertedValueSet : subject.parentSubject.entity;\n parentId = subject.metadata.getEntityIdMap(parent);\n parentPath = \"\";\n if (!parentId) return [3 /*break*/, 2];\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(subject.metadata.targetName + \".\" + subject.metadata.materializedPathColumn.propertyPath, \"path\")\n .from(subject.metadata.target, subject.metadata.targetName)\n .whereInIds(parentId)\n .getRawOne()\n .then(function (result) { return result ? result[\"path\"] : undefined; })];\n case 1:\n parentPath = _b.sent();\n _b.label = 2;\n case 2:\n insertedEntityId = subject.metadata.treeParentRelation.joinColumns.map(function (joinColumn) {\n return joinColumn.referencedColumn.getEntityValue(subject.insertedValueSet);\n }).join(\"_\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set((_a = {},\n _a[subject.metadata.materializedPathColumn.propertyPath] = parentPath + insertedEntityId + \".\",\n _a))\n .where(subject.identifier)\n .execute()];\n case 3:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return MaterializedPathSubjectExecutor;\n}());\nexport { MaterializedPathSubjectExecutor };\n\n//# sourceMappingURL=MaterializedPathSubjectExecutor.js.map\n","import { __awaiter, __generator, __read, __values } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { SubjectTopoligicalSorter } from \"./SubjectTopoligicalSorter\";\nimport { SubjectChangedColumnsComputer } from \"./SubjectChangedColumnsComputer\";\nimport { SubjectWithoutIdentifierError } from \"../error/SubjectWithoutIdentifierError\";\nimport { SubjectRemovedAndUpdatedError } from \"../error/SubjectRemovedAndUpdatedError\";\nimport { MongoQueryRunner } from \"../driver/mongodb/MongoQueryRunner\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { NestedSetSubjectExecutor } from \"./tree/NestedSetSubjectExecutor\";\nimport { ClosureSubjectExecutor } from \"./tree/ClosureSubjectExecutor\";\nimport { MaterializedPathSubjectExecutor } from \"./tree/MaterializedPathSubjectExecutor\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Executes all database operations (inserts, updated, deletes) that must be executed\n * with given persistence subjects.\n */\nvar SubjectExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SubjectExecutor(queryRunner, subjects, options) {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if executor has any operations to execute (e.g. has insert / update / delete operations to be executed).\n */\n this.hasExecutableOperations = false;\n /**\n * Subjects that must be inserted.\n */\n this.insertSubjects = [];\n /**\n * Subjects that must be updated.\n */\n this.updateSubjects = [];\n /**\n * Subjects that must be removed.\n */\n this.removeSubjects = [];\n /**\n * Subjects that must be soft-removed.\n */\n this.softRemoveSubjects = [];\n /**\n * Subjects that must be recovered.\n */\n this.recoverSubjects = [];\n this.queryRunner = queryRunner;\n this.allSubjects = subjects;\n this.options = options;\n this.validate();\n this.recompute();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes all operations over given array of subjects.\n * Executes queries using given query runner.\n */\n SubjectExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var broadcasterResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n broadcasterResult = undefined;\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 2];\n // console.time(\".broadcastBeforeEventsForAll\");\n broadcasterResult = this.broadcastBeforeEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n // since event listeners and subscribers can call save methods and/or trigger entity changes we need to recompute operational subjects\n // recompute only in the case if any listener or subscriber was really executed\n if (broadcasterResult && broadcasterResult.count > 0) {\n // console.time(\".recompute\");\n this.insertSubjects.forEach(function (subject) { return subject.recompute(); });\n this.updateSubjects.forEach(function (subject) { return subject.recompute(); });\n this.removeSubjects.forEach(function (subject) { return subject.recompute(); });\n this.softRemoveSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recoverSubjects.forEach(function (subject) { return subject.recompute(); });\n this.recompute();\n // console.timeEnd(\".recompute\");\n }\n // make sure our insert subjects are sorted (using topological sorting) to make cascade inserts work properly\n // console.timeEnd(\"prepare\");\n // execute all insert operations\n // console.time(\".insertion\");\n this.insertSubjects = new SubjectTopoligicalSorter(this.insertSubjects).sort(\"insert\");\n return [4 /*yield*/, this.executeInsertOperations()];\n case 3:\n _a.sent();\n // console.timeEnd(\".insertion\");\n // recompute update operations since insertion can create updation operations for the\n // properties it wasn't able to handle on its own (referenced columns)\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n // execute update operations\n // console.time(\".updation\");\n return [4 /*yield*/, this.executeUpdateOperations()];\n case 4:\n // execute update operations\n // console.time(\".updation\");\n _a.sent();\n // console.timeEnd(\".updation\");\n // make sure our remove subjects are sorted (using topological sorting) when multiple entities are passed for the removal\n // console.time(\".removal\");\n this.removeSubjects = new SubjectTopoligicalSorter(this.removeSubjects).sort(\"delete\");\n return [4 /*yield*/, this.executeRemoveOperations()];\n case 5:\n _a.sent();\n // console.timeEnd(\".removal\");\n // recompute soft-remove operations\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n // execute soft-remove operations\n return [4 /*yield*/, this.executeSoftRemoveOperations()];\n case 6:\n // execute soft-remove operations\n _a.sent();\n // recompute recover operations\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n // execute recover operations\n return [4 /*yield*/, this.executeRecoverOperations()];\n case 7:\n // execute recover operations\n _a.sent();\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n return [4 /*yield*/, this.updateSpecialColumnsInPersistedEntities()];\n case 8:\n // update all special columns in persisted entities, like inserted id or remove ids from the removed entities\n // console.time(\".updateSpecialColumnsInPersistedEntities\");\n _a.sent();\n if (!(!this.options || this.options.listeners !== false)) return [3 /*break*/, 10];\n // console.time(\".broadcastAfterEventsForAll\");\n broadcasterResult = this.broadcastAfterEventsForAll();\n if (!(broadcasterResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcasterResult.promises)];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Validates all given subjects.\n */\n SubjectExecutor.prototype.validate = function () {\n this.allSubjects.forEach(function (subject) {\n if (subject.mustBeUpdated && subject.mustBeRemoved)\n throw new SubjectRemovedAndUpdatedError(subject);\n });\n };\n /**\n * Performs entity re-computations - finds changed columns, re-builds insert/update/remove subjects.\n */\n SubjectExecutor.prototype.recompute = function () {\n new SubjectChangedColumnsComputer().compute(this.allSubjects);\n this.insertSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeInserted; });\n this.updateSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeUpdated; });\n this.removeSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRemoved; });\n this.softRemoveSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeSoftRemoved; });\n this.recoverSubjects = this.allSubjects.filter(function (subject) { return subject.mustBeRecovered; });\n this.hasExecutableOperations = this.insertSubjects.length > 0 || this.updateSubjects.length > 0 || this.removeSubjects.length > 0 || this.softRemoveSubjects.length > 0 || this.recoverSubjects.length > 0;\n };\n /**\n * Broadcasts \"BEFORE_INSERT\", \"BEFORE_UPDATE\", \"BEFORE_REMOVE\" events for all given subjects.\n */\n SubjectExecutor.prototype.broadcastBeforeEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastBeforeUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Broadcasts \"AFTER_INSERT\", \"AFTER_UPDATE\", \"AFTER_REMOVE\" events for all given subjects.\n * Returns void if there wasn't any listener or subscriber executed.\n * Note: this method has a performance-optimized code organization.\n */\n SubjectExecutor.prototype.broadcastAfterEventsForAll = function () {\n var _this = this;\n var result = new BroadcasterResult();\n if (this.insertSubjects.length)\n this.insertSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterInsertEvent(result, subject.metadata, subject.entity); });\n if (this.updateSubjects.length)\n this.updateSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.removeSubjects.length)\n this.removeSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterRemoveEvent(result, subject.metadata, subject.entity, subject.databaseEntity); });\n if (this.softRemoveSubjects.length)\n this.softRemoveSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n if (this.recoverSubjects.length)\n this.recoverSubjects.forEach(function (subject) { return _this.queryRunner.broadcaster.broadcastAfterUpdateEvent(result, subject.metadata, subject.entity, subject.databaseEntity, subject.diffColumns, subject.diffRelations); });\n return result;\n };\n /**\n * Executes insert operations.\n */\n SubjectExecutor.prototype.executeInsertOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedInsertSubjects, groupedInsertSubjectKeys, _loop_1, this_1, groupedInsertSubjectKeys_1, groupedInsertSubjectKeys_1_1, groupName, e_1_1;\n var e_1, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.insertSubjects, \"insert\"), 2), groupedInsertSubjects = _a[0], groupedInsertSubjectKeys = _a[1];\n _loop_1 = function (groupName) {\n var subjects, bulkInsertMaps, bulkInsertSubjects, singleInsertSubjects, manager, insertResult_1, insertResult_2, _loop_2, singleInsertSubjects_1, singleInsertSubjects_1_1, subject, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n subjects = groupedInsertSubjects[groupName];\n bulkInsertMaps = [];\n bulkInsertSubjects = [];\n singleInsertSubjects = [];\n if (this_1.queryRunner.connection.driver instanceof MongoDriver) {\n subjects.forEach(function (subject) {\n if (subject.metadata.createDateColumn && subject.entity) {\n subject.entity[subject.metadata.createDateColumn.databaseName] = new Date();\n }\n if (subject.metadata.updateDateColumn && subject.entity) {\n subject.entity[subject.metadata.updateDateColumn.databaseName] = new Date();\n }\n subject.createValueSetAndPopChangeMap();\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.entity);\n });\n }\n else if (this_1.queryRunner.connection.driver instanceof OracleDriver) {\n subjects.forEach(function (subject) {\n singleInsertSubjects.push(subject);\n });\n }\n else {\n subjects.forEach(function (subject) {\n // we do not insert in bulk in following cases:\n // - when there is no values in insert (only defaults are inserted), since we cannot use DEFAULT VALUES expression for multiple inserted rows\n // - when entity is a tree table, since tree tables require extra operation per each inserted row\n // - when oracle is used, since oracle's bulk insertion is very bad\n if (subject.changeMaps.length === 0 ||\n subject.metadata.treeType ||\n _this.queryRunner.connection.driver instanceof OracleDriver ||\n _this.queryRunner.connection.driver instanceof SapDriver) {\n singleInsertSubjects.push(subject);\n }\n else {\n bulkInsertSubjects.push(subject);\n bulkInsertMaps.push(subject.createValueSetAndPopChangeMap());\n }\n });\n }\n if (!(this_1.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n manager = this_1.queryRunner.manager;\n return [4 /*yield*/, manager.insert(subjects[0].metadata.target, bulkInsertMaps)];\n case 1:\n insertResult_1 = _e.sent();\n subjects.forEach(function (subject, index) {\n subject.identifier = insertResult_1.identifiers[index];\n subject.generatedMap = insertResult_1.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n return [3 /*break*/, 12];\n case 2:\n if (!(bulkInsertMaps.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subjects[0].metadata.target)\n .values(bulkInsertMaps)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()];\n case 3:\n insertResult_2 = _e.sent();\n bulkInsertSubjects.forEach(function (subject, index) {\n subject.identifier = insertResult_2.identifiers[index];\n subject.generatedMap = insertResult_2.generatedMaps[index];\n subject.insertedValueSet = bulkInsertMaps[index];\n });\n _e.label = 4;\n case 4:\n if (!(singleInsertSubjects.length > 0)) return [3 /*break*/, 12];\n _loop_2 = function (subject) {\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n subject.insertedValueSet = subject.createValueSetAndPopChangeMap(); // important to have because query builder sets inserted values into it\n if (!(subject.metadata.treeType === \"nested-set\")) return [3 /*break*/, 2];\n return [4 /*yield*/, new NestedSetSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 1:\n _f.sent();\n _f.label = 2;\n case 2: return [4 /*yield*/, this_1.queryRunner\n .manager\n .createQueryBuilder()\n .insert()\n .into(subject.metadata.target)\n .values(subject.insertedValueSet)\n .updateEntity(this_1.options && this_1.options.reload === false ? false : true)\n .callListeners(false)\n .execute()\n .then(function (insertResult) {\n subject.identifier = insertResult.identifiers[0];\n subject.generatedMap = insertResult.generatedMaps[0];\n })];\n case 3:\n _f.sent();\n if (!(subject.metadata.treeType === \"closure-table\")) return [3 /*break*/, 5];\n return [4 /*yield*/, new ClosureSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 4:\n _f.sent();\n return [3 /*break*/, 7];\n case 5:\n if (!(subject.metadata.treeType === \"materialized-path\")) return [3 /*break*/, 7];\n return [4 /*yield*/, new MaterializedPathSubjectExecutor(this_1.queryRunner).insert(subject)];\n case 6:\n _f.sent();\n _f.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n };\n _e.label = 5;\n case 5:\n _e.trys.push([5, 10, 11, 12]);\n singleInsertSubjects_1 = (e_2 = void 0, __values(singleInsertSubjects)), singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n _e.label = 6;\n case 6:\n if (!!singleInsertSubjects_1_1.done) return [3 /*break*/, 9];\n subject = singleInsertSubjects_1_1.value;\n return [5 /*yield**/, _loop_2(subject)];\n case 7:\n _e.sent();\n _e.label = 8;\n case 8:\n singleInsertSubjects_1_1 = singleInsertSubjects_1.next();\n return [3 /*break*/, 6];\n case 9: return [3 /*break*/, 12];\n case 10:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 12];\n case 11:\n try {\n if (singleInsertSubjects_1_1 && !singleInsertSubjects_1_1.done && (_d = singleInsertSubjects_1.return)) _d.call(singleInsertSubjects_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 12:\n subjects.forEach(function (subject) {\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n });\n return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 8]);\n groupedInsertSubjectKeys_1 = __values(groupedInsertSubjectKeys), groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedInsertSubjectKeys_1_1.done) return [3 /*break*/, 5];\n groupName = groupedInsertSubjectKeys_1_1.value;\n return [5 /*yield**/, _loop_1(groupName)];\n case 3:\n _c.sent();\n _c.label = 4;\n case 4:\n groupedInsertSubjectKeys_1_1 = groupedInsertSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (groupedInsertSubjectKeys_1_1 && !groupedInsertSubjectKeys_1_1.done && (_b = groupedInsertSubjectKeys_1.return)) _b.call(groupedInsertSubjectKeys_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all given subjects in the database.\n */\n SubjectExecutor.prototype.executeUpdateOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.updateSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, updateMap, updateQueryBuilder, updateResult, updateGeneratedMap_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n updateMap = subject.createValueSetAndPopChangeMap();\n updateQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .update(subject.metadata.target)\n .set(updateMap)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n updateQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n updateQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, updateQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n updateGeneratedMap_1 = updateResult.generatedMaps[0];\n if (updateGeneratedMap_1) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(updateGeneratedMap_1);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(updateGeneratedMap_1, preparedValue);\n }\n });\n if (!subject.generatedMap) {\n subject.generatedMap = {};\n }\n Object.assign(subject.generatedMap, updateGeneratedMap_1);\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all given subjects from the database.\n *\n * todo: we need to apply topological sort here as well\n */\n SubjectExecutor.prototype.executeRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, groupedRemoveSubjects, groupedRemoveSubjectKeys, groupedRemoveSubjectKeys_1, groupedRemoveSubjectKeys_1_1, groupName, subjects, deleteMaps, manager, e_3_1;\n var e_3, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = __read(this.groupBulkSubjects(this.removeSubjects, \"delete\"), 2), groupedRemoveSubjects = _a[0], groupedRemoveSubjectKeys = _a[1];\n _c.label = 1;\n case 1:\n _c.trys.push([1, 8, 9, 10]);\n groupedRemoveSubjectKeys_1 = __values(groupedRemoveSubjectKeys), groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n _c.label = 2;\n case 2:\n if (!!groupedRemoveSubjectKeys_1_1.done) return [3 /*break*/, 7];\n groupName = groupedRemoveSubjectKeys_1_1.value;\n subjects = groupedRemoveSubjects[groupName];\n deleteMaps = subjects.map(function (subject) {\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n return subject.identifier;\n });\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 4];\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.delete(subjects[0].metadata.target, deleteMaps)];\n case 3:\n _c.sent();\n return [3 /*break*/, 6];\n case 4: \n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n return [4 /*yield*/, this.queryRunner\n .manager\n .createQueryBuilder()\n .delete()\n .from(subjects[0].metadata.target)\n .where(deleteMaps)\n .callListeners(false)\n .execute()];\n case 5:\n // here we execute our deletion query\n // we don't need to specify entities and set update entity to true since the only thing query builder\n // will do for use is a primary keys deletion which is handled by us later once persistence is finished\n // also, we disable listeners because we call them on our own in persistence layer\n _c.sent();\n _c.label = 6;\n case 6:\n groupedRemoveSubjectKeys_1_1 = groupedRemoveSubjectKeys_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_3_1 = _c.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (groupedRemoveSubjectKeys_1_1 && !groupedRemoveSubjectKeys_1_1.done && (_b = groupedRemoveSubjectKeys_1.return)) _b.call(groupedRemoveSubjectKeys_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Soft-removes all given subjects in the database.\n */\n SubjectExecutor.prototype.executeSoftRemoveOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.softRemoveSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = new Date();\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .softDelete()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Recovers all given subjects in the database.\n */\n SubjectExecutor.prototype.executeRecoverOperations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(this.recoverSubjects.map(function (subject) { return __awaiter(_this, void 0, void 0, function () {\n var partialEntity, manager, softDeleteQueryBuilder, updateResult;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!subject.identifier)\n throw new SubjectWithoutIdentifierError(subject);\n if (!(this.queryRunner instanceof MongoQueryRunner)) return [3 /*break*/, 2];\n partialEntity = OrmUtils.mergeDeep({}, subject.entity);\n if (subject.metadata.objectIdColumn && subject.metadata.objectIdColumn.propertyName) {\n delete partialEntity[subject.metadata.objectIdColumn.propertyName];\n }\n if (subject.metadata.createDateColumn && subject.metadata.createDateColumn.propertyName) {\n delete partialEntity[subject.metadata.createDateColumn.propertyName];\n }\n if (subject.metadata.updateDateColumn && subject.metadata.updateDateColumn.propertyName) {\n partialEntity[subject.metadata.updateDateColumn.propertyName] = new Date();\n }\n if (subject.metadata.deleteDateColumn && subject.metadata.deleteDateColumn.propertyName) {\n partialEntity[subject.metadata.deleteDateColumn.propertyName] = null;\n }\n manager = this.queryRunner.manager;\n return [4 /*yield*/, manager.update(subject.metadata.target, subject.identifier, partialEntity)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n softDeleteQueryBuilder = this.queryRunner\n .manager\n .createQueryBuilder()\n .restore()\n .from(subject.metadata.target)\n .updateEntity(this.options && this.options.reload === false ? false : true)\n .callListeners(false);\n if (subject.entity) {\n softDeleteQueryBuilder.whereEntity(subject.identifier);\n }\n else { // in this case identifier is just conditions object to update by\n softDeleteQueryBuilder.where(subject.identifier);\n }\n return [4 /*yield*/, softDeleteQueryBuilder.execute()];\n case 3:\n updateResult = _a.sent();\n subject.generatedMap = updateResult.generatedMaps[0];\n if (subject.generatedMap) {\n subject.metadata.columns.forEach(function (column) {\n var value = column.getEntityValue(subject.generatedMap);\n if (value !== undefined && value !== null) {\n var preparedValue = _this.queryRunner.connection.driver.prepareHydratedValue(value, column);\n column.setEntityValue(subject.generatedMap, preparedValue);\n }\n });\n }\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInPersistedEntities = function () {\n var _this = this;\n // update inserted entity properties\n if (this.insertSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.insertSubjects);\n // update updated entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);\n // update soft-removed entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);\n // update recovered entity properties\n if (this.updateSubjects.length)\n this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);\n // remove ids from the entities that were removed\n if (this.removeSubjects.length) {\n this.removeSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.primaryColumns.forEach(function (primaryColumn) {\n primaryColumn.setEntityValue(subject.entity, undefined);\n });\n });\n }\n // other post-persist updations\n this.allSubjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n subject.metadata.relationIds.forEach(function (relationId) {\n relationId.setValue(subject.entity);\n });\n // mongo _id remove\n if (_this.queryRunner instanceof MongoQueryRunner) {\n if (subject.metadata.objectIdColumn\n && subject.metadata.objectIdColumn.databaseName\n && subject.metadata.objectIdColumn.databaseName !== subject.metadata.objectIdColumn.propertyName) {\n delete subject.entity[subject.metadata.objectIdColumn.databaseName];\n }\n }\n });\n };\n /**\n * Updates all special columns of the saving entities (create date, update date, version, etc.).\n * Also updates nullable columns and columns with default values.\n */\n SubjectExecutor.prototype.updateSpecialColumnsInInsertedAndUpdatedEntities = function (subjects) {\n var _this = this;\n subjects.forEach(function (subject) {\n if (!subject.entity)\n return;\n // set values to \"null\" for nullable columns that did not have values\n subject.metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (subject.metadata.childEntityMetadatas.length > 0 && subject.metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n // entities does not have virtual columns\n if (column.isVirtual)\n return;\n // update nullable columns\n if (column.isNullable) {\n var columnValue = column.getEntityValue(subject.entity);\n if (columnValue === undefined)\n column.setEntityValue(subject.entity, null);\n }\n // update relational columns\n if (subject.updatedRelationMaps.length > 0) {\n subject.updatedRelationMaps.forEach(function (updatedRelationMap) {\n updatedRelationMap.relation.joinColumns.forEach(function (column) {\n if (column.isVirtual === true)\n return;\n column.setEntityValue(subject.entity, updatedRelationMap.value instanceof Object ? column.referencedColumn.getEntityValue(updatedRelationMap.value) : updatedRelationMap.value);\n });\n });\n }\n });\n // merge into entity all generated values returned by a database\n if (subject.generatedMap)\n _this.queryRunner.manager.merge(subject.metadata.target, subject.entity, subject.generatedMap);\n });\n };\n /**\n * Groups subjects by metadata names (by tables) to make bulk insertions and deletions possible.\n * However there are some limitations with bulk insertions of data into tables with generated (increment) columns\n * in some drivers. Some drivers like mysql and sqlite does not support returning multiple generated columns\n * after insertion and can only return a single generated column value, that's why its not possible to do bulk insertion,\n * because it breaks insertion result's generatedMap and leads to problems when this subject is used in other subjects saves.\n * That's why we only support bulking in junction tables for those drivers.\n *\n * Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated\n * id for each inserted row, that's why bulk insertion is not limited to junction tables in there.\n */\n SubjectExecutor.prototype.groupBulkSubjects = function (subjects, type) {\n var group = {};\n var keys = [];\n var groupingAllowed = type === \"delete\" || this.queryRunner.connection.driver.isReturningSqlSupported();\n subjects.forEach(function (subject, index) {\n var key = groupingAllowed || subject.metadata.isJunction ? subject.metadata.name : subject.metadata.name + \"_\" + index;\n if (!group[key]) {\n group[key] = [subject];\n keys.push(key);\n }\n else {\n group[key].push(subject);\n }\n });\n return [group, keys];\n };\n return SubjectExecutor;\n}());\nexport { SubjectExecutor };\n\n//# sourceMappingURL=SubjectExecutor.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to save/remove/etc. constructor-less object (object literal) instead of entity.\n */\nvar CannotDetermineEntityError = /** @class */ (function (_super) {\n __extends(CannotDetermineEntityError, _super);\n function CannotDetermineEntityError(operation) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotDetermineEntityError\";\n Object.setPrototypeOf(_this, CannotDetermineEntityError.prototype);\n _this.message = \"Cannot \" + operation + \", given value must be instance of entity class, instead object literal is given. Or you must specify an entity target to method call.\";\n return _this;\n }\n return CannotDetermineEntityError;\n}(Error));\nexport { CannotDetermineEntityError };\n\n//# sourceMappingURL=CannotDetermineEntityError.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Subject is a subject of persistence.\n * It holds information about each entity that needs to be persisted:\n * - what entity should be persisted\n * - what is database representation of the persisted entity\n * - what entity metadata of the persisted entity\n * - what is allowed to with persisted entity (insert/update/remove)\n *\n * Having this collection of subjects we can perform database queries.\n */\nvar Subject = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Subject(options) {\n var _a;\n /**\n * Subject identifier.\n * This identifier is not limited to table entity primary columns.\n * This can be entity id or ids as well as some unique entity properties, like name or title.\n * Insert / Update / Remove operation will be executed by a given identifier.\n */\n this.identifier = undefined;\n /**\n * Copy of entity but with relational ids fulfilled.\n */\n this.entityWithFulfilledIds = undefined;\n /**\n * Indicates if database entity was loaded.\n * No matter if it was found or not, it indicates the fact of loading.\n */\n this.databaseEntityLoaded = false;\n /**\n * Changes needs to be applied in the database for the given subject.\n */\n this.changeMaps = [];\n /**\n * Indicates if this subject can be inserted into the database.\n * This means that this subject either is newly persisted, either can be inserted by cascades.\n */\n this.canBeInserted = false;\n /**\n * Indicates if this subject can be updated in the database.\n * This means that this subject either was persisted, either can be updated by cascades.\n */\n this.canBeUpdated = false;\n /**\n * Indicates if this subject MUST be removed from the database.\n * This means that this subject either was removed, either was removed by cascades.\n */\n this.mustBeRemoved = false;\n /**\n * Indicates if this subject can be soft-removed from the database.\n * This means that this subject either was soft-removed, either was soft-removed by cascades.\n */\n this.canBeSoftRemoved = false;\n /**\n * Indicates if this subject can be recovered from the database.\n * This means that this subject either was recovered, either was recovered by cascades.\n */\n this.canBeRecovered = false;\n /**\n * Relations updated by the change maps.\n */\n this.updatedRelationMaps = [];\n /**\n * List of updated columns\n */\n this.diffColumns = [];\n /**\n * List of updated relations\n */\n this.diffRelations = [];\n this.metadata = options.metadata;\n this.entity = options.entity;\n this.parentSubject = options.parentSubject;\n if (options.canBeInserted !== undefined)\n this.canBeInserted = options.canBeInserted;\n if (options.canBeUpdated !== undefined)\n this.canBeUpdated = options.canBeUpdated;\n if (options.mustBeRemoved !== undefined)\n this.mustBeRemoved = options.mustBeRemoved;\n if (options.canBeSoftRemoved !== undefined)\n this.canBeSoftRemoved = options.canBeSoftRemoved;\n if (options.canBeRecovered !== undefined)\n this.canBeRecovered = options.canBeRecovered;\n if (options.identifier !== undefined)\n this.identifier = options.identifier;\n if (options.changeMaps !== undefined)\n (_a = this.changeMaps).push.apply(_a, __spreadArray([], __read(options.changeMaps)));\n this.recompute();\n }\n Object.defineProperty(Subject.prototype, \"mustBeInserted\", {\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n /**\n * Checks if this subject must be inserted into the database.\n * Subject can be inserted into the database if it is allowed to be inserted (explicitly persisted or by cascades)\n * and if it does not have database entity set.\n */\n get: function () {\n return this.canBeInserted && !this.databaseEntity;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeUpdated\", {\n /**\n * Checks if this subject must be updated into the database.\n * Subject can be updated in the database if it is allowed to be updated (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeUpdated &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity)) &&\n // ((this.entity && this.databaseEntity) || (!this.entity && !this.databaseEntity)) &&\n this.changeMaps.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeSoftRemoved\", {\n /**\n * Checks if this subject must be soft-removed into the database.\n * Subject can be updated in the database if it is allowed to be soft-removed (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeSoftRemoved &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Subject.prototype, \"mustBeRecovered\", {\n /**\n * Checks if this subject must be recovered into the database.\n * Subject can be updated in the database if it is allowed to be recovered (explicitly persisted or by cascades)\n * and if it does have differentiated columns or relations.\n */\n get: function () {\n return this.canBeRecovered &&\n this.identifier &&\n (this.databaseEntityLoaded === false || (this.databaseEntityLoaded && this.databaseEntity));\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a value set needs to be inserted / updated in the database.\n * Value set is based on the entity and change maps of the subject.\n * Important note: this method pops data from this subject's change maps.\n */\n Subject.prototype.createValueSetAndPopChangeMap = function () {\n var _this = this;\n var changeMapsWithoutValues = [];\n var changeSet = this.changeMaps.reduce(function (updateMap, changeMap) {\n var value = changeMap.value;\n if (value instanceof Subject) {\n // referenced columns can refer on values both which were just inserted and which were present in the model\n // if entity was just inserted valueSets must contain all values from the entity and values just inserted in the database\n // so, here we check if we have a value set then we simply use it as value to get our reference column values\n // otherwise simply use an entity which cannot be just inserted at the moment and have all necessary data\n value = value.insertedValueSet ? value.insertedValueSet : value.entity;\n }\n // value = changeMap.valueFactory ? changeMap.valueFactory(value) : changeMap.column.createValueMap(value);\n var valueMap;\n if (_this.metadata.isJunction && changeMap.column) {\n valueMap = changeMap.column.createValueMap(changeMap.column.referencedColumn.getEntityValue(value));\n }\n else if (changeMap.column) {\n valueMap = changeMap.column.createValueMap(value);\n }\n else if (changeMap.relation) {\n // value can be a related object, for example: post.question = { id: 1 }\n // or value can be a null or direct relation id, e.g. post.question = 1\n // if its a direction relation id then we just set it to the valueMap,\n // however if its an object then we need to extract its relation id map and set it to the valueMap\n if (value instanceof Object) {\n // get relation id, e.g. referenced column name and its value,\n // for example: { id: 1 } which then will be set to relation, e.g. post.category = { id: 1 }\n var relationId = changeMap.relation.getRelationIdMap(value);\n // but relation id can be empty, for example in the case when you insert a new post with category\n // and both post and category are newly inserted objects (by cascades) and in this case category will not have id\n // this means we need to insert post without question id and update post's questionId once question be inserted\n // that's why we create a new changeMap operation for future updation of the post entity\n if (relationId === undefined) {\n changeMapsWithoutValues.push(changeMap);\n _this.canBeUpdated = true;\n return updateMap;\n }\n valueMap = changeMap.relation.createValueMap(relationId);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: relationId });\n }\n else { // value can be \"null\" or direct relation id here\n valueMap = changeMap.relation.createValueMap(value);\n _this.updatedRelationMaps.push({ relation: changeMap.relation, value: value });\n }\n }\n OrmUtils.mergeDeep(updateMap, valueMap);\n return updateMap;\n }, {});\n this.changeMaps = changeMapsWithoutValues;\n return changeSet;\n };\n /**\n * Recomputes entityWithFulfilledIds and identifier when entity changes.\n */\n Subject.prototype.recompute = function () {\n var _this = this;\n if (this.entity) {\n this.entityWithFulfilledIds = Object.assign({}, this.entity);\n if (this.parentSubject) {\n this.metadata.primaryColumns.forEach(function (primaryColumn) {\n if (primaryColumn.relationMetadata && primaryColumn.relationMetadata.inverseEntityMetadata === _this.parentSubject.metadata) {\n var value = primaryColumn.referencedColumn.getEntityValue(_this.parentSubject.entity);\n primaryColumn.setEntityValue(_this.entityWithFulfilledIds, value);\n }\n });\n }\n this.identifier = this.metadata.getEntityIdMap(this.entityWithFulfilledIds);\n }\n else if (this.databaseEntity) {\n this.identifier = this.metadata.getEntityIdMap(this.databaseEntity);\n }\n };\n return Subject;\n}());\nexport { Subject };\n\n//# sourceMappingURL=Subject.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\";\n/**\n * Builds operations needs to be executed for one-to-many relations of the given subjects.\n *\n * by example: post contains one-to-many relation with category in the property called \"categories\", e.g.\n * @OneToMany(type => Category, category => category.post) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToOneInverseSideOperationBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n OneToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // prepare objects (relation id maps) for the database entity\n // note: subject.databaseEntity contains relations with loaded relation ids only\n // by example: since subject is a post, we are expecting to get all post's categories saved in the database here,\n // particularly their relation ids, e.g. category ids stored in the database\n var relatedEntityDatabaseRelationIds = [];\n if (subject.databaseEntity) { // related entities in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationIds = relation.getEntityValue(subject.databaseEntity);\n }\n // get related entities of persisted entity\n // by example: get categories from the passed to persist post entity\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // we treat relations set to null as removed, so we don't skip it\n relatedEntities = [];\n if (relatedEntities === undefined) // if relation is undefined then nothing to update\n return;\n // extract only relation ids from the related entities, since we only need them for comparision\n // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)\n var relatedPersistedEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains categories which does not have ids yet (because they are new)\n // it means they are always newly inserted and relation update operation always must be created for them\n // it does not make sense to perform difference operation for them for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n return;\n }\n // check if this binding really exist in the database\n // by example: find our category if its already bind in the database\n var relationIdInDatabaseSubjectRelation = relatedEntityDatabaseRelationIds.find(function (relatedDatabaseEntityRelationId) {\n return OrmUtils.compareIds(relationIdMap, relatedDatabaseEntityRelationId);\n });\n // if relationIdMap DOES NOT exist in the subject's relation in the database it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!relationIdInDatabaseSubjectRelation) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n _this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // if related entity has relation id then we add it to the list of relation ids\n // this list will be used later to compare with database relation ids to find a difference\n // what exist in this array and does not exist in the database are newly inserted relations\n // what does not exist in this array, but exist in the database are removed relations\n // removed relations are set to null from inverse side of relation\n relatedPersistedEntityRelationIds.push(relationIdMap);\n });\n // find what related entities were added and what were removed based on difference between what we save and what database has\n EntityMetadata\n .difference(relatedEntityDatabaseRelationIds, relatedPersistedEntityRelationIds)\n .forEach(function (removedRelatedEntityRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n identifier: removedRelatedEntityRelationId,\n });\n if (!relation.inverseRelation || relation.inverseRelation.orphanedRowAction === \"nullify\") {\n removedRelatedEntitySubject.canBeUpdated = true;\n removedRelatedEntitySubject.changeMaps = [{\n relation: relation.inverseRelation,\n value: null\n }];\n }\n else if (relation.inverseRelation.orphanedRowAction === \"delete\") {\n removedRelatedEntitySubject.mustBeRemoved = true;\n }\n _this.subjects.push(removedRelatedEntitySubject);\n });\n };\n return OneToManySubjectBuilder;\n}());\nexport { OneToManySubjectBuilder };\n\n//# sourceMappingURL=OneToManySubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for one-to-one non-owner relations of the given subjects.\n *\n * by example: post contains one-to-one non-owner relation with category in the property called \"category\", e.g.\n * @OneToOne(type => Category, category => category.post) category: Category\n * If user sets a category into the post and saves post we need to bind them.\n * This operation requires updation of category table since its owner of the relation and contains a join column.\n *\n * note: this class shares lot of things with OneToManyUpdateBuilder, so when you change this class\n * make sure to reflect changes there as well.\n */\nvar OneToOneInverseSideSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function OneToOneInverseSideSubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds all required operations.\n */\n OneToOneInverseSideSubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n subject.metadata.oneToOneRelations.forEach(function (relation) {\n // we don't need owning relations, this operation is only for inverse side of one-to-one relations\n // skip relations for which persistence is disabled\n if (relation.isOwning || relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"category\" inside it here.\n */\n OneToOneInverseSideSubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n // prepare objects (relation id map) for the database entity\n // note: subject.databaseEntity contains relation with loaded relation id only (id map)\n // by example: since subject is a post, we are expecting to get post's category saved in the database here,\n // particularly its relation id, e.g. category id stored in the database\n var relatedEntityDatabaseRelationId = undefined;\n if (subject.databaseEntity) // related entity in the database can exist only if this entity (post) is saved\n relatedEntityDatabaseRelationId = relation.getEntityValue(subject.databaseEntity);\n // get related entities of persisted entity\n // by example: get category from the passed to persist post entity\n var relatedEntity = relation.getEntityValue(subject.entity); // by example: relatedEntity is a category here\n if (relatedEntity === undefined) // if relation is undefined then nothing to update\n return;\n // if related entity is null then we need to check if there a bind in the database and unset it\n // if there is no bind in the entity then we don't need to do anything\n // by example: if post.category = null and category has this post in the database then we unset it\n if (relatedEntity === null) {\n // it makes sense to update database only there is a previously set value in the database\n if (relatedEntityDatabaseRelationId) {\n // todo: probably we can improve this in the future by finding entity with column those values,\n // todo: maybe it was already in persistence process. This is possible due to unique requirements of join columns\n // we create a new subject which operations will be executed in subject operation executor\n var removedRelatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n parentSubject: subject,\n canBeUpdated: true,\n identifier: relatedEntityDatabaseRelationId,\n changeMaps: [{\n relation: relation.inverseRelation,\n value: null\n }]\n });\n this.subjects.push(removedRelatedEntitySubject);\n }\n return;\n } // else means entity is bind in the database\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity); // by example: relationIdMap is category.id map here, e.g. { id: ... }\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = this.subjects.find(function (operateSubject) {\n return !!operateSubject.entity && operateSubject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relationIdMap = relatedEntitySubject.identifier;\n // if relationIdMap is undefined then it means user binds object which is not saved in the database yet\n // by example: if post contains category which does not have id(s) yet (because its a new category)\n // it means its always newly inserted and relation update operation always must be created for it\n // it does not make sense to perform difference operation for it for both add and remove actions\n if (!relationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // if (!relatedEntitySubject)\n // throw new Error(`One-to-one inverse relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entity which does not exist in the database yet, thus cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entity before binding it.`);\n if (!relatedEntitySubject)\n return;\n // okay, so related subject exist and its marked for insertion, then add a new change map\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is OneToOne owner relation inside Category\n // subject is Post needs to be inserted into Category\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n // check if this binding really exist in the database\n // by example: find our post if its already bind to category in the database and its not equal to what user tries to set\n var areRelatedIdEqualWithDatabase = relatedEntityDatabaseRelationId && OrmUtils.compareIds(relationIdMap, relatedEntityDatabaseRelationId);\n // if they aren't equal it means its a new relation and we need to \"bind\" them\n // by example: this will tell category to insert into its post relation our post we are working with\n // relatedEntitySubject is newly inserted CategorySubject\n // relation.inverseRelation is ManyToOne relation inside Category\n // subject is Post needs to be inserted into Category\n if (!areRelatedIdEqualWithDatabase) {\n // if there is no relatedEntitySubject then it means \"category\" wasn't persisted,\n // but since we are going to update \"category\" table (since its an owning side of relation with join column)\n // we create a new subject here:\n if (!relatedEntitySubject) {\n relatedEntitySubject = new Subject({\n metadata: relation.inverseEntityMetadata,\n canBeUpdated: true,\n identifier: relationIdMap\n });\n this.subjects.push(relatedEntitySubject);\n }\n relatedEntitySubject.changeMaps.push({\n relation: relation.inverseRelation,\n value: subject\n });\n }\n };\n return OneToOneInverseSideSubjectBuilder;\n}());\nexport { OneToOneInverseSideSubjectBuilder };\n\n//# sourceMappingURL=OneToOneInverseSideSubjectBuilder.js.map\n","import { Subject } from \"../Subject\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\n/**\n * Builds operations needs to be executed for many-to-many relations of the given subjects.\n *\n * by example: post contains owner many-to-many relation with categories in the property called \"categories\", e.g.\n * @ManyToMany(type => Category, category => category.posts) categories: Category[]\n * If user adds categories into the post and saves post we need to bind them.\n * This operation requires updation of junction table.\n */\nvar ManyToManySubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ManyToManySubjectBuilder(subjects) {\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for any changes in the many-to-many relations of the subjects.\n */\n ManyToManySubjectBuilder.prototype.build = function () {\n var _this = this;\n this.subjects.forEach(function (subject) {\n // if subject doesn't have entity then no need to find something that should be inserted or removed\n if (!subject.entity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n _this.buildForSubjectRelation(subject, relation);\n });\n });\n };\n /**\n * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.\n */\n ManyToManySubjectBuilder.prototype.buildForAllRemoval = function (subject) {\n var _this = this;\n // if subject does not have a database entity then it means it does not exist in the database\n // if it does not exist in the database then we don't have anything for deletion\n if (!subject.databaseEntity)\n return;\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach(function (relation) {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false)\n return;\n // get all related entities (actually related entity relation ids) bind to this subject entity\n // by example: returns category ids of the post we are currently working with (subject.entity is post)\n var relatedEntityRelationIdsInDatabase = relation.getEntityValue(subject.databaseEntity);\n // go through all related entities and create a new junction subject for each row in junction table\n relatedEntityRelationIdsInDatabase.forEach(function (relationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, relationId)\n });\n // we use unshift because we need to perform those operations before post deletion is performed\n // but post deletion was already added as an subject\n // this is temporary solution, later we need to implement proper sorting of subjects before their removal\n _this.subjects.push(junctionSubject);\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n */\n ManyToManySubjectBuilder.prototype.buildForSubjectRelation = function (subject, relation) {\n var _this = this;\n // load from db all relation ids of inverse entities that are \"bind\" to the subject's entity\n // this way we gonna check which relation ids are missing and which are new (e.g. inserted or removed)\n var databaseRelatedEntityIds = [];\n // if subject don't have database entity it means all related entities in persisted subject are new and must be bind\n // and we don't need to remove something that is not exist\n if (subject.databaseEntity)\n databaseRelatedEntityIds = relation.getEntityValue(subject.databaseEntity);\n // extract entity's relation value\n // by example: categories inside our post (subject.entity is post)\n var relatedEntities = relation.getEntityValue(subject.entity);\n if (relatedEntities === null) // if value set to null its equal if we set it to empty array - all items must be removed from the database\n relatedEntities = [];\n if (!(Array.isArray(relatedEntities)))\n return;\n // from all related entities find only those which aren't found in the db - for them we will create operation subjects\n relatedEntities.forEach(function (relatedEntity) {\n // todo: check how it will work for entities which are saved by cascades, but aren't saved in the database yet\n // extract only relation id from the related entities, since we only need it for comparision\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n // if related entity relation id map is empty it means related entity is newly persisted\n if (!relatedEntityRelationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new Error(`Many-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject)\n return;\n }\n // try to find related entity in the database\n // by example: find post's category in the database post's categories\n var relatedEntityExistInDatabase = databaseRelatedEntityIds.find(function (databaseRelatedEntityRelationId) {\n return OrmUtils.compareIds(databaseRelatedEntityRelationId, relatedEntityRelationIdMap);\n });\n // if entity is found then don't do anything - it means binding in junction table already exist, we don't need to add anything\n if (relatedEntityExistInDatabase)\n return;\n var ownerValue = relation.isOwning ? subject : (relatedEntitySubject || relatedEntity); // by example: ownerEntityMap is post from subject here\n var inverseValue = relation.isOwning ? (relatedEntitySubject || relatedEntity) : subject; // by example: inverseEntityMap is category from categories array here\n // create a new subject for insert operation of junction rows\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n canBeInserted: true,\n });\n _this.subjects.push(junctionSubject);\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: ownerValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(ownerEntityMap),\n });\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n junctionSubject.changeMaps.push({\n column: column,\n value: inverseValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(inverseEntityMap),\n });\n });\n });\n // get all inverse entities relation ids that are \"bind\" to the currently persisted entity\n var changedInverseEntityRelationIds = [];\n relatedEntities.forEach(function (relatedEntity) {\n // relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n var relatedEntityRelationIdMap = relation.inverseEntityMetadata.getEntityIdMap(relatedEntity);\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n var relatedEntitySubject = _this.subjects.find(function (subject) {\n return subject.entity === relatedEntity;\n });\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier;\n if (relatedEntityRelationIdMap !== undefined && relatedEntityRelationIdMap !== null)\n changedInverseEntityRelationIds.push(relatedEntityRelationIdMap);\n });\n // now from all entities in the persisted entity find only those which aren't found in the db\n var removedJunctionEntityIds = databaseRelatedEntityIds.filter(function (existRelationId) {\n return !changedInverseEntityRelationIds.find(function (changedRelationId) {\n return OrmUtils.compareIds(changedRelationId, existRelationId);\n });\n });\n // finally create a new junction remove operations for missing related entities\n removedJunctionEntityIds.forEach(function (removedEntityRelationId) {\n var junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: _this.buildJunctionIdentifier(subject, relation, removedEntityRelationId)\n });\n _this.subjects.push(junctionSubject);\n });\n };\n /**\n * Creates identifiers for junction table.\n * Example: { postId: 1, categoryId: 2 }\n */\n ManyToManySubjectBuilder.prototype.buildJunctionIdentifier = function (subject, relation, relationId) {\n var ownerEntityMap = relation.isOwning ? subject.entity : relationId;\n var inverseEntityMap = relation.isOwning ? relationId : subject.entity;\n var identifier = {};\n relation.junctionEntityMetadata.ownerColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(ownerEntityMap)));\n });\n relation.junctionEntityMetadata.inverseColumns.forEach(function (column) {\n OrmUtils.mergeDeep(identifier, column.createValueMap(column.referencedColumn.getEntityValue(inverseEntityMap)));\n });\n return identifier;\n };\n return ManyToManySubjectBuilder;\n}());\nexport { ManyToManySubjectBuilder };\n\n//# sourceMappingURL=ManyToManySubjectBuilder.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nvar SubjectDatabaseEntityLoader = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function SubjectDatabaseEntityLoader(queryRunner, subjects) {\n this.queryRunner = queryRunner;\n this.subjects = subjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n SubjectDatabaseEntityLoader.prototype.load = function (operationType) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = this.groupByEntityTargets().map(function (subjectGroup) { return __awaiter(_this, void 0, void 0, function () {\n var allIds, allSubjects, loadRelationPropertyPaths, findOptions, entities, allSubjects_1, allSubjects_1_1, subject;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n allIds = [];\n allSubjects = [];\n subjectGroup.subjects.forEach(function (subject) {\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return [2 /*return*/];\n loadRelationPropertyPaths = [];\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(function (subject) {\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(function (relation) {\n var value = relation.getEntityValue(subject.entityWithFulfilledIds);\n if (value === undefined)\n return;\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n }\n else { // remove\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push.apply(// remove\n loadRelationPropertyPaths, __spreadArray([], __read(subjectGroup.subjects[0].metadata.manyToManyRelations.map(function (relation) { return relation.propertyPath; }))));\n }\n findOptions = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n return [4 /*yield*/, this.queryRunner.manager\n .getRepository(subjectGroup.target)\n .findByIds(allIds, findOptions)];\n case 1:\n entities = _b.sent();\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(function (entity) {\n var subjects = _this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(function (subject) {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n try {\n // this way we tell what subjects we tried to load database entities of\n for (allSubjects_1 = __values(allSubjects), allSubjects_1_1 = allSubjects_1.next(); !allSubjects_1_1.done; allSubjects_1_1 = allSubjects_1.next()) {\n subject = allSubjects_1_1.value;\n subject.databaseEntityLoaded = true;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (allSubjects_1_1 && !allSubjects_1_1.done && (_a = allSubjects_1.return)) _a.call(allSubjects_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n SubjectDatabaseEntityLoader.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.subjects.filter(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n SubjectDatabaseEntityLoader.prototype.groupByEntityTargets = function () {\n return this.subjects.reduce(function (groups, operatedEntity) {\n var group = groups.find(function (group) { return group.target === operatedEntity.metadata.target; });\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, []);\n };\n return SubjectDatabaseEntityLoader;\n}());\nexport { SubjectDatabaseEntityLoader };\n\n//# sourceMappingURL=SubjectDatabaseEntityLoader.js.map\n","import { __read } from \"tslib\";\nimport { Subject } from \"../Subject\";\n/**\n * Finds all cascade operations of the given subject and cascade operations of the found cascaded subjects,\n * e.g. builds a cascade tree and creates a subjects for them.\n */\nvar CascadesSubjectBuilder = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CascadesSubjectBuilder(allSubjects) {\n this.allSubjects = allSubjects;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds a cascade subjects tree and pushes them in into the given array of subjects.\n */\n CascadesSubjectBuilder.prototype.build = function (subject, operationType) {\n var _this = this;\n subject.metadata\n .extractRelationValuesFromEntity(subject.entity, subject.metadata.relations) // todo: we can create EntityMetadata.cascadeRelations\n .forEach(function (_a) {\n var _b = __read(_a, 3), relation = _b[0], relationEntity = _b[1], relationEntityMetadata = _b[2];\n // we need only defined values and insert, update, soft-remove or recover cascades of the relation should be set\n if (relationEntity === undefined ||\n relationEntity === null ||\n (!relation.isCascadeInsert && !relation.isCascadeUpdate && !relation.isCascadeSoftRemove && !relation.isCascadeRecover))\n return;\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we don't really need to check cascades since there is no object to insert or update\n if (!(relationEntity instanceof Object))\n return;\n // if we already has this entity in list of operated subjects then skip it to avoid recursion\n var alreadyExistRelationEntitySubject = _this.findByPersistEntityLike(relationEntityMetadata.target, relationEntity);\n if (alreadyExistRelationEntitySubject) {\n if (alreadyExistRelationEntitySubject.canBeInserted === false) // if its not marked for insertion yet\n alreadyExistRelationEntitySubject.canBeInserted = relation.isCascadeInsert === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeUpdated === false) // if its not marked for update yet\n alreadyExistRelationEntitySubject.canBeUpdated = relation.isCascadeUpdate === true && operationType === \"save\";\n if (alreadyExistRelationEntitySubject.canBeSoftRemoved === false) // if its not marked for removal yet\n alreadyExistRelationEntitySubject.canBeSoftRemoved = relation.isCascadeSoftRemove === true && operationType === \"soft-remove\";\n if (alreadyExistRelationEntitySubject.canBeRecovered === false) // if its not marked for recovery yet\n alreadyExistRelationEntitySubject.canBeRecovered = relation.isCascadeRecover === true && operationType === \"recover\";\n return;\n }\n // mark subject with what we can do with it\n // and add to the array of subjects to load only if there is no same entity there already\n var relationEntitySubject = new Subject({\n metadata: relationEntityMetadata,\n parentSubject: subject,\n entity: relationEntity,\n canBeInserted: relation.isCascadeInsert === true && operationType === \"save\",\n canBeUpdated: relation.isCascadeUpdate === true && operationType === \"save\",\n canBeSoftRemoved: relation.isCascadeSoftRemove === true && operationType === \"soft-remove\",\n canBeRecovered: relation.isCascadeRecover === true && operationType === \"recover\"\n });\n _this.allSubjects.push(relationEntitySubject);\n // go recursively and find other entities we need to insert/update\n _this.build(relationEntitySubject, operationType);\n });\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Finds subject where entity like given subject's entity.\n * Comparision made by entity id.\n */\n CascadesSubjectBuilder.prototype.findByPersistEntityLike = function (entityTarget, entity) {\n return this.allSubjects.find(function (subject) {\n if (!subject.entity)\n return false;\n if (subject.entity === entity)\n return true;\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds, entity);\n });\n };\n return CascadesSubjectBuilder;\n}());\nexport { CascadesSubjectBuilder };\n\n//# sourceMappingURL=CascadesSubjectBuilder.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { MustBeEntityError } from \"../error/MustBeEntityError\";\nimport { SubjectExecutor } from \"./SubjectExecutor\";\nimport { CannotDetermineEntityError } from \"../error/CannotDetermineEntityError\";\nimport { Subject } from \"./Subject\";\nimport { OneToManySubjectBuilder } from \"./subject-builder/OneToManySubjectBuilder\";\nimport { OneToOneInverseSideSubjectBuilder } from \"./subject-builder/OneToOneInverseSideSubjectBuilder\";\nimport { ManyToManySubjectBuilder } from \"./subject-builder/ManyToManySubjectBuilder\";\nimport { SubjectDatabaseEntityLoader } from \"./SubjectDatabaseEntityLoader\";\nimport { CascadesSubjectBuilder } from \"./subject-builder/CascadesSubjectBuilder\";\nimport { OrmUtils } from \"../util/OrmUtils\";\n/**\n * Persists a single entity or multiple entities - saves or removes them.\n */\nvar EntityPersistExecutor = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityPersistExecutor(connection, queryRunner, mode, target, entity, options) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.mode = mode;\n this.target = target;\n this.entity = entity;\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Executes persistence operation ob given entity or entities.\n */\n EntityPersistExecutor.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, entities, entitiesInChunks, executors, executorsWithExecutableOperations, isTransactionStartedByUs, executorsWithExecutableOperations_1, executorsWithExecutableOperations_1_1, executor, e_1_1, error_1, rollbackError_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // check if entity we are going to save is valid and is an object\n if (!this.entity || typeof this.entity !== \"object\")\n return [2 /*return*/, Promise.reject(new MustBeEntityError(this.mode, this.entity))];\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n return [4 /*yield*/, Promise.resolve()];\n case 1:\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n _b.sent();\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // save data in the query runner - this is useful functionality to share data from outside of the world\n // with third classes - like subscribers and listener methods\n if (this.options && this.options.data)\n queryRunner.data = this.options.data;\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 22, 25]);\n entities = Array.isArray(this.entity) ? this.entity : [this.entity];\n entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils.chunk(entities, this.options.chunk) : [entities];\n return [4 /*yield*/, Promise.all(entitiesInChunks.map(function (entities) { return __awaiter(_this, void 0, void 0, function () {\n var subjects, cascadesSubjectBuilder;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n subjects = [];\n // create subjects for all entities we received for the persistence\n entities.forEach(function (entity) {\n var entityTarget = _this.target ? _this.target : entity.constructor;\n if (entityTarget === Object)\n throw new CannotDetermineEntityError(_this.mode);\n subjects.push(new Subject({\n metadata: _this.connection.getMetadata(entityTarget),\n entity: entity,\n canBeInserted: _this.mode === \"save\",\n canBeUpdated: _this.mode === \"save\",\n mustBeRemoved: _this.mode === \"remove\",\n canBeSoftRemoved: _this.mode === \"soft-remove\",\n canBeRecovered: _this.mode === \"recover\"\n }));\n });\n cascadesSubjectBuilder = new CascadesSubjectBuilder(subjects);\n subjects.forEach(function (subject) {\n // next step we build list of subjects we will operate with\n // these subjects are subjects that we need to insert or update alongside with main persisted entity\n cascadesSubjectBuilder.build(subject, _this.mode);\n });\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n return [4 /*yield*/, new SubjectDatabaseEntityLoader(queryRunner, subjects).load(this.mode)];\n case 1:\n // console.timeEnd(\"building cascades...\");\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n _a.sent();\n // console.timeEnd(\"loading...\");\n // console.time(\"other subjects...\");\n // build all related subjects and change maps\n if (this.mode === \"save\" || this.mode === \"soft-remove\" || this.mode === \"recover\") {\n new OneToManySubjectBuilder(subjects).build();\n new OneToOneInverseSideSubjectBuilder(subjects).build();\n new ManyToManySubjectBuilder(subjects).build();\n }\n else {\n subjects.forEach(function (subject) {\n if (subject.mustBeRemoved) {\n new ManyToManySubjectBuilder(subjects).buildForAllRemoval(subject);\n }\n });\n }\n // console.timeEnd(\"other subjects...\");\n // console.timeEnd(\"building subjects...\");\n // console.log(\"subjects\", subjects);\n // create a subject executor\n return [2 /*return*/, new SubjectExecutor(queryRunner, subjects, this.options)];\n }\n });\n }); }))];\n case 3:\n executors = _b.sent();\n executorsWithExecutableOperations = executors.filter(function (executor) { return executor.hasExecutableOperations; });\n if (executorsWithExecutableOperations.length === 0)\n return [2 /*return*/];\n isTransactionStartedByUs = false;\n _b.label = 4;\n case 4:\n _b.trys.push([4, 16, , 21]);\n if (!!queryRunner.isTransactionActive) return [3 /*break*/, 6];\n if (!(!this.options || this.options.transaction !== false)) return [3 /*break*/, 6];\n isTransactionStartedByUs = true;\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n _b.trys.push([6, 11, 12, 13]);\n executorsWithExecutableOperations_1 = __values(executorsWithExecutableOperations), executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n _b.label = 7;\n case 7:\n if (!!executorsWithExecutableOperations_1_1.done) return [3 /*break*/, 10];\n executor = executorsWithExecutableOperations_1_1.value;\n return [4 /*yield*/, executor.execute()];\n case 8:\n _b.sent();\n _b.label = 9;\n case 9:\n executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();\n return [3 /*break*/, 7];\n case 10: return [3 /*break*/, 13];\n case 11:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 13];\n case 12:\n try {\n if (executorsWithExecutableOperations_1_1 && !executorsWithExecutableOperations_1_1.done && (_a = executorsWithExecutableOperations_1.return)) _a.call(executorsWithExecutableOperations_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 13:\n if (!(isTransactionStartedByUs === true)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 14:\n _b.sent();\n _b.label = 15;\n case 15: return [3 /*break*/, 21];\n case 16:\n error_1 = _b.sent();\n if (!isTransactionStartedByUs) return [3 /*break*/, 20];\n _b.label = 17;\n case 17:\n _b.trys.push([17, 19, , 20]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 18:\n _b.sent();\n return [3 /*break*/, 20];\n case 19:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 20];\n case 20: throw error_1;\n case 21: return [3 /*break*/, 25];\n case 22:\n if (!!this.queryRunner) return [3 /*break*/, 24];\n return [4 /*yield*/, queryRunner.release()];\n case 23:\n _b.sent();\n _b.label = 24;\n case 24: return [7 /*endfinally*/];\n case 25: return [2 /*return*/];\n }\n });\n });\n };\n return EntityPersistExecutor;\n}());\nexport { EntityPersistExecutor };\n\n//# sourceMappingURL=EntityPersistExecutor.js.map\n","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { NoNeedToReleaseEntityManagerError } from \"../error/NoNeedToReleaseEntityManagerError\";\nimport { TreeRepository } from \"../repository/TreeRepository\";\nimport { Repository } from \"../repository/Repository\";\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\";\nimport { PlainObjectToNewEntityTransformer } from \"../query-builder/transformer/PlainObjectToNewEntityTransformer\";\nimport { PlainObjectToDatabaseEntityTransformer } from \"../query-builder/transformer/PlainObjectToDatabaseEntityTransformer\";\nimport { CustomRepositoryNotFoundError } from \"../error/CustomRepositoryNotFoundError\";\nimport { EntitySchema, getMetadataArgsStorage } from \"../index\";\nimport { AbstractRepository } from \"../repository/AbstractRepository\";\nimport { CustomRepositoryCannotInheritRepositoryError } from \"../error/CustomRepositoryCannotInheritRepositoryError\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { RepositoryNotFoundError } from \"../error/RepositoryNotFoundError\";\nimport { RepositoryNotTreeError } from \"../error/RepositoryNotTreeError\";\nimport { RepositoryFactory } from \"../repository/RepositoryFactory\";\nimport { TreeRepositoryNotSupportedError } from \"../error/TreeRepositoryNotSupportedError\";\nimport { EntityPersistExecutor } from \"../persistence/EntityPersistExecutor\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Entity manager supposed to work with any entity, automatically find its repository and call its methods,\n * whatever entity type are you passing.\n */\nvar EntityManager = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityManager(connection, queryRunner) {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * Once created and then reused by en repositories.\n */\n this.repositories = [];\n /**\n * Plain to object transformer used in create and merge operations.\n */\n this.plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();\n this.connection = connection;\n if (queryRunner) {\n this.queryRunner = queryRunner;\n // dynamic: this.queryRunner = manager;\n ObjectUtils.assign(this.queryRunner, { manager: this });\n }\n }\n /**\n * Wraps given function execution (and all operations made there) in a transaction.\n * All database operations must be executed using provided entity manager.\n */\n EntityManager.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n var isolation, runInTransaction, queryRunner, result, err_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isolation = typeof isolationOrRunInTransaction === \"string\" ? isolationOrRunInTransaction : undefined;\n runInTransaction = typeof isolationOrRunInTransaction === \"function\" ? isolationOrRunInTransaction : runInTransactionParam;\n if (!runInTransaction) {\n throw new Error(\"Transaction method requires callback in second paramter if isolation level is supplied.\");\n }\n if (this.connection.driver instanceof MongoDriver)\n throw new Error(\"Transactions aren't supported by MongoDB.\");\n if (this.queryRunner && this.queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n if (this.queryRunner && this.queryRunner.isTransactionActive)\n throw new Error(\"Cannot start transaction because its already started\");\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!isolation) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction(isolation)];\n case 2:\n _a.sent();\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, queryRunner.startTransaction()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [4 /*yield*/, runInTransaction(queryRunner.manager)];\n case 6:\n result = _a.sent();\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 7:\n _a.sent();\n return [2 /*return*/, result];\n case 8:\n err_1 = _a.sent();\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw err_1;\n case 13:\n if (!!this.queryRunner) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n EntityManager.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.connection.query(query, parameters, this.queryRunner)];\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n EntityManager.prototype.createQueryBuilder = function (entityClass, alias, queryRunner) {\n if (alias) {\n return this.connection.createQueryBuilder(entityClass, alias, queryRunner || this.queryRunner);\n }\n else {\n return this.connection.createQueryBuilder(entityClass || queryRunner || this.queryRunner);\n }\n };\n /**\n * Checks if entity has an id by its Function type or schema name.\n */\n EntityManager.prototype.hasId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n EntityManager.prototype.getId = function (targetOrEntity, maybeEntity) {\n var target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;\n var entity = arguments.length === 2 ? maybeEntity : targetOrEntity;\n var metadata = this.connection.getMetadata(target);\n return metadata.getEntityIdMixedMap(entity);\n };\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n EntityManager.prototype.create = function (entityClass, plainObjectOrObjects) {\n var _this = this;\n var metadata = this.connection.getMetadata(entityClass);\n if (!plainObjectOrObjects)\n return metadata.create(this.queryRunner);\n if (Array.isArray(plainObjectOrObjects))\n return plainObjectOrObjects.map(function (plainEntityLike) { return _this.create(entityClass, plainEntityLike); });\n var mergeIntoEntity = metadata.create(this.queryRunner);\n this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);\n return mergeIntoEntity;\n };\n /**\n * Merges two entities into one new entity.\n */\n EntityManager.prototype.merge = function (entityClass, mergeIntoEntity) {\n var _this = this;\n var entityLikes = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n entityLikes[_i - 2] = arguments[_i];\n }\n var metadata = this.connection.getMetadata(entityClass);\n entityLikes.forEach(function (object) { return _this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata); });\n return mergeIntoEntity;\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n */\n EntityManager.prototype.preload = function (entityClass, entityLike) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, plainObjectToDatabaseEntityTransformer, transformedEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);\n return [4 /*yield*/, plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata)];\n case 1:\n transformedEntity = _a.sent();\n if (transformedEntity)\n return [2 /*return*/, this.merge(entityClass, transformedEntity, entityLike)];\n return [2 /*return*/, undefined];\n }\n });\n });\n };\n /**\n * Saves a given entity in the database.\n */\n EntityManager.prototype.save = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"save\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Removes a given entity from the database.\n */\n EntityManager.prototype.remove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute save operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Records the delete date of one or many given entities.\n */\n EntityManager.prototype.softRemove = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute soft-remove operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"soft-remove\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Recovers one or many given entities.\n */\n EntityManager.prototype.recover = function (targetOrEntity, maybeEntityOrOptions, maybeOptions) {\n // normalize mixed parameters\n var target = (arguments.length > 1 && (targetOrEntity instanceof Function || targetOrEntity instanceof EntitySchema || typeof targetOrEntity === \"string\")) ? targetOrEntity : undefined;\n var entity = target ? maybeEntityOrOptions : targetOrEntity;\n var options = target ? maybeOptions : maybeEntityOrOptions;\n if (target instanceof EntitySchema)\n target = target.options.name;\n // if user passed empty array of entities then we don't need to do anything\n if (Array.isArray(entity) && entity.length === 0)\n return Promise.resolve(entity);\n // execute recover operation\n return new EntityPersistExecutor(this.connection, this.queryRunner, \"recover\", target, entity, options)\n .execute()\n .then(function () { return entity; });\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n * You can execute bulk inserts using this method.\n */\n EntityManager.prototype.insert = function (target, entity) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.createQueryBuilder()\n .insert()\n .into(target)\n .values(entity)\n .execute()];\n });\n });\n };\n /**\n * Updates entity partially. Entity can be found by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.update = function (target, criteria, partialEntity) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the update method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .update(target)\n .set(partialEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Deletes entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.delete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .delete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Records the delete date of entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.softDelete = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .softDelete()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Restores entities by a given condition(s).\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n * Condition(s) cannot be empty.\n */\n EntityManager.prototype.restore = function (targetOrEntity, criteria) {\n // if user passed empty criteria or empty list of criterias, then throw an error\n if (criteria === undefined ||\n criteria === null ||\n criteria === \"\" ||\n (Array.isArray(criteria) && criteria.length === 0)) {\n return Promise.reject(new Error(\"Empty criteria(s) are not allowed for the delete method.\"));\n }\n if (typeof criteria === \"string\" ||\n typeof criteria === \"number\" ||\n criteria instanceof Date ||\n Array.isArray(criteria)) {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .whereInIds(criteria)\n .execute();\n }\n else {\n return this.createQueryBuilder()\n .restore()\n .from(targetOrEntity)\n .where(criteria)\n .execute();\n }\n };\n /**\n * Counts entities that match given find options or conditions.\n * Useful for pagination.\n */\n EntityManager.prototype.count = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getCount()];\n });\n });\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n EntityManager.prototype.find = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getMany()];\n });\n });\n };\n /**\n * Finds entities that match given find options and conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n EntityManager.prototype.findAndCount = function (entityClass, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions).getManyAndCount()];\n });\n });\n };\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n */\n EntityManager.prototype.findByIds = function (entityClass, ids, optionsOrConditions) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, qb;\n return __generator(this, function (_a) {\n // if no ids passed, no need to execute a query - just return an empty array of values\n if (!ids.length)\n return [2 /*return*/, Promise.resolve([])];\n metadata = this.connection.getMetadata(entityClass);\n qb = this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(optionsOrConditions) || metadata.name);\n FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, optionsOrConditions);\n if (!FindOptionsUtils.isFindManyOptions(optionsOrConditions) || optionsOrConditions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, metadata);\n return [2 /*return*/, qb.andWhereInIds(ids).getMany()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions.\n */\n EntityManager.prototype.findOne = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n var findOptions, options, metadata, alias, qb, passedId;\n return __generator(this, function (_a) {\n findOptions = undefined;\n if (FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions)) {\n findOptions = idOrOptionsOrConditions;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions)) {\n findOptions = maybeOptions;\n }\n options = undefined;\n if (idOrOptionsOrConditions instanceof Object && !FindOptionsUtils.isFindOneOptions(idOrOptionsOrConditions))\n options = idOrOptionsOrConditions;\n metadata = this.connection.getMetadata(entityClass);\n alias = metadata.name;\n if (findOptions && findOptions.join) {\n alias = findOptions.join.alias;\n }\n else if (maybeOptions && FindOptionsUtils.isFindOneOptions(maybeOptions) && maybeOptions.join) {\n alias = maybeOptions.join.alias;\n }\n qb = this.createQueryBuilder(entityClass, alias);\n if (!findOptions || findOptions.loadEagerRelations !== false)\n FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias.metadata);\n passedId = typeof idOrOptionsOrConditions === \"string\" || typeof idOrOptionsOrConditions === \"number\" || idOrOptionsOrConditions instanceof Date;\n if (!passedId) {\n findOptions = __assign(__assign({}, (findOptions || {})), { take: 1 });\n }\n FindOptionsUtils.applyOptionsToQueryBuilder(qb, findOptions);\n if (options) {\n qb.where(options);\n }\n else if (passedId) {\n qb.andWhereInIds(metadata.ensureEntityIdMap(idOrOptionsOrConditions));\n }\n return [2 /*return*/, qb.getOne()];\n });\n });\n };\n /**\n * Finds first entity that matches given conditions or rejects the returned promise on error.\n */\n EntityManager.prototype.findOneOrFail = function (entityClass, idOrOptionsOrConditions, maybeOptions) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.findOne(entityClass, idOrOptionsOrConditions, maybeOptions).then(function (value) {\n if (value === undefined) {\n return Promise.reject(new EntityNotFoundError(entityClass, idOrOptionsOrConditions));\n }\n return Promise.resolve(value);\n })];\n });\n });\n };\n /**\n * Clears all the data from the given table (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n EntityManager.prototype.clear = function (entityClass) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, queryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.connection.getMetadata(entityClass);\n queryRunner = this.queryRunner || this.connection.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, queryRunner.clearTable(metadata.tablePath)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!this.queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.increment = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" + \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n EntityManager.prototype.decrement = function (entityClass, conditions, propertyPath, value) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, column, values;\n var _this = this;\n return __generator(this, function (_a) {\n metadata = this.connection.getMetadata(entityClass);\n column = metadata.findColumnWithPropertyPath(propertyPath);\n if (!column)\n throw new Error(\"Column \" + propertyPath + \" was not found in \" + metadata.targetName + \" entity.\");\n if (isNaN(Number(value)))\n throw new Error(\"Value \\\"\" + value + \"\\\" is not a number.\");\n values = propertyPath\n .split(\".\")\n .reduceRight(function (value, key) {\n var _a;\n return (_a = {}, _a[key] = value, _a);\n }, function () { return _this.connection.driver.escape(column.databaseName) + \" - \" + value; });\n return [2 /*return*/, this\n .createQueryBuilder(entityClass, \"entity\")\n .update(entityClass)\n .set(values)\n .where(conditions)\n .execute()];\n });\n });\n };\n /**\n * Gets repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getRepository = function (target) {\n // throw exception if there is no repository with this target registered\n if (!this.connection.hasMetadata(target))\n throw new RepositoryNotFoundError(this.connection.name, target);\n // find already created repository instance and return it if found\n var metadata = this.connection.getMetadata(target);\n var repository = this.repositories.find(function (repository) { return repository.metadata === metadata; });\n if (repository)\n return repository;\n // if repository was not found then create it, store its instance and return it\n var newRepository = new RepositoryFactory().create(this, metadata, this.queryRunner);\n this.repositories.push(newRepository);\n return newRepository;\n };\n /**\n * Gets tree repository for the given entity class or name.\n * If single database connection mode is used, then repository is obtained from the\n * repository aggregator, where each repository is individually created for this entity manager.\n * When single database connection is not used, repository is being obtained from the connection.\n */\n EntityManager.prototype.getTreeRepository = function (target) {\n // tree tables aren't supported by some drivers (mongodb)\n if (this.connection.driver.treeSupport === false)\n throw new TreeRepositoryNotSupportedError(this.connection.driver);\n // check if repository is real tree repository\n var repository = this.getRepository(target);\n if (!(repository instanceof TreeRepository))\n throw new RepositoryNotTreeError(target);\n return repository;\n };\n /**\n * Gets mongodb repository for the given entity class.\n */\n EntityManager.prototype.getMongoRepository = function (target) {\n return this.connection.getMongoRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n EntityManager.prototype.getCustomRepository = function (customRepository) {\n var entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find(function (repository) {\n return repository.target === (customRepository instanceof Function ? customRepository : customRepository.constructor);\n });\n if (!entityRepositoryMetadataArgs)\n throw new CustomRepositoryNotFoundError(customRepository);\n var entityMetadata = entityRepositoryMetadataArgs.entity ? this.connection.getMetadata(entityRepositoryMetadataArgs.entity) : undefined;\n var entityRepositoryInstance = new entityRepositoryMetadataArgs.target(this, entityMetadata);\n // NOTE: dynamic access to protected properties. We need this to prevent unwanted properties in those classes to be exposed,\n // however we need these properties for internal work of the class\n if (entityRepositoryInstance instanceof AbstractRepository) {\n if (!entityRepositoryInstance[\"manager\"])\n entityRepositoryInstance[\"manager\"] = this;\n }\n if (entityRepositoryInstance instanceof Repository) {\n if (!entityMetadata)\n throw new CustomRepositoryCannotInheritRepositoryError(customRepository);\n entityRepositoryInstance[\"manager\"] = this;\n entityRepositoryInstance[\"metadata\"] = entityMetadata;\n }\n return entityRepositoryInstance;\n };\n /**\n * Releases all resources used by entity manager.\n * This is used when entity manager is created with a single query runner,\n * and this single query runner needs to be released after job with entity manager is done.\n */\n EntityManager.prototype.release = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.queryRunner)\n throw new NoNeedToReleaseEntityManagerError();\n return [2 /*return*/, this.queryRunner.release()];\n });\n });\n };\n return EntityManager;\n}());\nexport { EntityManager };\n\n//# sourceMappingURL=EntityManager.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { EntityManager } from \"./EntityManager\";\n/**\n * A special EntityManager that includes import/export and load/save function\n * that are unique to Sql.js.\n */\nvar SqljsEntityManager = /** @class */ (function (_super) {\n __extends(SqljsEntityManager, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsEntityManager(connection, queryRunner) {\n var _this = _super.call(this, connection, queryRunner) || this;\n _this.driver = connection.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads either the definition from a file (Node.js) or localstorage (browser)\n * or uses the given definition to open a new database.\n */\n SqljsEntityManager.prototype.loadDatabase = function (fileNameOrLocalStorageOrData) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.load(fileNameOrLocalStorageOrData)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Saves the current database to a file (Node.js) or localstorage (browser)\n * if fileNameOrLocalStorage is not set options.location is used.\n */\n SqljsEntityManager.prototype.saveDatabase = function (fileNameOrLocalStorage) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.driver.save(fileNameOrLocalStorage)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns the current database definition.\n */\n SqljsEntityManager.prototype.exportDatabase = function () {\n return this.driver.export();\n };\n return SqljsEntityManager;\n}(EntityManager));\nexport { SqljsEntityManager };\n\n//# sourceMappingURL=SqljsEntityManager.js.map\n","import { EntityManager } from \"./EntityManager\";\nimport { MongoEntityManager } from \"./MongoEntityManager\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { SqljsEntityManager } from \"./SqljsEntityManager\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\n/**\n * Helps to create entity managers.\n */\nvar EntityManagerFactory = /** @class */ (function () {\n function EntityManagerFactory() {\n }\n /**\n * Creates a new entity manager depend on a given connection's driver.\n */\n EntityManagerFactory.prototype.create = function (connection, queryRunner) {\n if (connection.driver instanceof MongoDriver)\n return new MongoEntityManager(connection);\n if (connection.driver instanceof SqljsDriver)\n return new SqljsEntityManager(connection, queryRunner);\n return new EntityManager(connection, queryRunner);\n };\n return EntityManagerFactory;\n}());\nexport { EntityManagerFactory };\n\n//# sourceMappingURL=EntityManagerFactory.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer specifies driver type that does not exist or supported.\n */\nvar MissingDriverError = /** @class */ (function (_super) {\n __extends(MissingDriverError, _super);\n function MissingDriverError(driverType) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDriverError\";\n Object.setPrototypeOf(_this, MissingDriverError.prototype);\n _this.message = \"Wrong driver: \\\"\" + driverType + \"\\\" given. Supported drivers are: \\\"cordova\\\", \\\"expo\\\", \\\"mariadb\\\", \\\"mongodb\\\", \\\"mssql\\\", \\\"mysql\\\", \\\"oracle\\\", \\\"postgres\\\", \\\"sqlite\\\", \\\"better-sqlite3\\\", \\\"sqljs\\\", \\\"react-native\\\", \\\"aurora-data-api\\\", \\\"aurora-data-api-pg\\\".\";\n return _this;\n }\n return MissingDriverError;\n}(Error));\nexport { MissingDriverError };\n\n//# sourceMappingURL=MissingDriverError.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar CordovaQueryRunner = /** @class */ (function (_super) {\n __extends(CordovaQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n CordovaQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n CordovaQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return CordovaQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { CordovaQueryRunner };\n\n//# sourceMappingURL=CordovaQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { CordovaQueryRunner } from \"./CordovaQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar CordovaDriver = /** @class */ (function (_super) {\n __extends(CordovaDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function CordovaDriver(connection) {\n var _this = _super.call(this, connection) || this;\n // this.connection = connection;\n // this.options = connection.options as CordovaConnectionOptions;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n CordovaDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n CordovaDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new CordovaQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n CordovaDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n CordovaDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = window.sqlitePlugin;\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"Cordova-SQLite\", \"cordova-sqlite-storage\");\n }\n };\n return CordovaDriver;\n}(AbstractSqliteDriver));\nexport { CordovaDriver };\n\n//# sourceMappingURL=CordovaDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ReactNativeQueryRunner = /** @class */ (function (_super) {\n __extends(ReactNativeQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n ReactNativeQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n databaseConnection.executeSql(query, parameters, function (result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n ReactNativeQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return ReactNativeQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ReactNativeQueryRunner };\n\n//# sourceMappingURL=ReactNativeQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ReactNativeQueryRunner } from \"./ReactNativeQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nvar ReactNativeDriver = /** @class */ (function (_super) {\n __extends(ReactNativeDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReactNativeDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.location)\n throw new DriverOptionNotSetError(\"location\");\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ReactNativeDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close(ok, fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ReactNativeDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ReactNativeQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ReactNativeDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n name: _this.options.database,\n location: _this.options.location,\n }, _this.options.extra || {});\n _this.sqlite.openDatabase(options, function (db) {\n var databaseConnection = db;\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n databaseConnection.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (result) {\n ok(databaseConnection);\n }, function (error) {\n fail(error);\n });\n }, function (error) {\n fail(error);\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n ReactNativeDriver.prototype.loadDependencies = function () {\n try {\n this.sqlite = require(\"react-native-sqlite-storage\");\n }\n catch (e) {\n throw new DriverPackageNotInstalledError(\"React-Native\", \"react-native-sqlite-storage\");\n }\n };\n return ReactNativeDriver;\n}(AbstractSqliteDriver));\nexport { ReactNativeDriver };\n\n//# sourceMappingURL=ReactNativeDriver.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar ExpoQueryRunner = /** @class */ (function (_super) {\n __extends(ExpoQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Starts transaction. Within Expo, all database operations happen in a\n * transaction context, so issuing a `BEGIN TRANSACTION` command is\n * redundant and will result in the following error:\n *\n * `Error: Error code 1: cannot start a transaction within a transaction`\n *\n * Instead, we keep track of a `Transaction` object in `this.transaction`\n * and continue using the same object until we wish to commit the\n * transaction.\n */\n ExpoQueryRunner.prototype.startTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive && typeof this.transaction !== \"undefined\")\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n * Since Expo will automatically commit the transaction once all the\n * callbacks of the transaction object have been completed, \"committing\" a\n * transaction in this driver's context means that we delete the transaction\n * object and set the stage for the next transaction.\n */\n ExpoQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n * This method's functionality is identical to `commitTransaction()` because\n * the transaction lifecycle is handled within the Expo transaction object.\n * Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.\n */\n ExpoQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive && typeof this.transaction === \"undefined\")\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = false;\n this.transaction = undefined;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n ExpoQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n // All Expo SQL queries are executed in a transaction context\n databaseConnection.transaction(function (transaction) {\n if (typeof _this.transaction === \"undefined\") {\n _this.startTransaction();\n _this.transaction = transaction;\n }\n _this.transaction.executeSql(query, parameters, function (t, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = _this.driver.connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n _this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, _this);\n }\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n ok(result.insertId);\n }\n else {\n var resultSet = [];\n for (var i = 0; i < result.rows.length; i++) {\n resultSet.push(result.rows.item(i));\n }\n ok(resultSet);\n }\n }, function (t, err) {\n _this.driver.connection.logger.logQueryError(err, query, parameters, _this);\n fail(new QueryFailedError(query, parameters, err));\n });\n }, function (err) {\n _this.rollbackTransaction();\n }, function () {\n _this.isTransactionActive = false;\n _this.transaction = undefined;\n });\n return [2 /*return*/];\n }\n });\n }); });\n };\n return ExpoQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { ExpoQueryRunner };\n\n//# sourceMappingURL=ExpoQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { ExpoQueryRunner } from \"./ExpoQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nvar ExpoDriver = /** @class */ (function (_super) {\n __extends(ExpoDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ExpoDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.database = _this.options.database;\n // validate options to make sure everything is set\n if (!_this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n if (!_this.options.driver)\n throw new DriverOptionNotSetError(\"driver\");\n // load sqlite package\n _this.sqlite = _this.options.driver;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n ExpoDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n try {\n _this.queryRunner = undefined;\n _this.databaseConnection._db.close();\n _this.databaseConnection = undefined;\n ok();\n }\n catch (error) {\n fail(error);\n }\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n ExpoDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner)\n this.queryRunner = new ExpoQueryRunner(this);\n return this.queryRunner;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n ExpoDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n try {\n var databaseConnection_1 = _this.sqlite.openDatabase(_this.options.database);\n /*\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n */\n databaseConnection_1.transaction(function (tsx) {\n tsx.executeSql(\"PRAGMA foreign_keys = ON;\", [], function (t, result) {\n ok(databaseConnection_1);\n }, function (t, err) {\n fail({ transaction: t, error: err });\n });\n }, function (err) {\n fail(err);\n });\n }\n catch (error) {\n fail(error);\n }\n });\n };\n return ExpoDriver;\n}(AbstractSqliteDriver));\nexport { ExpoDriver };\n\n//# sourceMappingURL=ExpoDriver.js.map\n","import { __awaiter, __extends, __generator, __read, __values } from \"tslib\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { TableExclusion } from \"../../schema-builder/table/TableExclusion\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { Query } from \"../Query\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\n/**\n * Runs queries on a single postgres database connection.\n */\nvar PostgresQueryRunner = /** @class */ (function (_super) {\n __extends(PostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function PostgresQueryRunner(driver, mode) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.mode = mode;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n PostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n var onErrorCallback = function () { return _this.release(); };\n _this.releaseCallback = function () {\n _this.databaseConnection.removeListener(\"error\", onErrorCallback);\n release();\n };\n _this.databaseConnection.on(\"error\", onErrorCallback);\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Releases used database connection.\n * You cannot use query runner methods once its released.\n */\n PostgresQueryRunner.prototype.release = function () {\n if (this.isReleased) {\n return Promise.resolve();\n }\n this.isReleased = true;\n if (this.releaseCallback)\n this.releaseCallback();\n var index = this.driver.connectedQueryRunners.indexOf(this);\n if (index !== -1)\n this.driver.connectedQueryRunners.splice(index);\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n PostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"START TRANSACTION\")];\n case 3:\n _a.sent();\n if (!isolationLevel) return [3 /*break*/, 5];\n return [4 /*yield*/, this.query(\"SET TRANSACTION ISOLATION LEVEL \" + isolationLevel)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5:\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 7];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n PostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n PostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, result, maxQueryExecutionTime, queryEndTime, queryExecutionTime, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n queryStartTime = +new Date();\n return [4 /*yield*/, databaseConnection.query(query, parameters)];\n case 3:\n result = _a.sent();\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n switch (result.command) {\n case \"DELETE\":\n case \"UPDATE\":\n // for UPDATE and DELETE query additionally return number of affected rows\n return [2 /*return*/, [result.rows, result.rowCount]];\n break;\n default:\n return [2 /*return*/, result.rows];\n }\n return [3 /*break*/, 5];\n case 4:\n err_1 = _a.sent();\n this.driver.connection.logger.logQueryError(err_1, query, parameters, this);\n throw new QueryFailedError(query, parameters, err_1);\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n PostgresQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n var _this = this;\n var QueryStream = this.driver.loadStreamDependency();\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, stream, err_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.connect()];\n case 1:\n databaseConnection = _a.sent();\n this.driver.connection.logger.logQuery(query, parameters, this);\n stream = databaseConnection.query(new QueryStream(query, parameters));\n if (onEnd)\n stream.on(\"end\", onEnd);\n if (onError)\n stream.on(\"error\", onError);\n ok(stream);\n return [3 /*break*/, 3];\n case 2:\n err_2 = _a.sent();\n fail(err_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n }); });\n };\n /**\n * Returns all available database names including system databases.\n */\n PostgresQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n PostgresQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n PostgresQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n PostgresQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM \\\"information_schema\\\".\\\"schemata\\\" WHERE \\\"schema_name\\\" = '\" + schema + \"'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName;\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n PostgresQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var parsedTableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n parsedTableName = this.parseTableName(tableOrName);\n sql = \"SELECT * FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = \" + parsedTableName.schema + \" AND \\\"table_name\\\" = \" + parsedTableName.tableName + \" AND \\\"column_name\\\" = '\" + columnName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Creates a new database.\n * Postgres does not supports database creation inside a transaction block.\n */\n PostgresQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops database.\n * Postgres does not supports database drop inside a transaction block.\n */\n PostgresQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n PostgresQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n var up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n up = ifNotExist ? \"CREATE SCHEMA IF NOT EXISTS \\\"\" + schema + \"\\\"\" : \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n down = \"DROP SCHEMA \\\"\" + schema + \"\\\" CASCADE\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops table schema.\n */\n PostgresQueryRunner.prototype.dropSchema = function (schemaPath, ifExist, isCascade) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, up, down;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = schemaPath.indexOf(\".\") === -1 ? schemaPath : schemaPath.split(\".\")[0];\n up = ifExist ? \"DROP SCHEMA IF EXISTS \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\") : \"DROP SCHEMA \\\"\" + schema + \"\\\" \" + (isCascade ? \"CASCADE\" : \"\");\n down = \"CREATE SCHEMA \\\"\" + schema + \"\\\"\";\n return [4 /*yield*/, this.executeQueries(new Query(up), new Query(down))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new table.\n */\n PostgresQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, upQueries, downQueries, enumColumns, createdEnumTypes, enumColumns_1, enumColumns_1_1, column, hasEnum, enumName, e_1_1;\n var e_1, _a;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _b.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n upQueries = [];\n downQueries = [];\n enumColumns = table.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n createdEnumTypes = [];\n _b.label = 3;\n case 3:\n _b.trys.push([3, 8, 9, 10]);\n enumColumns_1 = __values(enumColumns), enumColumns_1_1 = enumColumns_1.next();\n _b.label = 4;\n case 4:\n if (!!enumColumns_1_1.done) return [3 /*break*/, 7];\n column = enumColumns_1_1.value;\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 5:\n hasEnum = _b.sent();\n enumName = this.buildEnumName(table, column);\n // if enum with the same \"enumName\" is defined more then once, me must prevent double creation\n if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {\n createdEnumTypes.push(enumName);\n upQueries.push(this.createEnumTypeSql(table, column, enumName));\n downQueries.push(this.dropEnumTypeSql(table, column, enumName));\n }\n _b.label = 6;\n case 6:\n enumColumns_1_1 = enumColumns_1.next();\n return [3 /*break*/, 4];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (enumColumns_1_1 && !enumColumns_1_1.done && (_a = enumColumns_1.return)) _a.call(enumColumns_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n // if createForeignKeys is true, we must drop created foreign keys in down query.\n // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n if (createForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return downQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(table, index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n PostgresQueryRunner.prototype.dropTable = function (target, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, tableName, table, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(target)];\n case 1:\n isTableExist = _a.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n tableName = target instanceof Table ? target.name : target;\n return [4 /*yield*/, this.getCachedTable(tableName)];\n case 3:\n table = _a.sent();\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(table, index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n if (dropForeignKeys)\n table.foreignKeys.forEach(function (foreignKey) { return upQueries.push(_this.dropForeignKeySql(table, foreignKey)); });\n upQueries.push(this.dropTableSql(table));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n PostgresQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 1:\n _b.apply(_a, [_e.sent()]);\n downQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _d.apply(_c, [_e.sent()]);\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n PostgresQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries, _a, _b, _c, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _e.sent();\n upQueries = [];\n downQueries = [];\n _b = (_a = upQueries).push;\n return [4 /*yield*/, this.deleteViewDefinitionSql(view)];\n case 2:\n _b.apply(_a, [_e.sent()]);\n upQueries.push(this.dropViewSql(view));\n _d = (_c = downQueries).push;\n return [4 /*yield*/, this.insertViewDefinitionSql(view)];\n case 3:\n _d.apply(_c, [_e.sent()]);\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _e.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n PostgresQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, oldTable, _a, newTable, oldTableName, schemaName, columnNames, oldPkName, newPkName, enumColumns, enumColumns_2, enumColumns_2_1, column, oldEnumType, e_2_1;\n var e_2, _b;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _c.sent();\n _c.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n oldTableName = oldTable.name.indexOf(\".\") === -1 ? oldTable.name : oldTable.name.split(\".\")[1];\n schemaName = oldTable.name.indexOf(\".\") === -1 ? undefined : oldTable.name.split(\".\")[0];\n newTable.name = schemaName ? schemaName + \".\" + newTableName : newTableName;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(oldTable) + \" RENAME TO \\\"\" + newTableName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME TO \\\"\" + oldTableName + \"\\\"\"));\n // rename column primary key constraint\n if (newTable.primaryColumns.length > 0) {\n columnNames = newTable.primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);\n newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename sequences\n newTable.columns.map(function (col) {\n if (col.isGenerated && col.generationStrategy === \"increment\") {\n var seqName = _this.buildSequenceName(oldTable, col.name, undefined, true, true);\n var newSeqName = _this.buildSequenceName(newTable, col.name, undefined, true, true);\n var up = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n var down = schemaName ? \"ALTER SEQUENCE \\\"\" + schemaName + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n });\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n // build new constraint name\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n newTable.indices.forEach(function (index) {\n // build new constraint name\n var schema = _this.extractSchema(newTable);\n var newIndexName = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n // build new constraint name\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(newTable) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n enumColumns = newTable.columns.filter(function (column) { return column.type === \"enum\" || column.type === \"simple-enum\"; });\n _c.label = 4;\n case 4:\n _c.trys.push([4, 9, 10, 11]);\n enumColumns_2 = __values(enumColumns), enumColumns_2_1 = enumColumns_2.next();\n _c.label = 5;\n case 5:\n if (!!enumColumns_2_1.done) return [3 /*break*/, 8];\n column = enumColumns_2_1.value;\n return [4 /*yield*/, this.getEnumTypeName(oldTable, column)];\n case 6:\n oldEnumType = _c.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(newTable, column, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(newTable, column) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _c.label = 7;\n case 7:\n enumColumns_2_1 = enumColumns_2.next();\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 11];\n case 9:\n e_2_1 = _c.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 11];\n case 10:\n try {\n if (enumColumns_2_1 && !enumColumns_2_1.done && (_b = enumColumns_2.return)) _b.call(enumColumns_2);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 11: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 12:\n _c.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, hasEnum, primaryColumns, pkName_1, columnNames_1, pkName, columnNames, columnIndex, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 5];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) {\n upQueries.push(this.createEnumTypeSql(table, column));\n downQueries.push(this.dropEnumTypeSql(table, column));\n }\n _b.label = 5;\n case 5:\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n // create or update primary key constraint\n if (column.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if table already have primary key, me must drop it and recreate again\n if (primaryColumns.length > 0) {\n pkName_1 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_1 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_1 + \"\\\" PRIMARY KEY (\" + columnNames_1 + \")\"));\n }\n primaryColumns.push(column);\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n upQueries.push(this.createIndexSql(table, columnIndex));\n downQueries.push(this.dropIndexSql(table, columnIndex));\n }\n // create unique constraint\n if (column.isUnique) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + column.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n // create column's comment\n if (column.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + column.name + \"\\\" IS \" + this.escapeComment(column.comment)));\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n clonedTable.addColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n PostgresQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_1, columns_1_1, column, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_1 = __values(columns), columns_1_1 = columns_1.next();\n _b.label = 1;\n case 1:\n if (!!columns_1_1.done) return [3 /*break*/, 4];\n column = columns_1_1.value;\n return [4 /*yield*/, this.addColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_1_1 = columns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n PostgresQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, upQueries, downQueries, defaultValueChanged, oldColumn, oldEnumType, primaryColumns, columnNames, oldPkName, newPkName, schema, seqName, newSeqName, up, down, oldTableColumn, arraySuffix, newEnumName, oldEnumName, oldEnumNameWithoutSchema, oldEnumNameWithSchema_old, oldEnumNameWithoutSchema_old, upType, downType, primaryColumns, pkName, columnNames, column, pkName, columnNames, primaryColumn, column, pkName, columnNames, uniqueConstraint, uniqueConstraint;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n defaultValueChanged = false;\n oldColumn = oldTableColumnOrName instanceof TableColumn\n ? oldTableColumnOrName\n : table.columns.find(function (column) { return column.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n if (!(oldColumn.type !== newColumn.type || oldColumn.length !== newColumn.length || newColumn.isArray !== oldColumn.isArray)) return [3 /*break*/, 6];\n // To avoid data conversion, we just recreate column\n return [4 /*yield*/, this.dropColumn(table, oldColumn)];\n case 4:\n // To avoid data conversion, we just recreate column\n _b.sent();\n return [4 /*yield*/, this.addColumn(table, newColumn)];\n case 5:\n _b.sent();\n // update cloned table\n clonedTable = table.clone();\n return [3 /*break*/, 10];\n case 6:\n if (!(oldColumn.name !== newColumn.name)) return [3 /*break*/, 9];\n // rename column\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + oldColumn.name + \"\\\" TO \\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME COLUMN \\\"\" + newColumn.name + \"\\\" TO \\\"\" + oldColumn.name + \"\\\"\"));\n if (!(oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")) return [3 /*break*/, 8];\n return [4 /*yield*/, this.getEnumTypeName(table, oldColumn)];\n case 7:\n oldEnumType = _b.sent();\n upQueries.push(new Query(\"ALTER TYPE \\\"\" + oldEnumType.enumTypeSchema + \"\\\".\\\"\" + oldEnumType.enumTypeName + \"\\\" RENAME TO \" + this.buildEnumName(table, newColumn, false)));\n downQueries.push(new Query(\"ALTER TYPE \" + this.buildEnumName(table, newColumn) + \" RENAME TO \\\"\" + oldEnumType.enumTypeName + \"\\\"\"));\n _b.label = 8;\n case 8:\n // rename column primary key constraint\n if (oldColumn.isPrimary === true) {\n primaryColumns = clonedTable.primaryColumns;\n columnNames = primaryColumns.map(function (column) { return column.name; });\n oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n // replace old column name with new column name\n columnNames.splice(columnNames.indexOf(oldColumn.name), 1);\n columnNames.push(newColumn.name);\n newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + oldPkName + \"\\\" TO \\\"\" + newPkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newPkName + \"\\\" TO \\\"\" + oldPkName + \"\\\"\"));\n }\n // rename column sequence\n if (oldColumn.isGenerated === true && newColumn.generationStrategy === \"increment\") {\n schema = this.extractSchema(table);\n seqName = this.buildSequenceName(table, oldColumn.name, undefined, true, true);\n newSeqName = this.buildSequenceName(table, newColumn.name, undefined, true, true);\n up = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + seqName + \"\\\" RENAME TO \\\"\" + newSeqName + \"\\\"\";\n down = schema ? \"ALTER SEQUENCE \\\"\" + schema + \"\\\".\\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\" : \"ALTER SEQUENCE \\\"\" + newSeqName + \"\\\" RENAME TO \\\"\" + seqName + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n }\n // rename unique constraints\n clonedTable.findColumnUniques(oldColumn).forEach(function (unique) {\n // build new constraint name\n unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);\n unique.columnNames.push(newColumn.name);\n var newUniqueName = _this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + unique.name + \"\\\" TO \\\"\" + newUniqueName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newUniqueName + \"\\\" TO \\\"\" + unique.name + \"\\\"\"));\n // replace constraint name\n unique.name = newUniqueName;\n });\n // rename index constraints\n clonedTable.findColumnIndices(oldColumn).forEach(function (index) {\n // build new constraint name\n index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);\n index.columnNames.push(newColumn.name);\n var schema = _this.extractSchema(table);\n var newIndexName = _this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);\n // build queries\n var up = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\" : \"ALTER INDEX \\\"\" + index.name + \"\\\" RENAME TO \\\"\" + newIndexName + \"\\\"\";\n var down = schema ? \"ALTER INDEX \\\"\" + schema + \"\\\".\\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\" : \"ALTER INDEX \\\"\" + newIndexName + \"\\\" RENAME TO \\\"\" + index.name + \"\\\"\";\n upQueries.push(new Query(up));\n downQueries.push(new Query(down));\n // replace constraint name\n index.name = newIndexName;\n });\n // rename foreign key constraints\n clonedTable.findColumnForeignKeys(oldColumn).forEach(function (foreignKey) {\n // build new constraint name\n foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);\n foreignKey.columnNames.push(newColumn.name);\n var newForeignKeyName = _this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n // build queries\n upQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + foreignKey.name + \"\\\" TO \\\"\" + newForeignKeyName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + _this.escapePath(table) + \" RENAME CONSTRAINT \\\"\" + newForeignKeyName + \"\\\" TO \\\"\" + foreignKey.name + \"\\\"\"));\n // replace constraint name\n foreignKey.name = newForeignKeyName;\n });\n oldTableColumn = clonedTable.columns.find(function (column) { return column.name === oldColumn.name; });\n clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn)].name = newColumn.name;\n oldColumn.name = newColumn.name;\n _b.label = 9;\n case 9:\n if (newColumn.precision !== oldColumn.precision || newColumn.scale !== oldColumn.scale) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n if ((newColumn.type === \"enum\" || newColumn.type === \"simple-enum\")\n && (oldColumn.type === \"enum\" || oldColumn.type === \"simple-enum\")\n && (!OrmUtils.isArraysEqual(newColumn.enum, oldColumn.enum) || newColumn.enumName !== oldColumn.enumName)) {\n arraySuffix = newColumn.isArray ? \"[]\" : \"\";\n newEnumName = this.buildEnumName(table, newColumn);\n oldEnumName = this.buildEnumName(table, oldColumn);\n oldEnumNameWithoutSchema = this.buildEnumName(table, oldColumn, false);\n oldEnumNameWithSchema_old = this.buildEnumName(table, oldColumn, true, false, true);\n oldEnumNameWithoutSchema_old = this.buildEnumName(table, oldColumn, false, false, true);\n // rename old ENUM\n upQueries.push(new Query(\"ALTER TYPE \" + oldEnumName + \" RENAME TO \" + oldEnumNameWithoutSchema_old));\n downQueries.push(new Query(\"ALTER TYPE \" + oldEnumNameWithSchema_old + \" RENAME TO \" + oldEnumNameWithoutSchema));\n // create new ENUM\n upQueries.push(this.createEnumTypeSql(table, newColumn, newEnumName));\n downQueries.push(this.dropEnumTypeSql(table, newColumn, newEnumName));\n // if column have default value, we must drop it to avoid issues with type casting\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n // mark default as changed to prevent double update\n defaultValueChanged = true;\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n upType = \"\" + newEnumName + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + newEnumName + arraySuffix;\n downType = \"\" + oldEnumNameWithSchema_old + arraySuffix + \" USING \\\"\" + newColumn.name + \"\\\"::\\\"text\\\"::\" + oldEnumNameWithSchema_old + arraySuffix;\n // update column to use new type\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + upType));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + downType));\n // restore column default or create new one\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n // remove old ENUM\n upQueries.push(this.dropEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n downQueries.push(this.createEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));\n }\n if (oldColumn.isNullable !== newColumn.isNullable) {\n if (newColumn.isNullable) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" SET NOT NULL\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + oldColumn.name + \"\\\" DROP NOT NULL\"));\n }\n }\n if (oldColumn.comment !== newColumn.comment) {\n upQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + oldColumn.name + \"\\\" IS \" + this.escapeComment(newColumn.comment)));\n downQueries.push(new Query(\"COMMENT ON COLUMN \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\" IS \" + this.escapeComment(oldColumn.comment)));\n }\n if (newColumn.isPrimary !== oldColumn.isPrimary) {\n primaryColumns = clonedTable.primaryColumns;\n // if primary column state changed, we must always drop existed constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n }\n if (newColumn.isPrimary === true) {\n primaryColumns.push(newColumn);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = true;\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n else {\n primaryColumn = primaryColumns.find(function (c) { return c.name === newColumn.name; });\n primaryColumns.splice(primaryColumns.indexOf(primaryColumn), 1);\n column = clonedTable.columns.find(function (column) { return column.name === newColumn.name; });\n column.isPrimary = false;\n // if we have another primary keys, we must recreate constraint.\n if (primaryColumns.length > 0) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n }\n }\n }\n if (newColumn.isUnique !== oldColumn.isUnique) {\n if (newColumn.isUnique === true) {\n uniqueConstraint = new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table.name, [newColumn.name]),\n columnNames: [newColumn.name]\n });\n clonedTable.uniques.push(uniqueConstraint);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n }\n else {\n uniqueConstraint = clonedTable.uniques.find(function (unique) {\n return unique.columnNames.length === 1 && !!unique.columnNames.find(function (columnName) { return columnName === newColumn.name; });\n });\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint), 1);\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\\\"\" + newColumn.name + \"\\\")\"));\n }\n }\n if (oldColumn.isGenerated !== newColumn.isGenerated && newColumn.generationStrategy !== \"uuid\") {\n if (newColumn.isGenerated === true) {\n upQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n downQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n else {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT nextval('\" + this.buildSequenceName(table, newColumn, undefined, true) + \"')\"));\n upQueries.push(new Query(\"DROP SEQUENCE \" + this.buildSequenceName(table, newColumn)));\n downQueries.push(new Query(\"CREATE SEQUENCE \" + this.buildSequenceName(table, newColumn) + \" OWNED BY \" + this.escapePath(table) + \".\\\"\" + newColumn.name + \"\\\"\"));\n }\n }\n // the default might have changed when the enum changed\n if (newColumn.default !== oldColumn.default && !defaultValueChanged) {\n if (newColumn.default !== null && newColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + newColumn.default));\n if (oldColumn.default !== null && oldColumn.default !== undefined) {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n else {\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n }\n }\n else if (oldColumn.default !== null && oldColumn.default !== undefined) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" DROP DEFAULT\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" SET DEFAULT \" + oldColumn.default));\n }\n }\n if ((newColumn.spatialFeatureType || \"\").toLowerCase() !== (oldColumn.spatialFeatureType || \"\").toLowerCase() || newColumn.srid !== oldColumn.srid) {\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(newColumn)));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ALTER COLUMN \\\"\" + newColumn.name + \"\\\" TYPE \" + this.driver.createFullType(oldColumn)));\n }\n _b.label = 10;\n case 10: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 11:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n PostgresQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var changedColumns_1, changedColumns_1_1, _a, oldColumn, newColumn, e_4_1;\n var e_4, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 5, 6, 7]);\n changedColumns_1 = __values(changedColumns), changedColumns_1_1 = changedColumns_1.next();\n _c.label = 1;\n case 1:\n if (!!changedColumns_1_1.done) return [3 /*break*/, 4];\n _a = changedColumns_1_1.value, oldColumn = _a.oldColumn, newColumn = _a.newColumn;\n return [4 /*yield*/, this.changeColumn(tableOrName, oldColumn, newColumn)];\n case 2:\n _c.sent();\n _c.label = 3;\n case 3:\n changedColumns_1_1 = changedColumns_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_4_1 = _c.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (changedColumns_1_1 && !changedColumns_1_1.done && (_b = changedColumns_1.return)) _b.call(changedColumns_1);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n PostgresQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column, clonedTable, upQueries, downQueries, pkName, columnNames, tableColumn, pkName_2, columnNames_2, columnIndex, columnCheck, columnUnique, hasEnum, enumType, escapedEnumName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n clonedTable = table.clone();\n upQueries = [];\n downQueries = [];\n // drop primary key constraint\n if (column.isPrimary) {\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNames + \")\"));\n tableColumn = clonedTable.findColumnByName(column.name);\n tableColumn.isPrimary = false;\n // if primary key have multiple columns, we must recreate it without dropped column\n if (clonedTable.primaryColumns.length > 0) {\n pkName_2 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, clonedTable.primaryColumns.map(function (column) { return column.name; }));\n columnNames_2 = clonedTable.primaryColumns.map(function (primaryColumn) { return \"\\\"\" + primaryColumn.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" ADD CONSTRAINT \\\"\" + pkName_2 + \"\\\" PRIMARY KEY (\" + columnNames_2 + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(clonedTable) + \" DROP CONSTRAINT \\\"\" + pkName_2 + \"\\\"\"));\n }\n }\n columnIndex = clonedTable.indices.find(function (index) { return index.columnNames.length === 1 && index.columnNames[0] === column.name; });\n if (columnIndex) {\n clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);\n upQueries.push(this.dropIndexSql(table, columnIndex));\n downQueries.push(this.createIndexSql(table, columnIndex));\n }\n columnCheck = clonedTable.checks.find(function (check) { return !!check.columnNames && check.columnNames.length === 1 && check.columnNames[0] === column.name; });\n if (columnCheck) {\n clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);\n upQueries.push(this.dropCheckConstraintSql(table, columnCheck));\n downQueries.push(this.createCheckConstraintSql(table, columnCheck));\n }\n columnUnique = clonedTable.uniques.find(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (columnUnique) {\n clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);\n upQueries.push(this.dropUniqueConstraintSql(table, columnUnique));\n downQueries.push(this.createUniqueConstraintSql(table, columnUnique));\n }\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP COLUMN \\\"\" + column.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD \" + this.buildCreateColumnSql(table, column)));\n if (!(column.type === \"enum\" || column.type === \"simple-enum\")) return [3 /*break*/, 6];\n return [4 /*yield*/, this.hasEnumType(table, column)];\n case 4:\n hasEnum = _b.sent();\n if (!hasEnum) return [3 /*break*/, 6];\n return [4 /*yield*/, this.getEnumTypeName(table, column)];\n case 5:\n enumType = _b.sent();\n escapedEnumName = \"\\\"\" + enumType.enumTypeSchema + \"\\\".\\\"\" + enumType.enumTypeName + \"\\\"\";\n upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));\n downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));\n _b.label = 6;\n case 6: return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 7:\n _b.sent();\n clonedTable.removeColumn(column);\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n PostgresQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var columns_2, columns_2_1, column, e_5_1;\n var e_5, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n columns_2 = __values(columns), columns_2_1 = columns_2.next();\n _b.label = 1;\n case 1:\n if (!!columns_2_1.done) return [3 /*break*/, 4];\n column = columns_2_1.value;\n return [4 /*yield*/, this.dropColumn(tableOrName, column)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n columns_2_1 = columns_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_5_1 = _b.sent();\n e_5 = { error: e_5_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);\n }\n finally { if (e_5) throw e_5.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n PostgresQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n up = this.createPrimaryKeySql(table, columnNames);\n // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.\n clonedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n down = this.dropPrimaryKeySql(clonedTable);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n PostgresQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, clonedTable, columnNames, upQueries, downQueries, primaryColumns, pkName_3, columnNamesString_1, pkName, columnNamesString;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n clonedTable = table.clone();\n columnNames = columns.map(function (column) { return column.name; });\n upQueries = [];\n downQueries = [];\n primaryColumns = clonedTable.primaryColumns;\n if (primaryColumns.length > 0) {\n pkName_3 = this.connection.namingStrategy.primaryKeyName(clonedTable.name, primaryColumns.map(function (column) { return column.name; }));\n columnNamesString_1 = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName_3 + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName_3 + \"\\\" PRIMARY KEY (\" + columnNamesString_1 + \")\"));\n }\n // update columns in table.\n clonedTable.columns\n .filter(function (column) { return columnNames.indexOf(column.name) !== -1; })\n .forEach(function (column) { return column.isPrimary = true; });\n pkName = this.connection.namingStrategy.primaryKeyName(clonedTable.name, columnNames);\n columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n upQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + pkName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\"));\n downQueries.push(new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + pkName + \"\\\"\"));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 4:\n _b.sent();\n this.replaceCachedTable(table, clonedTable);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n PostgresQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n up = this.dropPrimaryKeySql(table);\n down = this.createPrimaryKeySql(table, table.primaryColumns.map(function (column) { return column.name; }));\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraint.\n */\n PostgresQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!uniqueConstraint.name)\n uniqueConstraint.name = this.connection.namingStrategy.uniqueConstraintName(table.name, uniqueConstraint.columnNames);\n up = this.createUniqueConstraintSql(table, uniqueConstraint);\n down = this.dropUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new unique constraints.\n */\n PostgresQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_1, uniqueConstraints_1_1, uniqueConstraint, e_6_1;\n var e_6, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_1 = __values(uniqueConstraints), uniqueConstraints_1_1 = uniqueConstraints_1.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_1_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_1_1.value;\n return [4 /*yield*/, this.createUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_1_1 = uniqueConstraints_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_6_1 = _b.sent();\n e_6 = { error: e_6_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_1_1 && !uniqueConstraints_1_1.done && (_a = uniqueConstraints_1.return)) _a.call(uniqueConstraints_1);\n }\n finally { if (e_6) throw e_6.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraint.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n up = this.dropUniqueConstraintSql(table, uniqueConstraint);\n down = this.createUniqueConstraintSql(table, uniqueConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeUniqueConstraint(uniqueConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops unique constraints.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var uniqueConstraints_2, uniqueConstraints_2_1, uniqueConstraint, e_7_1;\n var e_7, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n uniqueConstraints_2 = __values(uniqueConstraints), uniqueConstraints_2_1 = uniqueConstraints_2.next();\n _b.label = 1;\n case 1:\n if (!!uniqueConstraints_2_1.done) return [3 /*break*/, 4];\n uniqueConstraint = uniqueConstraints_2_1.value;\n return [4 /*yield*/, this.dropUniqueConstraint(tableOrName, uniqueConstraint)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n uniqueConstraints_2_1 = uniqueConstraints_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_7_1 = _b.sent();\n e_7 = { error: e_7_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (uniqueConstraints_2_1 && !uniqueConstraints_2_1.done && (_a = uniqueConstraints_2.return)) _a.call(uniqueConstraints_2);\n }\n finally { if (e_7) throw e_7.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n PostgresQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!checkConstraint.name)\n checkConstraint.name = this.connection.namingStrategy.checkConstraintName(table.name, checkConstraint.expression);\n up = this.createCheckConstraintSql(table, checkConstraint);\n down = this.dropCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n PostgresQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.createCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n PostgresQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n up = this.dropCheckConstraintSql(table, checkConstraint);\n down = this.createCheckConstraintSql(table, checkConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeCheckConstraint(checkConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n PostgresQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = checkConstraints.map(function (checkConstraint) { return _this.dropCheckConstraint(tableOrName, checkConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraint.\n */\n PostgresQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new unique constraint may be passed without name. In this case we generate unique name manually.\n if (!exclusionConstraint.name)\n exclusionConstraint.name = this.connection.namingStrategy.exclusionConstraintName(table.name, exclusionConstraint.expression);\n up = this.createExclusionConstraintSql(table, exclusionConstraint);\n down = this.dropExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new exclusion constraints.\n */\n PostgresQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.createExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, exclusionConstraint, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n exclusionConstraint = exclusionOrName instanceof TableExclusion ? exclusionOrName : table.exclusions.find(function (c) { return c.name === exclusionOrName; });\n if (!exclusionConstraint)\n throw new Error(\"Supplied exclusion constraint was not found in table \" + table.name);\n up = this.dropExclusionConstraintSql(table, exclusionConstraint);\n down = this.createExclusionConstraintSql(table, exclusionConstraint);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeExclusionConstraint(exclusionConstraint);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = exclusionConstraints.map(function (exclusionConstraint) { return _this.dropExclusionConstraint(tableOrName, exclusionConstraint); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n PostgresQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new FK may be passed without name. In this case we generate FK name manually.\n if (!foreignKey.name)\n foreignKey.name = this.connection.namingStrategy.foreignKeyName(table.name, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n up = this.createForeignKeySql(table, foreignKey);\n down = this.dropForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n PostgresQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_1, foreignKeys_1_1, foreignKey, e_8_1;\n var e_8, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_1 = __values(foreignKeys), foreignKeys_1_1 = foreignKeys_1.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_1_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_1_1.value;\n return [4 /*yield*/, this.createForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_1_1 = foreignKeys_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_8_1 = _b.sent();\n e_8 = { error: e_8_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_1_1 && !foreignKeys_1_1.done && (_a = foreignKeys_1.return)) _a.call(foreignKeys_1);\n }\n finally { if (e_8) throw e_8.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n up = this.dropForeignKeySql(table, foreignKey);\n down = this.createForeignKeySql(table, foreignKey);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeForeignKey(foreignKey);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n PostgresQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var foreignKeys_2, foreignKeys_2_1, foreignKey, e_9_1;\n var e_9, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n foreignKeys_2 = __values(foreignKeys), foreignKeys_2_1 = foreignKeys_2.next();\n _b.label = 1;\n case 1:\n if (!!foreignKeys_2_1.done) return [3 /*break*/, 4];\n foreignKey = foreignKeys_2_1.value;\n return [4 /*yield*/, this.dropForeignKey(tableOrName, foreignKey)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n foreignKeys_2_1 = foreignKeys_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_9_1 = _b.sent();\n e_9 = { error: e_9_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (foreignKeys_2_1 && !foreignKeys_2_1.done && (_a = foreignKeys_2.return)) _a.call(foreignKeys_2);\n }\n finally { if (e_9) throw e_9.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n PostgresQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n PostgresQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_1, indices_1_1, index, e_10_1;\n var e_10, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_1 = __values(indices), indices_1_1 = indices_1.next();\n _b.label = 1;\n case 1:\n if (!!indices_1_1.done) return [3 /*break*/, 4];\n index = indices_1_1.value;\n return [4 /*yield*/, this.createIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_1_1 = indices_1.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_10_1 = _b.sent();\n e_10 = { error: e_10_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_1_1 && !indices_1_1.done && (_a = indices_1.return)) _a.call(indices_1);\n }\n finally { if (e_10) throw e_10.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n PostgresQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(table, index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n PostgresQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var indices_2, indices_2_1, index, e_11_1;\n var e_11, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 7]);\n indices_2 = __values(indices), indices_2_1 = indices_2.next();\n _b.label = 1;\n case 1:\n if (!!indices_2_1.done) return [3 /*break*/, 4];\n index = indices_2_1.value;\n return [4 /*yield*/, this.dropIndex(tableOrName, index)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n indices_2_1 = indices_2.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_11_1 = _b.sent();\n e_11 = { error: e_11_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (indices_2_1 && !indices_2_1.done && (_a = indices_2.return)) _a.call(indices_2);\n }\n finally { if (e_11) throw e_11.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n PostgresQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"TRUNCATE TABLE \" + this.escapePath(tableName))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n PostgresQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var schemas, schemaNamesString, selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schemas = [];\n this.connection.entityMetadatas\n .filter(function (metadata) { return metadata.schema; })\n .forEach(function (metadata) {\n var isSchemaExist = !!schemas.find(function (schema) { return schema === metadata.schema; });\n if (!isSchemaExist)\n schemas.push(metadata.schema);\n });\n schemas.push(this.driver.options.schema || \"current_schema()\");\n schemaNamesString = schemas.map(function (name) {\n return name === \"current_schema()\" ? name : \"'\" + name + \"'\";\n }).join(\", \");\n return [4 /*yield*/, this.startTransaction()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n _a.trys.push([2, 9, , 14]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW IF EXISTS \\\"' || schemaname || '\\\".\\\"' || viewname || '\\\" CASCADE;' as \\\"query\\\" \" +\n (\"FROM \\\"pg_views\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"viewname\\\" NOT IN ('geography_columns', 'geometry_columns', 'raster_columns', 'raster_overviews')\");\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 3:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 4:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE IF EXISTS \\\"' || schemaname || '\\\".\\\"' || tablename || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_tables\\\" WHERE \\\"schemaname\\\" IN (\" + schemaNamesString + \") AND \\\"tablename\\\" NOT IN ('spatial_ref_sys')\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 5:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 6:\n _a.sent();\n return [4 /*yield*/, this.dropEnumTypes(schemaNamesString)];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 14];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n PostgresQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, currentSchemaQuery, currentSchema, viewsCondition, query, dbViews;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 2:\n currentSchemaQuery = _a.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewsCondition = viewNames.map(function (viewName) {\n var _a = __read(viewName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"t\\\".\\\"schema\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n query = \"SELECT \\\"t\\\".*, \\\"v\\\".\\\"check_option\\\" FROM \" + this.escapePath(this.getTypeormMetadataTableName()) + \" \\\"t\\\" \" +\n (\"INNER JOIN \\\"information_schema\\\".\\\"views\\\" \\\"v\\\" ON \\\"v\\\".\\\"table_schema\\\" = \\\"t\\\".\\\"schema\\\" AND \\\"v\\\".\\\"table_name\\\" = \\\"t\\\".\\\"name\\\" WHERE \\\"t\\\".\\\"type\\\" = 'VIEW' \" + (viewsCondition ? \"AND (\" + viewsCondition + \")\" : \"\"));\n return [4 /*yield*/, this.query(query)];\n case 3:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n var schema = dbView[\"schema\"] === currentSchema && !_this.driver.options.schema ? undefined : dbView[\"schema\"];\n view.name = _this.driver.buildTableName(dbView[\"name\"], schema);\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n PostgresQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, tablesCondition, tablesSql, columnsSql, constraintsCondition, constraintsSql, indicesSql, foreignKeysCondition, hasRelispartitionColumn, isPartitionCondition, foreignKeysSql, _a, dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n tablesCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n tablesSql = \"SELECT * FROM \\\"information_schema\\\".\\\"tables\\\" WHERE \" + tablesCondition;\n columnsSql = \"\\n SELECT columns.*,\\n pg_catalog.col_description(('\\\"' || table_catalog || '\\\".\\\"' || table_schema || '\\\".\\\"' || table_name || '\\\"')::regclass::oid, ordinal_position) AS description,\\n ('\\\"' || \\\"udt_schema\\\" || '\\\".\\\"' || \\\"udt_name\\\" || '\\\"')::\\\"regtype\\\" AS \\\"regtype\\\",\\n pg_catalog.format_type(\\\"col_attr\\\".\\\"atttypid\\\", \\\"col_attr\\\".\\\"atttypmod\\\") AS \\\"format_type\\\"\\n FROM \\\"information_schema\\\".\\\"columns\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_attribute\\\" AS \\\"col_attr\\\"\\n ON \\\"col_attr\\\".\\\"attname\\\" = \\\"columns\\\".\\\"column_name\\\"\\n AND \\\"col_attr\\\".\\\"attrelid\\\" = (\\n SELECT\\n \\\"cls\\\".\\\"oid\\\" FROM \\\"pg_catalog\\\".\\\"pg_class\\\" AS \\\"cls\\\"\\n LEFT JOIN \\\"pg_catalog\\\".\\\"pg_namespace\\\" AS \\\"ns\\\"\\n ON \\\"ns\\\".\\\"oid\\\" = \\\"cls\\\".\\\"relnamespace\\\"\\n WHERE \\\"cls\\\".\\\"relname\\\" = \\\"columns\\\".\\\"table_name\\\"\\n AND \\\"ns\\\".\\\"nspname\\\" = \\\"columns\\\".\\\"table_schema\\\"\\n )\\n WHERE\\n \" + tablesCondition;\n constraintsCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"t\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n constraintsSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"cnst\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \" +\n \"pg_get_constraintdef(\\\"cnst\\\".\\\"oid\\\") AS \\\"expression\\\", \" +\n \"CASE \\\"cnst\\\".\\\"contype\\\" WHEN 'p' THEN 'PRIMARY' WHEN 'u' THEN 'UNIQUE' WHEN 'c' THEN 'CHECK' WHEN 'x' THEN 'EXCLUDE' END AS \\\"constraint_type\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\" \" +\n \"FROM \\\"pg_constraint\\\" \\\"cnst\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"conrelid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"cnst\\\".\\\"connamespace\\\" \" +\n \"LEFT JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"cnst\\\".\\\"conrelid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"cnst\\\".\\\"conkey\\\") \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND (\" + constraintsCondition + \")\");\n indicesSql = \"SELECT \\\"ns\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"t\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"i\\\".\\\"relname\\\" AS \\\"constraint_name\\\", \\\"a\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"CASE \\\"ix\\\".\\\"indisunique\\\" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS \\\"is_unique\\\", pg_get_expr(\\\"ix\\\".\\\"indpred\\\", \\\"ix\\\".\\\"indrelid\\\") AS \\\"condition\\\", \" +\n \"\\\"types\\\".\\\"typname\\\" AS \\\"type_name\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_index\\\" \\\"ix\\\" ON \\\"ix\\\".\\\"indrelid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"a\\\" ON \\\"a\\\".\\\"attrelid\\\" = \\\"t\\\".\\\"oid\\\" AND \\\"a\\\".\\\"attnum\\\" = ANY (\\\"ix\\\".\\\"indkey\\\") \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"ns\\\".\\\"oid\\\" = \\\"t\\\".\\\"relnamespace\\\" \" +\n \"INNER JOIN \\\"pg_class\\\" \\\"i\\\" ON \\\"i\\\".\\\"oid\\\" = \\\"ix\\\".\\\"indexrelid\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"types\\\" ON \\\"types\\\".\\\"oid\\\" = \\\"a\\\".\\\"atttypid\\\" \" +\n \"LEFT JOIN \\\"pg_constraint\\\" \\\"cnst\\\" ON \\\"cnst\\\".\\\"conname\\\" = \\\"i\\\".\\\"relname\\\" \" +\n (\"WHERE \\\"t\\\".\\\"relkind\\\" IN ('r', 'p') AND \\\"cnst\\\".\\\"contype\\\" IS NULL AND (\" + constraintsCondition + \")\");\n foreignKeysCondition = tableNames.map(function (tableName) {\n var _a = __read(tableName.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = _this.driver.options.schema || currentSchema;\n }\n return \"(\\\"ns\\\".\\\"nspname\\\" = '\" + schema + \"' AND \\\"cl\\\".\\\"relname\\\" = '\" + name + \"')\";\n }).join(\" OR \");\n return [4 /*yield*/, this.hasSupportForPartitionedTables()];\n case 2:\n hasRelispartitionColumn = _b.sent();\n isPartitionCondition = hasRelispartitionColumn ? \" AND \\\"cl\\\".\\\"relispartition\\\" = 'f'\" : \"\";\n foreignKeysSql = \"SELECT \\\"con\\\".\\\"conname\\\" AS \\\"constraint_name\\\", \\\"con\\\".\\\"nspname\\\" AS \\\"table_schema\\\", \\\"con\\\".\\\"relname\\\" AS \\\"table_name\\\", \\\"att2\\\".\\\"attname\\\" AS \\\"column_name\\\", \" +\n \"\\\"ns\\\".\\\"nspname\\\" AS \\\"referenced_table_schema\\\", \\\"cl\\\".\\\"relname\\\" AS \\\"referenced_table_name\\\", \\\"att\\\".\\\"attname\\\" AS \\\"referenced_column_name\\\", \\\"con\\\".\\\"confdeltype\\\" AS \\\"on_delete\\\", \" +\n \"\\\"con\\\".\\\"confupdtype\\\" AS \\\"on_update\\\", \\\"con\\\".\\\"condeferrable\\\" AS \\\"deferrable\\\", \\\"con\\\".\\\"condeferred\\\" AS \\\"deferred\\\" \" +\n \"FROM ( \" +\n \"SELECT UNNEST (\\\"con1\\\".\\\"conkey\\\") AS \\\"parent\\\", UNNEST (\\\"con1\\\".\\\"confkey\\\") AS \\\"child\\\", \\\"con1\\\".\\\"confrelid\\\", \\\"con1\\\".\\\"conrelid\\\", \\\"con1\\\".\\\"conname\\\", \\\"con1\\\".\\\"contype\\\", \\\"ns\\\".\\\"nspname\\\", \" +\n \"\\\"cl\\\".\\\"relname\\\", \\\"con1\\\".\\\"condeferrable\\\", \" +\n \"CASE WHEN \\\"con1\\\".\\\"condeferred\\\" THEN 'INITIALLY DEFERRED' ELSE 'INITIALLY IMMEDIATE' END as condeferred, \" +\n \"CASE \\\"con1\\\".\\\"confdeltype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confdeltype\\\", \" +\n \"CASE \\\"con1\\\".\\\"confupdtype\\\" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as \\\"confupdtype\\\" \" +\n \"FROM \\\"pg_class\\\" \\\"cl\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_constraint\\\" \\\"con1\\\" ON \\\"con1\\\".\\\"conrelid\\\" = \\\"cl\\\".\\\"oid\\\" \" +\n (\"WHERE \\\"con1\\\".\\\"contype\\\" = 'f' AND (\" + foreignKeysCondition + \") \") +\n \") \\\"con\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att\\\" ON \\\"att\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"confrelid\\\" AND \\\"att\\\".\\\"attnum\\\" = \\\"con\\\".\\\"child\\\" \" +\n (\"INNER JOIN \\\"pg_class\\\" \\\"cl\\\" ON \\\"cl\\\".\\\"oid\\\" = \\\"con\\\".\\\"confrelid\\\" \" + isPartitionCondition) +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"ns\\\" ON \\\"cl\\\".\\\"relnamespace\\\" = \\\"ns\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_attribute\\\" \\\"att2\\\" ON \\\"att2\\\".\\\"attrelid\\\" = \\\"con\\\".\\\"conrelid\\\" AND \\\"att2\\\".\\\"attnum\\\" = \\\"con\\\".\\\"parent\\\"\";\n return [4 /*yield*/, Promise.all([\n this.query(tablesSql),\n this.query(columnsSql),\n this.query(constraintsSql),\n this.query(indicesSql),\n this.query(foreignKeysSql),\n ])];\n case 3:\n _a = __read.apply(void 0, [_b.sent(), 5]), dbTables = _a[0], dbColumns = _a[1], dbConstraints = _a[2], dbIndices = _a[3], dbForeignKeys = _a[4];\n // if tables were not found in the db, no need to proceed\n if (!dbTables.length)\n return [2 /*return*/, []];\n // create tables for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, getSchemaFromKey, schema, tableFullName, _a, tableUniqueConstraints, tableCheckConstraints, tableExclusionConstraints, tableForeignKeyConstraints, tableIndexConstraints;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n table = new Table();\n getSchemaFromKey = function (dbObject, key) { return dbObject[key] === currentSchema && !_this.driver.options.schema ? undefined : dbObject[key]; };\n schema = getSchemaFromKey(dbTable, \"table_schema\");\n table.name = this.driver.buildTableName(dbTable[\"table_name\"], schema);\n tableFullName = this.driver.buildTableName(dbTable[\"table_name\"], dbTable[\"table_schema\"]);\n // create columns from the loaded columns\n _a = table;\n return [4 /*yield*/, Promise.all(dbColumns\n .filter(function (dbColumn) { return _this.driver.buildTableName(dbColumn[\"table_name\"], dbColumn[\"table_schema\"]) === tableFullName; })\n .map(function (dbColumn) { return __awaiter(_this, void 0, void 0, function () {\n var columnConstraints, tableColumn, type, enumTypeName, builtEnumName, sql, results, geometryColumnSql, results, geographyColumnSql, results, length_1, match, uniqueConstraint, isConstraintComposite;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n columnConstraints = dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName && dbConstraint[\"column_name\"] === dbColumn[\"column_name\"];\n });\n tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"column_name\"];\n tableColumn.type = dbColumn[\"regtype\"].toLowerCase();\n if (tableColumn.type === \"numeric\" || tableColumn.type === \"decimal\" || tableColumn.type === \"float\") {\n // If one of these properties was set, and another was not, Postgres sets '0' in to unspecified property\n // we set 'undefined' in to unspecified property to avoid changing column on sync\n if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.precision = dbColumn[\"numeric_precision\"];\n }\n else if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.precision = undefined;\n }\n if (dbColumn[\"numeric_scale\"] !== null && !this.isDefaultColumnScale(table, tableColumn, dbColumn[\"numeric_scale\"])) {\n tableColumn.scale = dbColumn[\"numeric_scale\"];\n }\n else if (dbColumn[\"numeric_precision\"] !== null && !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"numeric_precision\"])) {\n tableColumn.scale = undefined;\n }\n }\n if (dbColumn[\"data_type\"].toLowerCase() === \"array\") {\n tableColumn.isArray = true;\n type = tableColumn.type.replace(\"[]\", \"\");\n tableColumn.type = this.connection.driver.normalizeType({ type: type });\n }\n if (tableColumn.type === \"interval\"\n || tableColumn.type === \"time without time zone\"\n || tableColumn.type === \"time with time zone\"\n || tableColumn.type === \"timestamp without time zone\"\n || tableColumn.type === \"timestamp with time zone\") {\n tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn[\"datetime_precision\"]) ? dbColumn[\"datetime_precision\"] : undefined;\n }\n if (!(tableColumn.type.indexOf(\"enum\") !== -1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.getEnumTypeName(table, tableColumn)];\n case 1:\n enumTypeName = (_a.sent()).enumTypeName;\n builtEnumName = this.buildEnumName(table, tableColumn, false, true);\n if (builtEnumName !== enumTypeName)\n tableColumn.enumName = enumTypeName;\n tableColumn.type = \"enum\";\n sql = \"SELECT \\\"e\\\".\\\"enumlabel\\\" AS \\\"value\\\" FROM \\\"pg_enum\\\" \\\"e\\\" \" +\n \"INNER JOIN \\\"pg_type\\\" \\\"t\\\" ON \\\"t\\\".\\\"oid\\\" = \\\"e\\\".\\\"enumtypid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = '\" + dbTable[\"table_schema\"] + \"' AND \\\"t\\\".\\\"typname\\\" = '\" + this.buildEnumName(table, tableColumn, false, true) + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 2:\n results = _a.sent();\n tableColumn.enum = results.map(function (result) { return result[\"value\"]; });\n _a.label = 3;\n case 3:\n if (!(tableColumn.type === \"geometry\")) return [3 /*break*/, 5];\n geometryColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geometry_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geometry_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geometryColumnSql)];\n case 4:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 5;\n case 5:\n if (!(tableColumn.type === \"geography\")) return [3 /*break*/, 7];\n geographyColumnSql = \"SELECT * FROM (\\n SELECT\\n \\\"f_table_schema\\\" \\\"table_schema\\\",\\n \\\"f_table_name\\\" \\\"table_name\\\",\\n \\\"f_geography_column\\\" \\\"column_name\\\",\\n \\\"srid\\\",\\n \\\"type\\\"\\n FROM \\\"geography_columns\\\"\\n ) AS _\\n WHERE (\" + tablesCondition + \") AND \\\"column_name\\\" = '\" + tableColumn.name + \"' AND \\\"table_name\\\" = '\" + dbTable[\"table_name\"] + \"'\";\n return [4 /*yield*/, this.query(geographyColumnSql)];\n case 6:\n results = _a.sent();\n tableColumn.spatialFeatureType = results[0].type;\n tableColumn.srid = results[0].srid;\n _a.label = 7;\n case 7:\n // check only columns that have length property\n if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1) {\n if (tableColumn.isArray) {\n match = /\\((\\d+)\\)/.exec(dbColumn[\"format_type\"]);\n length_1 = match ? match[1] : undefined;\n }\n else if (dbColumn[\"character_maximum_length\"]) {\n length_1 = dbColumn[\"character_maximum_length\"].toString();\n }\n if (length_1) {\n tableColumn.length = !this.isDefaultColumnLength(table, tableColumn, length_1) ? length_1 : \"\";\n }\n }\n tableColumn.isNullable = dbColumn[\"is_nullable\"] === \"YES\";\n tableColumn.isPrimary = !!columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"PRIMARY\"; });\n uniqueConstraint = columnConstraints.find(function (constraint) { return constraint[\"constraint_type\"] === \"UNIQUE\"; });\n isConstraintComposite = uniqueConstraint\n ? !!dbConstraints.find(function (dbConstraint) { return dbConstraint[\"constraint_type\"] === \"UNIQUE\"\n && dbConstraint[\"constraint_name\"] === uniqueConstraint[\"constraint_name\"]\n && dbConstraint[\"column_name\"] !== dbColumn[\"column_name\"]; })\n : false;\n tableColumn.isUnique = !!uniqueConstraint && !isConstraintComposite;\n if (dbColumn[\"column_default\"] !== null && dbColumn[\"column_default\"] !== undefined) {\n if (dbColumn[\"column_default\"].replace(/\"/gi, \"\") === \"nextval('\" + this.buildSequenceName(table, dbColumn[\"column_name\"], currentSchema, true) + \"'::regclass)\") {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"increment\";\n }\n else if (dbColumn[\"column_default\"] === \"gen_random_uuid()\" || /^uuid_generate_v\\d\\(\\)/.test(dbColumn[\"column_default\"])) {\n tableColumn.isGenerated = true;\n tableColumn.generationStrategy = \"uuid\";\n }\n else {\n tableColumn.default = dbColumn[\"column_default\"].replace(/::.*/, \"\");\n tableColumn.default = tableColumn.default.replace(/^(-?\\d+)$/, \"'$1'\");\n }\n }\n tableColumn.comment = dbColumn[\"description\"] ? dbColumn[\"description\"] : undefined;\n if (dbColumn[\"character_set_name\"])\n tableColumn.charset = dbColumn[\"character_set_name\"];\n if (dbColumn[\"collation_name\"])\n tableColumn.collation = dbColumn[\"collation_name\"];\n return [2 /*return*/, tableColumn];\n }\n });\n }); }))];\n case 1:\n // create columns from the loaded columns\n _a.columns = _b.sent();\n tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"UNIQUE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.uniques = tableUniqueConstraints.map(function (constraint) {\n var uniques = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableUnique({\n name: constraint[\"constraint_name\"],\n columnNames: uniques.map(function (u) { return u[\"column_name\"]; })\n });\n });\n tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"CHECK\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.checks = tableCheckConstraints.map(function (constraint) {\n var checks = dbConstraints.filter(function (dbC) { return dbC[\"constraint_name\"] === constraint[\"constraint_name\"]; });\n return new TableCheck({\n name: constraint[\"constraint_name\"],\n columnNames: checks.map(function (c) { return c[\"column_name\"]; }),\n expression: constraint[\"expression\"].replace(/^\\s*CHECK\\s*\\((.*)\\)\\s*$/i, \"$1\")\n });\n });\n tableExclusionConstraints = OrmUtils.uniq(dbConstraints.filter(function (dbConstraint) {\n return _this.driver.buildTableName(dbConstraint[\"table_name\"], dbConstraint[\"table_schema\"]) === tableFullName\n && dbConstraint[\"constraint_type\"] === \"EXCLUDE\";\n }), function (dbConstraint) { return dbConstraint[\"constraint_name\"]; });\n table.exclusions = tableExclusionConstraints.map(function (constraint) {\n return new TableExclusion({\n name: constraint[\"constraint_name\"],\n expression: constraint[\"expression\"].substring(8) // trim EXCLUDE from start of expression\n });\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter(function (dbForeignKey) {\n return _this.driver.buildTableName(dbForeignKey[\"table_name\"], dbForeignKey[\"table_schema\"]) === tableFullName;\n }), function (dbForeignKey) { return dbForeignKey[\"constraint_name\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (dbForeignKey) {\n var foreignKeys = dbForeignKeys.filter(function (dbFk) { return dbFk[\"constraint_name\"] === dbForeignKey[\"constraint_name\"]; });\n // if referenced table located in currently used schema, we don't need to concat schema name to table name.\n var schema = getSchemaFromKey(dbForeignKey, \"referenced_table_schema\");\n var referencedTableName = _this.driver.buildTableName(dbForeignKey[\"referenced_table_name\"], schema);\n return new TableForeignKey({\n name: dbForeignKey[\"constraint_name\"],\n columnNames: foreignKeys.map(function (dbFk) { return dbFk[\"column_name\"]; }),\n referencedTableName: referencedTableName,\n referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk[\"referenced_column_name\"]; }),\n onDelete: dbForeignKey[\"on_delete\"],\n onUpdate: dbForeignKey[\"on_update\"],\n deferrable: dbForeignKey[\"deferrable\"] ? dbForeignKey[\"deferred\"] : undefined,\n });\n });\n tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(function (dbIndex) {\n return _this.driver.buildTableName(dbIndex[\"table_name\"], dbIndex[\"table_schema\"]) === tableFullName;\n }), function (dbIndex) { return dbIndex[\"constraint_name\"]; });\n table.indices = tableIndexConstraints.map(function (constraint) {\n var indices = dbIndices.filter(function (index) {\n return index[\"table_schema\"] === constraint[\"table_schema\"]\n && index[\"table_name\"] === constraint[\"table_name\"]\n && index[\"constraint_name\"] === constraint[\"constraint_name\"];\n });\n return new TableIndex({\n table: table,\n name: constraint[\"constraint_name\"],\n columnNames: indices.map(function (i) { return i[\"column_name\"]; }),\n isUnique: constraint[\"is_unique\"] === \"TRUE\",\n where: constraint[\"condition\"],\n isSpatial: indices.every(function (i) { return _this.driver.spatialTypes.indexOf(i[\"type_name\"]) >= 0; }),\n isFulltext: false\n });\n });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n PostgresQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(table, column); }).join(\", \");\n var sql = \"CREATE TABLE \" + this.escapePath(table) + \" (\" + columnDefinitions;\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.exclusions.length > 0) {\n var exclusionsSql = table.exclusions.map(function (exclusion) {\n var exclusionName = exclusion.name ? exclusion.name : _this.connection.namingStrategy.exclusionConstraintName(table.name, exclusion.expression);\n return \"CONSTRAINT \\\"\" + exclusionName + \"\\\" EXCLUDE \" + exclusion.expression;\n }).join(\", \");\n sql += \", \" + exclusionsSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \" + _this.escapePath(fk.referencedTableName) + \" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n if (fk.deferrable)\n constraint += \" DEFERRABLE \" + fk.deferrable;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n if (primaryColumns.length > 0) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, primaryColumns.map(function (column) { return column.name; }));\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n table.columns\n .filter(function (it) { return it.comment; })\n .forEach(function (it) { return sql += \"; COMMENT ON COLUMN \" + _this.escapePath(table) + \".\\\"\" + it.name + \"\\\" IS \" + _this.escapeComment(it.comment); });\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n PostgresQueryRunner.prototype.dropTableSql = function (tableOrPath) {\n return new Query(\"DROP TABLE \" + this.escapePath(tableOrPath));\n };\n PostgresQueryRunner.prototype.createViewSql = function (view) {\n var materializedClause = view.materialized ? \"MATERIALIZED \" : \"\";\n var viewName = this.escapePath(view);\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE \" + materializedClause + \"VIEW \" + viewName + \" AS \" + view.expression(this.connection).getQuery());\n }\n };\n PostgresQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, splittedName, schema, name, expression, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n splittedName = view.name.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = view.name;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", schema: schema, name: name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Builds drop view sql.\n */\n PostgresQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n return new Query(\"DROP VIEW \" + this.escapePath(viewOrPath));\n };\n /**\n * Builds remove view sql.\n */\n PostgresQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, viewName, splittedName, schema, name, qb, _a, query, parameters;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n splittedName = viewName.split(\".\");\n schema = this.driver.options.schema || currentSchema;\n name = viewName;\n if (splittedName.length === 2) {\n schema = splittedName[0];\n name = splittedName[1];\n }\n qb = this.connection.createQueryBuilder();\n _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"schema\") + \" = :schema\", { schema: schema })\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: name })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return [2 /*return*/, new Query(query, parameters)];\n }\n });\n });\n };\n /**\n * Extracts schema name from given Table object or table name string.\n */\n PostgresQueryRunner.prototype.extractSchema = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n return tableName.indexOf(\".\") === -1 ? this.driver.options.schema : tableName.split(\".\")[0];\n };\n /**\n * Drops ENUM type from given schemas.\n */\n PostgresQueryRunner.prototype.dropEnumTypes = function (schemaNames) {\n return __awaiter(this, void 0, void 0, function () {\n var selectDropsQuery, dropQueries;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n selectDropsQuery = \"SELECT 'DROP TYPE IF EXISTS \\\"' || n.nspname || '\\\".\\\"' || t.typname || '\\\" CASCADE;' as \\\"query\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_enum\\\" \\\"e\\\" ON \\\"e\\\".\\\"enumtypid\\\" = \\\"t\\\".\\\"oid\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" IN (\" + schemaNames + \") GROUP BY \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\"\");\n return [4 /*yield*/, this.query(selectDropsQuery)];\n case 1:\n dropQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Checks if enum with the given name exist in the database.\n */\n PostgresQueryRunner.prototype.hasEnumType = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var schema, enumName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n schema = this.parseTableName(table).schema;\n enumName = this.buildEnumName(table, column, false, true);\n sql = \"SELECT \\\"n\\\".\\\"nspname\\\", \\\"t\\\".\\\"typname\\\" FROM \\\"pg_type\\\" \\\"t\\\" \" +\n \"INNER JOIN \\\"pg_namespace\\\" \\\"n\\\" ON \\\"n\\\".\\\"oid\\\" = \\\"t\\\".\\\"typnamespace\\\" \" +\n (\"WHERE \\\"n\\\".\\\"nspname\\\" = \" + schema + \" AND \\\"t\\\".\\\"typname\\\" = '\" + enumName + \"'\");\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.createEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n var enumValues = column.enum.map(function (value) { return \"'\" + value.replace(\"'\", \"''\") + \"'\"; }).join(\", \");\n return new Query(\"CREATE TYPE \" + enumName + \" AS ENUM(\" + enumValues + \")\");\n };\n /**\n * Builds create ENUM type sql.\n */\n PostgresQueryRunner.prototype.dropEnumTypeSql = function (table, column, enumName) {\n if (!enumName)\n enumName = this.buildEnumName(table, column);\n return new Query(\"DROP TYPE \" + enumName);\n };\n /**\n * Builds create index sql.\n */\n PostgresQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \" + this.escapePath(table) + \" \" + (index.isSpatial ? \"USING GiST \" : \"\") + \"(\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n PostgresQueryRunner.prototype.dropIndexSql = function (table, indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n var schema = this.extractSchema(table);\n return schema ? new Query(\"DROP INDEX \\\"\" + schema + \"\\\".\\\"\" + indexName + \"\\\"\") : new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds create primary key sql.\n */\n PostgresQueryRunner.prototype.createPrimaryKeySql = function (table, columnNames) {\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n var columnNamesString = columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + primaryKeyName + \"\\\" PRIMARY KEY (\" + columnNamesString + \")\");\n };\n /**\n * Builds drop primary key sql.\n */\n PostgresQueryRunner.prototype.dropPrimaryKeySql = function (table) {\n var columnNames = table.primaryColumns.map(function (column) { return column.name; });\n var primaryKeyName = this.connection.namingStrategy.primaryKeyName(table.name, columnNames);\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + primaryKeyName + \"\\\"\");\n };\n /**\n * Builds create unique constraint sql.\n */\n PostgresQueryRunner.prototype.createUniqueConstraintSql = function (table, uniqueConstraint) {\n var columnNames = uniqueConstraint.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + uniqueConstraint.name + \"\\\" UNIQUE (\" + columnNames + \")\");\n };\n /**\n * Builds drop unique constraint sql.\n */\n PostgresQueryRunner.prototype.dropUniqueConstraintSql = function (table, uniqueOrName) {\n var uniqueName = uniqueOrName instanceof TableUnique ? uniqueOrName.name : uniqueOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + uniqueName + \"\\\"\");\n };\n /**\n * Builds create check constraint sql.\n */\n PostgresQueryRunner.prototype.createCheckConstraintSql = function (table, checkConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + checkConstraint.name + \"\\\" CHECK (\" + checkConstraint.expression + \")\");\n };\n /**\n * Builds drop check constraint sql.\n */\n PostgresQueryRunner.prototype.dropCheckConstraintSql = function (table, checkOrName) {\n var checkName = checkOrName instanceof TableCheck ? checkOrName.name : checkOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + checkName + \"\\\"\");\n };\n /**\n * Builds create exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.createExclusionConstraintSql = function (table, exclusionConstraint) {\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + exclusionConstraint.name + \"\\\" EXCLUDE \" + exclusionConstraint.expression);\n };\n /**\n * Builds drop exclusion constraint sql.\n */\n PostgresQueryRunner.prototype.dropExclusionConstraintSql = function (table, exclusionOrName) {\n var exclusionName = exclusionOrName instanceof TableExclusion ? exclusionOrName.name : exclusionOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + exclusionName + \"\\\"\");\n };\n /**\n * Builds create foreign key sql.\n */\n PostgresQueryRunner.prototype.createForeignKeySql = function (table, foreignKey) {\n var columnNames = foreignKey.columnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\", \");\n var referencedColumnNames = foreignKey.referencedColumnNames.map(function (column) { return \"\\\"\" + column + \"\\\"\"; }).join(\",\");\n var sql = \"ALTER TABLE \" + this.escapePath(table) + \" ADD CONSTRAINT \\\"\" + foreignKey.name + \"\\\" FOREIGN KEY (\" + columnNames + \") \" +\n (\"REFERENCES \" + this.escapePath(foreignKey.referencedTableName) + \"(\" + referencedColumnNames + \")\");\n if (foreignKey.onDelete)\n sql += \" ON DELETE \" + foreignKey.onDelete;\n if (foreignKey.onUpdate)\n sql += \" ON UPDATE \" + foreignKey.onUpdate;\n if (foreignKey.deferrable)\n sql += \" DEFERRABLE \" + foreignKey.deferrable;\n return new Query(sql);\n };\n /**\n * Builds drop foreign key sql.\n */\n PostgresQueryRunner.prototype.dropForeignKeySql = function (table, foreignKeyOrName) {\n var foreignKeyName = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName.name : foreignKeyOrName;\n return new Query(\"ALTER TABLE \" + this.escapePath(table) + \" DROP CONSTRAINT \\\"\" + foreignKeyName + \"\\\"\");\n };\n /**\n * Builds sequence name from given table and column.\n */\n PostgresQueryRunner.prototype.buildSequenceName = function (table, columnOrName, currentSchema, disableEscape, skipSchema) {\n var columnName = columnOrName instanceof TableColumn ? columnOrName.name : columnOrName;\n var schema = undefined;\n var tableName = undefined;\n if (table.name.indexOf(\".\") === -1) {\n tableName = table.name;\n }\n else {\n schema = table.name.split(\".\")[0];\n tableName = table.name.split(\".\")[1];\n }\n var seqName = tableName + \"_\" + columnName + \"_seq\";\n if (seqName.length > this.connection.driver.maxAliasLength) // note doesn't yet handle corner cases where .length differs from number of UTF-8 bytes\n seqName = tableName.substring(0, 29) + \"_\" + columnName.substring(0, Math.max(29, 63 - tableName.length - 5)) + \"_seq\";\n if (schema && schema !== currentSchema && !skipSchema) {\n return disableEscape ? schema + \".\" + seqName : \"\\\"\" + schema + \"\\\".\\\"\" + seqName + \"\\\"\";\n }\n else {\n return disableEscape ? \"\" + seqName : \"\\\"\" + seqName + \"\\\"\";\n }\n };\n /**\n * Builds ENUM type name from given table and column.\n */\n PostgresQueryRunner.prototype.buildEnumName = function (table, column, withSchema, disableEscape, toOld) {\n if (withSchema === void 0) { withSchema = true; }\n var schema = table.name.indexOf(\".\") === -1 ? this.driver.options.schema : table.name.split(\".\")[0];\n var tableName = table.name.indexOf(\".\") === -1 ? table.name : table.name.split(\".\")[1];\n var enumName = column.enumName ? column.enumName : tableName + \"_\" + column.name.toLowerCase() + \"_enum\";\n if (schema && withSchema)\n enumName = schema + \".\" + enumName;\n if (toOld)\n enumName = enumName + \"_old\";\n return enumName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n PostgresQueryRunner.prototype.getEnumTypeName = function (table, column) {\n return __awaiter(this, void 0, void 0, function () {\n var currentSchemaQuery, currentSchema, _a, schema, name, result, udtName;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT * FROM current_schema()\")];\n case 1:\n currentSchemaQuery = _b.sent();\n currentSchema = currentSchemaQuery[0][\"current_schema\"];\n _a = __read(table.name.split(\".\"), 2), schema = _a[0], name = _a[1];\n if (!name) {\n name = schema;\n schema = this.driver.options.schema || currentSchema;\n }\n return [4 /*yield*/, this.query(\"SELECT \\\"udt_schema\\\", \\\"udt_name\\\" \" +\n (\"FROM \\\"information_schema\\\".\\\"columns\\\" WHERE \\\"table_schema\\\" = '\" + schema + \"' AND \\\"table_name\\\" = '\" + name + \"' AND \\\"column_name\\\"='\" + column.name + \"'\"))];\n case 2:\n result = _b.sent();\n udtName = result[0][\"udt_name\"];\n if (udtName.indexOf(\"_\") === 0) {\n udtName = udtName.substr(1, udtName.length);\n }\n return [2 /*return*/, {\n enumTypeSchema: result[0][\"udt_schema\"],\n enumTypeName: udtName\n }];\n }\n });\n });\n };\n /**\n * Escapes a given comment so it's safe to include in a query.\n */\n PostgresQueryRunner.prototype.escapeComment = function (comment) {\n if (!comment || comment.length === 0) {\n return \"NULL\";\n }\n comment = comment\n .replace(/'/g, \"''\")\n .replace(\"\\0\", \"\"); // Null bytes aren't allowed in comments\n return \"'\" + comment + \"'\";\n };\n /**\n * Escapes given table or view path.\n */\n PostgresQueryRunner.prototype.escapePath = function (target, disableEscape) {\n var tableName = target instanceof Table || target instanceof View ? target.name : target;\n tableName = tableName.indexOf(\".\") === -1 && this.driver.options.schema ? this.driver.options.schema + \".\" + tableName : tableName;\n return tableName.split(\".\").map(function (i) {\n return disableEscape ? i : \"\\\"\" + i + \"\\\"\";\n }).join(\".\");\n };\n /**\n * Returns object with table schema and table name.\n */\n PostgresQueryRunner.prototype.parseTableName = function (target) {\n var tableName = target instanceof Table ? target.name : target;\n if (tableName.indexOf(\".\") === -1) {\n return {\n schema: this.driver.options.schema ? \"'\" + this.driver.options.schema + \"'\" : \"current_schema()\",\n tableName: \"'\" + tableName + \"'\"\n };\n }\n else {\n return {\n schema: \"'\" + tableName.split(\".\")[0] + \"'\",\n tableName: \"'\" + tableName.split(\".\")[1] + \"'\"\n };\n }\n };\n /**\n * Builds a query for create column.\n */\n PostgresQueryRunner.prototype.buildCreateColumnSql = function (table, column) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column.isGenerated === true && column.generationStrategy !== \"uuid\") {\n if (column.type === \"integer\" || column.type === \"int\" || column.type === \"int4\")\n c += \" SERIAL\";\n if (column.type === \"smallint\" || column.type === \"int2\")\n c += \" SMALLSERIAL\";\n if (column.type === \"bigint\" || column.type === \"int8\")\n c += \" BIGSERIAL\";\n }\n if (column.type === \"enum\" || column.type === \"simple-enum\") {\n c += \" \" + this.buildEnumName(table, column);\n if (column.isArray)\n c += \" array\";\n }\n else if (!column.isGenerated || column.type === \"uuid\") {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.charset)\n c += \" CHARACTER SET \\\"\" + column.charset + \"\\\"\";\n if (column.collation)\n c += \" COLLATE \\\"\" + column.collation + \"\\\"\";\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT \" + column.default;\n if (column.isGenerated && column.generationStrategy === \"uuid\" && !column.default)\n c += \" DEFAULT \" + this.driver.uuidGenerator;\n return c;\n };\n /**\n * Checks if the PostgreSQL server has support for partitioned tables\n */\n PostgresQueryRunner.prototype.hasSupportForPartitionedTables = function () {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"SELECT TRUE FROM information_schema.columns WHERE table_name = 'pg_class' and column_name = 'relispartition'\")];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n return PostgresQueryRunner;\n}(BaseQueryRunner));\nexport { PostgresQueryRunner };\n\n//# sourceMappingURL=PostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { PostgresQueryRunner } from \"../postgres/PostgresQueryRunner\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nvar PostgresQueryRunnerWrapper = /** @class */ (function (_super) {\n __extends(PostgresQueryRunnerWrapper, _super);\n function PostgresQueryRunnerWrapper(driver, mode) {\n return _super.call(this, driver, mode) || this;\n }\n return PostgresQueryRunnerWrapper;\n}(PostgresQueryRunner));\n/**\n * Runs queries on a single postgres database connection.\n */\nvar AuroraDataApiPostgresQueryRunner = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresQueryRunner(driver, client, mode) {\n var _this = _super.call(this, driver, mode) || this;\n _this.client = client;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.connect = function () {\n var _this = this;\n if (this.databaseConnection)\n return Promise.resolve(this.databaseConnection);\n if (this.databaseConnectionPromise)\n return this.databaseConnectionPromise;\n if (this.mode === \"slave\" && this.driver.isReplicated) {\n this.databaseConnectionPromise = this.driver.obtainSlaveConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n else { // master\n this.databaseConnectionPromise = this.driver.obtainMasterConnection().then(function (_a) {\n var _b = __read(_a, 2), connection = _b[0], release = _b[1];\n _this.driver.connectedQueryRunners.push(_this);\n _this.databaseConnection = connection;\n _this.releaseCallback = release;\n return _this.databaseConnection;\n });\n }\n return this.databaseConnectionPromise;\n };\n /**\n * Starts transaction on the current connection.\n */\n AuroraDataApiPostgresQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.client.startTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.commitTransaction()];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AuroraDataApiPostgresQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.client.rollbackTransaction()];\n case 3:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n AuroraDataApiPostgresQueryRunner.prototype.query = function (query, parameters) {\n return __awaiter(this, void 0, void 0, function () {\n var result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return [4 /*yield*/, this.client.query(query, parameters)];\n case 1:\n result = _a.sent();\n if (result.records) {\n return [2 /*return*/, result.records];\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n return AuroraDataApiPostgresQueryRunner;\n}(PostgresQueryRunnerWrapper));\nexport { AuroraDataApiPostgresQueryRunner };\n\n//# sourceMappingURL=AuroraDataApiPostgresQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { PostgresDriver } from \"../postgres/PostgresDriver\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { AuroraDataApiPostgresQueryRunner } from \"../aurora-data-api-pg/AuroraDataApiPostgresQueryRunner\";\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\";\nvar PostgresWrapper = /** @class */ (function (_super) {\n __extends(PostgresWrapper, _super);\n function PostgresWrapper() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return PostgresWrapper;\n}(PostgresDriver));\nvar AuroraDataApiPostgresDriver = /** @class */ (function (_super) {\n __extends(AuroraDataApiPostgresDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AuroraDataApiPostgresDriver(connection) {\n var _this = _super.call(this) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.isReplicated = false;\n // load data-api package\n _this.loadDependencies();\n _this.client = new _this.DataApiDriver(_this.options.region, _this.options.secretArn, _this.options.resourceArn, _this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, _this.options.serviceConfigOptions, _this.options.formatOptions);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n AuroraDataApiPostgresDriver.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Closes connection with database.\n */\n AuroraDataApiPostgresDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n AuroraDataApiPostgresDriver.prototype.createQueryRunner = function (mode) {\n var _this = this;\n return new AuroraDataApiPostgresQueryRunner(this, new this.DataApiDriver(this.options.region, this.options.secretArn, this.options.resourceArn, this.options.database, function (query, parameters) { return _this.connection.logger.logQuery(query, parameters); }, this.options.serviceConfigOptions, this.options.formatOptions), mode);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.preparePersistentValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.preparePersistentValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n return this.client.preparePersistentValue(value, columnMetadata);\n };\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n AuroraDataApiPostgresDriver.prototype.prepareHydratedValue = function (value, columnMetadata) {\n if (this.options.formatOptions && this.options.formatOptions.castParameters === false) {\n return _super.prototype.prepareHydratedValue.call(this, value, columnMetadata);\n }\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n return this.client.prepareHydratedValue(value, columnMetadata);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n AuroraDataApiPostgresDriver.prototype.loadDependencies = function () {\n var pg = PlatformTools.load(\"typeorm-aurora-data-api-driver\").pg;\n this.DataApiDriver = pg;\n };\n /**\n * Executes given query.\n */\n AuroraDataApiPostgresDriver.prototype.executeQuery = function (connection, query) {\n return this.connection.query(query);\n };\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n AuroraDataApiPostgresDriver.prototype.afterConnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var extensionsMetadata;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.checkMetadataForExtensions()];\n case 1:\n extensionsMetadata = _a.sent();\n if (!extensionsMetadata.hasExtensions) return [3 /*break*/, 3];\n return [4 /*yield*/, this.enableExtensions(extensionsMetadata, this.connection)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/, Promise.resolve()];\n }\n });\n });\n };\n return AuroraDataApiPostgresDriver;\n}(PostgresWrapper));\nexport { AuroraDataApiPostgresDriver };\n\n//# sourceMappingURL=AuroraDataApiPostgresDriver.js.map\n","import { MissingDriverError } from \"../error/MissingDriverError\";\nimport { CockroachDriver } from \"./cockroachdb/CockroachDriver\";\nimport { MongoDriver } from \"./mongodb/MongoDriver\";\nimport { SqlServerDriver } from \"./sqlserver/SqlServerDriver\";\nimport { OracleDriver } from \"./oracle/OracleDriver\";\nimport { SqliteDriver } from \"./sqlite/SqliteDriver\";\nimport { CordovaDriver } from \"./cordova/CordovaDriver\";\nimport { ReactNativeDriver } from \"./react-native/ReactNativeDriver\";\nimport { NativescriptDriver } from \"./nativescript/NativescriptDriver\";\nimport { SqljsDriver } from \"./sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"./mysql/MysqlDriver\";\nimport { PostgresDriver } from \"./postgres/PostgresDriver\";\nimport { ExpoDriver } from \"./expo/ExpoDriver\";\nimport { AuroraDataApiDriver } from \"./aurora-data-api/AuroraDataApiDriver\";\nimport { AuroraDataApiPostgresDriver } from \"./aurora-data-api-pg/AuroraDataApiPostgresDriver\";\nimport { SapDriver } from \"./sap/SapDriver\";\nimport { BetterSqlite3Driver } from \"./better-sqlite3/BetterSqlite3Driver\";\n/**\n * Helps to create drivers.\n */\nvar DriverFactory = /** @class */ (function () {\n function DriverFactory() {\n }\n /**\n * Creates a new driver depend on a given connection's driver type.\n */\n DriverFactory.prototype.create = function (connection) {\n var type = connection.options.type;\n switch (type) {\n case \"mysql\":\n return new MysqlDriver(connection);\n case \"postgres\":\n return new PostgresDriver(connection);\n case \"cockroachdb\":\n return new CockroachDriver(connection);\n case \"sap\":\n return new SapDriver(connection);\n case \"mariadb\":\n return new MysqlDriver(connection);\n case \"sqlite\":\n return new SqliteDriver(connection);\n case \"better-sqlite3\":\n return new BetterSqlite3Driver(connection);\n case \"cordova\":\n return new CordovaDriver(connection);\n case \"nativescript\":\n return new NativescriptDriver(connection);\n case \"react-native\":\n return new ReactNativeDriver(connection);\n case \"sqljs\":\n return new SqljsDriver(connection);\n case \"oracle\":\n return new OracleDriver(connection);\n case \"mssql\":\n return new SqlServerDriver(connection);\n case \"mongodb\":\n return new MongoDriver(connection);\n case \"expo\":\n return new ExpoDriver(connection);\n case \"aurora-data-api\":\n return new AuroraDataApiDriver(connection);\n case \"aurora-data-api-pg\":\n return new AuroraDataApiPostgresDriver(connection);\n default:\n throw new MissingDriverError(type);\n }\n };\n return DriverFactory;\n}());\nexport { DriverFactory };\n\n//# sourceMappingURL=DriverFactory.js.map\n","/**\n * Dummy functions for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\n/**\n * Loads all exported classes from the given directory.\n */\nexport function importClassesFromDirectories(logger, directories, formats) {\n if (formats === void 0) { formats = [\".js\", \".cjs\", \".ts\"]; }\n return [];\n}\n/**\n * Loads all json files from the given directory.\n */\nexport function importJsonsFromDirectories(directories, format) {\n if (format === void 0) { format = \".json\"; }\n return [];\n}\n\n//# sourceMappingURL=BrowserDirectoryExportedClassesLoader.js.map\n","/**\n * Container to be used by this library for inversion control. If container was not implicitly set then by default\n * container simply creates a new instance of the given class.\n */\nvar defaultContainer = new (/** @class */ (function () {\n function class_1() {\n this.instances = [];\n }\n class_1.prototype.get = function (someClass) {\n var instance = this.instances.find(function (i) { return i.type === someClass; });\n if (!instance) {\n instance = { type: someClass, object: new someClass() };\n this.instances.push(instance);\n }\n return instance.object;\n };\n return class_1;\n}()))();\nvar userContainer;\nvar userContainerOptions;\n/**\n * Sets container to be used by this library.\n */\nexport function useContainer(iocContainer, options) {\n userContainer = iocContainer;\n userContainerOptions = options;\n}\n/**\n * Gets the IOC container used by this library.\n */\nexport function getFromContainer(someClass) {\n if (userContainer) {\n try {\n var instance = userContainer.get(someClass);\n if (instance)\n return instance;\n if (!userContainerOptions || !userContainerOptions.fallback)\n return instance;\n }\n catch (error) {\n if (!userContainerOptions || !userContainerOptions.fallbackOnErrors)\n throw error;\n }\n }\n return defaultContainer.get(someClass);\n}\n\n//# sourceMappingURL=container.js.map\n","/**\n * Index metadata contains all information about table's index.\n */\nvar IndexMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function IndexMetadata(options) {\n /**\n * Indicates if this index must be unique.\n */\n this.isUnique = false;\n /**\n * The SPATIAL modifier indexes the entire column and does not allow indexed columns to contain NULL values.\n * Works only in MySQL.\n */\n this.isSpatial = false;\n /**\n * The FULLTEXT modifier indexes the entire column and does not allow prefixing.\n * Works only in MySQL.\n */\n this.isFulltext = false;\n /**\n * Indicates if this index must synchronize with database index.\n */\n this.synchronize = true;\n /**\n * Indexed columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n if (options.args.synchronize !== null && options.args.synchronize !== undefined)\n this.synchronize = options.args.synchronize;\n this.isUnique = !!options.args.unique;\n this.isSpatial = !!options.args.spatial;\n this.isFulltext = !!options.args.fulltext;\n this.parser = options.args.parser;\n this.where = options.args.where;\n this.isSparse = options.args.sparse;\n this.isBackground = options.args.background;\n this.expireAfterSeconds = options.args.expireAfterSeconds;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend index properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n IndexMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n if (this.synchronize === false) {\n this.name = this.givenName;\n return this;\n }\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else { // todo: indices in embeds are not implemented in this syntax. deprecate this syntax?\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyPath) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyPath; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyPath; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Index \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyPath);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.indexName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }), this.where);\n return this;\n };\n return IndexMetadata;\n}());\nexport { IndexMetadata };\n\n//# sourceMappingURL=IndexMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { EntityMetadata } from \"./EntityMetadata\";\n/**\n * Contains all information about some entity's relation.\n */\nvar RelationMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationMetadata(options) {\n /**\n * Indicates if this is a parent (can be only many-to-one relation) relation in the tree tables.\n */\n this.isTreeParent = false;\n /**\n * Indicates if this is a children (can be only one-to-many relation) relation in the tree tables.\n */\n this.isTreeChildren = false;\n /**\n * Indicates if this relation's column is a primary key.\n * Can be used only for many-to-one and owner one-to-one relations.\n */\n this.isPrimary = false;\n /**\n * Indicates if this relation is lazily loaded.\n */\n this.isLazy = false;\n /**\n * Indicates if this relation is eagerly loaded.\n */\n this.isEager = false;\n /**\n * Indicates if persistence is enabled for the relation.\n * By default its enabled, but if you want to avoid any changes in the relation to be reflected in the database you can disable it.\n * If its disabled you can only change a relation from inverse side of a relation or using relation query builder functionality.\n * This is useful for performance optimization since its disabling avoid multiple extra queries during entity save.\n */\n this.persistenceEnabled = true;\n /**\n * If set to true then related objects are allowed to be inserted to the database.\n */\n this.isCascadeInsert = false;\n /**\n * If set to true then related objects are allowed to be updated in the database.\n */\n this.isCascadeUpdate = false;\n /**\n * If set to true then related objects are allowed to be remove from the database.\n */\n this.isCascadeRemove = false;\n /**\n * If set to true then related objects are allowed to be soft-removed from the database.\n */\n this.isCascadeSoftRemove = false;\n /**\n * If set to true then related objects are allowed to be recovered from the database.\n */\n this.isCascadeRecover = false;\n /**\n * Indicates if relation column value can be nullable or not.\n */\n this.isNullable = true;\n /**\n * Indicates whether foreign key constraints will be created for join columns.\n * Can be used only for many-to-one and owner one-to-one relations.\n * Defaults to true.\n */\n this.createForeignKeyConstraints = true;\n /**\n * Indicates if this side is an owner of this relation.\n */\n this.isOwning = false;\n /**\n * Checks if this relation's type is \"one-to-one\".\n */\n this.isOneToOne = false;\n /**\n * Checks if this relation is owner side of the \"one-to-one\" relation.\n * Owner side means this side of relation has a join column in the table.\n */\n this.isOneToOneOwner = false;\n /**\n * Checks if this relation has a join column (e.g. is it many-to-one or one-to-one owner side).\n */\n this.isWithJoinColumn = false;\n /**\n * Checks if this relation is NOT owner side of the \"one-to-one\" relation.\n * NOT owner side means this side of relation does not have a join column in the table.\n */\n this.isOneToOneNotOwner = false;\n /**\n * Checks if this relation's type is \"one-to-many\".\n */\n this.isOneToMany = false;\n /**\n * Checks if this relation's type is \"many-to-one\".\n */\n this.isManyToOne = false;\n /**\n * Checks if this relation's type is \"many-to-many\".\n */\n this.isManyToMany = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is owner side of the relationship.\n * Owner side means this side of relation has a join table.\n */\n this.isManyToManyOwner = false;\n /**\n * Checks if this relation's type is \"many-to-many\", and is NOT owner side of the relationship.\n * Not owner side means this side of relation does not have a join table.\n */\n this.isManyToManyNotOwner = false;\n /**\n * Foreign keys created for this relation.\n */\n this.foreignKeys = [];\n /**\n * Join table columns.\n * Join columns can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be empty.\n * If this relation is a many-to-one/one-to-one then it takes join columns from the current entity.\n * If this relation is many-to-many then it takes all owner join columns from the junction entity.\n */\n this.joinColumns = [];\n /**\n * Inverse join table columns.\n * Inverse join columns are supported only for many-to-many relations\n * and can be obtained only from owner side of the relation.\n * From non-owner side of the relation join columns will be undefined.\n */\n this.inverseJoinColumns = [];\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n var args = options.args;\n this.target = args.target;\n this.propertyName = args.propertyName;\n this.relationType = args.relationType;\n if (args.inverseSideProperty)\n this.givenInverseSidePropertyFactory = args.inverseSideProperty;\n this.isLazy = args.isLazy || false;\n // this.isCascadeInsert = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"insert\") !== -1);\n // this.isCascadeUpdate = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"update\") !== -1);\n // this.isCascadeRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"remove\") !== -1);\n // this.isCascadeSoftRemove = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n // this.isCascadeRecover = args.options.cascade === true || (args.options.cascade instanceof Array && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isCascadeInsert = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"insert\") !== -1);\n this.isCascadeUpdate = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"update\") !== -1);\n this.isCascadeRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"remove\") !== -1);\n this.isCascadeSoftRemove = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"soft-remove\") !== -1);\n this.isCascadeRecover = args.options.cascade === true || (Array.isArray(args.options.cascade) && args.options.cascade.indexOf(\"recover\") !== -1);\n this.isPrimary = args.options.primary || false;\n this.isNullable = args.options.nullable === false || this.isPrimary ? false : true;\n this.onDelete = args.options.onDelete;\n this.onUpdate = args.options.onUpdate;\n this.deferrable = args.options.deferrable;\n this.createForeignKeyConstraints = args.options.createForeignKeyConstraints === false ? false : true;\n this.isEager = args.options.eager || false;\n this.persistenceEnabled = args.options.persistence === false ? false : true;\n this.orphanedRowAction = args.options.orphanedRowAction || \"nullify\";\n this.isTreeParent = args.isTreeParent || false;\n this.isTreeChildren = args.isTreeChildren || false;\n this.type = args.type instanceof Function ? args.type() : args.type;\n this.isOneToOne = this.relationType === \"one-to-one\";\n this.isOneToMany = this.relationType === \"one-to-many\";\n this.isManyToOne = this.relationType === \"many-to-one\";\n this.isManyToMany = this.relationType === \"many-to-many\";\n this.isOneToOneNotOwner = this.isOneToOne ? true : false;\n this.isManyToManyNotOwner = this.isManyToMany ? true : false;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates join column ids map from the given related entity ids array.\n */\n RelationMetadata.prototype.getRelationIdMap = function (entity) {\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n // console.log(\"entity\", entity);\n // console.log(\"referencedColumns\", referencedColumns);\n return EntityMetadata.getValueMap(entity, referencedColumns);\n };\n /**\n * Ensures that given object is an entity id map.\n * If given id is an object then it means its already id map.\n * If given id isn't an object then it means its a value of the id column\n * and it creates a new id map with this value and name of the primary column.\n */\n RelationMetadata.prototype.ensureRelationIdMap = function (id) {\n if (id instanceof Object)\n return id;\n var joinColumns = this.isOwning ? this.joinColumns : this.inverseRelation.joinColumns;\n var referencedColumns = joinColumns.map(function (joinColumn) { return joinColumn.referencedColumn; });\n if (referencedColumns.length > 1)\n throw new Error(\"Cannot create relation id map for a single value because relation contains multiple referenced columns.\");\n return referencedColumns[0].createValueMap(id);\n };\n /**\n * Extracts column value from the given entity.\n * If column is in embedded (or recursive embedded) it extracts its value from there.\n */\n RelationMetadata.prototype.getEntityValue = function (entity, getLazyRelationsPromiseValue) {\n if (getLazyRelationsPromiseValue === void 0) { getLazyRelationsPromiseValue = false; }\n if (entity === null || entity === undefined)\n return undefined;\n // extract column value from embeddeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // next we need to access post[data][information][counters][this.propertyName] to get column value from the counters\n // this recursive function takes array of generated property names and gets the post[data][information][counters] embed\n var extractEmbeddedColumnValue_1 = function (propertyNames, value) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n if (value[propertyName]) {\n return extractEmbeddedColumnValue_1(propertyNames, value[propertyName]);\n }\n return undefined;\n }\n return value;\n };\n // once we get nested embed object we get its column, e.g. post[data][information][counters][this.propertyName]\n var embeddedObject = extractEmbeddedColumnValue_1(propertyNames, entity);\n if (this.isLazy) {\n if (embeddedObject[\"__\" + this.propertyName + \"__\"] !== undefined)\n return embeddedObject[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return embeddedObject[this.propertyName];\n return undefined;\n }\n return embeddedObject ? embeddedObject[this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName] : undefined;\n }\n else { // no embeds - no problems. Simply return column name by property name of the entity\n if (this.isLazy) {\n if (entity[\"__\" + this.propertyName + \"__\"] !== undefined)\n return entity[\"__\" + this.propertyName + \"__\"];\n if (getLazyRelationsPromiseValue === true)\n return entity[this.propertyName];\n return undefined;\n }\n return entity[this.propertyName];\n }\n };\n /**\n * Sets given entity's relation's value.\n * Using of this method helps to set entity relation's value of the lazy and non-lazy relations.\n *\n * If merge is set to true, it merges given value into currently\n */\n RelationMetadata.prototype.setEntityValue = function (entity, value) {\n var propertyName = this.isLazy ? \"__\" + this.propertyName + \"__\" : this.propertyName;\n if (this.embeddedMetadata) {\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var extractEmbeddedColumnValue_2 = function (embeddedMetadatas, map) {\n // if (!object[embeddedMetadata.propertyName])\n // object[embeddedMetadata.propertyName] = embeddedMetadata.create();\n var embeddedMetadata = embeddedMetadatas.shift();\n if (embeddedMetadata) {\n if (!map[embeddedMetadata.propertyName])\n map[embeddedMetadata.propertyName] = embeddedMetadata.create();\n extractEmbeddedColumnValue_2(embeddedMetadatas, map[embeddedMetadata.propertyName]);\n return map;\n }\n map[propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_2(__spreadArray([], __read(this.embeddedMetadata.embeddedMetadataTree)), entity);\n }\n else {\n entity[propertyName] = value;\n }\n };\n /**\n * Creates entity id map from the given entity ids array.\n */\n RelationMetadata.prototype.createValueMap = function (value) {\n var _a;\n var _this = this;\n // extract column value from embeds of entity if column is in embedded\n if (this.embeddedMetadata) {\n // example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeddeds\n // we need to get value of \"id\" column from the post real entity object and return it in a\n // { data: { information: { counters: { id: ... } } } } format\n // first step - we extract all parent properties of the entity relative to this column, e.g. [data, information, counters]\n var propertyNames = __spreadArray([], __read(this.embeddedMetadata.parentPropertyNames));\n // now need to access post[data][information][counters] to get column value from the counters\n // and on each step we need to create complex literal object, e.g. first { data },\n // then { data: { information } }, then { data: { information: { counters } } },\n // then { data: { information: { counters: [this.propertyName]: entity[data][information][counters][this.propertyName] } } }\n // this recursive function helps doing that\n var extractEmbeddedColumnValue_3 = function (propertyNames, map) {\n var propertyName = propertyNames.shift();\n if (propertyName) {\n map[propertyName] = {};\n extractEmbeddedColumnValue_3(propertyNames, map[propertyName]);\n return map;\n }\n map[_this.propertyName] = value;\n return map;\n };\n return extractEmbeddedColumnValue_3(propertyNames, {});\n }\n else { // no embeds - no problems. Simply return column property name and its value of the entity\n return _a = {}, _a[this.propertyName] = value, _a;\n }\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation metadata properties.\n * This builder method should be used only after embedded metadata tree was build.\n */\n RelationMetadata.prototype.build = function () {\n this.propertyPath = this.buildPropertyPath();\n };\n /**\n * Registers given foreign keys in the relation.\n * This builder method should be used to register foreign key in the relation.\n */\n RelationMetadata.prototype.registerForeignKeys = function () {\n var _a;\n var foreignKeys = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foreignKeys[_i] = arguments[_i];\n }\n (_a = this.foreignKeys).push.apply(_a, __spreadArray([], __read(foreignKeys)));\n };\n /**\n * Registers given join columns in the relation.\n * This builder method should be used to register join column in the relation.\n */\n RelationMetadata.prototype.registerJoinColumns = function (joinColumns, inverseJoinColumns) {\n if (joinColumns === void 0) { joinColumns = []; }\n if (inverseJoinColumns === void 0) { inverseJoinColumns = []; }\n this.joinColumns = joinColumns;\n this.inverseJoinColumns = inverseJoinColumns;\n this.isOwning = this.isManyToOne || ((this.isManyToMany || this.isOneToOne) && this.joinColumns.length > 0);\n this.isOneToOneOwner = this.isOneToOne && this.isOwning;\n this.isOneToOneNotOwner = this.isOneToOne && !this.isOwning;\n this.isManyToManyOwner = this.isManyToMany && this.isOwning;\n this.isManyToManyNotOwner = this.isManyToMany && !this.isOwning;\n this.isWithJoinColumn = this.isManyToOne || this.isOneToOneOwner;\n };\n /**\n * Registers a given junction entity metadata.\n * This builder method can be called after junction entity metadata for the many-to-many relation was created.\n */\n RelationMetadata.prototype.registerJunctionEntityMetadata = function (junctionEntityMetadata) {\n this.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n if (this.inverseRelation) {\n this.inverseRelation.junctionEntityMetadata = junctionEntityMetadata;\n this.joinTableName = junctionEntityMetadata.tableName;\n }\n };\n /**\n * Builds inverse side property path based on given inverse side property factory.\n * This builder method should be used only after properties map of the inverse entity metadata was build.\n */\n RelationMetadata.prototype.buildInverseSidePropertyPath = function () {\n if (this.givenInverseSidePropertyFactory) {\n var ownerEntityPropertiesMap = this.inverseEntityMetadata.propertiesMap;\n if (typeof this.givenInverseSidePropertyFactory === \"function\")\n return this.givenInverseSidePropertyFactory(ownerEntityPropertiesMap);\n if (typeof this.givenInverseSidePropertyFactory === \"string\")\n return this.givenInverseSidePropertyFactory;\n }\n else if (this.isTreeParent && this.entityMetadata.treeChildrenRelation) {\n return this.entityMetadata.treeChildrenRelation.propertyName;\n }\n else if (this.isTreeChildren && this.entityMetadata.treeParentRelation) {\n return this.entityMetadata.treeParentRelation.propertyName;\n }\n return \"\";\n };\n /**\n * Builds relation's property path based on its embedded tree.\n */\n RelationMetadata.prototype.buildPropertyPath = function () {\n if (!this.embeddedMetadata || !this.embeddedMetadata.parentPropertyNames.length)\n return this.propertyName;\n return this.embeddedMetadata.parentPropertyNames.join(\".\") + \".\" + this.propertyName;\n };\n return RelationMetadata;\n}());\nexport { RelationMetadata };\n\n//# sourceMappingURL=RelationMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\n/**\n * Contains all information about entity's embedded property.\n */\nvar EmbeddedMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EmbeddedMetadata(options) {\n /**\n * Columns inside this embed.\n */\n this.columns = [];\n /**\n * Relations inside this embed.\n */\n this.relations = [];\n /**\n * Entity listeners inside this embed.\n */\n this.listeners = [];\n /**\n * Indices applied to the embed columns.\n */\n this.indices = [];\n /**\n * Uniques applied to the embed columns.\n */\n this.uniques = [];\n /**\n * Relation ids inside this embed.\n */\n this.relationIds = [];\n /**\n * Relation counts inside this embed.\n */\n this.relationCounts = [];\n /**\n * Nested embeddable in this embeddable (which has current embedded as parent embedded).\n */\n this.embeddeds = [];\n /**\n * Indicates if this embedded is in array mode.\n *\n * This option works only in mongodb.\n */\n this.isArray = false;\n /**\n * Returns array of property names of current embed and all its parent embeds.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * we need to get value of \"id\" column from the post real entity object.\n * this method will return [\"data\", \"information\", \"counters\"]\n */\n this.parentPropertyNames = [];\n /**\n * Returns array of prefixes of current embed and all its parent embeds.\n */\n this.parentPrefixes = [];\n /**\n * Returns embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.embeddedMetadataTree = [];\n /**\n * Embed metadatas from all levels of the parent tree.\n *\n * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n */\n this.columnsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.relationsFromTree = [];\n /**\n * Relations of this embed and all relations from its child embeds.\n */\n this.listenersFromTree = [];\n /**\n * Indices of this embed and all indices from its child embeds.\n */\n this.indicesFromTree = [];\n /**\n * Uniques of this embed and all uniques from its child embeds.\n */\n this.uniquesFromTree = [];\n /**\n * Relation ids of this embed and all relation ids from its child embeds.\n */\n this.relationIdsFromTree = [];\n /**\n * Relation counts of this embed and all relation counts from its child embeds.\n */\n this.relationCountsFromTree = [];\n this.entityMetadata = options.entityMetadata;\n this.type = options.args.type();\n this.propertyName = options.args.propertyName;\n this.customPrefix = options.args.prefix;\n this.isArray = options.args.isArray;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Creates a new embedded object.\n */\n EmbeddedMetadata.prototype.create = function () {\n return new this.type;\n };\n // ---------------------------------------------------------------------\n // Builder Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.build = function (connection) {\n this.embeddeds.forEach(function (embedded) { return embedded.build(connection); });\n this.prefix = this.buildPrefix(connection);\n this.parentPropertyNames = this.buildParentPropertyNames();\n this.parentPrefixes = this.buildParentPrefixes();\n this.propertyPath = this.parentPropertyNames.join(\".\");\n this.embeddedMetadataTree = this.buildEmbeddedMetadataTree();\n this.columnsFromTree = this.buildColumnsFromTree();\n this.relationsFromTree = this.buildRelationsFromTree();\n this.listenersFromTree = this.buildListenersFromTree();\n this.indicesFromTree = this.buildIndicesFromTree();\n this.uniquesFromTree = this.buildUniquesFromTree();\n this.relationIdsFromTree = this.buildRelationIdsFromTree();\n this.relationCountsFromTree = this.buildRelationCountsFromTree();\n return this;\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n EmbeddedMetadata.prototype.buildPartialPrefix = function () {\n // if prefix option was not set or explicitly set to true - default prefix\n if (this.customPrefix === undefined || this.customPrefix === true) {\n return [this.propertyName];\n }\n // if prefix option was set to empty string or explicity set to false - disable prefix\n if (this.customPrefix === \"\" || this.customPrefix === false) {\n return [];\n }\n // use custom prefix\n if (typeof this.customPrefix === \"string\") {\n return [this.customPrefix];\n }\n throw new Error(\"Invalid prefix option given for \" + this.entityMetadata.targetName + \"#\" + this.propertyName);\n };\n EmbeddedMetadata.prototype.buildPrefix = function (connection) {\n if (connection.driver instanceof MongoDriver)\n return this.propertyName;\n var prefixes = [];\n if (this.parentEmbeddedMetadata)\n prefixes.push(this.parentEmbeddedMetadata.buildPrefix(connection));\n prefixes.push.apply(prefixes, __spreadArray([], __read(this.buildPartialPrefix())));\n return prefixes.join(\"_\"); // todo: use naming strategy instead of \"_\" !!!\n };\n EmbeddedMetadata.prototype.buildParentPropertyNames = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPropertyNames().concat(this.propertyName) : [this.propertyName];\n };\n EmbeddedMetadata.prototype.buildParentPrefixes = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPrefixes().concat(this.buildPartialPrefix()) : this.buildPartialPrefix();\n };\n EmbeddedMetadata.prototype.buildEmbeddedMetadataTree = function () {\n return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildEmbeddedMetadataTree().concat(this) : [this];\n };\n EmbeddedMetadata.prototype.buildColumnsFromTree = function () {\n return this.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.buildColumnsFromTree()); }, this.columns);\n };\n EmbeddedMetadata.prototype.buildRelationsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationsFromTree()); }, this.relations);\n };\n EmbeddedMetadata.prototype.buildListenersFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildListenersFromTree()); }, this.listeners);\n };\n EmbeddedMetadata.prototype.buildIndicesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildIndicesFromTree()); }, this.indices);\n };\n EmbeddedMetadata.prototype.buildUniquesFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildUniquesFromTree()); }, this.uniques);\n };\n EmbeddedMetadata.prototype.buildRelationIdsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationIdsFromTree()); }, this.relationIds);\n };\n EmbeddedMetadata.prototype.buildRelationCountsFromTree = function () {\n return this.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.buildRelationCountsFromTree()); }, this.relationCounts);\n };\n return EmbeddedMetadata;\n}());\nexport { EmbeddedMetadata };\n\n//# sourceMappingURL=EmbeddedMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationIdMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationIdMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Sets relation id value from the given entity.\n *\n * todo: make it to work in embeds as well.\n */\n RelationIdMetadata.prototype.setValue = function (entity) {\n var _this = this;\n var inverseEntity = this.relation.getEntityValue(entity);\n if (Array.isArray(inverseEntity)) {\n entity[this.propertyName] = inverseEntity.map(function (item) {\n return _this.relation.inverseEntityMetadata.getEntityIdMixedMap(item);\n }).filter(function (item) { return item !== null && item !== undefined; });\n }\n else {\n var value = this.relation.inverseEntityMetadata.getEntityIdMixedMap(inverseEntity);\n if (value !== undefined)\n entity[this.propertyName] = value;\n }\n };\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation id properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationIdMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationId decorator.\");\n this.relation = relation;\n };\n return RelationIdMetadata;\n}());\nexport { RelationIdMetadata };\n\n//# sourceMappingURL=RelationIdMetadata.js.map\n","/**\n * Contains all information about entity's relation count.\n */\nvar RelationCountMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function RelationCountMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.relationNameOrFactory = options.args.relation;\n this.alias = options.args.alias;\n this.queryBuilderFactory = options.args.queryBuilderFactory;\n }\n // ---------------------------------------------------------------------\n // Public Builder Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend relation count metadata properties.\n * This builder method should be used only after entity metadata, its properties map and all relations are build.\n */\n RelationCountMetadata.prototype.build = function () {\n var propertyPath = this.relationNameOrFactory instanceof Function ? this.relationNameOrFactory(this.entityMetadata.propertiesMap) : this.relationNameOrFactory;\n var relation = this.entityMetadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Cannot find relation \" + propertyPath + \". Wrong relation specified for @RelationCount decorator.\");\n this.relation = relation;\n };\n return RelationCountMetadata;\n}());\nexport { RelationCountMetadata };\n\n//# sourceMappingURL=RelationCountMetadata.js.map\n","/**\n * Provides a constants for each entity listener type.\n */\nvar EventListenerTypes = /** @class */ (function () {\n function EventListenerTypes() {\n }\n EventListenerTypes.AFTER_LOAD = \"after-load\";\n EventListenerTypes.BEFORE_INSERT = \"before-insert\";\n EventListenerTypes.AFTER_INSERT = \"after-insert\";\n EventListenerTypes.BEFORE_UPDATE = \"before-update\";\n EventListenerTypes.AFTER_UPDATE = \"after-update\";\n EventListenerTypes.BEFORE_REMOVE = \"before-remove\";\n EventListenerTypes.AFTER_REMOVE = \"after-remove\";\n return EventListenerTypes;\n}());\nexport { EventListenerTypes };\n\n//# sourceMappingURL=EventListenerTypes.js.map\n","/**\n * Metadata args utility functions.\n */\nvar MetadataUtils = /** @class */ (function () {\n function MetadataUtils() {\n }\n /**\n * Gets given's entity all inherited classes.\n * Gives in order from parents to children.\n * For example Post extends ContentModel which extends Unit it will give\n * [Unit, ContentModel, Post]\n */\n MetadataUtils.getInheritanceTree = function (entity) {\n var tree = [entity];\n var getPrototypeOf = function (object) {\n var proto = Object.getPrototypeOf(object);\n if (proto && proto.name) {\n tree.push(proto);\n getPrototypeOf(proto);\n }\n };\n getPrototypeOf(entity);\n return tree;\n };\n /**\n * Checks if this table is inherited from another table.\n */\n MetadataUtils.isInherited = function (target1, target2) {\n return target1.prototype instanceof target2;\n };\n /**\n * Filters given array of targets by a given classes.\n * If classes are not given, then it returns array itself.\n */\n MetadataUtils.filterByTarget = function (array, classes) {\n if (!classes)\n return array;\n return array.filter(function (item) { return item.target && classes.indexOf(item.target) !== -1; });\n };\n return MetadataUtils;\n}());\nexport { MetadataUtils };\n\n//# sourceMappingURL=MetadataUtils.js.map\n","/**\n * Contains all information about entity's foreign key.\n */\nvar ForeignKeyMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ForeignKeyMetadata(options) {\n /**\n * Array of columns of this foreign key.\n */\n this.columns = [];\n /**\n * Array of referenced columns.\n */\n this.referencedColumns = [];\n /**\n * Gets array of column names.\n */\n this.columnNames = [];\n /**\n * Gets array of referenced column names.\n */\n this.referencedColumnNames = [];\n this.entityMetadata = options.entityMetadata;\n this.referencedEntityMetadata = options.referencedEntityMetadata;\n this.columns = options.columns;\n this.referencedColumns = options.referencedColumns;\n this.onDelete = options.onDelete || \"NO ACTION\";\n this.onUpdate = options.onUpdate || \"NO ACTION\";\n this.deferrable = options.deferrable;\n if (options.namingStrategy)\n this.build(options.namingStrategy);\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend foreign key properties.\n * Must be called after all entity metadatas and their columns are built.\n */\n ForeignKeyMetadata.prototype.build = function (namingStrategy) {\n this.columnNames = this.columns.map(function (column) { return column.databaseName; });\n this.referencedColumnNames = this.referencedColumns.map(function (column) { return column.databaseName; });\n this.referencedTablePath = this.referencedEntityMetadata.tablePath;\n this.name = namingStrategy.foreignKeyName(this.entityMetadata.tablePath, this.columnNames, this.referencedTablePath, this.referencedColumnNames);\n };\n return ForeignKeyMetadata;\n}());\nexport { ForeignKeyMetadata };\n\n//# sourceMappingURL=ForeignKeyMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Creates EntityMetadata for junction tables.\n * Junction tables are tables generated by many-to-many relations.\n */\nvar JunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the junction of the given many-to-many relation.\n */\n JunctionEntityMetadataBuilder.prototype.build = function (relation, joinTable) {\n var _this = this;\n var referencedColumns = this.collectReferencedColumns(relation, joinTable);\n var inverseReferencedColumns = this.collectInverseReferencedColumns(relation, joinTable);\n var joinTableName = joinTable.name || this.connection.namingStrategy.joinTableName(relation.entityMetadata.tableNameWithoutPrefix, relation.inverseEntityMetadata.tableNameWithoutPrefix, relation.propertyPath, relation.inverseRelation ? relation.inverseRelation.propertyName : \"\");\n var entityMetadata = new EntityMetadata({\n connection: this.connection,\n args: {\n target: \"\",\n name: joinTableName,\n type: \"junction\",\n database: joinTable.database || relation.entityMetadata.database,\n schema: joinTable.schema || relation.entityMetadata.schema,\n }\n });\n entityMetadata.build();\n // create original side junction columns\n var junctionColumns = referencedColumns.map(function (referencedColumn) {\n var joinColumn = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.propertyName, referencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: referencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n name: columnName,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n type: referencedColumn.type,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.zerofill ? true : referencedColumn.unsigned,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n // create inverse side junction columns\n var inverseJunctionColumns = inverseReferencedColumns.map(function (inverseReferencedColumn) {\n var joinColumn = joinTable.inverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumnArgs) {\n return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === inverseReferencedColumn.propertyName) &&\n !!joinColumnArgs.name;\n }) : undefined;\n var columnName = joinColumn && joinColumn.name ? joinColumn.name\n : _this.connection.namingStrategy.joinTableInverseColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.propertyName, inverseReferencedColumn.databaseName);\n return new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n referencedColumn: inverseReferencedColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: columnName,\n options: {\n length: !inverseReferencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (inverseReferencedColumn.generationStrategy === \"uuid\" || inverseReferencedColumn.type === \"uuid\")\n ? \"36\"\n : inverseReferencedColumn.length,\n width: inverseReferencedColumn.width,\n type: inverseReferencedColumn.type,\n precision: inverseReferencedColumn.precision,\n scale: inverseReferencedColumn.scale,\n charset: inverseReferencedColumn.charset,\n collation: inverseReferencedColumn.collation,\n zerofill: inverseReferencedColumn.zerofill,\n unsigned: inverseReferencedColumn.zerofill ? true : inverseReferencedColumn.unsigned,\n enum: inverseReferencedColumn.enum,\n enumName: inverseReferencedColumn.enumName,\n name: columnName,\n nullable: false,\n primary: true,\n }\n }\n });\n });\n this.changeDuplicatedColumnNames(junctionColumns, inverseJunctionColumns);\n // set junction table columns\n entityMetadata.ownerColumns = junctionColumns;\n entityMetadata.inverseColumns = inverseJunctionColumns;\n entityMetadata.ownColumns = __spreadArray(__spreadArray([], __read(junctionColumns)), __read(inverseJunctionColumns));\n entityMetadata.ownColumns.forEach(function (column) { return column.relationMetadata = relation; });\n // create junction table foreign keys\n entityMetadata.foreignKeys = relation.createForeignKeyConstraints ? [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.entityMetadata,\n columns: junctionColumns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n columns: inverseJunctionColumns,\n referencedColumns: inverseReferencedColumns,\n onDelete: relation.onDelete || \"CASCADE\"\n }),\n ] : [];\n // create junction table indices\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: junctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: inverseJunctionColumns,\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // finally return entity metadata\n return entityMetadata;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectReferencedColumns = function (relation, joinTable) {\n var hasAnyReferencedColumnName = joinTable.joinColumns ? joinTable.joinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!joinTable.joinColumns || (joinTable.joinColumns && !hasAnyReferencedColumnName)) {\n return relation.entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n }\n else {\n return joinTable.joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.entityMetadata.columns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.entityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects inverse referenced columns from the given join column args.\n */\n JunctionEntityMetadataBuilder.prototype.collectInverseReferencedColumns = function (relation, joinTable) {\n var hasInverseJoinColumns = !!joinTable.inverseJoinColumns;\n var hasAnyInverseReferencedColumnName = hasInverseJoinColumns ? joinTable.inverseJoinColumns.find(function (joinColumn) { return !!joinColumn.referencedColumnName; }) : false;\n if (!hasInverseJoinColumns || (hasInverseJoinColumns && !hasAnyInverseReferencedColumnName)) {\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else {\n return joinTable.inverseJoinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; });\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n JunctionEntityMetadataBuilder.prototype.changeDuplicatedColumnNames = function (junctionColumns, inverseJunctionColumns) {\n var _this = this;\n junctionColumns.forEach(function (junctionColumn) {\n inverseJunctionColumns.forEach(function (inverseJunctionColumn) {\n if (junctionColumn.givenDatabaseName === inverseJunctionColumn.givenDatabaseName) {\n var junctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(junctionColumn.propertyName, 1);\n junctionColumn.propertyName = junctionColumnName;\n junctionColumn.givenDatabaseName = junctionColumnName;\n var inverseJunctionColumnName = _this.connection.namingStrategy.joinTableColumnDuplicationPrefix(inverseJunctionColumn.propertyName, 2);\n inverseJunctionColumn.propertyName = inverseJunctionColumnName;\n inverseJunctionColumn.givenDatabaseName = inverseJunctionColumnName;\n }\n });\n });\n };\n return JunctionEntityMetadataBuilder;\n}());\nexport { JunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=JunctionEntityMetadataBuilder.js.map\n","import { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\n/**\n * Creates EntityMetadata for junction tables of the closure entities.\n * Closure junction tables are tables generated by closure entities.\n */\nvar ClosureJunctionEntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ClosureJunctionEntityMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds EntityMetadata for the closure junction of the given closure entity.\n */\n ClosureJunctionEntityMetadataBuilder.prototype.build = function (parentClosureEntityMetadata) {\n var _this = this;\n // create entity metadata itself\n var entityMetadata = new EntityMetadata({\n parentClosureEntityMetadata: parentClosureEntityMetadata,\n connection: this.connection,\n args: {\n target: \"\",\n name: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.closureTableName ? parentClosureEntityMetadata.treeOptions.closureTableName : parentClosureEntityMetadata.tableNameWithoutPrefix,\n type: \"closure-junction\"\n }\n });\n entityMetadata.build();\n // create ancestor and descendant columns for new closure junction table\n parentClosureEntityMetadata.primaryColumns.forEach(function (primaryColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"ancestor\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.ancestorColumnName ? parentClosureEntityMetadata.treeOptions.ancestorColumnName(primaryColumn) : primaryColumn.propertyName + \"_ancestor\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: entityMetadata,\n closureType: \"descendant\",\n referencedColumn: primaryColumn,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: parentClosureEntityMetadata.treeOptions && parentClosureEntityMetadata.treeOptions.descendantColumnName ? parentClosureEntityMetadata.treeOptions.descendantColumnName(primaryColumn) : primaryColumn.propertyName + \"_descendant\",\n options: {\n primary: true,\n length: primaryColumn.length,\n type: primaryColumn.type,\n }\n }\n }));\n });\n entityMetadata.ownIndices = [\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n }),\n new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n args: {\n target: entityMetadata.target,\n synchronize: true\n }\n })\n ];\n // if tree level column was defined by a closure entity then add it to the junction columns as well\n if (parentClosureEntityMetadata.treeLevelColumn) {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: \"level\",\n options: {\n type: this.connection.driver.mappedDataTypes.treeLevel,\n }\n }\n }));\n }\n // create junction table foreign keys\n entityMetadata.foreignKeys = [\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[0]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n new ForeignKeyMetadata({\n entityMetadata: entityMetadata,\n referencedEntityMetadata: parentClosureEntityMetadata,\n columns: [entityMetadata.ownColumns[1]],\n referencedColumns: parentClosureEntityMetadata.primaryColumns,\n // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n }),\n ];\n return entityMetadata;\n };\n return ClosureJunctionEntityMetadataBuilder;\n}());\nexport { ClosureJunctionEntityMetadataBuilder };\n\n//# sourceMappingURL=ClosureJunctionEntityMetadataBuilder.js.map\n","/**\n * Unique metadata contains all information about table's unique constraints.\n */\nvar UniqueMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function UniqueMetadata(options) {\n /**\n * Unique columns.\n */\n this.columns = [];\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n this.columnNamesWithOrderingMap = {};\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n if (options.args) {\n this.target = options.args.target;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend unique constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n UniqueMetadata.prototype.build = function (namingStrategy) {\n var _this = this;\n var map = {};\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n var columnPropertyPaths = [];\n if (Array.isArray(this.givenColumnNames)) {\n columnPropertyPaths = this.givenColumnNames.map(function (columnName) {\n if (_this.embeddedMetadata)\n return _this.embeddedMetadata.propertyPath + \".\" + columnName;\n return columnName;\n });\n columnPropertyPaths.forEach(function (propertyPath) { return map[propertyPath] = 1; });\n }\n else {\n // if columns is a function that returns array of field names then execute it and get columns names from it\n var columnsFnResult_1 = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (Array.isArray(columnsFnResult_1)) {\n columnPropertyPaths = columnsFnResult_1.map(function (i) { return String(i); });\n columnPropertyPaths.forEach(function (name) { return map[name] = 1; });\n }\n else {\n columnPropertyPaths = Object.keys(columnsFnResult_1).map(function (i) { return String(i); });\n Object.keys(columnsFnResult_1).forEach(function (columnName) { return map[columnName] = columnsFnResult_1[columnName]; });\n }\n }\n this.columns = columnPropertyPaths.map(function (propertyName) {\n var columnWithSameName = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === propertyName; });\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n var relationWithSameName = _this.entityMetadata.relations.find(function (relation) { return relation.isWithJoinColumn && relation.propertyName === propertyName; });\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n var indexName = _this.givenName ? \"\\\"\" + _this.givenName + \"\\\" \" : \"\";\n var entityName = _this.entityMetadata.targetName;\n throw new Error(\"Unique constraint \" + indexName + \"contains column that is missing in the entity (\" + entityName + \"): \" + propertyName);\n })\n .reduce(function (a, b) { return a.concat(b); });\n }\n this.columnNamesWithOrderingMap = Object.keys(map).reduce(function (updatedMap, key) {\n var column = _this.entityMetadata.columns.find(function (column) { return column.propertyPath === key; });\n if (column)\n updatedMap[column.databasePath] = map[key];\n return updatedMap;\n }, {});\n this.name = this.givenName ? this.givenName : namingStrategy.uniqueConstraintName(this.entityMetadata.tablePath, this.columns.map(function (column) { return column.databaseName; }));\n return this;\n };\n return UniqueMetadata;\n}());\nexport { UniqueMetadata };\n\n//# sourceMappingURL=UniqueMetadata.js.map\n","import { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { ForeignKeyMetadata } from \"../metadata/ForeignKeyMetadata\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds join column for the many-to-one and one-to-one owner relations.\n *\n * Cases it should cover:\n * 1. when join column is set with custom name and without referenced column name\n * we need automatically set referenced column name - primary ids by default\n * @JoinColumn({ name: \"custom_name\" })\n *\n * 2. when join column is set with only referenced column name\n * we need automatically set join column name - relation name + referenced column name\n * @JoinColumn({ referencedColumnName: \"title\" })\n *\n * 3. when join column is set without both referenced column name and join column name\n * we need to automatically set both of them\n * @JoinColumn()\n *\n * 4. when join column is not set at all (as in case of @ManyToOne relation)\n * we need to create join column for it with proper referenced column name and join column name\n *\n * 5. when multiple join columns set none of referencedColumnName and name can be optional\n * both options are required\n * @JoinColumn([\n * { name: \"category_title\", referencedColumnName: \"type\" },\n * { name: \"category_title\", referencedColumnName: \"name\" },\n * ])\n *\n * Since for many-to-one relations having JoinColumn decorator is not required,\n * we need to go thought each many-to-one relation without join column decorator set\n * and create join column metadata args for them.\n */\nvar RelationJoinColumnBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationJoinColumnBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a foreign key of the many-to-one or one-to-one owner relations.\n */\n RelationJoinColumnBuilder.prototype.build = function (joinColumns, relation) {\n var referencedColumns = this.collectReferencedColumns(joinColumns, relation);\n var columns = this.collectColumns(joinColumns, relation, referencedColumns);\n if (!referencedColumns.length || !relation.createForeignKeyConstraints)\n return { foreignKey: undefined, columns: columns, uniqueConstraint: undefined }; // this case is possible for one-to-one non owning side and relations with createForeignKeyConstraints = false\n var foreignKey = new ForeignKeyMetadata({\n entityMetadata: relation.entityMetadata,\n referencedEntityMetadata: relation.inverseEntityMetadata,\n namingStrategy: this.connection.namingStrategy,\n columns: columns,\n referencedColumns: referencedColumns,\n onDelete: relation.onDelete,\n onUpdate: relation.onUpdate,\n deferrable: relation.deferrable,\n });\n // Oracle does not allow both primary and unique constraints on the same column\n if (this.connection.driver instanceof OracleDriver && columns.every(function (column) { return column.isPrimary; }))\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n // CockroachDB requires UNIQUE constraints on referenced columns\n if (referencedColumns.length > 0 && relation.isOneToOne) {\n var uniqueConstraint = new UniqueMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n name: this.connection.namingStrategy.relationConstraintName(relation.entityMetadata.tablePath, foreignKey.columns.map(function (c) { return c.databaseName; })),\n target: relation.entityMetadata.target,\n }\n });\n uniqueConstraint.build(this.connection.namingStrategy);\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: uniqueConstraint };\n }\n return { foreignKey: foreignKey, columns: columns, uniqueConstraint: undefined };\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Collects referenced columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectReferencedColumns = function (joinColumns, relation) {\n var hasAnyReferencedColumnName = joinColumns.find(function (joinColumnArgs) { return !!joinColumnArgs.referencedColumnName; });\n var manyToOneWithoutJoinColumn = joinColumns.length === 0 && relation.isManyToOne;\n var hasJoinColumnWithoutAnyReferencedColumnName = joinColumns.length > 0 && !hasAnyReferencedColumnName;\n if (manyToOneWithoutJoinColumn || hasJoinColumnWithoutAnyReferencedColumnName) { // covers case3 and case1\n return relation.inverseEntityMetadata.primaryColumns;\n }\n else { // cases with referenced columns defined\n return joinColumns.map(function (joinColumn) {\n var referencedColumn = relation.inverseEntityMetadata.ownColumns.find(function (column) { return column.propertyName === joinColumn.referencedColumnName; }); // todo: can we also search in relations?\n if (!referencedColumn)\n throw new Error(\"Referenced column \" + joinColumn.referencedColumnName + \" was not found in entity \" + relation.inverseEntityMetadata.name);\n return referencedColumn;\n });\n }\n };\n /**\n * Collects columns from the given join column args.\n */\n RelationJoinColumnBuilder.prototype.collectColumns = function (joinColumns, relation, referencedColumns) {\n var _this = this;\n return referencedColumns.map(function (referencedColumn) {\n // in the case if relation has join column with only name set we need this check\n var joinColumnMetadataArg = joinColumns.find(function (joinColumn) {\n return (!joinColumn.referencedColumnName || joinColumn.referencedColumnName === referencedColumn.propertyName) &&\n !!joinColumn.name;\n });\n var joinColumnName = joinColumnMetadataArg ? joinColumnMetadataArg.name : _this.connection.namingStrategy.joinColumnName(relation.propertyName, referencedColumn.propertyName);\n var relationalColumn = relation.entityMetadata.ownColumns.find(function (column) { return column.databaseName === joinColumnName; });\n if (!relationalColumn) {\n relationalColumn = new ColumnMetadata({\n connection: _this.connection,\n entityMetadata: relation.entityMetadata,\n args: {\n target: \"\",\n mode: \"virtual\",\n propertyName: relation.propertyName,\n options: {\n name: joinColumnName,\n type: referencedColumn.type,\n length: !referencedColumn.length\n && (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver)\n && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n ? \"36\"\n : referencedColumn.length,\n width: referencedColumn.width,\n charset: referencedColumn.charset,\n collation: referencedColumn.collation,\n precision: referencedColumn.precision,\n scale: referencedColumn.scale,\n zerofill: referencedColumn.zerofill,\n unsigned: referencedColumn.unsigned,\n comment: referencedColumn.comment,\n enum: referencedColumn.enum,\n enumName: referencedColumn.enumName,\n primary: relation.isPrimary,\n nullable: relation.isNullable,\n }\n }\n });\n relation.entityMetadata.registerColumn(relationalColumn);\n }\n relationalColumn.referencedColumn = referencedColumn; // its important to set it here because we need to set referenced column for user defined join column\n relationalColumn.type = referencedColumn.type; // also since types of relational column and join column must be equal we override user defined column type\n relationalColumn.relationMetadata = relation;\n relationalColumn.build(_this.connection);\n return relationalColumn;\n });\n };\n return RelationJoinColumnBuilder;\n}());\nexport { RelationJoinColumnBuilder };\n\n//# sourceMappingURL=RelationJoinColumnBuilder.js.map\n","/**\n * This metadata contains all information about entity's listeners.\n */\nvar EntityListenerMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function EntityListenerMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n this.target = options.args.target;\n this.propertyName = options.args.propertyName;\n this.type = options.args.type;\n }\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n /**\n * Checks if entity listener is allowed to be executed on the given entity.\n */\n EntityListenerMetadata.prototype.isAllowed = function (entity) {\n return this.entityMetadata.target === entity.constructor || // todo: .constructor won't work for entity schemas, but there are no entity listeners in schemas since there are no objects, right?\n (this.entityMetadata.target instanceof Function && entity.constructor.prototype instanceof this.entityMetadata.target); // todo: also need to implement entity schema inheritance\n };\n /**\n * Executes listener method of the given entity.\n */\n EntityListenerMetadata.prototype.execute = function (entity) {\n if (!this.embeddedMetadata)\n return entity[this.propertyName]();\n this.callEntityEmbeddedMethod(entity, this.embeddedMetadata.propertyPath.split(\".\"));\n };\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n /**\n * Calls embedded entity listener method no matter how nested it is.\n */\n EntityListenerMetadata.prototype.callEntityEmbeddedMethod = function (entity, propertyPaths) {\n var propertyPath = propertyPaths.shift();\n if (!propertyPath || !entity[propertyPath])\n return;\n if (propertyPaths.length === 0) {\n entity[propertyPath][this.propertyName]();\n }\n else {\n if (entity[propertyPath])\n this.callEntityEmbeddedMethod(entity[propertyPath], propertyPaths);\n }\n };\n return EntityListenerMetadata;\n}());\nexport { EntityListenerMetadata };\n\n//# sourceMappingURL=EntityListenerMetadata.js.map\n","/**\n * Check metadata contains all information about table's check constraints.\n */\nvar CheckMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function CheckMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend check constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n CheckMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.checkConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return CheckMetadata;\n}());\nexport { CheckMetadata };\n\n//# sourceMappingURL=CheckMetadata.js.map\n","/**\n * Exclusion metadata contains all information about table's exclusion constraints.\n */\nvar ExclusionMetadata = /** @class */ (function () {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n function ExclusionMetadata(options) {\n this.entityMetadata = options.entityMetadata;\n if (options.args) {\n this.target = options.args.target;\n this.expression = options.args.expression;\n this.givenName = options.args.name;\n }\n }\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n /**\n * Builds some depend exclusion constraint properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n ExclusionMetadata.prototype.build = function (namingStrategy) {\n this.name = this.givenName ? this.givenName : namingStrategy.exclusionConstraintName(this.entityMetadata.tablePath, this.expression);\n return this;\n };\n return ExclusionMetadata;\n}());\nexport { ExclusionMetadata };\n\n//# sourceMappingURL=ExclusionMetadata.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\";\nimport { IndexMetadata } from \"../metadata/IndexMetadata\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\nimport { EmbeddedMetadata } from \"../metadata/EmbeddedMetadata\";\nimport { RelationIdMetadata } from \"../metadata/RelationIdMetadata\";\nimport { RelationCountMetadata } from \"../metadata/RelationCountMetadata\";\nimport { EventListenerTypes } from \"../metadata/types/EventListenerTypes\";\nimport { MetadataUtils } from \"./MetadataUtils\";\nimport { JunctionEntityMetadataBuilder } from \"./JunctionEntityMetadataBuilder\";\nimport { ClosureJunctionEntityMetadataBuilder } from \"./ClosureJunctionEntityMetadataBuilder\";\nimport { RelationJoinColumnBuilder } from \"./RelationJoinColumnBuilder\";\nimport { EntityListenerMetadata } from \"../metadata/EntityListenerMetadata\";\nimport { UniqueMetadata } from \"../metadata/UniqueMetadata\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { CheckMetadata } from \"../metadata/CheckMetadata\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { ExclusionMetadata } from \"../metadata/ExclusionMetadata\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Builds EntityMetadata objects and all its sub-metadatas.\n */\nvar EntityMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function EntityMetadataBuilder(connection, metadataArgsStorage) {\n this.connection = connection;\n this.metadataArgsStorage = metadataArgsStorage;\n this.junctionEntityMetadataBuilder = new JunctionEntityMetadataBuilder(connection);\n this.closureJunctionEntityMetadataBuilder = new ClosureJunctionEntityMetadataBuilder(connection);\n this.relationJoinColumnBuilder = new RelationJoinColumnBuilder(connection);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds a complete entity metadatas for the given entity classes.\n */\n EntityMetadataBuilder.prototype.build = function (entityClasses) {\n var _this = this;\n // if entity classes to filter entities by are given then do filtering, otherwise use all\n var allTables = entityClasses ? this.metadataArgsStorage.filterTables(entityClasses) : this.metadataArgsStorage.tables;\n // filter out table metadata args for those we really create entity metadatas and tables in the db\n var realTables = allTables.filter(function (table) { return table.type === \"regular\" || table.type === \"closure\" || table.type === \"entity-child\" || table.type === \"view\"; });\n // create entity metadatas for a user defined entities (marked with @Entity decorator or loaded from entity schemas)\n var entityMetadatas = realTables.map(function (tableArgs) { return _this.createEntityMetadata(tableArgs); });\n // compute parent entity metadatas for table inheritance\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeParentEntityMetadata(entityMetadatas, entityMetadata); });\n // after all metadatas created we set child entity metadatas for table inheritance\n entityMetadatas.forEach(function (metadata) {\n metadata.childEntityMetadatas = entityMetadatas.filter(function (childMetadata) {\n return metadata.target instanceof Function\n && childMetadata.target instanceof Function\n && MetadataUtils.isInherited(childMetadata.target, metadata.target);\n });\n });\n // build entity metadata (step0), first for non-single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // build entity metadata (step0), now for single-table-inherited entity metadatas (dependant)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return entityMetadata.build(); });\n // compute entity metadata columns, relations, etc. first for the regular, non-single-table-inherited entity metadatas\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // then do it for single table inheritance children (since they are depend on their parents to be built)\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType === \"entity-child\"; })\n .forEach(function (entityMetadata) { return _this.computeEntityMetadataStep1(entityMetadatas, entityMetadata); });\n // calculate entity metadata computed properties and all its sub-metadatas\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeEntityMetadataStep2(entityMetadata); });\n // calculate entity metadata's inverse properties\n entityMetadatas.forEach(function (entityMetadata) { return _this.computeInverseProperties(entityMetadata, entityMetadatas); });\n // go through all entity metadatas and create foreign keys / junction entity metadatas for their relations\n entityMetadatas\n .filter(function (entityMetadata) { return entityMetadata.tableType !== \"entity-child\"; })\n .forEach(function (entityMetadata) {\n // create entity's relations join columns (for many-to-one and one-to-one owner)\n entityMetadata.relations.filter(function (relation) { return relation.isOneToOne || relation.isManyToOne; }).forEach(function (relation) {\n var joinColumns = _this.metadataArgsStorage.filterJoinColumns(relation.target, relation.propertyName);\n var _a = _this.relationJoinColumnBuilder.build(joinColumns, relation), foreignKey = _a.foreignKey, columns = _a.columns, uniqueConstraint = _a.uniqueConstraint; // create a foreign key based on its metadata args\n if (foreignKey) {\n relation.registerForeignKeys(foreignKey); // push it to the relation and thus register there a join column\n entityMetadata.foreignKeys.push(foreignKey);\n }\n if (columns) {\n relation.registerJoinColumns(columns);\n }\n if (uniqueConstraint) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver\n || _this.connection.driver instanceof SqlServerDriver || _this.connection.driver instanceof SapDriver) {\n var index = new IndexMetadata({\n entityMetadata: uniqueConstraint.entityMetadata,\n columns: uniqueConstraint.columns,\n args: {\n target: uniqueConstraint.target,\n name: uniqueConstraint.name,\n unique: true,\n synchronize: true\n }\n });\n if (_this.connection.driver instanceof SqlServerDriver) {\n index.where = index.columns.map(function (column) {\n return _this.connection.driver.escape(column.databaseName) + \" IS NOT NULL\";\n }).join(\" AND \");\n }\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n else {\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.uniques.push(uniqueConstraint);\n }\n else {\n relation.entityMetadata.ownUniques.push(uniqueConstraint);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n }\n if (foreignKey && _this.connection.driver instanceof CockroachDriver) {\n var index = new IndexMetadata({\n entityMetadata: relation.entityMetadata,\n columns: foreignKey.columns,\n args: {\n target: relation.entityMetadata.target,\n synchronize: true\n }\n });\n if (relation.embeddedMetadata) {\n relation.embeddedMetadata.indices.push(index);\n }\n else {\n relation.entityMetadata.ownIndices.push(index);\n }\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n // create junction entity metadatas for entity many-to-many relations\n entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; }).forEach(function (relation) {\n var joinTable = _this.metadataArgsStorage.findJoinTable(relation.target, relation.propertyName);\n if (!joinTable)\n return; // no join table set - no need to do anything (it means this is many-to-many inverse side)\n // here we create a junction entity metadata for a new junction table of many-to-many relation\n var junctionEntityMetadata = _this.junctionEntityMetadataBuilder.build(relation, joinTable);\n relation.registerForeignKeys.apply(relation, __spreadArray([], __read(junctionEntityMetadata.foreignKeys)));\n relation.registerJoinColumns(junctionEntityMetadata.ownIndices[0].columns, junctionEntityMetadata.ownIndices[1].columns);\n relation.registerJunctionEntityMetadata(junctionEntityMetadata);\n // compute new entity metadata properties and push it to entity metadatas pool\n _this.computeEntityMetadataStep2(junctionEntityMetadata);\n _this.computeInverseProperties(junctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(junctionEntityMetadata);\n });\n });\n // update entity metadata depend properties\n entityMetadatas\n .forEach(function (entityMetadata) {\n entityMetadata.relationsWithJoinColumns = entityMetadata.relations.filter(function (relation) { return relation.isWithJoinColumn; });\n entityMetadata.hasNonNullableRelations = entityMetadata.relationsWithJoinColumns.some(function (relation) { return !relation.isNullable || relation.isPrimary; });\n });\n // generate closure junction tables for all closure tables\n entityMetadatas\n .filter(function (metadata) { return metadata.treeType === \"closure-table\"; })\n .forEach(function (entityMetadata) {\n var closureJunctionEntityMetadata = _this.closureJunctionEntityMetadataBuilder.build(entityMetadata);\n entityMetadata.closureJunctionTable = closureJunctionEntityMetadata;\n _this.computeEntityMetadataStep2(closureJunctionEntityMetadata);\n _this.computeInverseProperties(closureJunctionEntityMetadata, entityMetadatas);\n entityMetadatas.push(closureJunctionEntityMetadata);\n });\n // generate keys for tables with single-table inheritance\n entityMetadatas\n .filter(function (metadata) { return metadata.inheritancePattern === \"STI\" && metadata.discriminatorColumn; })\n .forEach(function (entityMetadata) { return _this.createKeysForTableInheritance(entityMetadata); });\n // build all indices (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.indices.forEach(function (index) { return index.build(_this.connection.namingStrategy); });\n });\n // build all unique constraints (need to do it after relations and their join columns are built)\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.uniques.forEach(function (unique) { return unique.build(_this.connection.namingStrategy); });\n });\n // build all check constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.checks.forEach(function (check) { return check.build(_this.connection.namingStrategy); });\n });\n // build all exclusion constraints\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.exclusions.forEach(function (exclusion) { return exclusion.build(_this.connection.namingStrategy); });\n });\n // add lazy initializer for entity relations\n entityMetadatas\n .filter(function (metadata) { return metadata.target instanceof Function; })\n .forEach(function (entityMetadata) {\n entityMetadata.relations\n .filter(function (relation) { return relation.isLazy; })\n .forEach(function (relation) {\n _this.connection.relationLoader.enableLazyLoad(relation, entityMetadata.target.prototype);\n });\n });\n entityMetadatas.forEach(function (entityMetadata) {\n entityMetadata.columns.forEach(function (column) {\n // const target = column.embeddedMetadata ? column.embeddedMetadata.type : column.target;\n var generated = _this.metadataArgsStorage.findGenerated(column.target, column.propertyName);\n if (generated) {\n column.isGenerated = true;\n column.generationStrategy = generated.strategy;\n if (generated.strategy === \"uuid\") {\n column.type = \"uuid\";\n }\n else if (generated.strategy === \"rowid\") {\n column.type = \"int\";\n }\n else {\n column.type = column.type || Number;\n }\n column.build(_this.connection);\n _this.computeEntityMetadataStep2(entityMetadata);\n }\n });\n });\n return entityMetadatas;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates entity metadata from the given table args.\n * Creates column, relation, etc. metadatas for everything this entity metadata owns.\n */\n EntityMetadataBuilder.prototype.createEntityMetadata = function (tableArgs) {\n // we take all \"inheritance tree\" from a target entity to collect all stored metadata args\n // (by decorators or inside entity schemas). For example for target Post < ContentModel < Unit\n // it will be an array of [Post, ContentModel, Unit] and we can then get all metadata args of those classes\n var inheritanceTree = tableArgs.target instanceof Function\n ? MetadataUtils.getInheritanceTree(tableArgs.target)\n : [tableArgs.target]; // todo: implement later here inheritance for string-targets\n var tableInheritance = this.metadataArgsStorage.findInheritanceType(tableArgs.target);\n var tableTree = this.metadataArgsStorage.findTree(tableArgs.target);\n // if single table inheritance used, we need to copy all children columns in to parent table\n var singleTableChildrenTargets;\n if ((tableInheritance && tableInheritance.pattern === \"STI\") || tableArgs.type === \"entity-child\") {\n singleTableChildrenTargets = this.metadataArgsStorage\n .filterSingleTableChildren(tableArgs.target)\n .map(function (args) { return args.target; })\n .filter(function (target) { return target instanceof Function; });\n inheritanceTree.push.apply(inheritanceTree, __spreadArray([], __read(singleTableChildrenTargets)));\n }\n return new EntityMetadata({\n connection: this.connection,\n args: tableArgs,\n inheritanceTree: inheritanceTree,\n tableTree: tableTree,\n inheritancePattern: tableInheritance ? tableInheritance.pattern : undefined\n });\n };\n EntityMetadataBuilder.prototype.computeParentEntityMetadata = function (allEntityMetadatas, entityMetadata) {\n // after all metadatas created we set parent entity metadata for table inheritance\n if (entityMetadata.tableType === \"entity-child\") {\n entityMetadata.parentEntityMetadata = allEntityMetadatas.find(function (allEntityMetadata) {\n return allEntityMetadata.inheritanceTree.indexOf(entityMetadata.target) !== -1 && allEntityMetadata.inheritancePattern === \"STI\";\n });\n }\n };\n EntityMetadataBuilder.prototype.computeEntityMetadataStep1 = function (allEntityMetadatas, entityMetadata) {\n var _a, _b, _c;\n var _this = this;\n var entityInheritance = this.metadataArgsStorage.findInheritanceType(entityMetadata.target);\n var discriminatorValue = this.metadataArgsStorage.findDiscriminatorValue(entityMetadata.target);\n if (typeof discriminatorValue !== \"undefined\") {\n entityMetadata.discriminatorValue = discriminatorValue.value;\n }\n else {\n entityMetadata.discriminatorValue = entityMetadata.target.name;\n }\n // if single table inheritance is used, we need to mark all embedded columns as nullable\n entityMetadata.embeddeds = this.createEmbeddedsRecursively(entityMetadata, this.metadataArgsStorage.filterEmbeddeds(entityMetadata.inheritanceTree))\n .map(function (embedded) {\n if (entityMetadata.inheritancePattern === \"STI\") {\n embedded.columns = embedded.columns.map(function (column) {\n column.isNullable = true;\n return column;\n });\n }\n return embedded;\n });\n entityMetadata.ownColumns = this.metadataArgsStorage\n .filterColumns(entityMetadata.inheritanceTree)\n .map(function (args) {\n // for single table children we reuse columns created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.propertyName === args.propertyName; });\n var column = new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, args: args });\n // if single table inheritance used, we need to mark all inherit table columns as nullable\n var columnInSingleTableInheritedChild = allEntityMetadatas.find(function (otherEntityMetadata) { return otherEntityMetadata.tableType === \"entity-child\" && otherEntityMetadata.target === args.target; });\n if (columnInSingleTableInheritedChild)\n column.isNullable = true;\n return column;\n });\n // for table inheritance we need to add a discriminator column\n //\n if (entityInheritance && entityInheritance.column) {\n var discriminatorColumnName_1 = entityInheritance.column && entityInheritance.column.name ? entityInheritance.column.name : \"type\";\n var discriminatorColumn = entityMetadata.ownColumns.find(function (column) { return column.propertyName === discriminatorColumnName_1; });\n if (!discriminatorColumn) {\n discriminatorColumn = new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: discriminatorColumnName_1,\n options: entityInheritance.column || {\n name: discriminatorColumnName_1,\n type: \"varchar\",\n nullable: false\n }\n }\n });\n discriminatorColumn.isVirtual = true;\n discriminatorColumn.isDiscriminator = true;\n entityMetadata.ownColumns.push(discriminatorColumn);\n }\n else {\n discriminatorColumn.isDiscriminator = true;\n }\n }\n // add discriminator column to the child entity metadatas\n // discriminator column will not be there automatically since we are creating it in the code above\n if (entityMetadata.tableType === \"entity-child\") {\n var discriminatorColumn_1 = entityMetadata.parentEntityMetadata.ownColumns.find(function (column) { return column.isDiscriminator; });\n if (discriminatorColumn_1 && !entityMetadata.ownColumns.find(function (column) { return column === discriminatorColumn_1; })) {\n entityMetadata.ownColumns.push(discriminatorColumn_1);\n }\n }\n var namingStrategy = this.connection.namingStrategy;\n // check if tree is used then we need to add extra columns for specific tree types\n if (entityMetadata.treeType === \"materialized-path\") {\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n materializedPath: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: \"mpath\",\n options: /*tree.column || */ {\n name: namingStrategy.materializedPathColumnName,\n type: \"varchar\",\n nullable: true,\n default: \"\"\n }\n }\n }));\n }\n else if (entityMetadata.treeType === \"nested-set\") {\n var _d = namingStrategy.nestedSetColumnNames, left = _d.left, right = _d.right;\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetLeft: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: left,\n options: /*tree.column || */ {\n name: left,\n type: \"integer\",\n nullable: false,\n default: 1\n }\n }\n }));\n entityMetadata.ownColumns.push(new ColumnMetadata({\n connection: this.connection,\n entityMetadata: entityMetadata,\n nestedSetRight: true,\n args: {\n target: entityMetadata.target,\n mode: \"virtual\",\n propertyName: right,\n options: /*tree.column || */ {\n name: right,\n type: \"integer\",\n nullable: false,\n default: 2\n }\n }\n }));\n }\n entityMetadata.ownRelations = this.metadataArgsStorage.filterRelations(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relations created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.ownRelations.find(function (relation) { return relation.propertyName === args.propertyName; });\n return new RelationMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationIds = this.metadataArgsStorage.filterRelationIds(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation ids created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationIds.find(function (relationId) { return relationId.propertyName === args.propertyName; });\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.relationCounts = this.metadataArgsStorage.filterRelationCounts(entityMetadata.inheritanceTree).map(function (args) {\n // for single table children we reuse relation counts created for their parents\n if (entityMetadata.tableType === \"entity-child\")\n return entityMetadata.parentEntityMetadata.relationCounts.find(function (relationCount) { return relationCount.propertyName === args.propertyName; });\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.ownListeners = this.metadataArgsStorage.filterListeners(entityMetadata.inheritanceTree).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, args: args });\n });\n entityMetadata.checks = this.metadataArgsStorage.filterChecks(entityMetadata.inheritanceTree).map(function (args) {\n return new CheckMetadata({ entityMetadata: entityMetadata, args: args });\n });\n // Only PostgreSQL supports exclusion constraints.\n if (this.connection.driver instanceof PostgresDriver) {\n entityMetadata.exclusions = this.metadataArgsStorage.filterExclusions(entityMetadata.inheritanceTree).map(function (args) {\n return new ExclusionMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n if (this.connection.driver instanceof CockroachDriver) {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return !args.unique; })\n .map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n var uniques = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n .filter(function (args) { return args.unique; })\n .map(function (args) {\n return new UniqueMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n }\n });\n });\n (_a = entityMetadata.ownUniques).push.apply(_a, __spreadArray([], __read(uniques)));\n }\n else {\n entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, args: args });\n });\n }\n // Mysql and SAP HANA stores unique constraints as unique indices.\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n var indices = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new IndexMetadata({\n entityMetadata: entityMetadata,\n args: {\n target: args.target,\n name: args.name,\n columns: args.columns,\n unique: true,\n synchronize: true\n }\n });\n });\n (_b = entityMetadata.ownIndices).push.apply(_b, __spreadArray([], __read(indices)));\n }\n else {\n var uniques = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, args: args });\n });\n (_c = entityMetadata.ownUniques).push.apply(_c, __spreadArray([], __read(uniques)));\n }\n };\n /**\n * Creates from the given embedded metadata args real embedded metadatas with its columns and relations,\n * and does the same for all its sub-embeddeds (goes recursively).\n */\n EntityMetadataBuilder.prototype.createEmbeddedsRecursively = function (entityMetadata, embeddedArgs) {\n var _this = this;\n return embeddedArgs.map(function (embeddedArgs) {\n var embeddedMetadata = new EmbeddedMetadata({ entityMetadata: entityMetadata, args: embeddedArgs });\n var targets = MetadataUtils.getInheritanceTree(embeddedMetadata.type);\n embeddedMetadata.columns = _this.metadataArgsStorage.filterColumns(targets).map(function (args) {\n return new ColumnMetadata({ connection: _this.connection, entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relations = _this.metadataArgsStorage.filterRelations(targets).map(function (args) {\n return new RelationMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.listeners = _this.metadataArgsStorage.filterListeners(targets).map(function (args) {\n return new EntityListenerMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.indices = _this.metadataArgsStorage.filterIndices(targets).map(function (args) {\n return new IndexMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.uniques = _this.metadataArgsStorage.filterUniques(targets).map(function (args) {\n return new UniqueMetadata({ entityMetadata: entityMetadata, embeddedMetadata: embeddedMetadata, args: args });\n });\n embeddedMetadata.relationIds = _this.metadataArgsStorage.filterRelationIds(targets).map(function (args) {\n return new RelationIdMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.relationCounts = _this.metadataArgsStorage.filterRelationCounts(targets).map(function (args) {\n return new RelationCountMetadata({ entityMetadata: entityMetadata, args: args });\n });\n embeddedMetadata.embeddeds = _this.createEmbeddedsRecursively(entityMetadata, _this.metadataArgsStorage.filterEmbeddeds(targets));\n embeddedMetadata.embeddeds.forEach(function (subEmbedded) { return subEmbedded.parentEmbeddedMetadata = embeddedMetadata; });\n entityMetadata.allEmbeddeds.push(embeddedMetadata);\n return embeddedMetadata;\n });\n };\n /**\n * Computes all entity metadata's computed properties, and all its sub-metadatas (relations, columns, embeds, etc).\n */\n EntityMetadataBuilder.prototype.computeEntityMetadataStep2 = function (entityMetadata) {\n var _this = this;\n entityMetadata.embeddeds.forEach(function (embedded) { return embedded.build(_this.connection); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.columnsFromTree.forEach(function (column) { return column.build(_this.connection); });\n embedded.relationsFromTree.forEach(function (relation) { return relation.build(); });\n });\n entityMetadata.ownColumns.forEach(function (column) { return column.build(_this.connection); });\n entityMetadata.ownRelations.forEach(function (relation) { return relation.build(); });\n entityMetadata.relations = entityMetadata.embeddeds.reduce(function (relations, embedded) { return relations.concat(embedded.relationsFromTree); }, entityMetadata.ownRelations);\n entityMetadata.eagerRelations = entityMetadata.relations.filter(function (relation) { return relation.isEager; });\n entityMetadata.lazyRelations = entityMetadata.relations.filter(function (relation) { return relation.isLazy; });\n entityMetadata.oneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOne; });\n entityMetadata.oneToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToMany; });\n entityMetadata.manyToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToOne; });\n entityMetadata.manyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToMany; });\n entityMetadata.ownerOneToOneRelations = entityMetadata.relations.filter(function (relation) { return relation.isOneToOneOwner; });\n entityMetadata.ownerManyToManyRelations = entityMetadata.relations.filter(function (relation) { return relation.isManyToManyOwner; });\n entityMetadata.treeParentRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeParent; });\n entityMetadata.treeChildrenRelation = entityMetadata.relations.find(function (relation) { return relation.isTreeChildren; });\n entityMetadata.columns = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.columnsFromTree); }, entityMetadata.ownColumns);\n entityMetadata.listeners = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.listenersFromTree); }, entityMetadata.ownListeners);\n entityMetadata.afterLoadListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_LOAD; });\n entityMetadata.afterInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_INSERT; });\n entityMetadata.afterUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_UPDATE; });\n entityMetadata.afterRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.AFTER_REMOVE; });\n entityMetadata.beforeInsertListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_INSERT; });\n entityMetadata.beforeUpdateListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_UPDATE; });\n entityMetadata.beforeRemoveListeners = entityMetadata.listeners.filter(function (listener) { return listener.type === EventListenerTypes.BEFORE_REMOVE; });\n entityMetadata.indices = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.indicesFromTree); }, entityMetadata.ownIndices);\n entityMetadata.uniques = entityMetadata.embeddeds.reduce(function (columns, embedded) { return columns.concat(embedded.uniquesFromTree); }, entityMetadata.ownUniques);\n entityMetadata.primaryColumns = entityMetadata.columns.filter(function (column) { return column.isPrimary; });\n entityMetadata.nonVirtualColumns = entityMetadata.columns.filter(function (column) { return !column.isVirtual; });\n entityMetadata.ancestorColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"ancestor\"; });\n entityMetadata.descendantColumns = entityMetadata.columns.filter(function (column) { return column.closureType === \"descendant\"; });\n entityMetadata.hasMultiplePrimaryKeys = entityMetadata.primaryColumns.length > 1;\n entityMetadata.generatedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.isObjectId; });\n entityMetadata.hasUUIDGeneratedColumns = entityMetadata.columns.filter(function (column) { return column.isGenerated || column.generationStrategy === \"uuid\"; }).length > 0;\n entityMetadata.createDateColumn = entityMetadata.columns.find(function (column) { return column.isCreateDate; });\n entityMetadata.updateDateColumn = entityMetadata.columns.find(function (column) { return column.isUpdateDate; });\n entityMetadata.deleteDateColumn = entityMetadata.columns.find(function (column) { return column.isDeleteDate; });\n entityMetadata.versionColumn = entityMetadata.columns.find(function (column) { return column.isVersion; });\n entityMetadata.discriminatorColumn = entityMetadata.columns.find(function (column) { return column.isDiscriminator; });\n entityMetadata.treeLevelColumn = entityMetadata.columns.find(function (column) { return column.isTreeLevel; });\n entityMetadata.nestedSetLeftColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetLeft; });\n entityMetadata.nestedSetRightColumn = entityMetadata.columns.find(function (column) { return column.isNestedSetRight; });\n entityMetadata.materializedPathColumn = entityMetadata.columns.find(function (column) { return column.isMaterializedPath; });\n entityMetadata.objectIdColumn = entityMetadata.columns.find(function (column) { return column.isObjectId; });\n entityMetadata.foreignKeys.forEach(function (foreignKey) { return foreignKey.build(_this.connection.namingStrategy); });\n entityMetadata.propertiesMap = entityMetadata.createPropertiesMap();\n entityMetadata.relationIds.forEach(function (relationId) { return relationId.build(); });\n entityMetadata.relationCounts.forEach(function (relationCount) { return relationCount.build(); });\n entityMetadata.embeddeds.forEach(function (embedded) {\n embedded.relationIdsFromTree.forEach(function (relationId) { return relationId.build(); });\n embedded.relationCountsFromTree.forEach(function (relationCount) { return relationCount.build(); });\n });\n };\n /**\n * Computes entity metadata's relations inverse side properties.\n */\n EntityMetadataBuilder.prototype.computeInverseProperties = function (entityMetadata, entityMetadatas) {\n entityMetadata.relations.forEach(function (relation) {\n // compute inverse side (related) entity metadatas for all relation metadatas\n var inverseEntityMetadata = entityMetadatas.find(function (m) { return m.target === relation.type || (typeof relation.type === \"string\" && (m.targetName === relation.type || m.givenTableName === relation.type)); });\n if (!inverseEntityMetadata)\n throw new Error(\"Entity metadata for \" + entityMetadata.name + \"#\" + relation.propertyPath + \" was not found. Check if you specified a correct entity object and if it's connected in the connection options.\");\n relation.inverseEntityMetadata = inverseEntityMetadata;\n relation.inverseSidePropertyPath = relation.buildInverseSidePropertyPath();\n // and compute inverse relation and mark if it has such\n relation.inverseRelation = inverseEntityMetadata.relations.find(function (foundRelation) { return foundRelation.propertyPath === relation.inverseSidePropertyPath; });\n });\n };\n /**\n * Creates indices for the table of single table inheritance.\n */\n EntityMetadataBuilder.prototype.createKeysForTableInheritance = function (entityMetadata) {\n entityMetadata.indices.push(new IndexMetadata({\n entityMetadata: entityMetadata,\n columns: [entityMetadata.discriminatorColumn],\n args: {\n target: entityMetadata.target,\n unique: false\n }\n }));\n };\n return EntityMetadataBuilder;\n}());\nexport { EntityMetadataBuilder };\n\n//# sourceMappingURL=EntityMetadataBuilder.js.map\n","import { MetadataUtils } from \"../metadata-builder/MetadataUtils\";\n/**\n * Storage all metadatas args of all available types: tables, columns, subscribers, relations, etc.\n * Each metadata args represents some specifications of what it represents.\n * MetadataArgs used to create a real Metadata objects.\n */\nvar MetadataArgsStorage = /** @class */ (function () {\n function MetadataArgsStorage() {\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n this.tables = [];\n this.trees = [];\n this.entityRepositories = [];\n this.transactionEntityManagers = [];\n this.transactionRepositories = [];\n this.namingStrategies = [];\n this.entitySubscribers = [];\n this.indices = [];\n this.uniques = [];\n this.checks = [];\n this.exclusions = [];\n this.columns = [];\n this.generations = [];\n this.relations = [];\n this.joinColumns = [];\n this.joinTables = [];\n this.entityListeners = [];\n this.relationCounts = [];\n this.relationIds = [];\n this.embeddeds = [];\n this.inheritances = [];\n this.discriminatorValues = [];\n }\n MetadataArgsStorage.prototype.filterTables = function (target) {\n return this.filterByTarget(this.tables, target);\n };\n MetadataArgsStorage.prototype.filterColumns = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.columns, target);\n };\n MetadataArgsStorage.prototype.findGenerated = function (target, propertyName) {\n return this.generations.find(function (generated) {\n return (Array.isArray(target) ? target.indexOf(generated.target) !== -1 : generated.target === target) && generated.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.findTree = function (target) {\n return this.trees.find(function (tree) {\n return (Array.isArray(target) ? target.indexOf(tree.target) !== -1 : tree.target === target);\n });\n };\n MetadataArgsStorage.prototype.filterRelations = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relations, target);\n };\n MetadataArgsStorage.prototype.filterRelationIds = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationIds, target);\n };\n MetadataArgsStorage.prototype.filterRelationCounts = function (target) {\n return this.filterByTargetAndWithoutDuplicateProperties(this.relationCounts, target);\n };\n MetadataArgsStorage.prototype.filterIndices = function (target) {\n // todo: implement parent-entity overrides?\n return this.indices.filter(function (index) {\n return Array.isArray(target) ? target.indexOf(index.target) !== -1 : index.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterUniques = function (target) {\n return this.uniques.filter(function (unique) {\n return Array.isArray(target) ? target.indexOf(unique.target) !== -1 : unique.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterChecks = function (target) {\n return this.checks.filter(function (check) {\n return Array.isArray(target) ? target.indexOf(check.target) !== -1 : check.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterExclusions = function (target) {\n return this.exclusions.filter(function (exclusion) {\n return Array.isArray(target) ? target.indexOf(exclusion.target) !== -1 : exclusion.target === target;\n });\n };\n MetadataArgsStorage.prototype.filterListeners = function (target) {\n return this.filterByTarget(this.entityListeners, target);\n };\n MetadataArgsStorage.prototype.filterEmbeddeds = function (target) {\n return this.filterByTargetAndWithoutDuplicateEmbeddedProperties(this.embeddeds, target);\n };\n MetadataArgsStorage.prototype.findJoinTable = function (target, propertyName) {\n return this.joinTables.find(function (joinTable) {\n return joinTable.target === target && joinTable.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterJoinColumns = function (target, propertyName) {\n // todo: implement parent-entity overrides?\n return this.joinColumns.filter(function (joinColumn) {\n return joinColumn.target === target && joinColumn.propertyName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSubscribers = function (target) {\n return this.filterByTarget(this.entitySubscribers, target);\n };\n MetadataArgsStorage.prototype.filterNamingStrategies = function (target) {\n return this.filterByTarget(this.namingStrategies, target);\n };\n MetadataArgsStorage.prototype.filterTransactionEntityManagers = function (target, propertyName) {\n return this.transactionEntityManagers.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterTransactionRepository = function (target, propertyName) {\n return this.transactionRepositories.filter(function (transactionEm) {\n return (Array.isArray(target) ? target.indexOf(transactionEm.target) !== -1 : transactionEm.target === target) && transactionEm.methodName === propertyName;\n });\n };\n MetadataArgsStorage.prototype.filterSingleTableChildren = function (target) {\n return this.tables.filter(function (table) {\n return table.target instanceof Function\n && target instanceof Function\n && MetadataUtils.isInherited(table.target, target)\n && table.type === \"entity-child\";\n });\n };\n MetadataArgsStorage.prototype.findInheritanceType = function (target) {\n return this.inheritances.find(function (inheritance) { return inheritance.target === target; });\n };\n MetadataArgsStorage.prototype.findDiscriminatorValue = function (target) {\n return this.discriminatorValues.find(function (discriminatorValue) { return discriminatorValue.target === target; });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Filters given array by a given target or targets.\n */\n MetadataArgsStorage.prototype.filterByTarget = function (array, target) {\n return array.filter(function (table) {\n return Array.isArray(target) ? target.indexOf(table.target) !== -1 : table.target === target;\n });\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n if (!newArray.find(function (newItem) { return newItem.propertyName === item.propertyName; }))\n newArray.push(item);\n }\n });\n return newArray;\n };\n /**\n * Filters given array by a given target or targets and prevents duplicate embedded property names.\n */\n MetadataArgsStorage.prototype.filterByTargetAndWithoutDuplicateEmbeddedProperties = function (array, target) {\n var newArray = [];\n array.forEach(function (item) {\n var sameTarget = Array.isArray(target) ? target.indexOf(item.target) !== -1 : item.target === target;\n if (sameTarget) {\n var isDuplicateEmbeddedProperty = newArray.find(function (newItem) {\n return newItem.prefix === item.prefix && newItem.propertyName === item.propertyName;\n });\n if (!isDuplicateEmbeddedProperty)\n newArray.push(item);\n }\n });\n return newArray;\n };\n return MetadataArgsStorage;\n}());\nexport { MetadataArgsStorage };\n\n//# sourceMappingURL=MetadataArgsStorage.js.map\n","import { __values } from \"tslib\";\nimport { MetadataArgsStorage } from \"../metadata-args/MetadataArgsStorage\";\n/**\n * Transforms entity schema into metadata args storage.\n * The result will be just like entities read from decorators.\n */\nvar EntitySchemaTransformer = /** @class */ (function () {\n function EntitySchemaTransformer() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Transforms entity schema into new metadata args storage object.\n */\n EntitySchemaTransformer.prototype.transform = function (schemas) {\n var metadataArgsStorage = new MetadataArgsStorage();\n schemas.forEach(function (entitySchema) {\n var options = entitySchema.options;\n // add table metadata args from the schema\n var tableMetadata = {\n target: options.target || options.name,\n name: options.tableName,\n database: options.database,\n schema: options.schema,\n type: options.type || \"regular\",\n orderBy: options.orderBy,\n synchronize: options.synchronize,\n expression: options.expression\n };\n metadataArgsStorage.tables.push(tableMetadata);\n // add columns metadata args from the schema\n Object.keys(options.columns).forEach(function (columnName) {\n var column = options.columns[columnName];\n var mode = \"regular\";\n if (column.createDate)\n mode = \"createDate\";\n if (column.updateDate)\n mode = \"updateDate\";\n if (column.deleteDate)\n mode = \"deleteDate\";\n if (column.version)\n mode = \"version\";\n if (column.treeChildrenCount)\n mode = \"treeChildrenCount\";\n if (column.treeLevel)\n mode = \"treeLevel\";\n if (column.objectId)\n mode = \"objectId\";\n var columnAgrs = {\n target: options.target || options.name,\n mode: mode,\n propertyName: columnName,\n options: {\n type: column.type,\n name: column.objectId ? \"_id\" : column.name,\n length: column.length,\n width: column.width,\n nullable: column.nullable,\n readonly: column.readonly,\n update: column.update,\n select: column.select,\n insert: column.insert,\n primary: column.primary,\n unique: column.unique,\n comment: column.comment,\n default: column.default,\n onUpdate: column.onUpdate,\n precision: column.precision,\n scale: column.scale,\n zerofill: column.zerofill,\n unsigned: column.unsigned,\n charset: column.charset,\n collation: column.collation,\n enum: column.enum,\n asExpression: column.asExpression,\n generatedType: column.generatedType,\n hstoreType: column.hstoreType,\n array: column.array,\n transformer: column.transformer,\n spatialFeatureType: column.spatialFeatureType,\n srid: column.srid\n }\n };\n metadataArgsStorage.columns.push(columnAgrs);\n if (column.generated) {\n var generationArgs = {\n target: options.target || options.name,\n propertyName: columnName,\n strategy: typeof column.generated === \"string\" ? column.generated : \"increment\"\n };\n metadataArgsStorage.generations.push(generationArgs);\n }\n if (column.unique)\n metadataArgsStorage.uniques.push({ target: options.target || options.name, columns: [columnName] });\n });\n // add relation metadata args from the schema\n if (options.relations) {\n Object.keys(options.relations).forEach(function (relationName) {\n var e_1, _a;\n var relationSchema = options.relations[relationName];\n var relation = {\n target: options.target || options.name,\n propertyName: relationName,\n relationType: relationSchema.type,\n isLazy: relationSchema.lazy || false,\n type: relationSchema.target,\n inverseSideProperty: relationSchema.inverseSide,\n isTreeParent: relationSchema.treeParent,\n isTreeChildren: relationSchema.treeChildren,\n options: {\n eager: relationSchema.eager || false,\n cascade: relationSchema.cascade,\n nullable: relationSchema.nullable,\n onDelete: relationSchema.onDelete,\n onUpdate: relationSchema.onUpdate,\n deferrable: relationSchema.deferrable,\n primary: relationSchema.primary,\n persistence: relationSchema.persistence\n }\n };\n metadataArgsStorage.relations.push(relation);\n // add join column\n if (relationSchema.joinColumn) {\n if (typeof relationSchema.joinColumn === \"boolean\") {\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n else {\n var joinColumnsOptions = Array.isArray(relationSchema.joinColumn) ? relationSchema.joinColumn : [relationSchema.joinColumn];\n try {\n for (var joinColumnsOptions_1 = __values(joinColumnsOptions), joinColumnsOptions_1_1 = joinColumnsOptions_1.next(); !joinColumnsOptions_1_1.done; joinColumnsOptions_1_1 = joinColumnsOptions_1.next()) {\n var joinColumnOption = joinColumnsOptions_1_1.value;\n var joinColumn = {\n target: options.target || options.name,\n propertyName: relationName,\n name: joinColumnOption.name,\n referencedColumnName: joinColumnOption.referencedColumnName\n };\n metadataArgsStorage.joinColumns.push(joinColumn);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (joinColumnsOptions_1_1 && !joinColumnsOptions_1_1.done && (_a = joinColumnsOptions_1.return)) _a.call(joinColumnsOptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n }\n // add join table\n if (relationSchema.joinTable) {\n if (typeof relationSchema.joinTable === \"boolean\") {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n else {\n var joinTable = {\n target: options.target || options.name,\n propertyName: relationName,\n name: relationSchema.joinTable.name,\n database: relationSchema.joinTable.database,\n schema: relationSchema.joinTable.schema,\n joinColumns: (relationSchema.joinTable.joinColumn ? [relationSchema.joinTable.joinColumn] : relationSchema.joinTable.joinColumns),\n inverseJoinColumns: (relationSchema.joinTable.inverseJoinColumn ? [relationSchema.joinTable.inverseJoinColumn] : relationSchema.joinTable.inverseJoinColumns),\n };\n metadataArgsStorage.joinTables.push(joinTable);\n }\n }\n });\n }\n // add index metadata args from the schema\n if (options.indices) {\n options.indices.forEach(function (index) {\n var indexAgrs = {\n target: options.target || options.name,\n name: index.name,\n unique: index.unique === true ? true : false,\n spatial: index.spatial === true ? true : false,\n fulltext: index.fulltext === true ? true : false,\n parser: index.parser,\n synchronize: index.synchronize === false ? false : true,\n where: index.where,\n sparse: index.sparse,\n columns: index.columns\n };\n metadataArgsStorage.indices.push(indexAgrs);\n });\n }\n // add unique metadata args from the schema\n if (options.uniques) {\n options.uniques.forEach(function (unique) {\n var uniqueAgrs = {\n target: options.target || options.name,\n name: unique.name,\n columns: unique.columns\n };\n metadataArgsStorage.uniques.push(uniqueAgrs);\n });\n }\n // add check metadata args from the schema\n if (options.checks) {\n options.checks.forEach(function (check) {\n var checkAgrs = {\n target: options.target || options.name,\n name: check.name,\n expression: check.expression\n };\n metadataArgsStorage.checks.push(checkAgrs);\n });\n }\n // add exclusion metadata args from the schema\n if (options.exclusions) {\n options.exclusions.forEach(function (exclusion) {\n var exclusionArgs = {\n target: options.target || options.name,\n name: exclusion.name,\n expression: exclusion.expression\n };\n metadataArgsStorage.exclusions.push(exclusionArgs);\n });\n }\n });\n return metadataArgsStorage;\n };\n return EntitySchemaTransformer;\n}());\nexport { EntitySchemaTransformer };\n\n//# sourceMappingURL=EntitySchemaTransformer.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { importClassesFromDirectories } from \"../util/DirectoryExportedClassesLoader\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { getFromContainer } from \"../container\";\nimport { getMetadataArgsStorage } from \"../index\";\nimport { EntityMetadataBuilder } from \"../metadata-builder/EntityMetadataBuilder\";\nimport { EntitySchemaTransformer } from \"../entity-schema/EntitySchemaTransformer\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Builds migration instances, subscriber instances and entity metadatas for the given classes.\n */\nvar ConnectionMetadataBuilder = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ConnectionMetadataBuilder(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Builds migration instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildMigrations = function (migrations) {\n var _a = __read(OrmUtils.splitClassesAndStrings(migrations), 2), migrationClasses = _a[0], migrationDirectories = _a[1];\n var allMigrationClasses = __spreadArray(__spreadArray([], __read(migrationClasses)), __read(importClassesFromDirectories(this.connection.logger, migrationDirectories)));\n return allMigrationClasses.map(function (migrationClass) { return getFromContainer(migrationClass); });\n };\n /**\n * Builds subscriber instances for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildSubscribers = function (subscribers) {\n var _a = __read(OrmUtils.splitClassesAndStrings(subscribers || []), 2), subscriberClasses = _a[0], subscriberDirectories = _a[1];\n var allSubscriberClasses = __spreadArray(__spreadArray([], __read(subscriberClasses)), __read(importClassesFromDirectories(this.connection.logger, subscriberDirectories)));\n return getMetadataArgsStorage()\n .filterSubscribers(allSubscriberClasses)\n .map(function (metadata) { return getFromContainer(metadata.target); });\n };\n /**\n * Builds entity metadatas for the given classes or directories.\n */\n ConnectionMetadataBuilder.prototype.buildEntityMetadatas = function (entities) {\n // todo: instead we need to merge multiple metadata args storages\n var _a = __read(OrmUtils.splitClassesAndStrings(entities || []), 2), entityClassesOrSchemas = _a[0], entityDirectories = _a[1];\n var entityClasses = entityClassesOrSchemas.filter(function (entityClass) { return (entityClass instanceof EntitySchema) === false; });\n var entitySchemas = entityClassesOrSchemas.filter(function (entityClass) { return entityClass instanceof EntitySchema; });\n var allEntityClasses = __spreadArray(__spreadArray([], __read(entityClasses)), __read(importClassesFromDirectories(this.connection.logger, entityDirectories)));\n allEntityClasses.forEach(function (entityClass) {\n if (entityClass instanceof EntitySchema) {\n entitySchemas.push(entityClass);\n allEntityClasses.slice(allEntityClasses.indexOf(entityClass), 1);\n }\n });\n var decoratorEntityMetadatas = new EntityMetadataBuilder(this.connection, getMetadataArgsStorage()).build(allEntityClasses);\n var metadataArgsStorageFromSchema = new EntitySchemaTransformer().transform(entitySchemas);\n var schemaEntityMetadatas = new EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build();\n return __spreadArray(__spreadArray([], __read(decoratorEntityMetadatas)), __read(schemaEntityMetadatas));\n };\n return ConnectionMetadataBuilder;\n}());\nexport { ConnectionMetadataBuilder };\n\n//# sourceMappingURL=ConnectionMetadataBuilder.js.map\n","/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and does not use syntax highlighting.\n */\nvar SimpleConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SimpleConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n SimpleConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query\" + \": \" + sql);\n }\n };\n /**\n * Logs query that is failed.\n */\n SimpleConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query failed: \" + sql);\n console.log(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n SimpleConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n console.log(\"query is slow: \" + sql);\n console.log(\"execution time: \" + time);\n };\n /**\n * Logs events from the schema build process.\n */\n SimpleConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n console.log(message);\n }\n };\n /**\n * Logs events from the migrations run process.\n */\n SimpleConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n console.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n SimpleConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n console.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n console.info(message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(message);\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n SimpleConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return SimpleConsoleLogger;\n}());\nexport { SimpleConsoleLogger };\n\n//# sourceMappingURL=SimpleConsoleLogger.js.map\n","import { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger uses console to log events and use syntax highlighting.\n */\nvar AdvancedConsoleLogger = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AdvancedConsoleLogger(options) {\n this.options = options;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Logs query and parameters used in it.\n */\n AdvancedConsoleLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"query\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logInfo(\"query:\", PlatformTools.highlightSql(sql));\n }\n };\n /**\n * Logs query that is failed.\n */\n AdvancedConsoleLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.options === \"all\" || this.options === true || (Array.isArray(this.options) && this.options.indexOf(\"error\") !== -1)) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logError(\"query failed:\", PlatformTools.highlightSql(sql));\n PlatformTools.logError(\"error:\", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n AdvancedConsoleLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n var sql = query + (parameters && parameters.length ? \" -- PARAMETERS: \" + this.stringifyParams(parameters) : \"\");\n PlatformTools.logWarn(\"query is slow:\", PlatformTools.highlightSql(sql));\n PlatformTools.logWarn(\"execution time:\", time);\n };\n /**\n * Logs events from the schema build process.\n */\n AdvancedConsoleLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"schema\") !== -1)) {\n PlatformTools.log(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n AdvancedConsoleLogger.prototype.logMigration = function (message, queryRunner) {\n PlatformTools.log(message);\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n AdvancedConsoleLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"log\") !== -1))\n PlatformTools.log(message);\n break;\n case \"info\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"info\") !== -1))\n PlatformTools.logInfo(\"INFO:\", message);\n break;\n case \"warn\":\n if (this.options === \"all\" || (Array.isArray(this.options) && this.options.indexOf(\"warn\") !== -1))\n console.warn(PlatformTools.warn(message));\n break;\n }\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Converts parameters to a string.\n * Sometimes parameters can have circular objects and therefor we are handle this case too.\n */\n AdvancedConsoleLogger.prototype.stringifyParams = function (parameters) {\n try {\n return JSON.stringify(parameters);\n }\n catch (error) { // most probably circular objects in parameters\n return parameters;\n }\n };\n return AdvancedConsoleLogger;\n}());\nexport { AdvancedConsoleLogger };\n\n//# sourceMappingURL=AdvancedConsoleLogger.js.map\n","import { __extends } from \"tslib\";\n/**\n * Performs logging of the events in TypeORM.\n * This version of logger logs everything into ormlogs.log file.\n */\nvar DummyLogger = /** @class */ (function () {\n function DummyLogger() {\n }\n /**\n * Logs query and parameters used in it.\n */\n DummyLogger.prototype.logQuery = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is failed.\n */\n DummyLogger.prototype.logQueryError = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs query that is slow.\n */\n DummyLogger.prototype.logQuerySlow = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the schema build process.\n */\n DummyLogger.prototype.logSchemaBuild = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Logs events from the migrations run process.\n */\n DummyLogger.prototype.logMigration = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n /**\n * Perform logging using given logger, or by default to the console.\n * Log has its own level and message.\n */\n DummyLogger.prototype.log = function () {\n throw new Error('This logger is not applicable in a browser context');\n };\n return DummyLogger;\n}());\nexport { DummyLogger };\nvar FileLogger = /** @class */ (function (_super) {\n __extends(FileLogger, _super);\n function FileLogger() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return FileLogger;\n}(DummyLogger));\nexport { FileLogger };\n\n//# sourceMappingURL=BrowserFileLoggerDummy.js.map\n","import debug from \"debug\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Performs logging of the events in TypeORM via debug library.\n */\nvar DebugLogger = /** @class */ (function () {\n function DebugLogger() {\n this.debugQueryLog = debug(\"typeorm:query:log\");\n this.debugQueryError = debug(\"typeorm:query:error\");\n this.debugQuerySlow = debug(\"typeorm:query:slow\");\n this.debugSchemaBuild = debug(\"typeorm:schema\");\n this.debugMigration = debug(\"typeorm:migration\");\n this.debugLog = debug(\"typeorm:log\");\n this.debugInfo = debug(\"typeorm:info\");\n this.debugWarn = debug(\"typeorm:warn\");\n }\n /**\n * Logs query and parameters used in it.\n */\n DebugLogger.prototype.logQuery = function (query, parameters, queryRunner) {\n if (this.debugQueryLog.enabled) {\n this.debugQueryLog(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryLog(\"parameters:\", parameters);\n }\n }\n };\n /**\n * Logs query that failed.\n */\n DebugLogger.prototype.logQueryError = function (error, query, parameters, queryRunner) {\n if (this.debugQueryError.enabled) {\n this.debugQueryError(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQueryError(\"parameters:\", parameters);\n }\n this.debugQueryError(\"error: \", error);\n }\n };\n /**\n * Logs query that is slow.\n */\n DebugLogger.prototype.logQuerySlow = function (time, query, parameters, queryRunner) {\n if (this.debugQuerySlow.enabled) {\n this.debugQuerySlow(PlatformTools.highlightSql(query) + \";\");\n if (parameters && parameters.length) {\n this.debugQuerySlow(\"parameters:\", parameters);\n }\n this.debugQuerySlow(\"execution time:\", time);\n }\n };\n /**\n * Logs events from the schema build process.\n */\n DebugLogger.prototype.logSchemaBuild = function (message, queryRunner) {\n if (this.debugSchemaBuild.enabled) {\n this.debugSchemaBuild(message);\n }\n };\n /**\n * Logs events from the migration run process.\n */\n DebugLogger.prototype.logMigration = function (message, queryRunner) {\n if (this.debugMigration.enabled) {\n this.debugMigration(message);\n }\n };\n /**\n * Perform logging using given logger.\n * Log has its own level and message.\n */\n DebugLogger.prototype.log = function (level, message, queryRunner) {\n switch (level) {\n case \"log\":\n if (this.debugLog.enabled) {\n this.debugLog(message);\n }\n break;\n case \"info\":\n if (this.debugInfo.enabled) {\n this.debugInfo(message);\n }\n break;\n case \"warn\":\n if (this.debugWarn.enabled) {\n this.debugWarn(message);\n }\n break;\n }\n };\n return DebugLogger;\n}());\nexport { DebugLogger };\n\n//# sourceMappingURL=DebugLogger.js.map\n","import { SimpleConsoleLogger } from \"./SimpleConsoleLogger\";\nimport { AdvancedConsoleLogger } from \"./AdvancedConsoleLogger\";\nimport { FileLogger } from \"./FileLogger\";\nimport { DebugLogger } from \"./DebugLogger\";\n/**\n * Helps to create logger instances.\n */\nvar LoggerFactory = /** @class */ (function () {\n function LoggerFactory() {\n }\n /**\n * Creates a new logger depend on a given connection's driver.\n */\n LoggerFactory.prototype.create = function (logger, options) {\n if (logger instanceof Object)\n return logger;\n if (logger) {\n switch (logger) {\n case \"simple-console\":\n return new SimpleConsoleLogger(options);\n case \"file\":\n return new FileLogger(options);\n case \"advanced-console\":\n return new AdvancedConsoleLogger(options);\n case \"debug\":\n return new DebugLogger();\n }\n }\n return new AdvancedConsoleLogger(options);\n };\n return LoggerFactory;\n}());\nexport { LoggerFactory };\n\n//# sourceMappingURL=LoggerFactory.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { PlatformTools } from \"../platform/PlatformTools\";\n/**\n * Caches query result into Redis database.\n */\nvar RedisQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RedisQueryResultCache(connection, clientType) {\n this.connection = connection;\n this.clientType = clientType;\n this.redis = this.loadRedis();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n RedisQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var cacheOptions;\n return __generator(this, function (_a) {\n cacheOptions = this.connection.options.cache;\n if (this.clientType === \"redis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = this.redis.createClient(cacheOptions.options);\n }\n else {\n this.client = this.redis.createClient();\n }\n }\n else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options);\n }\n else {\n this.client = new this.redis();\n }\n }\n else if (this.clientType === \"ioredis/cluster\") {\n if (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {\n this.client = new this.redis.Cluster(cacheOptions.options);\n }\n else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {\n this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);\n }\n else {\n throw new Error(\"options.startupNodes required for \" + this.clientType + \".\");\n }\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects the connection\n */\n RedisQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.quit(function (err, result) {\n if (err)\n return fail(err);\n ok();\n _this.client = undefined;\n });\n })];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n RedisQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n RedisQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n var _this = this;\n return new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.get(options.identifier, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else if (options.query) {\n _this.client.get(options.query, function (err, result) {\n if (err)\n return fail(err);\n ok(JSON.parse(result));\n });\n }\n else {\n ok(undefined);\n }\n });\n };\n /**\n * Checks if cache is expired or not.\n */\n RedisQueryResultCache.prototype.isExpired = function (savedCache) {\n return (savedCache.time + savedCache.duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n RedisQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n if (options.identifier) {\n _this.client.set(options.identifier, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n else if (options.query) {\n _this.client.set(options.query, JSON.stringify(options), \"PX\", options.duration, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n }\n })];\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n RedisQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.client.flushdb(function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n })];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n RedisQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n return _this.deleteKey(identifier);\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Removes a single key from redis database.\n */\n RedisQueryResultCache.prototype.deleteKey = function (key) {\n var _this = this;\n return new Promise(function (ok, fail) {\n _this.client.del(key, function (err, result) {\n if (err)\n return fail(err);\n ok();\n });\n });\n };\n /**\n * Loads redis dependency.\n */\n RedisQueryResultCache.prototype.loadRedis = function () {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\");\n }\n else {\n return PlatformTools.load(this.clientType);\n }\n }\n catch (e) {\n throw new Error(\"Cannot use cache because \" + this.clientType + \" is not installed. Please run \\\"npm i \" + this.clientType + \" --save\\\".\");\n }\n };\n return RedisQueryResultCache;\n}());\nexport { RedisQueryResultCache };\n\n//# sourceMappingURL=RedisQueryResultCache.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { MssqlParameter } from \"../driver/sqlserver/MssqlParameter\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { Table } from \"../schema-builder/table/Table\";\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nvar DbQueryResultCache = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DbQueryResultCache(connection) {\n this.connection = connection;\n var options = this.connection.driver.options;\n var cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n var cacheTableName = cacheOptions.tableName || \"query-result-cache\";\n this.queryResultCacheTable = this.connection.driver.buildTableName(cacheTableName, options.schema, options.database);\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a connection with given cache provider.\n */\n DbQueryResultCache.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Disconnects with given cache provider.\n */\n DbQueryResultCache.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n DbQueryResultCache.prototype.synchronize = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var driver, tableExist;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n driver = this.connection.driver;\n return [4 /*yield*/, queryRunner.hasTable(this.queryResultCacheTable)];\n case 1:\n tableExist = _a.sent();\n if (tableExist)\n return [2 /*return*/];\n return [4 /*yield*/, queryRunner.createTable(new Table({\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheId }),\n generationStrategy: \"increment\",\n isGenerated: true\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheIdentifier }),\n isNullable: true\n },\n {\n name: \"time\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheTime }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"duration\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheDuration }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"query\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheQuery }),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"result\",\n type: driver.normalizeType({ type: driver.mappedDataTypes.cacheResult }),\n isNullable: false\n },\n ]\n }))];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n DbQueryResultCache.prototype.getFromCache = function (options, queryRunner) {\n queryRunner = this.getQueryRunner(queryRunner);\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\");\n if (options.identifier) {\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"identifier\") + \" = :identifier\")\n .setParameters({ identifier: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.identifier, \"nvarchar\") : options.identifier })\n .getRawOne();\n }\n else if (options.query) {\n if (this.connection.driver instanceof OracleDriver) {\n return qb\n .where(\"dbms_lob.compare(\" + qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \", :query) = 0\", { query: options.query })\n .getRawOne();\n }\n return qb\n .where(qb.escape(\"cache\") + \".\" + qb.escape(\"query\") + \" = :query\")\n .setParameters({ query: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.query, \"nvarchar\") : options.query })\n .getRawOne();\n }\n return Promise.resolve(undefined);\n };\n /**\n * Checks if cache is expired or not.\n */\n DbQueryResultCache.prototype.isExpired = function (savedCache) {\n var duration = typeof savedCache.duration === \"string\" ? parseInt(savedCache.duration) : savedCache.duration;\n return ((typeof savedCache.time === \"string\" ? parseInt(savedCache.time) : savedCache.time) + duration) < new Date().getTime();\n };\n /**\n * Stores given query result in the cache.\n */\n DbQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var insertedValues, qb, qb;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.getQueryRunner(queryRunner);\n insertedValues = options;\n if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n };\n }\n if (!(savedCache && savedCache.identifier)) return [3 /*break*/, 2];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n qb.where(qb.escape(\"identifier\") + \" = :condition\", { condition: insertedValues.identifier });\n return [4 /*yield*/, qb.execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 6];\n case 2:\n if (!(savedCache && savedCache.query)) return [3 /*break*/, 4];\n qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n if (this.connection.driver instanceof OracleDriver) {\n qb.where(\"dbms_lob.compare(\\\"query\\\", :condition) = 0\", { condition: insertedValues.query });\n }\n else {\n qb.where(qb.escape(\"query\") + \" = :condition\", { condition: insertedValues.query });\n }\n return [4 /*yield*/, qb.execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 6];\n case 4: // otherwise insert\n return [4 /*yield*/, queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears everything stored in the cache.\n */\n DbQueryResultCache.prototype.clear = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.getQueryRunner(queryRunner).clearTable(this.queryResultCacheTable)];\n });\n });\n };\n /**\n * Removes all cached results by given identifiers from cache.\n */\n DbQueryResultCache.prototype.remove = function (identifiers, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(identifiers.map(function (identifier) {\n var qb = _this.getQueryRunner(queryRunner).manager.createQueryBuilder();\n return qb.delete()\n .from(_this.queryResultCacheTable)\n .where(qb.escape(\"identifier\") + \" = :identifier\", { identifier: identifier })\n .execute();\n }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets a query runner to work with.\n */\n DbQueryResultCache.prototype.getQueryRunner = function (queryRunner) {\n if (queryRunner)\n return queryRunner;\n return this.connection.createQueryRunner();\n };\n return DbQueryResultCache;\n}());\nexport { DbQueryResultCache };\n\n//# sourceMappingURL=DbQueryResultCache.js.map\n","import { RedisQueryResultCache } from \"./RedisQueryResultCache\";\nimport { DbQueryResultCache } from \"./DbQueryResultCache\";\n/**\n * Caches query result into Redis database.\n */\nvar QueryResultCacheFactory = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function QueryResultCacheFactory(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new query result cache based on connection options.\n */\n QueryResultCacheFactory.prototype.create = function () {\n if (!this.connection.options.cache)\n throw new Error(\"To use cache you need to enable it in connection options by setting cache: true or providing some caching options. Example: { host: ..., username: ..., cache: true }\");\n var cache = this.connection.options.cache;\n if (cache.provider && typeof cache.provider === \"function\") {\n return cache.provider(this.connection);\n }\n if (cache.type === \"redis\" || cache.type === \"ioredis\" || cache.type === \"ioredis/cluster\") {\n return new RedisQueryResultCache(this.connection, cache.type);\n }\n else {\n return new DbQueryResultCache(this.connection);\n }\n };\n return QueryResultCacheFactory;\n}());\nexport { QueryResultCacheFactory };\n\n//# sourceMappingURL=QueryResultCacheFactory.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nvar RelationLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationLoader(connection) {\n this.connection = connection;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation data for the given entity and its relation.\n */\n RelationLoader.prototype.load = function (relation, entityOrEntities, queryRunner) {\n if (queryRunner && queryRunner.isReleased)\n queryRunner = undefined; // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(relation, entityOrEntities, queryRunner);\n }\n else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(relation, entityOrEntities, queryRunner);\n }\n else { // many-to-many non owner\n return this.loadManyToManyNotOwner(relation, entityOrEntities, queryRunner);\n }\n };\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n RelationLoader.prototype.loadManyToOneOrOneToOneOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var columns = relation.entityMetadata.primaryColumns;\n var joinColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation.joinColumns;\n var conditions = joinColumns.map(function (joinColumn) {\n return relation.entityMetadata.name + \".\" + joinColumn.propertyName + \" = \" + relation.propertyName + \".\" + joinColumn.referencedColumn.propertyName;\n }).join(\" AND \");\n var joinAliasName = relation.entityMetadata.name;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName) // Category, category\n .innerJoin(relation.entityMetadata.target, joinAliasName, conditions);\n if (columns.length === 1) {\n qb.where(joinAliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (joinAliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(joinAliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = joinAliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return joinAliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n RelationLoader.prototype.loadOneToManyOrOneToOneNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var aliasName = relation.propertyName;\n var columns = relation.inverseRelation.joinColumns;\n var qb = this.connection\n .createQueryBuilder(queryRunner)\n .select(aliasName)\n .from(relation.inverseRelation.entityMetadata.target, aliasName);\n if (columns.length === 1) {\n qb.where(aliasName + \".\" + columns[0].propertyPath + \" IN (:...\" + (aliasName + \"_\" + columns[0].propertyName) + \")\");\n qb.setParameter(aliasName + \"_\" + columns[0].propertyName, entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n }\n else {\n var condition = entities.map(function (entity, entityIndex) {\n return columns.map(function (column, columnIndex) {\n var paramName = aliasName + \"_entity_\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return aliasName + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n qb.where(condition);\n }\n return qb.getMany();\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n };\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n RelationLoader.prototype.loadManyToManyOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" IN (:...\" + joinColumn.propertyName + \")\";\n });\n var inverseJoinColumnConditions = relation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \"=\" + mainAlias + \".\" + inverseJoinColumn.referencedColumn.propertyName;\n });\n var parameters = relation.joinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n RelationLoader.prototype.loadManyToManyNotOwner = function (relation, entityOrEntities, queryRunner) {\n var entities = Array.isArray(entityOrEntities) ? entityOrEntities : [entityOrEntities];\n var mainAlias = relation.propertyName;\n var joinAlias = relation.junctionEntityMetadata.tableName;\n var joinColumnConditions = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n return joinAlias + \".\" + joinColumn.propertyName + \" = \" + mainAlias + \".\" + joinColumn.referencedColumn.propertyName;\n });\n var inverseJoinColumnConditions = relation.inverseRelation.inverseJoinColumns.map(function (inverseJoinColumn) {\n return joinAlias + \".\" + inverseJoinColumn.propertyName + \" IN (:...\" + inverseJoinColumn.propertyName + \")\";\n });\n var parameters = relation.inverseRelation.inverseJoinColumns.reduce(function (parameters, joinColumn) {\n parameters[joinColumn.propertyName] = entities.map(function (entity) { return joinColumn.referencedColumn.getEntityValue(entity); });\n return parameters;\n }, {});\n return this.connection\n .createQueryBuilder(queryRunner)\n .select(mainAlias)\n .from(relation.type, mainAlias)\n .innerJoin(joinAlias, joinAlias, __spreadArray(__spreadArray([], __read(joinColumnConditions)), __read(inverseJoinColumnConditions)).join(\" AND \"))\n .setParameters(parameters)\n .getMany();\n };\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n RelationLoader.prototype.enableLazyLoad = function (relation, entity, queryRunner) {\n var relationLoader = this;\n var dataIndex = \"__\" + relation.propertyName + \"__\"; // in what property of the entity loaded data will be stored\n var promiseIndex = \"__promise_\" + relation.propertyName + \"__\"; // in what property of the entity loading promise will be stored\n var resolveIndex = \"__has_\" + relation.propertyName + \"__\"; // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n var setData = function (entity, value) {\n entity[dataIndex] = value;\n entity[resolveIndex] = true;\n delete entity[promiseIndex];\n return value;\n };\n var setPromise = function (entity, value) {\n delete entity[resolveIndex];\n delete entity[dataIndex];\n entity[promiseIndex] = value;\n value.then(\n // ensure different value is not assigned yet\n function (result) { return entity[promiseIndex] === value ? setData(entity, result) : result; });\n return value;\n };\n Object.defineProperty(entity, relation.propertyName, {\n get: function () {\n if (this[resolveIndex] === true || this[dataIndex] !== undefined) // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex]);\n if (this[promiseIndex]) // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex];\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n var loader = relationLoader.load(relation, this, queryRunner).then(function (result) { return relation.isOneToOne || relation.isManyToOne ? (result.length === 0 ? null : result[0]) : result; });\n return setPromise(this, loader);\n },\n set: function (value) {\n if (value instanceof Promise) { // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value);\n }\n else { // if its direct data set (non promise, probably not safe-typed)\n setData(this, value);\n }\n },\n configurable: true\n });\n };\n return RelationLoader;\n}());\nexport { RelationLoader };\n\n//# sourceMappingURL=RelationLoader.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { RelationMetadata } from \"../metadata/RelationMetadata\";\n/**\n * Loads relation ids for the given entities.\n */\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection) {\n this.connection = connection;\n }\n /**\n * Loads relation ids of the given entity or entities.\n */\n RelationIdLoader.prototype.load = function (relationOrTarget, relationNameOrEntities, entitiesOrRelatedEntities, maybeRelatedEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, entities, relatedEntities, entityMetadata;\n return __generator(this, function (_a) {\n if (relationOrTarget instanceof RelationMetadata) {\n relation = relationOrTarget;\n entities = Array.isArray(relationNameOrEntities) ? relationNameOrEntities : [relationNameOrEntities];\n relatedEntities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : (entitiesOrRelatedEntities ? [entitiesOrRelatedEntities] : undefined);\n }\n else {\n entityMetadata = this.connection.getMetadata(relationOrTarget);\n relation = entityMetadata.findRelationWithPropertyPath(relationNameOrEntities);\n if (!relation)\n throw new Error(\"Relation \\\"\" + relation + \"\\\" was not found in \\\"\" + entityMetadata.name + \"\\\".\");\n entities = Array.isArray(entitiesOrRelatedEntities) ? entitiesOrRelatedEntities : [entitiesOrRelatedEntities];\n relatedEntities = Array.isArray(maybeRelatedEntities) ? maybeRelatedEntities : (maybeRelatedEntities ? [maybeRelatedEntities] : undefined);\n }\n // load relation ids depend of relation type\n if (relation.isManyToMany) {\n return [2 /*return*/, this.loadForManyToMany(relation, entities, relatedEntities)];\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n return [2 /*return*/, this.loadForManyToOneAndOneToOneOwner(relation, entities, relatedEntities)];\n }\n else { // if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return [2 /*return*/, this.loadForOneToManyAndOneToOneNotOwner(relation, entities, relatedEntities)];\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * Loads relation ids of the given entities and groups them into the object with parent and children.\n *\n * todo: extract this method?\n */\n RelationIdLoader.prototype.loadManyToManyRelationIdsAndGroup = function (relation, entitiesOrEntities, relatedEntityOrEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var isMany, entities, relationIds, relatedEntities, columns, inverseColumns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isMany = relation.isManyToMany || relation.isOneToMany;\n entities = Array.isArray(entitiesOrEntities) ? entitiesOrEntities : [entitiesOrEntities];\n if (!!relatedEntityOrEntities) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.relationLoader.load(relation, entitiesOrEntities)];\n case 1:\n relatedEntityOrEntities = _a.sent();\n if (!relatedEntityOrEntities.length)\n return [2 /*return*/, entities.map(function (entity) { return ({ entity: entity, related: isMany ? [] : undefined }); })];\n _a.label = 2;\n case 2: return [4 /*yield*/, this.load(relation, entitiesOrEntities, relatedEntityOrEntities)];\n case 3:\n relationIds = _a.sent();\n relatedEntities = Array.isArray(relatedEntityOrEntities) ? relatedEntityOrEntities : [relatedEntityOrEntities];\n if (relation.isManyToManyOwner) {\n columns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToManyNotOwner) {\n columns = relation.junctionEntityMetadata.ownerColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.junctionEntityMetadata.inverseColumns.map(function (column) { return column.referencedColumn; });\n }\n else if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (column) { return column.referencedColumn; });\n inverseColumns = relation.entityMetadata.primaryColumns;\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.entityMetadata.primaryColumns;\n inverseColumns = relation.inverseRelation.joinColumns.map(function (column) { return column.referencedColumn; });\n }\n else {\n }\n return [2 /*return*/, entities.map(function (entity) {\n var group = { entity: entity, related: isMany ? [] : undefined };\n relationIds.forEach(function (relationId) {\n var entityMatched = inverseColumns.every(function (column) {\n return column.getEntityValue(entity) === relationId[column.entityMetadata.name + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (entityMatched) {\n relatedEntities.forEach(function (relatedEntity) {\n var relatedEntityMatched = columns.every(function (column) {\n return column.getEntityValue(relatedEntity) === relationId[column.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.propertyPath.replace(\".\", \"_\")];\n });\n if (relatedEntityMatched) {\n if (isMany) {\n group.related.push(relatedEntity);\n }\n else {\n group.related = relatedEntity;\n }\n }\n });\n }\n });\n return group;\n })];\n }\n });\n });\n };\n /**\n * Loads relation ids of the given entities and maps them into the given entity property.\n\n async loadManyToManyRelationIdsAndMap(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral|ObjectLiteral[],\n mapToEntityOrEntities: ObjectLiteral|ObjectLiteral[],\n propertyName: string\n ): Promise {\n\n const relationIds = await this.loadManyToManyRelationIds(relation, entityOrEntities, mapToEntityOrEntities);\n const mapToEntities = mapToEntityOrEntities instanceof Array ? mapToEntityOrEntities : [mapToEntityOrEntities];\n const junctionMetadata = relation.junctionEntityMetadata!;\n const mainAlias = junctionMetadata.name;\n const columns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n const inverseColumns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n\n mapToEntities.forEach(mapToEntity => {\n mapToEntity[propertyName] = [];\n relationIds.forEach(relationId => {\n const match = inverseColumns.every(column => {\n return column.referencedColumn!.getEntityValue(mapToEntity) === relationId[mainAlias + \"_\" + column.propertyName];\n });\n if (match) {\n if (columns.length === 1) {\n mapToEntity[propertyName].push(relationId[mainAlias + \"_\" + columns[0].propertyName]);\n\n } else {\n const value = {};\n columns.forEach(column => {\n column.referencedColumn!.setEntityValue(value, relationId[mainAlias + \"_\" + column.propertyName]);\n });\n mapToEntity[propertyName].push(value);\n }\n }\n });\n });\n }*/\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Loads relation ids for the many-to-many relation.\n */\n RelationIdLoader.prototype.loadForManyToMany = function (relation, entities, relatedEntities) {\n var junctionMetadata = relation.junctionEntityMetadata;\n var mainAlias = junctionMetadata.name;\n var columns = relation.isOwning ? junctionMetadata.ownerColumns : junctionMetadata.inverseColumns;\n var inverseColumns = relation.isOwning ? junctionMetadata.inverseColumns : junctionMetadata.ownerColumns;\n var qb = this.connection.createQueryBuilder();\n // select all columns from junction table\n junctionMetadata.ownerColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n junctionMetadata.inverseColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add conditions for the given entities\n var condition1 = \"\";\n if (columns.length === 1) {\n qb.setParameter(\"values1\", entities.map(function (entity) { return columns[0].referencedColumn.getEntityValue(entity); }));\n condition1 = mainAlias + \".\" + columns[0].propertyPath + \" IN (:...values1)\"; // todo: use ANY for postgres\n }\n else {\n condition1 = \"(\" + entities.map(function (entity, entityIndex) {\n return columns.map(function (column) {\n var paramName = \"entity1_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n // add conditions for the given inverse entities\n var condition2 = \"\";\n if (relatedEntities) {\n if (inverseColumns.length === 1) {\n qb.setParameter(\"values2\", relatedEntities.map(function (entity) { return inverseColumns[0].referencedColumn.getEntityValue(entity); }));\n condition2 = mainAlias + \".\" + inverseColumns[0].propertyPath + \" IN (:...values2)\"; // todo: use ANY for postgres\n }\n else {\n condition2 = \"(\" + relatedEntities.map(function (entity, entityIndex) {\n return inverseColumns.map(function (column) {\n var paramName = \"entity2_\" + entityIndex + \"_\" + column.propertyName;\n qb.setParameter(paramName, column.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \") + \")\";\n }\n }\n // execute query\n return qb\n .from(junctionMetadata.target, mainAlias)\n .where(condition1 + (condition2 ? \" AND \" + condition2 : \"\"))\n .getRawMany();\n };\n /**\n * Loads relation ids for the many-to-one and one-to-one owner relations.\n */\n RelationIdLoader.prototype.loadForManyToOneAndOneToOneOwner = function (relation, entities, relatedEntities) {\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + relation.propertyPath.replace(\".\", \"_\") + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.entityMetadata.primaryColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.entityMetadata.primaryColumns[0].getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.entityMetadata.primaryColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + columnIndex;\n qb.setParameter(paramName, column.getEntityValue(entity));\n return mainAlias + \".\" + column.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n /**\n * Loads relation ids for the one-to-many and one-to-one not owner relations.\n */\n RelationIdLoader.prototype.loadForOneToManyAndOneToOneNotOwner = function (relation, entities, relatedEntities) {\n relation = relation.inverseRelation;\n var mainAlias = relation.entityMetadata.targetName;\n // select all columns we need\n var qb = this.connection.createQueryBuilder();\n relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n var columnName = primaryColumn.entityMetadata.name + \"_\" + relation.inverseRelation.propertyPath.replace(\".\", \"_\") + \"_\" + primaryColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + primaryColumn.propertyPath, columnName);\n });\n relation.joinColumns.forEach(function (column) {\n var columnName = column.referencedColumn.entityMetadata.name + \"_\" + column.referencedColumn.propertyPath.replace(\".\", \"_\");\n qb.addSelect(mainAlias + \".\" + column.propertyPath, columnName);\n });\n // add condition for entities\n var condition = \"\";\n if (relation.joinColumns.length === 1) {\n qb.setParameter(\"values\", entities.map(function (entity) { return relation.joinColumns[0].referencedColumn.getEntityValue(entity); }));\n condition = mainAlias + \".\" + relation.joinColumns[0].propertyPath + \" IN (:...values)\";\n }\n else {\n condition = entities.map(function (entity, entityIndex) {\n return relation.joinColumns.map(function (joinColumn, joinColumnIndex) {\n var paramName = \"entity\" + entityIndex + \"_\" + joinColumnIndex;\n qb.setParameter(paramName, joinColumn.referencedColumn.getEntityValue(entity));\n return mainAlias + \".\" + joinColumn.propertyPath + \" = :\" + paramName;\n }).join(\" AND \");\n }).map(function (condition) { return \"(\" + condition + \")\"; }).join(\" OR \");\n }\n // execute query\n return qb.from(relation.entityMetadata.target, mainAlias)\n .where(condition)\n .getRawMany();\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { __awaiter, __generator, __values } from \"tslib\";\nimport { DefaultNamingStrategy } from \"../naming-strategy/DefaultNamingStrategy\";\nimport { CannotExecuteNotConnectedError } from \"../error/CannotExecuteNotConnectedError\";\nimport { CannotConnectAlreadyConnectedError } from \"../error/CannotConnectAlreadyConnectedError\";\nimport { EntityMetadataNotFoundError } from \"../error/EntityMetadataNotFoundError\";\nimport { MigrationExecutor } from \"../migration/MigrationExecutor\";\nimport { MongoDriver } from \"../driver/mongodb/MongoDriver\";\nimport { MongoEntityManager } from \"../entity-manager/MongoEntityManager\";\nimport { EntityMetadataValidator } from \"../metadata-builder/EntityMetadataValidator\";\nimport { QueryRunnerProviderAlreadyReleasedError } from \"../error/QueryRunnerProviderAlreadyReleasedError\";\nimport { EntityManagerFactory } from \"../entity-manager/EntityManagerFactory\";\nimport { DriverFactory } from \"../driver/DriverFactory\";\nimport { ConnectionMetadataBuilder } from \"./ConnectionMetadataBuilder\";\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\";\nimport { LoggerFactory } from \"../logger/LoggerFactory\";\nimport { QueryResultCacheFactory } from \"../cache/QueryResultCacheFactory\";\nimport { SqljsEntityManager } from \"../entity-manager/SqljsEntityManager\";\nimport { RelationLoader } from \"../query-builder/RelationLoader\";\nimport { RelationIdLoader } from \"../query-builder/RelationIdLoader\";\nimport { EntitySchema } from \"../\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\n/**\n * Connection is a single database ORM connection to a specific database.\n * Its not required to be a database connection, depend on database type it can create connection pool.\n * You can have multiple connections to multiple databases in your application.\n */\nvar Connection = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Connection(options) {\n /**\n * Migration instances that are registered for this connection.\n */\n this.migrations = [];\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n this.subscribers = [];\n /**\n * All entity metadatas that are registered for this connection.\n */\n this.entityMetadatas = [];\n this.name = options.name || \"default\";\n this.options = options;\n this.logger = new LoggerFactory().create(this.options.logger, this.options.logging);\n this.driver = new DriverFactory().create(this);\n this.manager = this.createEntityManager();\n this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();\n this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;\n this.relationLoader = new RelationLoader(this);\n this.relationIdLoader = new RelationIdLoader(this);\n this.isConnected = false;\n }\n Object.defineProperty(Connection.prototype, \"mongoManager\", {\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n */\n get: function () {\n if (!(this.manager instanceof MongoEntityManager))\n throw new Error(\"MongoEntityManager is only available for MongoDB databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Connection.prototype, \"sqljsManager\", {\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n */\n get: function () {\n if (!(this.manager instanceof SqljsEntityManager))\n throw new Error(\"SqljsEntityManager is only available for Sqljs databases.\");\n return this.manager;\n },\n enumerable: false,\n configurable: true\n });\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n Connection.prototype.connect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isConnected)\n throw new CannotConnectAlreadyConnectedError(this.name);\n // connect to the database via its driver\n return [4 /*yield*/, this.driver.connect()];\n case 1:\n // connect to the database via its driver\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.connect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n // set connected status for the current connection\n ObjectUtils.assign(this, { isConnected: true });\n _a.label = 4;\n case 4:\n _a.trys.push([4, 12, , 14]);\n // build all metadatas registered in the current connection\n this.buildMetadatas();\n return [4 /*yield*/, this.driver.afterConnect()];\n case 5:\n _a.sent();\n if (!this.options.dropSchema) return [3 /*break*/, 7];\n return [4 /*yield*/, this.dropDatabase()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7:\n if (!this.options.synchronize) return [3 /*break*/, 9];\n return [4 /*yield*/, this.synchronize()];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9:\n if (!this.options.migrationsRun) return [3 /*break*/, 11];\n return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];\n case 10:\n _a.sent();\n _a.label = 11;\n case 11: return [3 /*break*/, 14];\n case 12:\n error_1 = _a.sent();\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n return [4 /*yield*/, this.close()];\n case 13:\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n _a.sent();\n throw error_1;\n case 14: return [2 /*return*/, this];\n }\n });\n });\n };\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n Connection.prototype.close = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n return [4 /*yield*/, this.driver.disconnect()];\n case 1:\n _a.sent();\n if (!this.queryResultCache) return [3 /*break*/, 3];\n return [4 /*yield*/, this.queryResultCache.disconnect()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n ObjectUtils.assign(this, { isConnected: false });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n Connection.prototype.synchronize = function (dropBeforeSync) {\n if (dropBeforeSync === void 0) { dropBeforeSync = false; }\n return __awaiter(this, void 0, void 0, function () {\n var schemaBuilder;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n if (!dropBeforeSync) return [3 /*break*/, 2];\n return [4 /*yield*/, this.dropDatabase()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2:\n schemaBuilder = this.driver.createSchemaBuilder();\n return [4 /*yield*/, schemaBuilder.build()];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n Connection.prototype.dropDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, databases_2, databases_1, databases_1_1, database, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.createQueryRunner();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 13, 15]);\n if (!(this.driver instanceof SqlServerDriver || this.driver instanceof MysqlDriver || this.driver instanceof AuroraDataApiDriver)) return [3 /*break*/, 10];\n databases_2 = this.driver.database ? [this.driver.database] : [];\n this.entityMetadatas.forEach(function (metadata) {\n if (metadata.database && databases_2.indexOf(metadata.database) === -1)\n databases_2.push(metadata.database);\n });\n _b.label = 2;\n case 2:\n _b.trys.push([2, 7, 8, 9]);\n databases_1 = __values(databases_2), databases_1_1 = databases_1.next();\n _b.label = 3;\n case 3:\n if (!!databases_1_1.done) return [3 /*break*/, 6];\n database = databases_1_1.value;\n return [4 /*yield*/, queryRunner.clearDatabase(database)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n databases_1_1 = databases_1.next();\n return [3 /*break*/, 3];\n case 6: return [3 /*break*/, 9];\n case 7:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 9];\n case 8:\n try {\n if (databases_1_1 && !databases_1_1.done && (_a = databases_1.return)) _a.call(databases_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 9: return [3 /*break*/, 12];\n case 10: return [4 /*yield*/, queryRunner.clearDatabase()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [3 /*break*/, 15];\n case 13: return [4 /*yield*/, queryRunner.release()];\n case 14:\n _b.sent();\n return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.runMigrations = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor, successMigrations;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.executePendingMigrations()];\n case 1:\n successMigrations = _a.sent();\n return [2 /*return*/, successMigrations];\n }\n });\n });\n };\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n */\n Connection.prototype.undoLastMigration = function (options) {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected)\n throw new CannotExecuteNotConnectedError(this.name);\n migrationExecutor = new MigrationExecutor(this);\n migrationExecutor.transaction = (options && options.transaction) || \"all\";\n return [4 /*yield*/, migrationExecutor.undoLastMigration()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n Connection.prototype.showMigrations = function () {\n return __awaiter(this, void 0, void 0, function () {\n var migrationExecutor;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isConnected) {\n throw new CannotExecuteNotConnectedError(this.name);\n }\n migrationExecutor = new MigrationExecutor(this);\n return [4 /*yield*/, migrationExecutor.showMigrations()];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n */\n Connection.prototype.hasMetadata = function (target) {\n return !!this.findMetadata(target);\n };\n /**\n * Gets entity metadata for the given entity class or schema name.\n */\n Connection.prototype.getMetadata = function (target) {\n var metadata = this.findMetadata(target);\n if (!metadata)\n throw new EntityMetadataNotFoundError(target);\n return metadata;\n };\n /**\n * Gets repository for the given entity.\n */\n Connection.prototype.getRepository = function (target) {\n return this.manager.getRepository(target);\n };\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with @Tree decorator.\n */\n Connection.prototype.getTreeRepository = function (target) {\n return this.manager.getTreeRepository(target);\n };\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n */\n Connection.prototype.getMongoRepository = function (target) {\n if (!(this.driver instanceof MongoDriver))\n throw new Error(\"You can use getMongoRepository only for MongoDB connections.\");\n return this.manager.getRepository(target);\n };\n /**\n * Gets custom entity repository marked with @EntityRepository decorator.\n */\n Connection.prototype.getCustomRepository = function (customRepository) {\n return this.manager.getCustomRepository(customRepository);\n };\n Connection.prototype.transaction = function (isolationOrRunInTransaction, runInTransactionParam) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.manager.transaction(isolationOrRunInTransaction, runInTransactionParam)];\n });\n });\n };\n /**\n * Executes raw SQL query and returns raw database results.\n */\n Connection.prototype.query = function (query, parameters, queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var usedQueryRunner;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this instanceof MongoEntityManager)\n throw new Error(\"Queries aren't supported by MongoDB.\");\n if (queryRunner && queryRunner.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError();\n usedQueryRunner = queryRunner || this.createQueryRunner();\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 3, 6]);\n return [4 /*yield*/, usedQueryRunner.query(query, parameters)];\n case 2: return [2 /*return*/, _a.sent()]; // await is needed here because we are using finally\n case 3:\n if (!!queryRunner) return [3 /*break*/, 5];\n return [4 /*yield*/, usedQueryRunner.release()];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [7 /*endfinally*/];\n case 6: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n Connection.prototype.createQueryBuilder = function (entityOrRunner, alias, queryRunner) {\n if (this instanceof MongoEntityManager)\n throw new Error(\"Query Builder is not supported by MongoDB.\");\n if (alias) {\n var metadata = this.getMetadata(entityOrRunner);\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias);\n }\n else {\n return new SelectQueryBuilder(this, entityOrRunner);\n }\n };\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n */\n Connection.prototype.createQueryRunner = function (mode) {\n if (mode === void 0) { mode = \"master\"; }\n var queryRunner = this.driver.createQueryRunner(mode);\n var manager = this.createEntityManager(queryRunner);\n Object.assign(queryRunner, { manager: manager });\n return queryRunner;\n };\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n */\n Connection.prototype.getManyToManyMetadata = function (entityTarget, relationPropertyPath) {\n var relationMetadata = this.getMetadata(entityTarget).findRelationWithPropertyPath(relationPropertyPath);\n if (!relationMetadata)\n throw new Error(\"Relation \\\"\" + relationPropertyPath + \"\\\" was not found in \" + entityTarget + \" entity.\");\n if (!relationMetadata.isManyToMany)\n throw new Error(\"Relation \\\"\" + entityTarget + \"#\" + relationPropertyPath + \"\\\" does not have a many-to-many relationship.\" +\n \"You can use this method only on many-to-many relations.\");\n return relationMetadata.junctionEntityMetadata;\n };\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n */\n Connection.prototype.createEntityManager = function (queryRunner) {\n return new EntityManagerFactory().create(this, queryRunner);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n */\n Connection.prototype.findMetadata = function (target) {\n return this.entityMetadatas.find(function (metadata) {\n if (metadata.target === target)\n return true;\n if (target instanceof EntitySchema) {\n return metadata.name === target.options.name;\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n return metadata.tablePath === target;\n }\n else {\n return metadata.name === target || metadata.tableName === target;\n }\n }\n return false;\n });\n };\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n Connection.prototype.buildMetadatas = function () {\n var connectionMetadataBuilder = new ConnectionMetadataBuilder(this);\n var entityMetadataValidator = new EntityMetadataValidator();\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n var subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);\n ObjectUtils.assign(this, { subscribers: subscribers });\n // build entity metadatas\n var entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);\n ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });\n // create migration instances\n var migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);\n ObjectUtils.assign(this, { migrations: migrations });\n this.driver.database = this.getDatabaseName();\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== \"view\"; }), this.driver);\n };\n // This database name property is nested for replication configs.\n Connection.prototype.getDatabaseName = function () {\n var options = this.options;\n switch (options.type) {\n case \"mysql\":\n case \"mariadb\":\n case \"postgres\":\n case \"cockroachdb\":\n case \"mssql\":\n case \"oracle\":\n return DriverUtils.buildDriverOptions(options.replication ? options.replication.master : options).database;\n case \"mongodb\":\n return DriverUtils.buildMongoDBDriverOptions(options).database;\n default:\n return DriverUtils.buildDriverOptions(options).database;\n }\n };\n return Connection;\n}());\nexport { Connection };\n\n//# sourceMappingURL=Connection.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to get connection that does not exist.\n */\nvar ConnectionNotFoundError = /** @class */ (function (_super) {\n __extends(ConnectionNotFoundError, _super);\n function ConnectionNotFoundError(name) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionNotFoundError\";\n Object.setPrototypeOf(_this, ConnectionNotFoundError.prototype);\n _this.message = \"Connection \\\"\" + name + \"\\\" was not found.\";\n return _this;\n }\n return ConnectionNotFoundError;\n}(Error));\nexport { ConnectionNotFoundError };\n\n//# sourceMappingURL=ConnectionNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to recreate connection with the same name, but previous connection was not closed yet.\n */\nvar AlreadyHasActiveConnectionError = /** @class */ (function (_super) {\n __extends(AlreadyHasActiveConnectionError, _super);\n function AlreadyHasActiveConnectionError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"AlreadyHasActiveConnectionError\";\n Object.setPrototypeOf(_this, AlreadyHasActiveConnectionError.prototype);\n _this.message = \"Cannot create a new connection named \\\"\" + connectionName + \"\\\", because connection with such name \" +\n \"already exist and it now has an active connection session.\";\n return _this;\n }\n return AlreadyHasActiveConnectionError;\n}(Error));\nexport { AlreadyHasActiveConnectionError };\n\n//# sourceMappingURL=AlreadyHasActiveConnectionError.js.map\n","import { Connection } from \"./Connection\";\nimport { ConnectionNotFoundError } from \"../error/ConnectionNotFoundError\";\nimport { AlreadyHasActiveConnectionError } from \"../error/AlreadyHasActiveConnectionError\";\n/**\n * ConnectionManager is used to store and manage multiple orm connections.\n * It also provides useful factory methods to simplify connection creation.\n */\nvar ConnectionManager = /** @class */ (function () {\n function ConnectionManager() {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n /**\n * List of connections registered in this connection manager.\n */\n this.connections = [];\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if connection with the given name exist in the manager.\n */\n ConnectionManager.prototype.has = function (name) {\n return !!this.connections.find(function (connection) { return connection.name === name; });\n };\n /**\n * Gets registered connection with the given name.\n * If connection name is not given then it will get a default connection.\n * Throws error if connection with the given name was not found.\n */\n ConnectionManager.prototype.get = function (name) {\n if (name === void 0) { name = \"default\"; }\n var connection = this.connections.find(function (connection) { return connection.name === name; });\n if (!connection)\n throw new ConnectionNotFoundError(name);\n return connection;\n };\n /**\n * Creates a new connection based on the given connection options and registers it in the manager.\n * Connection won't be established, you'll need to manually call connect method to establish connection.\n */\n ConnectionManager.prototype.create = function (options) {\n // check if such connection is already registered\n var existConnection = this.connections.find(function (connection) { return connection.name === (options.name || \"default\"); });\n if (existConnection) {\n // if connection is registered and its not closed then throw an error\n if (existConnection.isConnected)\n throw new AlreadyHasActiveConnectionError(options.name || \"default\");\n // if its registered but closed then simply remove it from the manager\n this.connections.splice(this.connections.indexOf(existConnection), 1);\n }\n // create a new connection\n var connection = new Connection(options);\n this.connections.push(connection);\n return connection;\n };\n return ConnectionManager;\n}());\nexport { ConnectionManager };\n\n//# sourceMappingURL=ConnectionManager.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsEnvReader = /** @class */ (function () {\n function ConnectionOptionsEnvReader() {\n }\n ConnectionOptionsEnvReader.prototype.read = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsEnvReader;\n}());\nexport { ConnectionOptionsEnvReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsXmlReader = /** @class */ (function () {\n function ConnectionOptionsXmlReader() {\n }\n ConnectionOptionsXmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsXmlReader;\n}());\nexport { ConnectionOptionsXmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsYmlReader = /** @class */ (function () {\n function ConnectionOptionsYmlReader() {\n }\n ConnectionOptionsYmlReader.prototype.read = function (path) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsYmlReader;\n}());\nexport { ConnectionOptionsYmlReader };\n/**\n * Dummy class for replacement via `package.json` in browser builds.\n *\n * If we don't include these functions typeorm will throw an error on runtime\n * as well as during webpack builds.\n */\nvar ConnectionOptionsReader = /** @class */ (function () {\n function ConnectionOptionsReader() {\n }\n ConnectionOptionsReader.prototype.all = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.get = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n ConnectionOptionsReader.prototype.has = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Cannot read connection options in a browser context.\");\n });\n });\n };\n return ConnectionOptionsReader;\n}());\nexport { ConnectionOptionsReader };\n\n//# sourceMappingURL=BrowserConnectionOptionsReaderDummy.js.map\n","export {};\n\n//# sourceMappingURL=EntityTarget.js.map\n","export {};\n\n//# sourceMappingURL=ObjectType.js.map\n","export {};\n\n//# sourceMappingURL=ObjectLiteral.js.map\n","export {};\n\n//# sourceMappingURL=DeepPartial.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get method parameter's type.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar CannotReflectMethodParameterTypeError = /** @class */ (function (_super) {\n __extends(CannotReflectMethodParameterTypeError, _super);\n function CannotReflectMethodParameterTypeError(target, methodName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotReflectMethodParameterTypeError\";\n Object.setPrototypeOf(_this, CannotReflectMethodParameterTypeError.prototype);\n _this.message = \"Cannot get reflected type for a \\\"\" + methodName + \"\\\" method's parameter of \\\"\" + target.name + \"\\\" class. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application.\";\n return _this;\n }\n return CannotReflectMethodParameterTypeError;\n}(Error));\nexport { CannotReflectMethodParameterTypeError };\n\n//# sourceMappingURL=CannotReflectMethodParameterTypeError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to execute operation that requires connection to be established.\n */\nvar ConnectionIsNotSetError = /** @class */ (function (_super) {\n __extends(ConnectionIsNotSetError, _super);\n function ConnectionIsNotSetError(dbType) {\n var _this = _super.call(this) || this;\n _this.name = \"ConnectionIsNotSetError\";\n Object.setPrototypeOf(_this, ConnectionIsNotSetError.prototype);\n _this.message = \"Connection with \" + dbType + \" database is not established. Check connection configuration.\";\n return _this;\n }\n return ConnectionIsNotSetError;\n}(Error));\nexport { ConnectionIsNotSetError };\n\n//# sourceMappingURL=ConnectionIsNotSetError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataAlreadyExistsError, _super);\n function MetadataAlreadyExistsError(metadataType, constructor, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata already exists for the class constructor \" + JSON.stringify(constructor) +\n (propertyName ? \" on property \" + propertyName : \". If you previously renamed or moved entity class, make sure\" +\n \" that compiled version of old entity class source wasn't left in the compiler output directory.\");\n return _this;\n }\n return MetadataAlreadyExistsError;\n}(Error));\nexport { MetadataAlreadyExistsError };\n\n//# sourceMappingURL=MetadataAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\nvar PrimaryColumnCannotBeNullableError = /** @class */ (function (_super) {\n __extends(PrimaryColumnCannotBeNullableError, _super);\n function PrimaryColumnCannotBeNullableError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"PrimaryColumnCannotBeNullableError\";\n Object.setPrototypeOf(_this, PrimaryColumnCannotBeNullableError.prototype);\n _this.message = \"Primary column \" + object.constructor.name + \"#\" + propertyName + \" cannot be nullable. \" +\n \"Its not allowed for primary keys. Try to remove nullable option.\";\n return _this;\n }\n return PrimaryColumnCannotBeNullableError;\n}(Error));\nexport { PrimaryColumnCannotBeNullableError };\n\n//# sourceMappingURL=PrimaryColumnCannotBeNullableError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access repository before connection is established.\n */\nvar NoConnectionForRepositoryError = /** @class */ (function (_super) {\n __extends(NoConnectionForRepositoryError, _super);\n function NoConnectionForRepositoryError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NoConnectionForRepositoryError\";\n Object.setPrototypeOf(_this, NoConnectionForRepositoryError.prototype);\n _this.message = \"Cannot get a Repository for \\\"\" + connectionName + \" connection, because connection with the database \" +\n \"is not established yet. Call connection#connect method to establish connection.\";\n return _this;\n }\n return NoConnectionForRepositoryError;\n}(Error));\nexport { NoConnectionForRepositoryError };\n\n//# sourceMappingURL=NoConnectionForRepositoryError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableIsNotAllowedError, _super);\n function UsingJoinTableIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableIsNotAllowedError.prototype);\n _this.message = \"Using JoinTable on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n (entityMetadata.name + \"#\" + relation.propertyName + \" has \" + relation.relationType + \" relation, \") +\n \"however you can use JoinTable only on many-to-many relations.\";\n return _this;\n }\n return UsingJoinTableIsNotAllowedError;\n}(Error));\nexport { UsingJoinTableIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinTableIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinColumnError = /** @class */ (function (_super) {\n __extends(MissingJoinColumnError, _super);\n function MissingJoinColumnError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinColumnError\";\n Object.setPrototypeOf(_this, MissingJoinColumnError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinColumn is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" one-to-one relationship. \") +\n \"You need to put JoinColumn decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinColumn is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" one-to-one relationship. \" +\n \"You need to put JoinColumn decorator on it.\";\n }\n return _this;\n }\n return MissingJoinColumnError;\n}(Error));\nexport { MissingJoinColumnError };\n\n//# sourceMappingURL=MissingJoinColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to access entity manager before connection is established.\n */\nvar CannotGetEntityManagerNotConnectedError = /** @class */ (function (_super) {\n __extends(CannotGetEntityManagerNotConnectedError, _super);\n function CannotGetEntityManagerNotConnectedError(connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotGetEntityManagerNotConnectedError\";\n Object.setPrototypeOf(_this, CannotGetEntityManagerNotConnectedError.prototype);\n _this.message = \"Cannot get entity manager for \\\"\" + connectionName + \"\\\" connection because connection is not yet established.\";\n return _this;\n }\n return CannotGetEntityManagerNotConnectedError;\n}(Error));\nexport { CannotGetEntityManagerNotConnectedError };\n\n//# sourceMappingURL=CannotGetEntityManagerNotConnectedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MetadataWithSuchNameAlreadyExistsError = /** @class */ (function (_super) {\n __extends(MetadataWithSuchNameAlreadyExistsError, _super);\n function MetadataWithSuchNameAlreadyExistsError(metadataType, name) {\n var _this = _super.call(this) || this;\n _this.name = \"MetadataWithSuchNameAlreadyExistsError\";\n Object.setPrototypeOf(_this, MetadataWithSuchNameAlreadyExistsError.prototype);\n _this.message = metadataType + \" metadata with such name \" + name + \" already exists. \" +\n \"Do you apply decorator twice? Or maybe try to change a name?\";\n return _this;\n }\n return MetadataWithSuchNameAlreadyExistsError;\n}(Error));\nexport { MetadataWithSuchNameAlreadyExistsError };\n\n//# sourceMappingURL=MetadataWithSuchNameAlreadyExistsError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when consumer tries to use naming strategy that does not exist.\n */\nvar NamingStrategyNotFoundError = /** @class */ (function (_super) {\n __extends(NamingStrategyNotFoundError, _super);\n function NamingStrategyNotFoundError(strategyName, connectionName) {\n var _this = _super.call(this) || this;\n _this.name = \"NamingStrategyNotFoundError\";\n Object.setPrototypeOf(_this, NamingStrategyNotFoundError.prototype);\n var name = strategyName instanceof Function ? strategyName.name : strategyName;\n _this.message = \"Naming strategy \\\"\" + name + \"\\\" was not found. Looks like this naming strategy does not \" +\n (\"exist or it was not registered in current \\\"\" + connectionName + \"\\\" connection?\");\n return _this;\n }\n return NamingStrategyNotFoundError;\n}(Error));\nexport { NamingStrategyNotFoundError };\n\n//# sourceMappingURL=NamingStrategyNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingJoinTableError = /** @class */ (function (_super) {\n __extends(MissingJoinTableError, _super);\n function MissingJoinTableError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingJoinTableError\";\n Object.setPrototypeOf(_this, MissingJoinTableError.prototype);\n if (relation.inverseRelation) {\n _this.message = \"JoinTable is missing on both sides of \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" +\n (relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" many-to-many relationship. \") +\n \"You need to put decorator decorator on one of the sides.\";\n }\n else {\n _this.message = \"JoinTable is missing on \" + entityMetadata.name + \"#\" + relation.propertyName + \" many-to-many relationship. \" +\n \"You need to put JoinTable decorator on it.\";\n }\n return _this;\n }\n return MissingJoinTableError;\n}(Error));\nexport { MissingJoinTableError };\n\n//# sourceMappingURL=MissingJoinTableError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnOnlyOnOneSideAllowedError, _super);\n function UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinColumn is allowed only on one side of the one-to-one relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinTable decorator only on it.\";\n return _this;\n }\n return UsingJoinColumnOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinColumnOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinTableOnlyOnOneSideAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinTableOnlyOnOneSideAllowedError, _super);\n function UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinTableOnlyOnOneSideAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinTableOnlyOnOneSideAllowedError.prototype);\n _this.message = \"Using JoinTable is allowed only on one side of the many-to-many relationship. \" +\n (\"Both \" + entityMetadata.name + \"#\" + relation.propertyName + \" and \" + relation.inverseEntityMetadata.name + \"#\" + relation.inverseRelation.propertyName + \" \") +\n \"has JoinTable decorators. Choose one of them and left JoinColumn decorator only on it.\";\n return _this;\n }\n return UsingJoinTableOnlyOnOneSideAllowedError;\n}(Error));\nexport { UsingJoinTableOnlyOnOneSideAllowedError };\n\n//# sourceMappingURL=UsingJoinTableOnlyOnOneSideAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown . Theoretically can't be thrown.\n */\nvar PersistedEntityNotFoundError = /** @class */ (function (_super) {\n __extends(PersistedEntityNotFoundError, _super);\n function PersistedEntityNotFoundError() {\n var _this = _super.call(this) || this;\n _this.name = \"PersistedEntityNotFoundError\";\n Object.setPrototypeOf(_this, PersistedEntityNotFoundError.prototype);\n _this.message = \"Internal error. Persisted entity was not found in the list of prepared operated entities.\";\n return _this;\n }\n return PersistedEntityNotFoundError;\n}(Error));\nexport { PersistedEntityNotFoundError };\n\n//# sourceMappingURL=PersistedEntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar UsingJoinColumnIsNotAllowedError = /** @class */ (function (_super) {\n __extends(UsingJoinColumnIsNotAllowedError, _super);\n function UsingJoinColumnIsNotAllowedError(entityMetadata, relation) {\n var _this = _super.call(this) || this;\n _this.name = \"UsingJoinColumnIsNotAllowedError\";\n Object.setPrototypeOf(_this, UsingJoinColumnIsNotAllowedError.prototype);\n _this.message = \"Using JoinColumn on \" + entityMetadata.name + \"#\" + relation.propertyName + \" is wrong. \" +\n \"You can use JoinColumn only on one-to-one and many-to-one relations.\";\n return _this;\n }\n return UsingJoinColumnIsNotAllowedError;\n}(Error));\nexport { UsingJoinColumnIsNotAllowedError };\n\n//# sourceMappingURL=UsingJoinColumnIsNotAllowedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when ORM cannot get column's type automatically.\n * Basically, when reflect-metadata is not available or tsconfig is not properly setup.\n */\nvar ColumnTypeUndefinedError = /** @class */ (function (_super) {\n __extends(ColumnTypeUndefinedError, _super);\n function ColumnTypeUndefinedError(object, propertyName) {\n var _this = _super.call(this) || this;\n _this.name = \"ColumnTypeUndefinedError\";\n Object.setPrototypeOf(_this, ColumnTypeUndefinedError.prototype);\n _this.message = \"Column type for \" + object.constructor.name + \"#\" + propertyName + \" is not defined and cannot be guessed. \" +\n \"Make sure you have turned on an \\\"emitDecoratorMetadata\\\": true option in tsconfig.json. \" +\n \"Also make sure you have imported \\\"reflect-metadata\\\" on top of the main entry file in your application (before any entity imported).\" +\n \"If you are using JavaScript instead of TypeScript you must explicitly provide a column type.\";\n return _this;\n }\n return ColumnTypeUndefinedError;\n}(Error));\nexport { ColumnTypeUndefinedError };\n\n//# sourceMappingURL=ColumnTypeUndefinedError.js.map\n","export * from \"./CannotReflectMethodParameterTypeError\";\nexport * from \"./AlreadyHasActiveConnectionError\";\nexport * from \"./SubjectWithoutIdentifierError\";\nexport * from \"./CannotConnectAlreadyConnectedError\";\nexport * from \"./LockNotSupportedOnGivenDriverError\";\nexport * from \"./ConnectionIsNotSetError\";\nexport * from \"./CannotCreateEntityIdMapError\";\nexport * from \"./MetadataAlreadyExistsError\";\nexport * from \"./CannotDetermineEntityError\";\nexport * from \"./UpdateValuesMissingError\";\nexport * from \"./TreeRepositoryNotSupportedError\";\nexport * from \"./CustomRepositoryNotFoundError\";\nexport * from \"./TransactionNotStartedError\";\nexport * from \"./TransactionAlreadyStartedError\";\nexport * from \"./EntityNotFoundError\";\nexport * from \"./EntityMetadataNotFoundError\";\nexport * from \"./MustBeEntityError\";\nexport * from \"./OptimisticLockVersionMismatchError\";\nexport * from \"./LimitOnUpdateNotSupportedError\";\nexport * from \"./PrimaryColumnCannotBeNullableError\";\nexport * from \"./CustomRepositoryCannotInheritRepositoryError\";\nexport * from \"./QueryRunnerProviderAlreadyReleasedError\";\nexport * from \"./CannotAttachTreeChildrenEntityError\";\nexport * from \"./CustomRepositoryDoesNotHaveEntityError\";\nexport * from \"./MissingDeleteDateColumnError\";\nexport * from \"./NoConnectionForRepositoryError\";\nexport * from \"./CircularRelationsError\";\nexport * from \"./ReturningStatementNotSupportedError\";\nexport * from \"./UsingJoinTableIsNotAllowedError\";\nexport * from \"./MissingJoinColumnError\";\nexport * from \"./MissingPrimaryColumnError\";\nexport * from \"./EntityColumnNotFound\";\nexport * from \"./MissingDriverError\";\nexport * from \"./DriverPackageNotInstalledError\";\nexport * from \"./CannotGetEntityManagerNotConnectedError\";\nexport * from \"./ConnectionNotFoundError\";\nexport * from \"./NoVersionOrUpdateDateColumnError\";\nexport * from \"./InsertValuesMissingError\";\nexport * from \"./OptimisticLockCanNotBeUsedError\";\nexport * from \"./MetadataWithSuchNameAlreadyExistsError\";\nexport * from \"./DriverOptionNotSetError\";\nexport * from \"./FindRelationsNotFoundError\";\nexport * from \"./RepositoryNotFoundError\";\nexport * from \"./NamingStrategyNotFoundError\";\nexport * from \"./PessimisticLockTransactionRequiredError\";\nexport * from \"./RepositoryNotTreeError\";\nexport * from \"./DataTypeNotSupportedError\";\nexport * from \"./InitializedRelationError\";\nexport * from \"./MissingJoinTableError\";\nexport * from \"./QueryFailedError\";\nexport * from \"./NoNeedToReleaseEntityManagerError\";\nexport * from \"./UsingJoinColumnOnlyOnOneSideAllowedError\";\nexport * from \"./UsingJoinTableOnlyOnOneSideAllowedError\";\nexport * from \"./SubjectRemovedAndUpdatedError\";\nexport * from \"./PersistedEntityNotFoundError\";\nexport * from \"./UsingJoinColumnIsNotAllowedError\";\nexport * from \"./ColumnTypeUndefinedError\";\nexport * from \"./QueryRunnerAlreadyReleasedError\";\nexport * from \"./OffsetWithoutLimitNotSupportedError\";\nexport * from \"./CannotExecuteNotConnectedError\";\nexport * from \"./NoConnectionOptionError\";\n\n//# sourceMappingURL=index.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n */\nexport function Column(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\" || typeOrOptions instanceof Function) {\n type = typeOrOptions;\n }\n else if (typeOrOptions) {\n options = typeOrOptions;\n type = typeOrOptions.type;\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType) // if type is not given explicitly then try to guess it\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // specify HSTORE type if column is HSTORE\n if (options.type === \"hstore\" && !options.hstoreType)\n options.hstoreType = reflectMetadataType === Object ? \"object\" : \"string\";\n if (typeOrOptions instanceof Function) { // register an embedded\n getMetadataArgsStorage().embeddeds.push({\n target: object.constructor,\n propertyName: propertyName,\n isArray: reflectMetadataType === Array || options.array === true,\n prefix: options.prefix !== undefined ? options.prefix : undefined,\n type: typeOrOptions\n });\n }\n else { // register a regular column\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // create unique\n if (options.unique === true)\n getMetadataArgsStorage().uniques.push({ target: object.constructor, columns: [propertyName] });\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n }\n };\n}\n\n//# sourceMappingURL=Column.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a creation date of the inserted object.\n * Creation date is generated and inserted only once,\n * at the first time when you create an object, the value is inserted into the table, and is never touched again.\n */\nexport function CreateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"createDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=CreateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a delete date of the soft-deleted object.\n * This date is being updated each time you soft-delete the object.\n */\nexport function DeleteDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"deleteDate\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=DeleteDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * This column creates an integer PRIMARY COLUMN with generated set to true.\n */\nexport function PrimaryGeneratedColumn(strategyOrOptions, maybeOptions) {\n // normalize parameters\n var options = {};\n var strategy;\n if (strategyOrOptions) {\n if (typeof strategyOrOptions === \"string\")\n strategy = strategyOrOptions;\n if (strategyOrOptions instanceof Object) {\n strategy = \"increment\";\n Object.assign(options, strategyOrOptions);\n }\n }\n else {\n strategy = \"increment\";\n }\n if (maybeOptions instanceof Object)\n Object.assign(options, maybeOptions);\n return function (object, propertyName) {\n // if column type is not explicitly set then determine it based on generation strategy\n if (!options.type) {\n if (strategy === \"increment\") {\n options.type = Number;\n }\n else if (strategy === \"uuid\") {\n options.type = \"uuid\";\n }\n else if (strategy === \"rowid\") {\n options.type = \"int\";\n }\n }\n // explicitly set a primary and generated to column options\n options.primary = true;\n // register column metadata args\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n // register generated metadata args\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=PrimaryGeneratedColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { ColumnTypeUndefinedError } from \"../../error/ColumnTypeUndefinedError\";\nimport { PrimaryColumnCannotBeNullableError } from \"../../error/PrimaryColumnCannotBeNullableError\";\n/**\n * Column decorator is used to mark a specific class property as a table column.\n * Only properties decorated with this decorator will be persisted to the database when entity be saved.\n * Primary columns also creates a PRIMARY KEY for this column in a db.\n */\nexport function PrimaryColumn(typeOrOptions, options) {\n return function (object, propertyName) {\n // normalize parameters\n var type;\n if (typeof typeOrOptions === \"string\") {\n type = typeOrOptions;\n }\n else {\n options = Object.assign({}, typeOrOptions);\n }\n if (!options)\n options = {};\n // if type is not given explicitly then try to guess it\n var reflectMetadataType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n if (!type && reflectMetadataType)\n type = reflectMetadataType;\n // check if there is no type in column options then set type from first function argument, or guessed one\n if (!options.type && type)\n options.type = type;\n // if we still don't have a type then we need to give error to user that type is required\n if (!options.type)\n throw new ColumnTypeUndefinedError(object, propertyName);\n // check if column is not nullable, because we cannot allow a primary key to be nullable\n if (options.nullable)\n throw new PrimaryColumnCannotBeNullableError(object, propertyName);\n // explicitly set a primary to column options\n options.primary = true;\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options\n });\n if (options.generated) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: typeof options.generated === \"string\" ? options.generated : \"increment\"\n });\n }\n };\n}\n\n//# sourceMappingURL=PrimaryColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store an update date of the updated object.\n * This date is being updated each time you persist the object.\n */\nexport function UpdateDateColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"updateDate\",\n options: options ? options : {}\n });\n };\n}\n\n//# sourceMappingURL=UpdateDateColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This column will store a number - version of the entity.\n * Every time your entity will be persisted, this number will be increased by one -\n * so you can organize visioning and update strategies of your entity.\n */\nexport function VersionColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"version\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=VersionColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * ViewColumn decorator is used to mark a specific class property as a view column.\n */\nexport function ViewColumn(options) {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"regular\",\n options: options || {}\n });\n };\n}\n\n//# sourceMappingURL=ViewColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of column that is available only for MongoDB database.\n * Marks your entity's column to be an object id.\n */\nexport function ObjectIdColumn(options) {\n return function (object, propertyName) {\n // if column options are not given then create a new empty options\n if (!options)\n options = {};\n options.primary = true;\n if (!options.name)\n options.name = \"_id\";\n // create and register a new column metadata\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"objectId\",\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ObjectIdColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity insertion.\n */\nexport function AfterInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_INSERT\n });\n };\n}\n\n//# sourceMappingURL=AfterInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after entity is loaded.\n */\nexport function AfterLoad() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_LOAD\n });\n };\n}\n\n//# sourceMappingURL=AfterLoad.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity removal.\n */\nexport function AfterRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=AfterRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied after this entity update.\n */\nexport function AfterUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.AFTER_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=AfterUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity insertion.\n */\nexport function BeforeInsert() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_INSERT\n });\n };\n}\n\n//# sourceMappingURL=BeforeInsert.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity removal.\n */\nexport function BeforeRemove() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_REMOVE\n });\n };\n}\n\n//# sourceMappingURL=BeforeRemove.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { EventListenerTypes } from \"../../metadata/types/EventListenerTypes\";\n/**\n * Calls a method on which this decorator is applied before this entity update.\n */\nexport function BeforeUpdate() {\n return function (object, propertyName) {\n getMetadataArgsStorage().entityListeners.push({\n target: object.constructor,\n propertyName: propertyName,\n type: EventListenerTypes.BEFORE_UPDATE\n });\n };\n}\n\n//# sourceMappingURL=BeforeUpdate.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Classes decorated with this decorator will listen to ORM events and their methods will be triggered when event\n * occurs. Those classes must implement EventSubscriberInterface interface.\n */\nexport function EventSubscriber() {\n return function (target) {\n getMetadataArgsStorage().entitySubscribers.push({\n target: target\n });\n };\n}\n\n//# sourceMappingURL=EventSubscriber.js.map\n","export {};\n\n//# sourceMappingURL=ColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=IndexOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinColumnOptions.js.map\n","export {};\n\n//# sourceMappingURL=JoinTableOptions.js.map\n","export {};\n\n//# sourceMappingURL=RelationOptions.js.map\n","export {};\n\n//# sourceMappingURL=EntityOptions.js.map\n","export {};\n\n//# sourceMappingURL=ValueTransformer.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(optionsOrOptionsArray) {\n return function (object, propertyName) {\n var options = Array.isArray(optionsOrOptionsArray) ? optionsOrOptionsArray : [optionsOrOptionsArray || {}];\n options.forEach(function (options) {\n getMetadataArgsStorage().joinColumns.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n referencedColumnName: options.referencedColumnName\n });\n });\n };\n}\n\n//# sourceMappingURL=JoinColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * JoinTable decorator is used in many-to-many relationship to specify owner side of relationship.\n * Its also used to set a custom junction table's name, column names and referenced columns.\n */\nexport function JoinTable(options) {\n return function (object, propertyName) {\n options = options || {};\n getMetadataArgsStorage().joinTables.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n joinColumns: (options && options.joinColumn ? [options.joinColumn] : options.joinColumns),\n inverseJoinColumns: (options && options.inverseJoinColumn ? [options.inverseJoinColumn] : options.inverseJoinColumns),\n schema: options && options.schema ? options.schema : undefined,\n database: options && options.database ? options.database : undefined,\n });\n };\n}\n\n//# sourceMappingURL=JoinTable.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Many-to-many is a type of relationship when Entity1 can have multiple instances of Entity2, and Entity2 can have\n * multiple instances of Entity1. To achieve it, this type of relation creates a junction table, where it storage\n * entity1 and entity2 ids. This is owner side of the relationship.\n */\nexport function ManyToMany(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options.lazy === true;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-many\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A many-to-one relation allows creating the type of relation where Entity1 can have a single instance of Entity2, but\n * Entity2 can have multiple instances of Entity1. Entity1 is the owner of the relationship, and stores the id of\n * Entity2 on its side of the relation.\n */\nexport function ManyToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // Normalize parameters.\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n relationType: \"many-to-one\",\n isLazy: isLazy,\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=ManyToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * A one-to-many relation allows creating the type of relation where Entity1 can have multiple instances of Entity2,\n * but Entity2 has only one Entity1. Entity2 is the owner of the relationship, and stores the id of Entity1 on its\n * side of the relation.\n */\nexport function OneToMany(typeFunctionOrTarget, inverseSide, options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // Now try to determine if it is a lazy relation.\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSide,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToMany.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * One-to-one relation allows to create direct relation between two entities. Entity1 have only one Entity2.\n * Entity1 is an owner of the relationship, and storages Entity1 id on its own side.\n */\nexport function OneToOne(typeFunctionOrTarget, inverseSideOrOptions, options) {\n // normalize parameters\n var inverseSideProperty;\n if (typeof inverseSideOrOptions === \"object\") {\n options = inverseSideOrOptions;\n }\n else {\n inverseSideProperty = inverseSideOrOptions;\n }\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var isLazy = options && options.lazy === true ? true : false;\n if (!isLazy && Reflect && Reflect.getMetadata) { // automatic determination\n var reflectedType = Reflect.getMetadata(\"design:type\", object, propertyName);\n if (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\")\n isLazy = true;\n }\n getMetadataArgsStorage().relations.push({\n target: object.constructor,\n propertyName: propertyName,\n // propertyType: reflectedType,\n isLazy: isLazy,\n relationType: \"one-to-one\",\n type: typeFunctionOrTarget,\n inverseSideProperty: inverseSideProperty,\n options: options\n });\n };\n}\n\n//# sourceMappingURL=OneToOne.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Holds a number of children in the closure table of the column.\n *\n * @deprecated Do not use this decorator, it may be removed in the future versions\n */\nexport function RelationCount(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationCounts.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationCount.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special decorator used to extract relation id into separate entity property.\n *\n * @experimental\n */\nexport function RelationId(relation, alias, queryBuilderFactory) {\n return function (object, propertyName) {\n getMetadataArgsStorage().relationIds.push({\n target: object.constructor,\n propertyName: propertyName,\n relation: relation,\n alias: alias,\n queryBuilderFactory: queryBuilderFactory\n });\n };\n}\n\n//# sourceMappingURL=RelationId.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity (table or document depend on database type).\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function Entity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n type: \"regular\",\n orderBy: options.orderBy ? options.orderBy : undefined,\n engine: options.engine ? options.engine : undefined,\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize,\n withoutRowid: options.withoutRowid\n });\n };\n}\n\n//# sourceMappingURL=Entity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Special type of the table used in the single-table inherited tables.\n */\nexport function ChildEntity(discriminatorValue) {\n return function (target) {\n // register a table metadata\n getMetadataArgsStorage().tables.push({\n target: target,\n type: \"entity-child\",\n });\n // register discriminator value if it was provided\n if (typeof discriminatorValue !== 'undefined') {\n getMetadataArgsStorage().discriminatorValues.push({\n target: target,\n value: discriminatorValue\n });\n }\n };\n}\n\n//# sourceMappingURL=ChildEntity.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Sets for entity to use table inheritance pattern.\n */\nexport function TableInheritance(options) {\n return function (target) {\n getMetadataArgsStorage().inheritances.push({\n target: target,\n pattern: options && options.pattern ? options.pattern : \"STI\",\n column: options && options.column ? typeof options.column === \"string\" ? { name: options.column } : options.column : undefined\n });\n };\n}\n\n//# sourceMappingURL=TableInheritance.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * This decorator is used to mark classes that will be an entity view.\n * Database schema will be created for all classes decorated with it, and Repository can be retrieved and used for it.\n */\nexport function ViewEntity(nameOrOptions, maybeOptions) {\n var options = (typeof nameOrOptions === \"object\" ? nameOrOptions : maybeOptions) || {};\n var name = typeof nameOrOptions === \"string\" ? nameOrOptions : options.name;\n return function (target) {\n getMetadataArgsStorage().tables.push({\n target: target,\n name: name,\n expression: options.expression,\n type: \"view\",\n database: options.database ? options.database : undefined,\n schema: options.schema ? options.schema : undefined,\n synchronize: options.synchronize === false ? false : true,\n materialized: !!options.materialized\n });\n };\n}\n\n//# sourceMappingURL=ViewEntity.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { getConnection, getMetadataArgsStorage, MongoRepository, Repository, TreeRepository } from \"../../\";\nexport function Transaction(connectionOrOptions) {\n return function (target, methodName, descriptor) {\n // save original method - we gonna need it\n var originalMethod = descriptor.value;\n // override method descriptor with proxy method\n descriptor.value = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var connectionName = \"default\";\n var isolationLevel = undefined;\n if (connectionOrOptions) {\n if (typeof connectionOrOptions === \"string\") {\n connectionName = connectionOrOptions;\n }\n else {\n if (connectionOrOptions.connectionName) {\n connectionName = connectionOrOptions.connectionName;\n }\n if (connectionOrOptions.isolation) {\n isolationLevel = connectionOrOptions.isolation;\n }\n }\n }\n var transactionCallback = function (entityManager) {\n var argsWithInjectedTransactionManagerAndRepositories;\n // filter all @TransactionManager() and @TransactionRepository() decorator usages for this method\n var transactionEntityManagerMetadatas = getMetadataArgsStorage()\n .filterTransactionEntityManagers(target.constructor, methodName)\n .reverse();\n var transactionRepositoryMetadatas = getMetadataArgsStorage()\n .filterTransactionRepository(target.constructor, methodName)\n .reverse();\n // if there are @TransactionManager() decorator usages the inject them\n if (transactionEntityManagerMetadatas.length > 0) {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n // replace method params with injection of transactionEntityManager\n transactionEntityManagerMetadatas.forEach(function (metadata) {\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, entityManager);\n });\n }\n else if (transactionRepositoryMetadatas.length === 0) { // otherwise if there's no transaction repositories in use, inject it as a first parameter\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([entityManager], __read(args));\n }\n else {\n argsWithInjectedTransactionManagerAndRepositories = __spreadArray([], __read(args));\n }\n // for every usage of @TransactionRepository decorator\n transactionRepositoryMetadatas.forEach(function (metadata) {\n var repositoryInstance;\n // detect type of the repository and get instance from transaction entity manager\n switch (metadata.repositoryType) {\n case Repository:\n repositoryInstance = entityManager.getRepository(metadata.entityType);\n break;\n case MongoRepository:\n repositoryInstance = entityManager.getMongoRepository(metadata.entityType);\n break;\n case TreeRepository:\n repositoryInstance = entityManager.getTreeRepository(metadata.entityType);\n break;\n // if not the TypeORM's ones, there must be custom repository classes\n default:\n repositoryInstance = entityManager.getCustomRepository(metadata.repositoryType);\n }\n // replace method param with injection of repository instance\n argsWithInjectedTransactionManagerAndRepositories.splice(metadata.index, 0, repositoryInstance);\n });\n return originalMethod.apply(_this, argsWithInjectedTransactionManagerAndRepositories);\n };\n if (isolationLevel) {\n return getConnection(connectionName).manager.transaction(isolationLevel, transactionCallback);\n }\n else {\n return getConnection(connectionName).manager.transaction(transactionCallback);\n }\n };\n };\n}\n\n//# sourceMappingURL=Transaction.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Injects transaction's entity manager into the method wrapped with @Transaction decorator.\n */\nexport function TransactionManager() {\n return function (object, methodName, index) {\n getMetadataArgsStorage().transactionEntityManagers.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n });\n };\n}\n\n//# sourceMappingURL=TransactionManager.js.map\n","import { getMetadataArgsStorage } from \"../../\";\nimport { CannotReflectMethodParameterTypeError } from \"../../error/CannotReflectMethodParameterTypeError\";\n/**\n * Injects transaction's repository into the method wrapped with @Transaction decorator.\n */\nexport function TransactionRepository(entityType) {\n return function (object, methodName, index) {\n // get repository type\n var repositoryType;\n try {\n repositoryType = Reflect.getOwnMetadata(\"design:paramtypes\", object, methodName)[index];\n }\n catch (err) {\n throw new CannotReflectMethodParameterTypeError(object.constructor, methodName);\n }\n getMetadataArgsStorage().transactionRepositories.push({\n target: object.constructor,\n methodName: methodName,\n index: index,\n repositoryType: repositoryType,\n entityType: entityType,\n });\n };\n}\n\n//# sourceMappingURL=TransactionRepository.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Creates a \"level\"/\"length\" column to the table that holds a closure table.\n */\nexport function TreeLevelColumn() {\n return function (object, propertyName) {\n getMetadataArgsStorage().columns.push({\n target: object.constructor,\n propertyName: propertyName,\n mode: \"treeLevel\",\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeLevelColumn.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a parent of the tree.\n * \"Tree parent\" indicates who owns (is a parent) of this entity in tree structure.\n */\nexport function TreeParent() {\n return function (object, propertyName) {\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n getMetadataArgsStorage().relations.push({\n isTreeParent: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"many-to-one\",\n type: function () { return object.constructor; },\n options: {}\n });\n };\n}\n\n//# sourceMappingURL=TreeParent.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks a entity property as a children of the tree.\n * \"Tree children\" will contain all children (bind) of this entity.\n */\nexport function TreeChildren(options) {\n return function (object, propertyName) {\n if (!options)\n options = {};\n // now try to determine it its lazy relation\n var reflectedType = Reflect && Reflect.getMetadata ? Reflect.getMetadata(\"design:type\", object, propertyName) : undefined;\n var isLazy = (reflectedType && typeof reflectedType.name === \"string\" && reflectedType.name.toLowerCase() === \"promise\") || false;\n // add one-to-many relation for this\n getMetadataArgsStorage().relations.push({\n isTreeChildren: true,\n target: object.constructor,\n propertyName: propertyName,\n isLazy: isLazy,\n relationType: \"one-to-many\",\n type: function () { return object.constructor; },\n options: options\n });\n };\n}\n\n//# sourceMappingURL=TreeChildren.js.map\n","import { getMetadataArgsStorage } from \"../../\";\n/**\n * Marks entity to work like a tree.\n * Tree pattern that will be used for the tree entity should be specified.\n * @TreeParent decorator must be used in tree entities.\n * TreeRepository can be used to manipulate with tree entities.\n */\nexport function Tree(type, options) {\n return function (target) {\n getMetadataArgsStorage().trees.push({\n target: target,\n type: type,\n options: type === \"closure-table\" ? options : undefined\n });\n };\n}\n\n//# sourceMappingURL=Tree.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database index.\n * Can be used on entity property or on entity.\n * Can create indices with composite columns when used on entity.\n */\nexport function Index(nameOrFieldsOrOptions, maybeFieldsOrOptions, maybeOptions) {\n // normalize parameters\n var name = typeof nameOrFieldsOrOptions === \"string\" ? nameOrFieldsOrOptions : undefined;\n var fields = typeof nameOrFieldsOrOptions === \"string\" ? maybeFieldsOrOptions : nameOrFieldsOrOptions;\n var options = (typeof nameOrFieldsOrOptions === \"object\" && !Array.isArray(nameOrFieldsOrOptions)) ? nameOrFieldsOrOptions : maybeOptions;\n if (!options)\n options = (typeof maybeFieldsOrOptions === \"object\" && !Array.isArray(maybeFieldsOrOptions)) ? maybeFieldsOrOptions : maybeOptions;\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().indices.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: propertyName ? [propertyName] : fields,\n synchronize: options && options.synchronize === false ? false : true,\n where: options ? options.where : undefined,\n unique: options && options.unique ? true : false,\n spatial: options && options.spatial ? true : false,\n fulltext: options && options.fulltext ? true : false,\n parser: options ? options.parser : undefined,\n sparse: options && options.sparse ? true : false,\n background: options && options.background ? true : false,\n expireAfterSeconds: options ? options.expireAfterSeconds : undefined\n });\n };\n}\n\n//# sourceMappingURL=Index.js.map\n","import { getMetadataArgsStorage } from \"../index\";\n/**\n * Composite unique constraint must be set on entity classes and must specify entity's fields to be unique.\n */\nexport function Unique(nameOrFields, maybeFields) {\n var name = typeof nameOrFields === \"string\" ? nameOrFields : undefined;\n var fields = typeof nameOrFields === \"string\" ? maybeFields : nameOrFields;\n return function (clsOrObject, propertyName) {\n var columns = fields;\n if (propertyName !== undefined) {\n switch (typeof (propertyName)) {\n case \"string\":\n columns = [propertyName];\n break;\n case \"symbol\":\n columns = [propertyName.toString()];\n break;\n }\n }\n var args = {\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n columns: columns,\n };\n getMetadataArgsStorage().uniques.push(args);\n };\n}\n\n//# sourceMappingURL=Unique.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database check.\n * Can be used on entity property or on entity.\n * Can create checks with composite columns when used on entity.\n */\nexport function Check(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Check expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().checks.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Check.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Creates a database exclusion.\n * Can be used on entity.\n * Can create exclusions with composite columns when used on entity.\n */\nexport function Exclusion(nameOrExpression, maybeExpression) {\n var name = maybeExpression ? nameOrExpression : undefined;\n var expression = maybeExpression ? maybeExpression : nameOrExpression;\n if (!expression)\n throw new Error(\"Exclusion expression is required\");\n return function (clsOrObject, propertyName) {\n getMetadataArgsStorage().exclusions.push({\n target: propertyName ? clsOrObject.constructor : clsOrObject,\n name: name,\n expression: expression\n });\n };\n}\n\n//# sourceMappingURL=Exclusion.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Marks a column to generate a value on entity insertion.\n * There are three types of generation strategy - increment, uuid and rowid (cockroachdb only).\n * Increment uses a number which increases by one on each insertion.\n * Uuid generates a special UUID token.\n * Rowid supports only in CockroachDB and uses `unique_rowid()` function\n *\n * Note, some databases do not support non-primary generation columns.\n */\nexport function Generated(strategy) {\n if (strategy === void 0) { strategy = \"increment\"; }\n return function (object, propertyName) {\n getMetadataArgsStorage().generations.push({\n target: object.constructor,\n propertyName: propertyName,\n strategy: strategy\n });\n };\n}\n\n//# sourceMappingURL=Generated.js.map\n","import { getMetadataArgsStorage } from \"../\";\n/**\n * Used to declare a class as a custom repository.\n * Custom repository can manage some specific entity or just be generic.\n * Custom repository optionally can extend AbstractRepository, Repository or TreeRepository.\n */\nexport function EntityRepository(entity) {\n return function (target) {\n getMetadataArgsStorage().entityRepositories.push({\n target: target,\n entity: entity,\n });\n };\n}\n\n//# sourceMappingURL=EntityRepository.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Any([...]) }\n */\nexport function Any(value) {\n return new FindOperator(\"any\", value);\n}\n\n//# sourceMappingURL=Any.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Between(x, y) }\n */\nexport function Between(from, to) {\n return new FindOperator(\"between\", [from, to], true, true);\n}\n\n//# sourceMappingURL=Between.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Equal(\"value\") }\n */\nexport function Equal(value) {\n return new FindOperator(\"equal\", value);\n}\n\n//# sourceMappingURL=Equal.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: IsNull() }\n */\nexport function IsNull() {\n return new FindOperator(\"isNull\", undefined, false);\n}\n\n//# sourceMappingURL=IsNull.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThan(10) }\n */\nexport function LessThan(value) {\n return new FindOperator(\"lessThan\", value);\n}\n\n//# sourceMappingURL=LessThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: LessThanOrEqual(10) }\n */\nexport function LessThanOrEqual(value) {\n return new FindOperator(\"lessThanOrEqual\", value);\n}\n\n//# sourceMappingURL=LessThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: ILike(\"%SOME string%\") }\n */\nexport function ILike(value) {\n return new FindOperator(\"ilike\", value);\n}\n\n//# sourceMappingURL=ILike.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: Like(\"%some sting%\") }\n */\nexport function Like(value) {\n return new FindOperator(\"like\", value);\n}\n\n//# sourceMappingURL=Like.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThan(10) }\n */\nexport function MoreThan(value) {\n return new FindOperator(\"moreThan\", value);\n}\n\n//# sourceMappingURL=MoreThan.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: MoreThanOrEqual(10) }\n */\nexport function MoreThanOrEqual(value) {\n return new FindOperator(\"moreThanOrEqual\", value);\n}\n\n//# sourceMappingURL=MoreThanOrEqual.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Used to negotiate expression.\n * Example: { title: not(\"hello\") } will return entities where title not equal to \"hello\".\n */\nexport function Not(value) {\n return new FindOperator(\"not\", value);\n}\n\n//# sourceMappingURL=Not.js.map\n","import { FindOperator } from \"../FindOperator\";\nexport function Raw(valueOrSqlGenerator, sqlGeneratorParameters) {\n if (typeof valueOrSqlGenerator !== 'function') {\n return new FindOperator(\"raw\", valueOrSqlGenerator, false);\n }\n return new FindOperator(\"raw\", [], true, true, valueOrSqlGenerator, sqlGeneratorParameters);\n}\n\n//# sourceMappingURL=Raw.js.map\n","export {};\n\n//# sourceMappingURL=FindConditions.js.map\n","export {};\n\n//# sourceMappingURL=FindManyOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOneOptions.js.map\n","export {};\n\n//# sourceMappingURL=FindOperatorType.js.map\n","export {};\n\n//# sourceMappingURL=JoinOptions.js.map\n","export {};\n\n//# sourceMappingURL=OrderByCondition.js.map\n","export {};\n\n//# sourceMappingURL=Logger.js.map\n","export {};\n\n//# sourceMappingURL=LoggerOptions.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getConnection } from \"../index\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nvar BaseEntity = /** @class */ (function () {\n function BaseEntity() {\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.prototype.hasId = function () {\n return this.constructor.getRepository().hasId(this);\n };\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n BaseEntity.prototype.save = function (options) {\n return this.constructor.getRepository().save(this, options);\n };\n /**\n * Removes current entity from the database.\n */\n BaseEntity.prototype.remove = function (options) {\n return this.constructor.getRepository().remove(this, options);\n };\n /**\n * Records the delete date of current entity.\n */\n BaseEntity.prototype.softRemove = function (options) {\n return this.constructor.getRepository().softRemove(this, options);\n };\n /**\n * Recovers a given entity in the database.\n */\n BaseEntity.prototype.recover = function (options) {\n return this.constructor.getRepository().recover(this, options);\n };\n /**\n * Reloads entity data from the database.\n */\n BaseEntity.prototype.reload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var base, newestEntity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n base = this.constructor;\n return [4 /*yield*/, base.getRepository().findOneOrFail(base.getId(this))];\n case 1:\n newestEntity = _a.sent();\n ObjectUtils.assign(this, newestEntity);\n return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n /**\n * Sets connection to be used by entity.\n */\n BaseEntity.useConnection = function (connection) {\n this.usedConnection = connection;\n };\n /**\n * Gets current entity's Repository.\n */\n BaseEntity.getRepository = function () {\n var connection = this.usedConnection || getConnection();\n return connection.getRepository(this);\n };\n Object.defineProperty(BaseEntity, \"target\", {\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get: function () {\n return this.getRepository().target;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n BaseEntity.hasId = function (entity) {\n return this.getRepository().hasId(entity);\n };\n /**\n * Gets entity mixed id.\n */\n BaseEntity.getId = function (entity) {\n return this.getRepository().getId(entity);\n };\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n BaseEntity.createQueryBuilder = function (alias) {\n return this.getRepository().createQueryBuilder(alias);\n };\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n BaseEntity.create = function (entityOrEntities) {\n return this.getRepository().create(entityOrEntities);\n };\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n BaseEntity.merge = function (mergeIntoEntity) {\n var _a;\n var entityLikes = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n entityLikes[_i - 1] = arguments[_i];\n }\n return (_a = this.getRepository()).merge.apply(_a, __spreadArray([mergeIntoEntity], __read(entityLikes)));\n };\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n BaseEntity.preload = function (entityLike) {\n return this.getRepository().preload(entityLike);\n };\n /**\n * Saves one or many given entities.\n */\n BaseEntity.save = function (entityOrEntities, options) {\n return this.getRepository().save(entityOrEntities, options);\n };\n /**\n * Removes one or many given entities.\n */\n BaseEntity.remove = function (entityOrEntities, options) {\n return this.getRepository().remove(entityOrEntities, options);\n };\n /**\n * Records the delete date of one or many given entities.\n */\n BaseEntity.softRemove = function (entityOrEntities, options) {\n return this.getRepository().softRemove(entityOrEntities, options);\n };\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n BaseEntity.insert = function (entity, options) {\n return this.getRepository().insert(entity, options);\n };\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.update = function (criteria, partialEntity, options) {\n return this.getRepository().update(criteria, partialEntity, options);\n };\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n BaseEntity.delete = function (criteria, options) {\n return this.getRepository().delete(criteria, options);\n };\n /**\n * Counts entities that match given find options or conditions.\n */\n BaseEntity.count = function (optionsOrConditions) {\n return this.getRepository().count(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n */\n BaseEntity.find = function (optionsOrConditions) {\n return this.getRepository().find(optionsOrConditions);\n };\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n BaseEntity.findAndCount = function (optionsOrConditions) {\n return this.getRepository().findAndCount(optionsOrConditions);\n };\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n BaseEntity.findByIds = function (ids, optionsOrConditions) {\n return this.getRepository().findByIds(ids, optionsOrConditions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOne = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOne(optionsOrConditions, maybeOptions);\n };\n /**\n * Finds first entity that matches given conditions.\n */\n BaseEntity.findOneOrFail = function (optionsOrConditions, maybeOptions) {\n return this.getRepository().findOneOrFail(optionsOrConditions, maybeOptions);\n };\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n BaseEntity.query = function (query, parameters) {\n return this.getRepository().query(query, parameters);\n };\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n BaseEntity.clear = function () {\n return this.getRepository().clear();\n };\n return BaseEntity;\n}());\nexport { BaseEntity };\n\n//# sourceMappingURL=BaseEntity.js.map\n","export {};\n\n//# sourceMappingURL=RemoveOptions.js.map\n","export {};\n\n//# sourceMappingURL=SaveOptions.js.map\n","import { EventEmitter, Readable, Writable } from \"../../platform/PlatformTools\";\n\n//# sourceMappingURL=typings.js.map\n","export {};\n\n//# sourceMappingURL=DatabaseType.js.map\n","export {};\n\n//# sourceMappingURL=ReplicationMode.js.map\n","import { __awaiter, __generator } from \"tslib\";\n/*!\n */\nimport \"reflect-metadata\";\nimport { ConnectionManager } from \"./connection/ConnectionManager\";\nimport { MetadataArgsStorage } from \"./metadata-args/MetadataArgsStorage\";\nimport { getFromContainer } from \"./container\";\nimport { PlatformTools } from \"./platform/PlatformTools\";\nimport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\n// -------------------------------------------------------------------------\n// Commonly Used exports\n// -------------------------------------------------------------------------\nexport * from \"./container\";\nexport * from \"./common/EntityTarget\";\nexport * from \"./common/ObjectType\";\nexport * from \"./common/ObjectLiteral\";\nexport * from \"./common/DeepPartial\";\nexport * from \"./error\";\nexport * from \"./decorator/columns/Column\";\nexport * from \"./decorator/columns/CreateDateColumn\";\nexport * from \"./decorator/columns/DeleteDateColumn\";\nexport * from \"./decorator/columns/PrimaryGeneratedColumn\";\nexport * from \"./decorator/columns/PrimaryColumn\";\nexport * from \"./decorator/columns/UpdateDateColumn\";\nexport * from \"./decorator/columns/VersionColumn\";\nexport * from \"./decorator/columns/ViewColumn\";\nexport * from \"./decorator/columns/ObjectIdColumn\";\nexport * from \"./decorator/listeners/AfterInsert\";\nexport * from \"./decorator/listeners/AfterLoad\";\nexport * from \"./decorator/listeners/AfterRemove\";\nexport * from \"./decorator/listeners/AfterUpdate\";\nexport * from \"./decorator/listeners/BeforeInsert\";\nexport * from \"./decorator/listeners/BeforeRemove\";\nexport * from \"./decorator/listeners/BeforeUpdate\";\nexport * from \"./decorator/listeners/EventSubscriber\";\nexport * from \"./decorator/options/ColumnOptions\";\nexport * from \"./decorator/options/IndexOptions\";\nexport * from \"./decorator/options/JoinColumnOptions\";\nexport * from \"./decorator/options/JoinTableOptions\";\nexport * from \"./decorator/options/RelationOptions\";\nexport * from \"./decorator/options/EntityOptions\";\nexport * from \"./decorator/options/ValueTransformer\";\nexport * from \"./decorator/relations/JoinColumn\";\nexport * from \"./decorator/relations/JoinTable\";\nexport * from \"./decorator/relations/ManyToMany\";\nexport * from \"./decorator/relations/ManyToOne\";\nexport * from \"./decorator/relations/OneToMany\";\nexport * from \"./decorator/relations/OneToOne\";\nexport * from \"./decorator/relations/RelationCount\";\nexport * from \"./decorator/relations/RelationId\";\nexport * from \"./decorator/entity/Entity\";\nexport * from \"./decorator/entity/ChildEntity\";\nexport * from \"./decorator/entity/TableInheritance\";\nexport * from \"./decorator/entity-view/ViewEntity\";\nexport * from \"./decorator/transaction/Transaction\";\nexport * from \"./decorator/transaction/TransactionManager\";\nexport * from \"./decorator/transaction/TransactionRepository\";\nexport * from \"./decorator/tree/TreeLevelColumn\";\nexport * from \"./decorator/tree/TreeParent\";\nexport * from \"./decorator/tree/TreeChildren\";\nexport * from \"./decorator/tree/Tree\";\nexport * from \"./decorator/Index\";\nexport * from \"./decorator/Unique\";\nexport * from \"./decorator/Check\";\nexport * from \"./decorator/Exclusion\";\nexport * from \"./decorator/Generated\";\nexport * from \"./decorator/EntityRepository\";\nexport * from \"./find-options/operator/Any\";\nexport * from \"./find-options/operator/Between\";\nexport * from \"./find-options/operator/Equal\";\nexport * from \"./find-options/operator/In\";\nexport * from \"./find-options/operator/IsNull\";\nexport * from \"./find-options/operator/LessThan\";\nexport * from \"./find-options/operator/LessThanOrEqual\";\nexport * from \"./find-options/operator/ILike\";\nexport * from \"./find-options/operator/Like\";\nexport * from \"./find-options/operator/MoreThan\";\nexport * from \"./find-options/operator/MoreThanOrEqual\";\nexport * from \"./find-options/operator/Not\";\nexport * from \"./find-options/operator/Raw\";\nexport * from \"./find-options/FindConditions\";\nexport * from \"./find-options/FindManyOptions\";\nexport * from \"./find-options/FindOneOptions\";\nexport * from \"./find-options/FindOperator\";\nexport * from \"./find-options/FindOperatorType\";\nexport * from \"./find-options/JoinOptions\";\nexport * from \"./find-options/OrderByCondition\";\nexport * from \"./find-options/FindOptionsUtils\";\nexport * from \"./logger/Logger\";\nexport * from \"./logger/LoggerOptions\";\nexport * from \"./logger/AdvancedConsoleLogger\";\nexport * from \"./logger/SimpleConsoleLogger\";\nexport * from \"./logger/FileLogger\";\nexport * from \"./metadata/EntityMetadata\";\nexport * from \"./entity-manager/EntityManager\";\nexport * from \"./repository/AbstractRepository\";\nexport * from \"./repository/Repository\";\nexport * from \"./repository/BaseEntity\";\nexport * from \"./repository/TreeRepository\";\nexport * from \"./repository/MongoRepository\";\nexport * from \"./repository/RemoveOptions\";\nexport * from \"./repository/SaveOptions\";\nexport * from \"./schema-builder/table/TableCheck\";\nexport * from \"./schema-builder/table/TableColumn\";\nexport * from \"./schema-builder/table/TableExclusion\";\nexport * from \"./schema-builder/table/TableForeignKey\";\nexport * from \"./schema-builder/table/TableIndex\";\nexport * from \"./schema-builder/table/TableUnique\";\nexport * from \"./schema-builder/table/Table\";\nexport * from \"./driver/mongodb/typings\";\nexport * from \"./driver/types/DatabaseType\";\nexport * from \"./driver/types/ReplicationMode\";\nexport * from \"./driver/sqlserver/MssqlParameter\";\nexport { ConnectionOptionsReader } from \"./connection/ConnectionOptionsReader\";\nexport { Connection } from \"./connection/Connection\";\nexport { ConnectionManager } from \"./connection/ConnectionManager\";\nexport { QueryBuilder } from \"./query-builder/QueryBuilder\";\nexport { SelectQueryBuilder } from \"./query-builder/SelectQueryBuilder\";\nexport { DeleteQueryBuilder } from \"./query-builder/DeleteQueryBuilder\";\nexport { InsertQueryBuilder } from \"./query-builder/InsertQueryBuilder\";\nexport { UpdateQueryBuilder } from \"./query-builder/UpdateQueryBuilder\";\nexport { RelationQueryBuilder } from \"./query-builder/RelationQueryBuilder\";\nexport { Brackets } from \"./query-builder/Brackets\";\nexport { InsertResult } from \"./query-builder/result/InsertResult\";\nexport { UpdateResult } from \"./query-builder/result/UpdateResult\";\nexport { DeleteResult } from \"./query-builder/result/DeleteResult\";\nexport { MongoEntityManager } from \"./entity-manager/MongoEntityManager\";\nexport { Migration } from \"./migration/Migration\";\nexport { MigrationExecutor } from \"./migration/MigrationExecutor\";\nexport { DefaultNamingStrategy } from \"./naming-strategy/DefaultNamingStrategy\";\nexport { EntitySchema } from \"./entity-schema/EntitySchema\";\n// -------------------------------------------------------------------------\n// Deprecated\n// -------------------------------------------------------------------------\n// -------------------------------------------------------------------------\n// Commonly used functionality\n// -------------------------------------------------------------------------\n/**\n * Gets metadata args storage.\n */\nexport function getMetadataArgsStorage() {\n // we should store metadata storage in a global variable otherwise it brings too much problems\n // one of the problem is that if any entity (or any other) will be imported before consumer will call\n // useContainer method with his own container implementation, that entity will be registered in the\n // old old container (default one post probably) and consumer will his entity.\n // calling useContainer before he imports any entity (or any other) is not always convenient.\n // another reason is that when we run migrations typeorm is being called from a global package\n // and it may load entities which register decorators in typeorm of local package\n // this leads to impossibility of usage of entities in migrations and cli related operations\n var globalScope = PlatformTools.getGlobalVariable();\n if (!globalScope.typeormMetadataArgsStorage)\n globalScope.typeormMetadataArgsStorage = new MetadataArgsStorage();\n return globalScope.typeormMetadataArgsStorage;\n}\n/**\n * Reads connection options stored in ormconfig configuration file.\n */\nexport function getConnectionOptions(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new ConnectionOptionsReader().get(connectionName)];\n });\n });\n}\n/**\n * Gets a ConnectionManager which creates connections.\n */\nexport function getConnectionManager() {\n return getFromContainer(ConnectionManager);\n}\n/**\n * Creates a new connection and registers it in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * Only one connection from ormconfig will be created (name \"default\" or connection without name).\n */\nexport function createConnection(optionsOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var connectionName, options, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n connectionName = typeof optionsOrName === \"string\" ? optionsOrName : \"default\";\n if (!(optionsOrName instanceof Object)) return [3 /*break*/, 1];\n _a = optionsOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, getConnectionOptions(connectionName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n options = _a;\n return [2 /*return*/, getConnectionManager().create(options).connect()];\n }\n });\n });\n}\n/**\n * Creates new connections and registers them in the manager.\n *\n * If connection options were not specified, then it will try to create connection automatically,\n * based on content of ormconfig (json/js/yml/xml/env) file or environment variables.\n * All connections from the ormconfig will be created.\n */\nexport function createConnections(options) {\n return __awaiter(this, void 0, void 0, function () {\n var connections;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!options) return [3 /*break*/, 2];\n return [4 /*yield*/, new ConnectionOptionsReader().all()];\n case 1:\n options = _a.sent();\n _a.label = 2;\n case 2:\n connections = options.map(function (options) { return getConnectionManager().create(options); });\n return [2 /*return*/, Promise.all(connections.map(function (connection) { return connection.connect(); }))];\n }\n });\n });\n}\n/**\n * Gets connection from the connection manager.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getConnection(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName);\n}\n/**\n * Gets entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets MongoDB entity manager from the connection.\n * If connection name wasn't specified, then \"default\" connection will be retrieved.\n */\nexport function getMongoManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets Sqljs entity manager from connection name.\n * \"default\" connection is used, when no name is specified.\n * Only works when Sqljs driver is used.\n */\nexport function getSqljsManager(connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).manager;\n}\n/**\n * Gets repository for the given entity class.\n */\nexport function getRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getTreeRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getTreeRepository(entityClass);\n}\n/**\n * Gets tree repository for the given entity class.\n */\nexport function getCustomRepository(customRepository, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getCustomRepository(customRepository);\n}\n/**\n * Gets mongodb repository for the given entity class or name.\n */\nexport function getMongoRepository(entityClass, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n return getConnectionManager().get(connectionName).getMongoRepository(entityClass);\n}\n/**\n * Creates a new query builder.\n */\nexport function createQueryBuilder(entityClass, alias, connectionName) {\n if (connectionName === void 0) { connectionName = \"default\"; }\n if (entityClass) {\n return getRepository(entityClass, connectionName).createQueryBuilder(alias);\n }\n return getConnection(connectionName).createQueryBuilder();\n}\n\n//# sourceMappingURL=index.js.map\n","import { __read, __spreadArray } from \"tslib\";\n/**\n * Foreign key from the database stored in this class.\n */\nvar TableForeignKey = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableForeignKey(options) {\n /**\n * Column names which included by this foreign key.\n */\n this.columnNames = [];\n /**\n * Column names which included by this foreign key.\n */\n this.referencedColumnNames = [];\n this.name = options.name;\n this.columnNames = options.columnNames;\n this.referencedColumnNames = options.referencedColumnNames;\n this.referencedTableName = options.referencedTableName;\n this.onDelete = options.onDelete;\n this.onUpdate = options.onUpdate;\n this.deferrable = options.deferrable;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this foreign key with exactly same properties.\n */\n TableForeignKey.prototype.clone = function () {\n return new TableForeignKey({\n name: this.name,\n columnNames: __spreadArray([], __read(this.columnNames)),\n referencedColumnNames: __spreadArray([], __read(this.referencedColumnNames)),\n referencedTableName: this.referencedTableName,\n onDelete: this.onDelete,\n onUpdate: this.onUpdate,\n deferrable: this.deferrable,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new table foreign key from the given foreign key metadata.\n */\n TableForeignKey.create = function (metadata) {\n return new TableForeignKey({\n name: metadata.name,\n columnNames: metadata.columnNames,\n referencedColumnNames: metadata.referencedColumnNames,\n referencedTableName: metadata.referencedTablePath,\n onDelete: metadata.onDelete,\n onUpdate: metadata.onUpdate,\n deferrable: metadata.deferrable,\n });\n };\n return TableForeignKey;\n}());\nexport { TableForeignKey };\n\n//# sourceMappingURL=TableForeignKey.js.map\n","import shajs from \"sha.js\";\n/**\n * Converts string into camelCase.\n *\n * @see http://stackoverflow.com/questions/2970525/converting-any-string-into-camel-case\n */\nexport function camelCase(str, firstCapital) {\n if (firstCapital === void 0) { firstCapital = false; }\n return str.replace(/^([A-Z])|[\\s-_](\\w)/g, function (match, p1, p2, offset) {\n if (firstCapital === true && offset === 0)\n return p1;\n if (p2)\n return p2.toUpperCase();\n return p1.toLowerCase();\n });\n}\n/**\n * Converts string into snake_case.\n *\n * @see https://regex101.com/r/QeSm2I/1\n */\nexport function snakeCase(str) {\n return str.replace(/(?:([a-z])([A-Z]))|(?:((?!^)[A-Z])([a-z]))/g, \"$1_$3$2$4\").toLowerCase();\n}\n/**\n * Converts string into Title Case.\n *\n * @see http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript\n */\nexport function titleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });\n}\n/**\n * Builds abbreviated string from given string;\n */\nexport function abbreviate(str, abbrLettersCount) {\n if (abbrLettersCount === void 0) { abbrLettersCount = 1; }\n var words = str.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0\\xDF])/g, \"$1 $2\").split(\" \");\n return words.reduce(function (res, word) {\n res += word.substr(0, abbrLettersCount);\n return res;\n }, \"\");\n}\n/**\n * Shorten a given `input`. Useful for RDBMS imposing a limit on the\n * maximum length of aliases and column names in SQL queries.\n *\n * @param input String to be shortened.\n * @param options Default to `4` for segments length, `2` for terms length, `'__'` as a separator.\n *\n * @return Shortened `input`.\n *\n * @example\n * // returns: \"UsShCa__orde__mark__dire\"\n * shorten('UserShoppingCart__order__market__director')\n *\n * // returns: \"cat_wit_ver_lon_nam_pos_wit_ver_lon_nam_pos_wit_ver_lon_nam\"\n * shorten(\n * 'category_with_very_long_name_posts_with_very_long_name_post_with_very_long_name',\n * { separator: '_', segmentLength: 3 }\n * )\n *\n * // equals: UsShCa__orde__mark_market_id\n * `${shorten('UserShoppingCart__order__market')}_market_id`\n */\nexport function shorten(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.segmentLength, segmentLength = _a === void 0 ? 4 : _a, _b = options.separator, separator = _b === void 0 ? \"__\" : _b, _c = options.termLength, termLength = _c === void 0 ? 2 : _c;\n var segments = input.split(separator);\n var shortSegments = segments.reduce(function (acc, val) {\n // split the given segment into many terms based on an eventual camel cased name\n var segmentTerms = val.replace(/([a-z\\xE0-\\xFF])([A-Z\\xC0-\\xDF])/g, \"$1 $2\").split(\" \");\n // \"OrderItemList\" becomes \"OrItLi\", while \"company\" becomes \"comp\"\n var length = segmentTerms.length > 1 ? termLength : segmentLength;\n var shortSegment = segmentTerms.map(function (term) { return term.substr(0, length); }).join(\"\");\n acc.push(shortSegment);\n return acc;\n }, []);\n return shortSegments.join(separator);\n}\n/**\n * Returns a hashed input.\n *\n * @param input String to be hashed.\n * @param options.length Optionally, shorten the output to desired length.\n */\nexport function hash(input, options) {\n if (options === void 0) { options = {}; }\n var hashFunction = shajs(\"sha256\");\n hashFunction.update(input, \"utf8\");\n var hashedInput = hashFunction.digest(\"hex\");\n if (options.length) {\n return hashedInput.slice(0, options.length);\n }\n return hashedInput;\n}\n\n//# sourceMappingURL=StringUtils.js.map\n","import { __read } from \"tslib\";\n/**\n * Helper utility functions for QueryBuilder.\n */\nvar QueryBuilderUtils = /** @class */ (function () {\n function QueryBuilderUtils() {\n }\n /**\n * Checks if given value is a string representation of alias property,\n * e.g. \"post.category\" or \"post.id\".\n */\n QueryBuilderUtils.isAliasProperty = function (str) {\n // alias property must be a string and must have a dot separator\n if (typeof str !== \"string\" || str.indexOf(\".\") === -1)\n return false;\n // extra alias and its property relation\n var _a = __read(str.split(\".\"), 2), aliasName = _a[0], propertyName = _a[1]; // todo: what about relations in embedded?\n if (!aliasName || !propertyName)\n return false;\n // alias and property must be represented in a special format\n // const aliasNameRegexp = /^[a-zA-Z0-9_-]+$/;\n // if (!aliasNameRegexp.test(aliasName) || !aliasNameRegexp.test(propertyName))\n // return false;\n // make sure string is not a subquery\n if (str.indexOf(\"(\") !== -1 || str.indexOf(\")\") !== -1)\n return false;\n return true;\n };\n return QueryBuilderUtils;\n}());\nexport { QueryBuilderUtils };\n\n//# sourceMappingURL=QueryBuilderUtils.js.map\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewInflater = void 0;\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst DataManager_1 = require(\"./DataManager\");\n/**\n * Singleton-Klasse genutzt zum laden von Views\n */\nclass ViewInflater {\n constructor() {\n this.loadingPromises = {};\n }\n /**\n * Statische Funktion, um die Singleton-Instanz zu holen\n *\n * @returns {ViewInflater}\n */\n static getInstance() {\n if (shared_1.Helper.isNull(ViewInflater.instance)) {\n ViewInflater.instance = new ViewInflater();\n }\n return ViewInflater.instance;\n }\n /**\n * Lädt asynchron eine View anhand einer URL und lädt ebenso alle child-views\n *\n * Extra nicht async, damit Promise sofort in LoadingPromise hinzugefügt werden kann\n *\n * @param viewUrl\n * @param parentUrls\n * @returns {*}\n */\n load(viewUrl, parentUrls) {\n //Kopiere Elemente, damit originale parentURLS nicht verändert werden\n parentUrls = shared_1.JsonHelper.deepCopy(shared_1.Helper.nonNull(parentUrls, []));\n //Detektiert eine Schleife in den Views\n if (parentUrls.indexOf(viewUrl) !== -1) {\n //Return Promise.reject => da View vorher schon einmal geladen, wird das Resultat ebenfalls in loadingPromises gespeichert für diese View\n return Promise.reject(\"views are in a circuit! cannot resolve view for url \" + parentUrls[0] + \"! url \" + viewUrl + \" is in stack before!\");\n }\n parentUrls.push(viewUrl);\n //Shortcut, falls die View schon geladen wurde. Muss nach Schleifenüberprüfung aufgerufen werden\n if (shared_1.Helper.isNotNull(this.loadingPromises[viewUrl])) {\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n let t;\n let resultPromise = Promise.resolve(t);\n if (viewUrl instanceof Element) {\n resultPromise = Promise.resolve(viewUrl);\n }\n else {\n resultPromise = DataManager_1.DataManager.loadAsset(viewUrl).then(htmlText => {\n let doc = (new DOMParser()).parseFromString(htmlText, \"text/html\");\n //Parsing hat nicht geklappt, also per innerHTML\n if (shared_1.Helper.isNull(doc)) {\n doc = document.implementation.createHTMLDocument('');\n doc.body.innerHTML = htmlText;\n }\n //Wrappe Elemente mit einem Span\n let spanElem = document.createElement(\"span\");\n spanElem.classList.add(\"injected-span\");\n return ViewInflater.moveChildren(doc.body, spanElem);\n });\n }\n this.loadingPromises[viewUrl] = resultPromise.then(parentElement => {\n let promises = [];\n let childViews = parentElement.querySelectorAll(\"[data-view]\");\n //lade Kinder-Views\n childViews.forEach(childView => {\n promises.push(ViewInflater.getInstance().load(childView.dataset[\"view\"], parentUrls).then(element => {\n childView.replaceWith(element);\n ViewInflater.replaceWithChildren(element);\n }));\n });\n return Promise.all(promises).then(function () {\n return parentElement;\n });\n }).catch(e => {\n console.error(e);\n this.loadingPromises[viewUrl] = null;\n throw e;\n });\n return this.loadingPromises[viewUrl].then(view => view.cloneNode(true));\n }\n /**\n * Statische Funktion, um Elemente aus einem String zu kreieren\n *\n * @param string\n * @returns {NodeListOf}\n */\n static inflateElementsFromString(string) {\n let template = document.createElement('template');\n template.innerHTML = string;\n return template.content.childNodes;\n }\n /**\n * Kreiert ein Ladesymbol. Evtl entfernen\n *\n * @returns {HTMLDivElement}\n */\n static createLoadingSymbol(loaderClass) {\n let svgNS = \"http://www.w3.org/2000/svg\";\n let loader = document.createElement(\"div\");\n loader.classList.add('loader');\n //LoaderClass darf nicht leer sein, da sonst HTML einen Felher schmeißt\n if (loaderClass) {\n loader.classList.add(loaderClass);\n }\n let svg = document.createElementNS(svgNS, \"svg\");\n svg.setAttribute('viewBox', \"0 0 32 32\");\n svg.setAttribute(\"width\", \"32\");\n svg.setAttribute(\"height\", \"32\");\n let circle = document.createElementNS(svgNS, \"circle\");\n circle.setAttribute(\"class\", \"spinner\");\n circle.setAttribute(\"cx\", \"16\");\n circle.setAttribute(\"cy\", \"16\");\n circle.setAttribute(\"r\", \"14\");\n circle.setAttribute(\"fill\", \"none\");\n svg.appendChild(circle);\n loader.appendChild(svg);\n // let loader = document.createElement(\"div\");\n // loader.appendChild(document.createTextNode(\"LOADING...\"));\n return loader;\n }\n /**\n * Moves the child-Nodes from one element to another\n * @param from\n * @param to\n * @returns {*}\n */\n static moveChildren(from, to) {\n return client_1.ViewHelper.moveChildren(from, to);\n }\n /**\n * Ersetzt ein Element durch seine Kinder (entfernt das Element ohne die Kinder zu entfernen)\n * @param element\n */\n static replaceWithChildren(element) {\n let children = [];\n //Zwischenspeichern der Children, da removeChild die forEach-Schleife durcheinander bringt\n element.childNodes.forEach(child => {\n children.push(child);\n });\n let parent = element.parentElement;\n children.forEach(child => {\n element.removeChild(child);\n parent.insertBefore(child, element);\n });\n element.remove();\n }\n}\nexports.ViewInflater = ViewInflater;\nViewInflater.instance = null;\n//# sourceMappingURL=ViewInflater.js.map","/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nvar Broadcaster = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function Broadcaster(queryRunner) {\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Broadcasts \"BEFORE_INSERT\" event.\n * Before insert event is executed before entity is being inserted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.beforeInsertListeners.length) {\n metadata.beforeInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeInsert) {\n var executionResult = subscriber.beforeInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_UPDATE\" event.\n * Before update event is executed before entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.beforeUpdateListeners.length) {\n metadata.beforeUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeUpdate) {\n var executionResult = subscriber.beforeUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_REMOVE\" event.\n * Before remove event is executed before entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastBeforeRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.beforeRemoveListeners.length) {\n metadata.beforeRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRemove) {\n var executionResult = subscriber.beforeRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_INSERT\" event.\n * After insert event is executed after entity is being persisted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterInsertEvent = function (result, metadata, entity) {\n var _this = this;\n if (entity && metadata.afterInsertListeners.length) {\n metadata.afterInsertListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterInsert) {\n var executionResult = subscriber.afterInsert({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionStart) {\n var executionResult = subscriber.beforeTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_START\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionStartEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionStart) {\n var executionResult = subscriber.afterTransactionStart({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionCommit) {\n var executionResult = subscriber.beforeTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_COMMIT\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionCommitEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionCommit) {\n var executionResult = subscriber.afterTransactionCommit({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"BEFORE_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastBeforeTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.beforeTransactionRollback) {\n var executionResult = subscriber.beforeTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_TRANSACTION_ROLLBACK\" event.\n */\n Broadcaster.prototype.broadcastAfterTransactionRollbackEvent = function (result) {\n var _this = this;\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (subscriber.afterTransactionRollback) {\n var executionResult = subscriber.afterTransactionRollback({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_UPDATE\" event.\n * After update event is executed after entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterUpdateEvent = function (result, metadata, entity, databaseEntity, updatedColumns, updatedRelations) {\n var _this = this;\n if (entity && metadata.afterUpdateListeners.length) {\n metadata.afterUpdateListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterUpdate) {\n var executionResult = subscriber.afterUpdate({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || []\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_REMOVE\" event.\n * After remove event is executed after entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastAfterRemoveEvent = function (result, metadata, entity, databaseEntity) {\n var _this = this;\n if (entity && metadata.afterRemoveListeners.length) {\n metadata.afterRemoveListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRemove) {\n var executionResult = subscriber.afterRemove({\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity)\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n };\n /**\n * Broadcasts \"AFTER_LOAD\" event for all given entities, and their sub-entities.\n * After load event is executed after entity has been loaded from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n Broadcaster.prototype.broadcastLoadEventsForAll = function (result, metadata, entities) {\n var _this = this;\n entities.forEach(function (entity) {\n if (entity instanceof Promise) // todo: check why need this?\n return;\n // collect load events for all children entities that were loaded with the main entity\n if (metadata.relations.length) {\n metadata.relations.forEach(function (relation) {\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))\n return;\n var value = relation.getEntityValue(entity);\n if (value instanceof Object)\n _this.broadcastLoadEventsForAll(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);\n });\n }\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.forEach(function (listener) {\n if (listener.isAllowed(entity)) {\n var executionResult = listener.execute(entity);\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n if (_this.queryRunner.connection.subscribers.length) {\n _this.queryRunner.connection.subscribers.forEach(function (subscriber) {\n if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad) {\n var executionResult = subscriber.afterLoad(entity, {\n connection: _this.queryRunner.connection,\n queryRunner: _this.queryRunner,\n manager: _this.queryRunner.manager,\n entity: entity,\n metadata: metadata\n });\n if (executionResult instanceof Promise)\n result.promises.push(executionResult);\n result.count++;\n }\n });\n }\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Checks if subscriber's methods can be executed by checking if its don't listen to the particular entity,\n * or listens our entity.\n */\n Broadcaster.prototype.isAllowedSubscriber = function (subscriber, target) {\n return !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target);\n };\n return Broadcaster;\n}());\nexport { Broadcaster };\n\n//# sourceMappingURL=Broadcaster.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Matomo = void 0;\nconst js_helper_1 = require(\"js-helper\");\nconst NativeStoragePromise_1 = require(\"../NativeStoragePromise\");\nclass Matomo {\n static init() {\n Matomo.isTrackingPromise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let shouldTrack = yield NativeStoragePromise_1.NativeStoragePromise.getItem(Matomo.LOCAL_STORAGE_KEY, \"1\");\n if (js_helper_1.Helper.isNull(shouldTrack)) {\n shouldTrack = yield Matomo._askIsTracking();\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, shouldTrack);\n }\n else {\n shouldTrack = (shouldTrack === \"1\");\n yield Matomo.setTrack(shouldTrack);\n }\n resolve(shouldTrack);\n }));\n Matomo.isTrackingPromise.then(() => {\n Matomo.push(['trackPageView'], true);\n Matomo.push(['enableLinkTracking'], true);\n Matomo.push(['setTrackerUrl', Matomo.TRACK_SITE + '/piwik.php'], true);\n Matomo.push(['setSiteId', Matomo.SIDE_ID + \"\"], true);\n let d = document, g = d.createElement('script'), s = d.getElementsByTagName('head')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.defer = true;\n g.src = Matomo.TRACK_SITE + '/piwik.js';\n s.appendChild(g);\n });\n }\n static update(title) {\n if (js_helper_1.Helper.nonNull(Matomo.currentUrl)) {\n Matomo.push(['setReferrerUrl', Matomo.currentUrl]);\n }\n Matomo.currentUrl = window.location.pathname + window.location.search;\n Matomo.push(['setCustomUrl', Matomo.currentUrl]);\n Matomo.push(['setDocumentTitle', title]);\n // remove all previously assigned custom variables, requires Matomo (formerly Piwik) 3.0.2\n Matomo.push(['deleteCustomVariables', 'page']);\n Matomo.push(['setGenerationTimeMs', 0]);\n Matomo.push(['trackPageView']);\n // make Matomo aware of newly added content\n var content = document.getElementById('site-content');\n Matomo.push(['MediaAnalytics::scanForMedia', content]);\n Matomo.push(['FormAnalytics::scanForForms', content]);\n Matomo.push(['trackContentImpressionsWithinNode', content]);\n Matomo.push(['enableLinkTracking']);\n }\n static _askIsTracking() {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = new Promise(resolve => {\n Matomo.push([function () {\n resolve(!this[\"isUserOptedOut\"]());\n }]);\n });\n return Matomo.isTrackingPromise;\n });\n }\n static query(method) {\n return __awaiter(this, void 0, void 0, function* () {\n return fetch(Matomo.TRACK_SITE + Matomo.BASE_PATH + method, {\n \"mode\": \"cors\",\n \"credentials\": \"include\",\n }).then(res => res.text()).then(text => (new window[\"DOMParser\"]()).parseFromString(text, \"text/xml\"));\n });\n }\n static getTrackingPromise() {\n return Matomo.isTrackingPromise;\n }\n static setTrack(shouldTrack) {\n return __awaiter(this, void 0, void 0, function* () {\n Matomo.isTrackingPromise = Promise.resolve(shouldTrack);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(Matomo.LOCAL_STORAGE_KEY, (shouldTrack === true) ? \"1\" : \"0\");\n if (shouldTrack) {\n yield Matomo.push([\"forgetUserOptOut\"], true);\n }\n else {\n yield Matomo.push([\"optUserOut\"], true);\n }\n });\n }\n static trackEvent(event, name, label, value) {\n return __awaiter(this, void 0, void 0, function* () {\n let ev = [\"trackEvent\", event, name];\n if (js_helper_1.Helper.isNotNull(label)) {\n ev.push(label);\n }\n if (js_helper_1.Helper.isNotNull(value) && !isNaN(parseFloat(value)) && isFinite(value)) {\n ev.push(value);\n }\n return this.push(ev);\n });\n }\n //TODO Matomo\n static push(arr, force) {\n return __awaiter(this, void 0, void 0, function* () {\n // if (!Array.isArray(arr)) {\n // arr = [arr];\n // }\n // window[\"_paq\"].push(arr);\n });\n }\n}\nexports.Matomo = Matomo;\nMatomo.LOCAL_STORAGE_KEY = \"matomoShouldTrack\";\nMatomo.TRACK_SITE = \"\";\nMatomo.BASE_PATH = \"\";\nMatomo.SIDE_ID = \"1\";\nMatomo.currentUrl = null;\nMatomo.isTrackingPromise = null;\n//# sourceMappingURL=Matomo.js.map","/**\n * View in the database represented in this class.\n */\nvar View = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function View(options) {\n if (options) {\n this.name = options.name;\n this.expression = options.expression;\n this.materialized = !!options.materialized;\n }\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Clones this table to a new table with all properties cloned.\n */\n View.prototype.clone = function () {\n return new View({\n name: this.name,\n expression: this.expression,\n materialized: this.materialized,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates view from a given entity metadata.\n */\n View.create = function (entityMetadata, driver) {\n var options = {\n name: driver.buildTableName(entityMetadata.tableName, entityMetadata.schema, entityMetadata.database),\n expression: entityMetadata.expression,\n materialized: entityMetadata.tableMetadataArgs.materialized\n };\n return new View(options);\n };\n return View;\n}());\nexport { View };\n\n//# sourceMappingURL=View.js.map\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst NotOnlineError_1 = require(\"./DataManager/NotOnlineError\");\n/**\n * Ein Manager, welches das Laden von Resourcen übernimmt.\n */\nclass DataManager {\n /**\n * Diese Funktion sollte anstelle von dem nativen \"fetch\" verwendet werden!\n * Das native Fetch kann keine file://, welches von Cordova unter Android (und whs iOS) verwendet wird\n * Daher wird heir auf XMLHttpRequest zurückgegriffen\n *\n * @param url\n * @param useArrayBuffer\n * @returns {Promise<*>}\n */\n static fetch(url, useArrayBuffer) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n useArrayBuffer = Helper_1.Helper.nonNull(useArrayBuffer, false);\n if (useArrayBuffer) {\n xhr.responseType = \"arraybuffer\";\n }\n xhr.onload = function () {\n resolve(new Response(useArrayBuffer ? xhr.response : xhr.responseText, { status: (xhr.status === 0) ? 200 : xhr.status }));\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n static fetchBlob(url) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(function (resolve, reject) {\n let xhr = new XMLHttpRequest();\n xhr.onload = function (e) {\n resolve(xhr.response);\n };\n xhr.onerror = function (e) {\n console.error(e);\n debugger;\n reject(new NotOnlineError_1.NotOnlineError(\"not-online\", url));\n };\n xhr.open('GET', url);\n xhr.responseType = \"blob\";\n //set headers\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n xhr.setRequestHeader(header, DataManager._additionalHeaders[header]);\n });\n xhr.send(null);\n }).then(res => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n return res;\n }).catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw e;\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET die angegebene URL und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @param useBasePath\n * @returns {Promise<* | void>}\n */\n static load(url, format, useBasePath) {\n return __awaiter(this, void 0, void 0, function* () {\n format = Helper_1.Helper.nonNull(format, true);\n if (format === true) {\n format = \"json\";\n }\n else if (format === false) {\n format = \"text\";\n }\n else if (format !== \"json\" && format !== \"text\") {\n format = \"raw\";\n }\n useBasePath = Helper_1.Helper.nonNull(useBasePath, true);\n if (useBasePath === true) {\n useBasePath = DataManager._basePath;\n }\n else if (typeof useBasePath !== \"string\") {\n useBasePath = \"\";\n }\n url = DataManager.basePath(url, useBasePath);\n return DataManager.fetch(url, format === \"raw\").catch(e => {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n throw new NotOnlineError_1.NotOnlineError(e, url);\n }).then(function (res) {\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(true);\n }\n if (format === \"json\") {\n return res.json();\n }\n else if (format === \"text\") {\n return res.text();\n }\n else {\n return res;\n }\n });\n });\n }\n /**\n * Vereinfachung von Laden von Resourcen.\n * Lädt per GET das angegebene Asset und gibt diese als JSON oder Text zurück\n *\n * @param url\n * @param format\n * @returns {Promise<* | void>}\n */\n static loadAsset(url, format) {\n return __awaiter(this, void 0, void 0, function* () {\n let assetPath = DataManager._assetBasePath;\n if (!url.startsWith(\"/\") && assetPath.length > 0 && !assetPath.endsWith(\"/\")) {\n assetPath += \"/\";\n }\n return this.load(url, Helper_1.Helper.nonNull(format, \"text\"), assetPath);\n });\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQuery(values) {\n let queryStrings = [];\n for (let k in values) {\n queryStrings.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(values[k]));\n }\n return \"?\" + queryStrings.join(\"&\");\n }\n /**\n * Wandelt ein Key-Value-Objekt in einen QueryString um\n *\n * @param values\n * @return {string}\n */\n static buildQueryWithoutNullValues(values) {\n let queryValues = {};\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(values[k])) {\n queryValues[k] = values[k];\n }\n }\n return this.buildQuery(queryValues);\n }\n static send(url, params) {\n return __awaiter(this, void 0, void 0, function* () {\n url = DataManager.basePath(url);\n let headers = {};\n if (!(params instanceof FormData) && typeof params === \"object\") {\n params = JSON.stringify(params);\n headers = {\n \"Content-Type\": \"application/json\"\n };\n }\n Object.keys(DataManager._additionalHeaders).forEach(header => {\n headers[header] = DataManager._additionalHeaders[header];\n });\n return fetch(url, {\n \"credentials\": \"same-origin\",\n \"method\": \"POST\",\n \"headers\": headers,\n \"body\": params,\n }).then(function (res) {\n return res.json();\n }).catch(function (e) {\n debugger;\n console.error(\"error\", e);\n if (DataManager.onlineCallback) {\n DataManager.onlineCallback(false);\n }\n return {\n \"success\": false,\n \"errors\": [\n \"not-online\"\n ]\n };\n });\n });\n }\n static basePath(url, basePath) {\n basePath = Helper_1.Helper.nonNull(basePath, DataManager._basePath);\n return basePath + ((url) ? url : \"\");\n }\n static setHeader(header, value) {\n DataManager._additionalHeaders[header] = value;\n }\n}\nexports.DataManager = DataManager;\nDataManager.onlineCallback = null;\nDataManager._additionalHeaders = {};\nDataManager._basePath = \"\";\nDataManager._assetBasePath = \"\";\n//# sourceMappingURL=DataManager.js.map","/**\n * Database's table exclusion constraint stored in this class.\n */\nvar TableExclusion = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function TableExclusion(options) {\n this.name = options.name;\n this.expression = options.expression;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a new copy of this constraint with exactly same properties.\n */\n TableExclusion.prototype.clone = function () {\n return new TableExclusion({\n name: this.name,\n expression: this.expression,\n });\n };\n // -------------------------------------------------------------------------\n // Static Methods\n // -------------------------------------------------------------------------\n /**\n * Creates exclusions from the exclusion metadata object.\n */\n TableExclusion.create = function (exclusionMetadata) {\n return new TableExclusion({\n name: exclusionMetadata.name,\n expression: exclusionMetadata.expression\n });\n };\n return TableExclusion;\n}());\nexport { TableExclusion };\n\n//# sourceMappingURL=TableExclusion.js.map\n","var ApplyValueTransformers = /** @class */ (function () {\n function ApplyValueTransformers() {\n }\n ApplyValueTransformers.transformFrom = function (transformer, databaseValue) {\n if (Array.isArray(transformer)) {\n var reverseTransformers = transformer.slice().reverse();\n return reverseTransformers.reduce(function (transformedValue, _transformer) {\n return _transformer.from(transformedValue);\n }, databaseValue);\n }\n return transformer.from(databaseValue);\n };\n ApplyValueTransformers.transformTo = function (transformer, entityValue) {\n if (Array.isArray(transformer)) {\n return transformer.reduce(function (transformedValue, _transformer) {\n return _transformer.to(transformedValue);\n }, entityValue);\n }\n return transformer.to(entityValue);\n };\n return ApplyValueTransformers;\n}());\nexport { ApplyValueTransformers };\n\n//# sourceMappingURL=ApplyValueTransformers.js.map\n","var RandomGenerator = /** @class */ (function () {\n function RandomGenerator() {\n }\n /**\n * discuss at: http://locutus.io/php/sha1/\n * original by: Webtoolkit.info (http://www.webtoolkit.info/)\n * improved by: Michael White (http://getsprink.com)\n * improved by: Kevin van Zonneveld (http://kvz.io)\n * input by: Brett Zamir (http://brett-zamir.me)\n * note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then\n * note 1: hashed. If available, we'd recommend using Node's native crypto modules directly\n * note 1: in a steaming fashion for faster and more efficient hashing\n * example 1: sha1('Kevin van Zonneveld')\n * returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'\n */\n RandomGenerator.sha1 = function (str) {\n var _rotLeft = function (n, s) {\n var t4 = (n << s) | (n >>> (32 - s));\n return t4;\n };\n var _cvtHex = function (val) {\n var str = \"\";\n var i;\n var v;\n for (i = 7; i >= 0; i--) {\n v = (val >>> (i * 4)) & 0x0f;\n str += v.toString(16);\n }\n return str;\n };\n var blockstart;\n var i, j;\n var W = new Array(80);\n var H0 = 0x67452301;\n var H1 = 0xEFCDAB89;\n var H2 = 0x98BADCFE;\n var H3 = 0x10325476;\n var H4 = 0xC3D2E1F0;\n var A, B, C, D, E;\n var temp;\n // utf8_encode\n str = /*unescape*/ (encodeURIComponent(str));\n var strLen = str.length;\n var wordArray = [];\n for (i = 0; i < strLen - 3; i += 4) {\n j = str.charCodeAt(i) << 24 |\n str.charCodeAt(i + 1) << 16 |\n str.charCodeAt(i + 2) << 8 |\n str.charCodeAt(i + 3);\n wordArray.push(j);\n }\n switch (strLen % 4) {\n case 0:\n i = 0x080000000;\n break;\n case 1:\n i = str.charCodeAt(strLen - 1) << 24 | 0x0800000;\n break;\n case 2:\n i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000;\n break;\n case 3:\n i = str.charCodeAt(strLen - 3) << 24 |\n str.charCodeAt(strLen - 2) << 16 |\n str.charCodeAt(strLen - 1) <<\n 8 | 0x80;\n break;\n }\n wordArray.push(i);\n while ((wordArray.length % 16) !== 14) {\n wordArray.push(0);\n }\n wordArray.push(strLen >>> 29);\n wordArray.push((strLen << 3) & 0x0ffffffff);\n for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {\n for (i = 0; i < 16; i++) {\n W[i] = wordArray[blockstart + i];\n }\n for (i = 16; i <= 79; i++) {\n W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n }\n A = H0;\n B = H1;\n C = H2;\n D = H3;\n E = H4;\n for (i = 0; i <= 19; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 20; i <= 39; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 40; i <= 59; i++) {\n temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n for (i = 60; i <= 79; i++) {\n temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;\n E = D;\n D = C;\n C = _rotLeft(B, 30);\n B = A;\n A = temp;\n }\n H0 = (H0 + A) & 0x0ffffffff;\n H1 = (H1 + B) & 0x0ffffffff;\n H2 = (H2 + C) & 0x0ffffffff;\n H3 = (H3 + D) & 0x0ffffffff;\n H4 = (H4 + E) & 0x0ffffffff;\n }\n temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4);\n return temp.toLowerCase();\n };\n /**\n * RFC4122 compliant UUID v4 generator.\n */\n RandomGenerator.uuid4 = function () {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c === \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n return RandomGenerator;\n}());\nexport { RandomGenerator };\n\n//# sourceMappingURL=RandomGenerator.js.map\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst defaultMenuTemplate = require(\"../../html/siteTemplates/menuSite.html\");\nconst NavbarFragment_1 = require(\"./Menu/NavbarFragment\");\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Seite benutzt das menuTemplate, welches das ContainerTemplate includiert.\n *\n * Außerdem beinhaltet die MenuSite ein NavbarFragment, wo Menüelemente hinzugefügt werden können\n */\nclass MenuSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für eine MenuSite\n *\n * @param siteManager\n * @param view\n * @param menuTemplate\n */\n constructor(siteManager, view, menuTemplate) {\n super(siteManager, view, Helper_1.Helper.nonNull(menuTemplate, defaultMenuTemplate), \"#site-content\");\n this._navbarFragment = new NavbarFragment_1.NavbarFragment(this);\n this.addFragment(\"#navbar-fragment\", this._navbarFragment);\n }\n getNavbarFragment() {\n return this._navbarFragment;\n }\n /**\n * Während des onConstructs werden die Menüelemente hinzugefügt => aufrufen des onCreateMenu\n *\n * @param constructParameters\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = yield _super.onConstruct.call(this, constructParameters);\n this.onCreateMenu(this._navbarFragment);\n return res;\n });\n }\n onMenuPressed() {\n this._navbarFragment.openMenu();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._navbarFragment.setScrollWidget(this.findBy(\"#main-content-container\"));\n return res;\n });\n }\n /**\n * Überschreibt updateTtle, um Element in der Statusbar zu setzen\n *\n * @protected\n */\n _updateTitle() {\n super._updateTitle();\n if (this._title.element && this._state === Context_1.Context.STATE_RUNNING) {\n this._navbarFragment.setTitleElement(this._title.element);\n }\n }\n /**\n * Überschreiben durch Kinder-Klassen, um ein Menü zu erstellen\n *\n * @param {NavbarFragment} navbar\n */\n onCreateMenu(navbar) { }\n}\nexports.MenuSite = MenuSite;\n//# sourceMappingURL=MenuSite.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when transaction is already started and user tries to run it again.\n */\nvar TransactionAlreadyStartedError = /** @class */ (function (_super) {\n __extends(TransactionAlreadyStartedError, _super);\n function TransactionAlreadyStartedError() {\n var _this = _super.call(this) || this;\n _this.name = \"TransactionAlreadyStartedError\";\n Object.setPrototypeOf(_this, TransactionAlreadyStartedError.prototype);\n _this.message = \"Transaction already started for the given connection, commit current transaction before starting a new one.\";\n return _this;\n }\n return TransactionAlreadyStartedError;\n}(Error));\nexport { TransactionAlreadyStartedError };\n\n//# sourceMappingURL=TransactionAlreadyStartedError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when required driver's package is not installed.\n */\nvar DriverPackageNotInstalledError = /** @class */ (function (_super) {\n __extends(DriverPackageNotInstalledError, _super);\n function DriverPackageNotInstalledError(driverName, packageName) {\n var _this = _super.call(this) || this;\n _this.name = \"DriverPackageNotInstalledError\";\n Object.setPrototypeOf(_this, DriverPackageNotInstalledError.prototype);\n _this.message = driverName + \" package has not been found installed. Try to install it: npm install \" + packageName + \" --save\";\n return _this;\n }\n return DriverPackageNotInstalledError;\n}(Error));\nexport { DriverPackageNotInstalledError };\n\n//# sourceMappingURL=DriverPackageNotInstalledError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build a query with RETURNING / OUTPUT statement,\n * but used database does not support it.\n */\nvar ReturningStatementNotSupportedError = /** @class */ (function (_super) {\n __extends(ReturningStatementNotSupportedError, _super);\n function ReturningStatementNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"ReturningStatementNotSupportedError\";\n Object.setPrototypeOf(_this, ReturningStatementNotSupportedError.prototype);\n _this.message = \"OUTPUT or RETURNING clause only supported by Microsoft SQL Server or PostgreSQL databases.\";\n return _this;\n }\n return ReturningStatementNotSupportedError;\n}(Error));\nexport { ReturningStatementNotSupportedError };\n\n//# sourceMappingURL=ReturningStatementNotSupportedError.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { TransactionAlreadyStartedError } from \"../../error/TransactionAlreadyStartedError\";\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\";\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\";\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\";\nimport { Query } from \"../Query\";\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\";\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { TableCheck } from \"../../schema-builder/table/TableCheck\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar AbstractSqliteQueryRunner = /** @class */ (function (_super) {\n __extends(AbstractSqliteQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function AbstractSqliteQueryRunner() {\n return _super.call(this) || this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n AbstractSqliteQueryRunner.prototype.connect = function () {\n return Promise.resolve(this.driver.databaseConnection);\n };\n /**\n * Releases used database connection.\n * We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.\n */\n AbstractSqliteQueryRunner.prototype.release = function () {\n this.loadedTables = [];\n this.clearSqlMemory();\n return Promise.resolve();\n };\n /**\n * Starts transaction.\n */\n AbstractSqliteQueryRunner.prototype.startTransaction = function (isolationLevel) {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.isTransactionActive)\n throw new TransactionAlreadyStartedError();\n if (!isolationLevel) return [3 /*break*/, 4];\n if (isolationLevel !== \"READ UNCOMMITTED\" && isolationLevel !== \"SERIALIZABLE\") {\n throw new Error(\"SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation\");\n }\n if (!(isolationLevel === \"READ UNCOMMITTED\")) return [3 /*break*/, 2];\n return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = true\")];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, this.query(\"PRAGMA read_uncommitted = false\")];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionStartEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 6];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6:\n this.isTransactionActive = true;\n return [4 /*yield*/, this.query(\"BEGIN TRANSACTION\")];\n case 7:\n _a.sent();\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionStartEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 9];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 8:\n _a.sent();\n _a.label = 9;\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionCommitEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"COMMIT\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionCommitEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n AbstractSqliteQueryRunner.prototype.rollbackTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n var beforeBroadcastResult, afterBroadcastResult;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.isTransactionActive)\n throw new TransactionNotStartedError();\n beforeBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastBeforeTransactionRollbackEvent(beforeBroadcastResult);\n if (!(beforeBroadcastResult.promises.length > 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all(beforeBroadcastResult.promises)];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [4 /*yield*/, this.query(\"ROLLBACK\")];\n case 3:\n _a.sent();\n this.isTransactionActive = false;\n afterBroadcastResult = new BroadcasterResult();\n this.broadcaster.broadcastAfterTransactionRollbackEvent(afterBroadcastResult);\n if (!(afterBroadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(afterBroadcastResult.promises)];\n case 4:\n _a.sent();\n _a.label = 5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Returns raw data stream.\n */\n AbstractSqliteQueryRunner.prototype.stream = function (query, parameters, onEnd, onError) {\n throw new Error(\"Stream is not supported by sqlite driver.\");\n };\n /**\n * Returns all available database names including system databases.\n */\n AbstractSqliteQueryRunner.prototype.getDatabases = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n */\n AbstractSqliteQueryRunner.prototype.getSchemas = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve([])];\n });\n });\n };\n /**\n * Checks if database with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasDatabase = function (database) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(false)];\n });\n });\n };\n /**\n * Checks if schema with the given name exist.\n */\n AbstractSqliteQueryRunner.prototype.hasSchema = function (schema) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"This driver does not support table schemas\");\n });\n });\n };\n /**\n * Checks if table with the given name exist in the database.\n */\n AbstractSqliteQueryRunner.prototype.hasTable = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" = '\" + tableName + \"'\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n result = _a.sent();\n return [2 /*return*/, result.length ? true : false];\n }\n });\n });\n };\n /**\n * Checks if column with the given name exist in the given table.\n */\n AbstractSqliteQueryRunner.prototype.hasColumn = function (tableOrName, columnName) {\n return __awaiter(this, void 0, void 0, function () {\n var tableName, sql, columns;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n sql = \"PRAGMA table_info(\\\"\" + tableName + \"\\\")\";\n return [4 /*yield*/, this.query(sql)];\n case 1:\n columns = _a.sent();\n return [2 /*return*/, !!columns.find(function (column) { return column[\"name\"] === columnName; })];\n }\n });\n });\n };\n /**\n * Creates a new database.\n */\n AbstractSqliteQueryRunner.prototype.createDatabase = function (database, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops database.\n */\n AbstractSqliteQueryRunner.prototype.dropDatabase = function (database, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table schema.\n */\n AbstractSqliteQueryRunner.prototype.createSchema = function (schema, ifNotExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Drops table schema.\n */\n AbstractSqliteQueryRunner.prototype.dropSchema = function (schemaPath, ifExist) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve()];\n });\n });\n };\n /**\n * Creates a new table.\n */\n AbstractSqliteQueryRunner.prototype.createTable = function (table, ifNotExist, createForeignKeys, createIndices) {\n if (ifNotExist === void 0) { ifNotExist = false; }\n if (createForeignKeys === void 0) { createForeignKeys = true; }\n if (createIndices === void 0) { createIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, isTableExist;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n if (!ifNotExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(table)];\n case 1:\n isTableExist = _a.sent();\n if (isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _a.label = 2;\n case 2:\n upQueries.push(this.createTableSql(table, createForeignKeys));\n downQueries.push(this.dropTableSql(table));\n if (createIndices) {\n table.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(table, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n }\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the table.\n */\n AbstractSqliteQueryRunner.prototype.dropTable = function (tableOrName, ifExist, dropForeignKeys, dropIndices) {\n if (dropForeignKeys === void 0) { dropForeignKeys = true; }\n if (dropIndices === void 0) { dropIndices = true; }\n return __awaiter(this, void 0, void 0, function () {\n var isTableExist, createForeignKeys, table, _a, upQueries, downQueries;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!ifExist) return [3 /*break*/, 2];\n return [4 /*yield*/, this.hasTable(tableOrName)];\n case 1:\n isTableExist = _b.sent();\n if (!isTableExist)\n return [2 /*return*/, Promise.resolve()];\n _b.label = 2;\n case 2:\n createForeignKeys = dropForeignKeys;\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 3];\n _a = tableOrName;\n return [3 /*break*/, 5];\n case 3: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 4:\n _a = _b.sent();\n _b.label = 5;\n case 5:\n table = _a;\n upQueries = [];\n downQueries = [];\n if (dropIndices) {\n table.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(table, index));\n });\n }\n upQueries.push(this.dropTableSql(table, ifExist));\n downQueries.push(this.createTableSql(table, createForeignKeys));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 6:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new view.\n */\n AbstractSqliteQueryRunner.prototype.createView = function (view) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n upQueries.push(this.createViewSql(view));\n upQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.dropViewSql(view));\n downQueries.push(this.deleteViewDefinitionSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the view.\n */\n AbstractSqliteQueryRunner.prototype.dropView = function (target) {\n return __awaiter(this, void 0, void 0, function () {\n var viewName, view, upQueries, downQueries;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n viewName = target instanceof View ? target.name : target;\n return [4 /*yield*/, this.getCachedView(viewName)];\n case 1:\n view = _a.sent();\n upQueries = [];\n downQueries = [];\n upQueries.push(this.deleteViewDefinitionSql(view));\n upQueries.push(this.dropViewSql(view));\n downQueries.push(this.insertViewDefinitionSql(view));\n downQueries.push(this.createViewSql(view));\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameTable = function (oldTableOrName, newTableName) {\n return __awaiter(this, void 0, void 0, function () {\n var oldTable, _a, newTable, up, down;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(oldTableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = oldTableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(oldTableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n oldTable = _a;\n newTable = oldTable.clone();\n newTable.name = newTableName;\n up = new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTableName + \"\\\"\");\n down = new Query(\"ALTER TABLE \\\"\" + newTableName + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\");\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n // rename old table;\n oldTable.name = newTable.name;\n // rename unique constraints\n newTable.uniques.forEach(function (unique) {\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);\n });\n // rename foreign key constraints\n newTable.foreignKeys.forEach(function (foreignKey) {\n foreignKey.name = _this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n });\n // rename indices\n newTable.indices.forEach(function (index) {\n index.name = _this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);\n });\n // recreate table with new constraint names\n return [4 /*yield*/, this.recreateTable(newTable, oldTable)];\n case 5:\n // recreate table with new constraint names\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new column from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumn = function (tableOrName, column) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n return [2 /*return*/, this.addColumns(table, [column])];\n }\n });\n });\n };\n /**\n * Creates a new columns from the column in the table.\n */\n AbstractSqliteQueryRunner.prototype.addColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) { return changedTable.addColumn(column); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Renames column in the given table.\n */\n AbstractSqliteQueryRunner.prototype.renameColumn = function (tableOrName, oldTableColumnOrName, newTableColumnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn, newColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n newColumn = undefined;\n if (newTableColumnOrName instanceof TableColumn) {\n newColumn = newTableColumnOrName;\n }\n else {\n newColumn = oldColumn.clone();\n newColumn.name = newTableColumnOrName;\n }\n return [2 /*return*/, this.changeColumn(table, oldColumn, newColumn)];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n */\n AbstractSqliteQueryRunner.prototype.changeColumn = function (tableOrName, oldTableColumnOrName, newColumn) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, oldColumn;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n oldColumn = oldTableColumnOrName instanceof TableColumn ? oldTableColumnOrName : table.columns.find(function (c) { return c.name === oldTableColumnOrName; });\n if (!oldColumn)\n throw new Error(\"Column \\\"\" + oldTableColumnOrName + \"\\\" was not found in the \\\"\" + table.name + \"\\\" table.\");\n return [4 /*yield*/, this.changeColumns(table, [{ oldColumn: oldColumn, newColumn: newColumn }])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Changes a column in the table.\n * Changed column looses all its keys in the db.\n */\n AbstractSqliteQueryRunner.prototype.changeColumns = function (tableOrName, changedColumns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedColumns.forEach(function (changedColumnSet) {\n if (changedColumnSet.newColumn.name !== changedColumnSet.oldColumn.name) {\n changedTable.findColumnUniques(changedColumnSet.oldColumn).forEach(function (unique) {\n unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n unique.columnNames.push(changedColumnSet.newColumn.name);\n unique.name = _this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);\n });\n changedTable.findColumnForeignKeys(changedColumnSet.oldColumn).forEach(function (fk) {\n fk.columnNames.splice(fk.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n fk.columnNames.push(changedColumnSet.newColumn.name);\n fk.name = _this.connection.namingStrategy.foreignKeyName(changedTable, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n });\n changedTable.findColumnIndices(changedColumnSet.oldColumn).forEach(function (index) {\n index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);\n index.columnNames.push(changedColumnSet.newColumn.name);\n index.name = _this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);\n });\n }\n var originalColumn = changedTable.columns.find(function (column) { return column.name === changedColumnSet.oldColumn.name; });\n if (originalColumn)\n changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops column in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumn = function (tableOrName, columnOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, column;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n column = columnOrName instanceof TableColumn ? columnOrName : table.findColumnByName(columnOrName);\n if (!column)\n throw new Error(\"Column \\\"\" + columnOrName + \"\\\" was not found in table \\\"\" + table.name + \"\\\"\");\n return [4 /*yield*/, this.dropColumns(table, [column])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops the columns in the table.\n */\n AbstractSqliteQueryRunner.prototype.dropColumns = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n columns.forEach(function (column) {\n changedTable.removeColumn(column);\n changedTable.findColumnUniques(column).forEach(function (unique) { return changedTable.removeUniqueConstraint(unique); });\n changedTable.findColumnIndices(column).forEach(function (index) { return changedTable.removeIndex(index); });\n changedTable.findColumnForeignKeys(column).forEach(function (fk) { return changedTable.removeForeignKey(fk); });\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // remove column and its constraints from original table.\n columns.forEach(function (column) {\n table.removeColumn(column);\n table.findColumnUniques(column).forEach(function (unique) { return table.removeUniqueConstraint(unique); });\n table.findColumnIndices(column).forEach(function (index) { return table.removeIndex(index); });\n table.findColumnForeignKeys(column).forEach(function (fk) { return table.removeForeignKey(fk); });\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new primary key.\n */\n AbstractSqliteQueryRunner.prototype.createPrimaryKey = function (tableOrName, columnNames) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark columns as primary in original table\n table.columns.forEach(function (column) {\n if (columnNames.find(function (columnName) { return columnName === column.name; }))\n column.isPrimary = true;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates composite primary keys.\n */\n AbstractSqliteQueryRunner.prototype.updatePrimaryKeys = function (tableOrName, columns) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.resolve()];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a primary key.\n */\n AbstractSqliteQueryRunner.prototype.dropPrimaryKey = function (tableOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n changedTable.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n // mark primary columns as non-primary in original table\n table.primaryColumns.forEach(function (column) {\n column.isPrimary = false;\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraint = function (tableOrName, uniqueConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createUniqueConstraints(tableOrName, [uniqueConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.createUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.addUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an unique constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraint = function (tableOrName, uniqueOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, uniqueConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n uniqueConstraint = uniqueOrName instanceof TableUnique ? uniqueOrName : table.uniques.find(function (u) { return u.name === uniqueOrName; });\n if (!uniqueConstraint)\n throw new Error(\"Supplied unique constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropUniqueConstraints(table, [uniqueConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates an unique constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropUniqueConstraints = function (tableOrName, uniqueConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n uniqueConstraints.forEach(function (uniqueConstraint) { return changedTable.removeUniqueConstraint(uniqueConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraint.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraint = function (tableOrName, checkConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createCheckConstraints(tableOrName, [checkConstraint])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates new check constraints.\n */\n AbstractSqliteQueryRunner.prototype.createCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.addCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraint = function (tableOrName, checkOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, checkConstraint;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n checkConstraint = checkOrName instanceof TableCheck ? checkOrName : table.checks.find(function (c) { return c.name === checkOrName; });\n if (!checkConstraint)\n throw new Error(\"Supplied check constraint was not found in table \" + table.name);\n return [4 /*yield*/, this.dropCheckConstraints(table, [checkConstraint])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops check constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropCheckConstraints = function (tableOrName, checkConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n checkConstraints.forEach(function (checkConstraint) { return changedTable.removeCheckConstraint(checkConstraint); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraint = function (tableOrName, exclusionConstraint) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.createExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraint.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraint = function (tableOrName, exclusionOrName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Drops exclusion constraints.\n */\n AbstractSqliteQueryRunner.prototype.dropExclusionConstraints = function (tableOrName, exclusionConstraints) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error(\"Sqlite does not support exclusion constraints.\");\n });\n });\n };\n /**\n * Creates a new foreign key.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKey = function (tableOrName, foreignKey) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.createForeignKeys(tableOrName, [foreignKey])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new foreign keys.\n */\n AbstractSqliteQueryRunner.prototype.createForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.addForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign key from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKey = function (tableOrName, foreignKeyOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, foreignKey;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n foreignKey = foreignKeyOrName instanceof TableForeignKey ? foreignKeyOrName : table.foreignKeys.find(function (fk) { return fk.name === foreignKeyOrName; });\n if (!foreignKey)\n throw new Error(\"Supplied foreign key was not found in table \" + table.name);\n return [4 /*yield*/, this.dropForeignKeys(tableOrName, [foreignKey])];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops a foreign keys from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropForeignKeys = function (tableOrName, foreignKeys) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, changedTable;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n changedTable = table.clone();\n foreignKeys.forEach(function (foreignKey) { return changedTable.removeForeignKey(foreignKey); });\n return [4 /*yield*/, this.recreateTable(changedTable, table)];\n case 4:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new index.\n */\n AbstractSqliteQueryRunner.prototype.createIndex = function (tableOrName, index) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = this.connection.namingStrategy.indexName(table.name, index.columnNames, index.where);\n up = this.createIndexSql(table, index);\n down = this.dropIndexSql(index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.addIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Creates a new indices\n */\n AbstractSqliteQueryRunner.prototype.createIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.createIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an index from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndex = function (tableOrName, indexOrName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, _a, index, up, down;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(tableOrName instanceof Table)) return [3 /*break*/, 1];\n _a = tableOrName;\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, this.getCachedTable(tableOrName)];\n case 2:\n _a = _b.sent();\n _b.label = 3;\n case 3:\n table = _a;\n index = indexOrName instanceof TableIndex ? indexOrName : table.indices.find(function (i) { return i.name === indexOrName; });\n if (!index)\n throw new Error(\"Supplied index was not found in table \" + table.name);\n up = this.dropIndexSql(index);\n down = this.createIndexSql(table, index);\n return [4 /*yield*/, this.executeQueries(up, down)];\n case 4:\n _b.sent();\n table.removeIndex(index);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Drops an indices from the table.\n */\n AbstractSqliteQueryRunner.prototype.dropIndices = function (tableOrName, indices) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promises = indices.map(function (index) { return _this.dropIndex(tableOrName, index); });\n return [4 /*yield*/, Promise.all(promises)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n */\n AbstractSqliteQueryRunner.prototype.clearTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"DELETE FROM \\\"\" + tableName + \"\\\"\")];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Removes all tables from the currently connected database.\n */\n AbstractSqliteQueryRunner.prototype.clearDatabase = function () {\n return __awaiter(this, void 0, void 0, function () {\n var selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = OFF;\")];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.startTransaction()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n _a.trys.push([3, 9, 14, 16]);\n selectViewDropsQuery = \"SELECT 'DROP VIEW \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'view'\";\n return [4 /*yield*/, this.query(selectViewDropsQuery)];\n case 4:\n dropViewQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 5:\n _a.sent();\n selectTableDropsQuery = \"SELECT 'DROP TABLE \\\"' || name || '\\\";' as query FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" != 'sqlite_sequence'\";\n return [4 /*yield*/, this.query(selectTableDropsQuery)];\n case 6:\n dropTableQueries = _a.sent();\n return [4 /*yield*/, Promise.all(dropTableQueries.map(function (q) { return _this.query(q[\"query\"]); }))];\n case 7:\n _a.sent();\n return [4 /*yield*/, this.commitTransaction()];\n case 8:\n _a.sent();\n return [3 /*break*/, 16];\n case 9:\n error_1 = _a.sent();\n _a.label = 10;\n case 10:\n _a.trys.push([10, 12, , 13]);\n return [4 /*yield*/, this.rollbackTransaction()];\n case 11:\n _a.sent();\n return [3 /*break*/, 13];\n case 12:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 13];\n case 13: throw error_1;\n case 14: return [4 /*yield*/, this.query(\"PRAGMA foreign_keys = ON;\")];\n case 15:\n _a.sent();\n return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n AbstractSqliteQueryRunner.prototype.loadViews = function (viewNames) {\n return __awaiter(this, void 0, void 0, function () {\n var hasTable, viewNamesString, query, dbViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.hasTable(this.getTypeormMetadataTableName())];\n case 1:\n hasTable = _a.sent();\n if (!hasTable)\n return [2 /*return*/, Promise.resolve([])];\n viewNamesString = viewNames.map(function (name) { return \"'\" + name + \"'\"; }).join(\", \");\n query = \"SELECT \\\"t\\\".* FROM \\\"\" + this.getTypeormMetadataTableName() + \"\\\" \\\"t\\\" INNER JOIN \\\"sqlite_master\\\" s ON \\\"s\\\".\\\"name\\\" = \\\"t\\\".\\\"name\\\" AND \\\"s\\\".\\\"type\\\" = 'view' WHERE \\\"t\\\".\\\"type\\\" = 'VIEW'\";\n if (viewNamesString.length > 0)\n query += \" AND \\\"t\\\".\\\"name\\\" IN (\" + viewNamesString + \")\";\n return [4 /*yield*/, this.query(query)];\n case 2:\n dbViews = _a.sent();\n return [2 /*return*/, dbViews.map(function (dbView) {\n var view = new View();\n view.name = dbView[\"name\"];\n view.expression = dbView[\"value\"];\n return view;\n })];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n */\n AbstractSqliteQueryRunner.prototype.loadTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var tableNamesString, dbTables, dbIndicesDef;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // if no tables given then no need to proceed\n if (!tableNames || !tableNames.length)\n return [2 /*return*/, []];\n tableNamesString = tableNames.map(function (tableName) { return \"'\" + tableName + \"'\"; }).join(\", \");\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'table' AND \\\"name\\\" IN (\" + tableNamesString + \")\")];\n case 1:\n dbTables = _a.sent();\n return [4 /*yield*/, this.query(\"SELECT * FROM \\\"sqlite_master\\\" WHERE \\\"type\\\" = 'index' AND \\\"tbl_name\\\" IN (\" + tableNamesString + \")\")];\n case 2:\n dbIndicesDef = _a.sent();\n // if tables were not found in the db, no need to proceed\n if (!dbTables || !dbTables.length)\n return [2 /*return*/, []];\n // create table schemas for loaded tables\n return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return __awaiter(_this, void 0, void 0, function () {\n var table, sql, _a, dbColumns, dbIndices, dbForeignKeys, autoIncrementColumnName, tableSql, autoIncrementIndex, comma, bracket, tableForeignKeyConstraints, tableUniquePromises, _b, result, regexp, indicesPromises, indices;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n table = new Table({ name: dbTable[\"name\"] });\n sql = dbTable[\"sql\"];\n return [4 /*yield*/, Promise.all([\n this.query(\"PRAGMA table_info(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA index_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n this.query(\"PRAGMA foreign_key_list(\\\"\" + dbTable[\"name\"] + \"\\\")\"),\n ])];\n case 1:\n _a = __read.apply(void 0, [_c.sent(), 3]), dbColumns = _a[0], dbIndices = _a[1], dbForeignKeys = _a[2];\n autoIncrementColumnName = undefined;\n tableSql = dbTable[\"sql\"];\n autoIncrementIndex = tableSql.toUpperCase().indexOf(\"AUTOINCREMENT\");\n if (autoIncrementIndex !== -1) {\n autoIncrementColumnName = tableSql.substr(0, autoIncrementIndex);\n comma = autoIncrementColumnName.lastIndexOf(\",\");\n bracket = autoIncrementColumnName.lastIndexOf(\"(\");\n if (comma !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(comma);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n else if (bracket !== -1) {\n autoIncrementColumnName = autoIncrementColumnName.substr(bracket);\n autoIncrementColumnName = autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf(\"\\\"\"));\n autoIncrementColumnName = autoIncrementColumnName.substr(autoIncrementColumnName.indexOf(\"\\\"\") + 1);\n }\n }\n // create columns from the loaded columns\n table.columns = dbColumns.map(function (dbColumn) {\n var tableColumn = new TableColumn();\n tableColumn.name = dbColumn[\"name\"];\n tableColumn.type = dbColumn[\"type\"].toLowerCase();\n tableColumn.default = dbColumn[\"dflt_value\"] !== null && dbColumn[\"dflt_value\"] !== undefined ? dbColumn[\"dflt_value\"] : undefined;\n tableColumn.isNullable = dbColumn[\"notnull\"] === 0;\n // primary keys are numbered starting with 1, columns that aren't primary keys are marked with 0\n tableColumn.isPrimary = dbColumn[\"pk\"] > 0;\n tableColumn.comment = \"\"; // SQLite does not support column comments\n tableColumn.isGenerated = autoIncrementColumnName === dbColumn[\"name\"];\n if (tableColumn.isGenerated) {\n tableColumn.generationStrategy = \"increment\";\n }\n if (tableColumn.type === \"varchar\") {\n // Check if this is an enum\n var enumMatch = sql.match(new RegExp(\"\\\"(\" + tableColumn.name + \")\\\" varchar CHECK\\\\s*\\\\(\\\\s*\\\\1\\\\s+IN\\\\s*\\\\(('[^']+'(?:\\\\s*,\\\\s*'[^']+')+)\\\\s*\\\\)\\\\s*\\\\)\"));\n if (enumMatch) {\n // This is an enum\n tableColumn.enum = enumMatch[2].substr(1, enumMatch[2].length - 2).split(\"','\");\n }\n }\n // parse datatype and attempt to retrieve length, precision and scale\n var pos = tableColumn.type.indexOf(\"(\");\n if (pos !== -1) {\n var fullType = tableColumn.type;\n var dataType_1 = fullType.substr(0, pos);\n if (!!_this.driver.withLengthColumnTypes.find(function (col) { return col === dataType_1; })) {\n var len = parseInt(fullType.substring(pos + 1, fullType.length - 1));\n if (len) {\n tableColumn.length = len.toString();\n tableColumn.type = dataType_1; // remove the length part from the datatype\n }\n }\n if (!!_this.driver.withPrecisionColumnTypes.find(function (col) { return col === dataType_1; })) {\n var re = new RegExp(\"^\" + dataType_1 + \"\\\\((\\\\d+),?\\\\s?(\\\\d+)?\\\\)\");\n var matches = fullType.match(re);\n if (matches && matches[1]) {\n tableColumn.precision = +matches[1];\n }\n if (!!_this.driver.withScaleColumnTypes.find(function (col) { return col === dataType_1; })) {\n if (matches && matches[2]) {\n tableColumn.scale = +matches[2];\n }\n }\n tableColumn.type = dataType_1; // remove the precision/scale part from the datatype\n }\n }\n return tableColumn;\n });\n tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, function (dbForeignKey) { return dbForeignKey[\"id\"]; });\n table.foreignKeys = tableForeignKeyConstraints.map(function (foreignKey) {\n var ownForeignKeys = dbForeignKeys.filter(function (dbForeignKey) { return dbForeignKey[\"id\"] === foreignKey[\"id\"] && dbForeignKey[\"table\"] === foreignKey[\"table\"]; });\n var columnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"from\"]; });\n var referencedColumnNames = ownForeignKeys.map(function (dbForeignKey) { return dbForeignKey[\"to\"]; });\n // build foreign key name, because we can not get it directly.\n var fkName = _this.connection.namingStrategy.foreignKeyName(table, columnNames, foreignKey.referencedTableName, foreignKey.referencedColumnNames);\n return new TableForeignKey({\n name: fkName,\n columnNames: columnNames,\n referencedTableName: foreignKey[\"table\"],\n referencedColumnNames: referencedColumnNames,\n onDelete: foreignKey[\"on_delete\"],\n onUpdate: foreignKey[\"on_update\"]\n });\n });\n tableUniquePromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"u\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; })\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var dbIndex, indexInfos, indexColumns, column;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n if (indexColumns.length === 1) {\n column = table.columns.find(function (column) {\n return !!indexColumns.find(function (indexColumn) { return indexColumn === column.name; });\n });\n if (column)\n column.isUnique = true;\n }\n // Sqlite does not store unique constraint name, so we generate its name manually.\n return [2 /*return*/, new TableUnique({\n name: this.connection.namingStrategy.uniqueConstraintName(table, indexColumns),\n columnNames: indexColumns\n })];\n }\n });\n }); });\n _b = table;\n return [4 /*yield*/, Promise.all(tableUniquePromises)];\n case 2:\n _b.uniques = (_c.sent());\n regexp = /CONSTRAINT \"([^\"]*)\" CHECK (\\(.*?\\))([,]|[)]$)/g;\n while (((result = regexp.exec(sql)) !== null)) {\n table.checks.push(new TableCheck({ name: result[1], expression: result[2] }));\n }\n indicesPromises = dbIndices\n .filter(function (dbIndex) { return dbIndex[\"origin\"] === \"c\"; })\n .map(function (dbIndex) { return dbIndex[\"name\"]; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; }) // unqiue\n .map(function (dbIndexName) { return __awaiter(_this, void 0, void 0, function () {\n var indexDef, condition, dbIndex, indexInfos, indexColumns, isUnique;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n indexDef = dbIndicesDef.find(function (dbIndexDef) { return dbIndexDef[\"name\"] === dbIndexName; });\n condition = /WHERE (.*)/.exec(indexDef[\"sql\"]);\n dbIndex = dbIndices.find(function (dbIndex) { return dbIndex[\"name\"] === dbIndexName; });\n return [4 /*yield*/, this.query(\"PRAGMA index_info(\\\"\" + dbIndex[\"name\"] + \"\\\")\")];\n case 1:\n indexInfos = _a.sent();\n indexColumns = indexInfos\n .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1[\"seqno\"]) - parseInt(indexInfo2[\"seqno\"]); })\n .map(function (indexInfo) { return indexInfo[\"name\"]; });\n isUnique = dbIndex[\"unique\"] === \"1\" || dbIndex[\"unique\"] === 1;\n return [2 /*return*/, new TableIndex({\n table: table,\n name: dbIndex[\"name\"],\n columnNames: indexColumns,\n isUnique: isUnique,\n where: condition ? condition[1] : undefined\n })];\n }\n });\n }); });\n return [4 /*yield*/, Promise.all(indicesPromises)];\n case 3:\n indices = _c.sent();\n table.indices = indices.filter(function (index) { return !!index; });\n return [2 /*return*/, table];\n }\n });\n }); }))];\n }\n });\n });\n };\n /**\n * Builds create table sql.\n */\n AbstractSqliteQueryRunner.prototype.createTableSql = function (table, createForeignKeys) {\n var _this = this;\n var primaryColumns = table.columns.filter(function (column) { return column.isPrimary; });\n var hasAutoIncrement = primaryColumns.find(function (column) { return column.isGenerated && column.generationStrategy === \"increment\"; });\n var skipPrimary = primaryColumns.length > 1;\n if (skipPrimary && hasAutoIncrement)\n throw new Error(\"Sqlite does not support AUTOINCREMENT on composite primary key\");\n var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(column, skipPrimary); }).join(\", \");\n var sql = \"CREATE TABLE \\\"\" + table.name + \"\\\" (\" + columnDefinitions;\n // need for `addColumn()` method, because it recreates table.\n table.columns\n .filter(function (column) { return column.isUnique; })\n .forEach(function (column) {\n var isUniqueExist = table.uniques.some(function (unique) { return unique.columnNames.length === 1 && unique.columnNames[0] === column.name; });\n if (!isUniqueExist)\n table.uniques.push(new TableUnique({\n name: _this.connection.namingStrategy.uniqueConstraintName(table.name, [column.name]),\n columnNames: [column.name]\n }));\n });\n if (table.uniques.length > 0) {\n var uniquesSql = table.uniques.map(function (unique) {\n var uniqueName = unique.name ? unique.name : _this.connection.namingStrategy.uniqueConstraintName(table.name, unique.columnNames);\n var columnNames = unique.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return \"CONSTRAINT \\\"\" + uniqueName + \"\\\" UNIQUE (\" + columnNames + \")\";\n }).join(\", \");\n sql += \", \" + uniquesSql;\n }\n if (table.checks.length > 0) {\n var checksSql = table.checks.map(function (check) {\n var checkName = check.name ? check.name : _this.connection.namingStrategy.checkConstraintName(table.name, check.expression);\n return \"CONSTRAINT \\\"\" + checkName + \"\\\" CHECK (\" + check.expression + \")\";\n }).join(\", \");\n sql += \", \" + checksSql;\n }\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n var foreignKeysSql = table.foreignKeys.map(function (fk) {\n var columnNames = fk.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n if (!fk.name)\n fk.name = _this.connection.namingStrategy.foreignKeyName(table.name, fk.columnNames, fk.referencedTableName, fk.referencedColumnNames);\n var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n var constraint = \"CONSTRAINT \\\"\" + fk.name + \"\\\" FOREIGN KEY (\" + columnNames + \") REFERENCES \\\"\" + fk.referencedTableName + \"\\\" (\" + referencedColumnNames + \")\";\n if (fk.onDelete)\n constraint += \" ON DELETE \" + fk.onDelete;\n if (fk.onUpdate)\n constraint += \" ON UPDATE \" + fk.onUpdate;\n return constraint;\n }).join(\", \");\n sql += \", \" + foreignKeysSql;\n }\n if (primaryColumns.length > 1) {\n var columnNames = primaryColumns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n sql += \", PRIMARY KEY (\" + columnNames + \")\";\n }\n sql += \")\";\n var tableMetadata = this.connection.entityMetadatas.find(function (metadata) { return metadata.tableName === table.name; });\n if (tableMetadata && tableMetadata.withoutRowid) {\n sql += \" WITHOUT ROWID\";\n }\n return new Query(sql);\n };\n /**\n * Builds drop table sql.\n */\n AbstractSqliteQueryRunner.prototype.dropTableSql = function (tableOrName, ifExist) {\n var tableName = tableOrName instanceof Table ? tableOrName.name : tableOrName;\n var query = ifExist ? \"DROP TABLE IF EXISTS \\\"\" + tableName + \"\\\"\" : \"DROP TABLE \\\"\" + tableName + \"\\\"\";\n return new Query(query);\n };\n AbstractSqliteQueryRunner.prototype.createViewSql = function (view) {\n if (typeof view.expression === \"string\") {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression);\n }\n else {\n return new Query(\"CREATE VIEW \\\"\" + view.name + \"\\\" AS \" + view.expression(this.connection).getQuery());\n }\n };\n AbstractSqliteQueryRunner.prototype.insertViewDefinitionSql = function (view) {\n var expression = typeof view.expression === \"string\" ? view.expression.trim() : view.expression(this.connection).getQuery();\n var _a = __read(this.connection.createQueryBuilder()\n .insert()\n .into(this.getTypeormMetadataTableName())\n .values({ type: \"VIEW\", name: view.name, value: expression })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds drop view sql.\n */\n AbstractSqliteQueryRunner.prototype.dropViewSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n return new Query(\"DROP VIEW \\\"\" + viewName + \"\\\"\");\n };\n /**\n * Builds remove view sql.\n */\n AbstractSqliteQueryRunner.prototype.deleteViewDefinitionSql = function (viewOrPath) {\n var viewName = viewOrPath instanceof View ? viewOrPath.name : viewOrPath;\n var qb = this.connection.createQueryBuilder();\n var _a = __read(qb.delete()\n .from(this.getTypeormMetadataTableName())\n .where(qb.escape(\"type\") + \" = 'VIEW'\")\n .andWhere(qb.escape(\"name\") + \" = :name\", { name: viewName })\n .getQueryAndParameters(), 2), query = _a[0], parameters = _a[1];\n return new Query(query, parameters);\n };\n /**\n * Builds create index sql.\n */\n AbstractSqliteQueryRunner.prototype.createIndexSql = function (table, index) {\n var columns = index.columnNames.map(function (columnName) { return \"\\\"\" + columnName + \"\\\"\"; }).join(\", \");\n return new Query(\"CREATE \" + (index.isUnique ? \"UNIQUE \" : \"\") + \"INDEX \\\"\" + index.name + \"\\\" ON \\\"\" + table.name + \"\\\" (\" + columns + \") \" + (index.where ? \"WHERE \" + index.where : \"\"));\n };\n /**\n * Builds drop index sql.\n */\n AbstractSqliteQueryRunner.prototype.dropIndexSql = function (indexOrName) {\n var indexName = indexOrName instanceof TableIndex ? indexOrName.name : indexOrName;\n return new Query(\"DROP INDEX \\\"\" + indexName + \"\\\"\");\n };\n /**\n * Builds a query for create column.\n */\n AbstractSqliteQueryRunner.prototype.buildCreateColumnSql = function (column, skipPrimary) {\n var c = \"\\\"\" + column.name + \"\\\"\";\n if (column instanceof ColumnMetadata) {\n c += \" \" + this.driver.normalizeType(column);\n }\n else {\n c += \" \" + this.connection.driver.createFullType(column);\n }\n if (column.enum)\n c += \" CHECK( \" + column.name + \" IN (\" + column.enum.map(function (val) { return \"'\" + val + \"'\"; }).join(\",\") + \") )\";\n if (column.isPrimary && !skipPrimary)\n c += \" PRIMARY KEY\";\n if (column.isGenerated === true && column.generationStrategy === \"increment\") // don't use skipPrimary here since updates can update already exist primary without auto inc.\n c += \" AUTOINCREMENT\";\n if (column.collation)\n c += \" COLLATE \" + column.collation;\n if (column.isNullable !== true)\n c += \" NOT NULL\";\n if (column.default !== undefined && column.default !== null)\n c += \" DEFAULT (\" + column.default + \")\";\n return c;\n };\n AbstractSqliteQueryRunner.prototype.recreateTable = function (newTable, oldTable, migrateData) {\n if (migrateData === void 0) { migrateData = true; }\n return __awaiter(this, void 0, void 0, function () {\n var upQueries, downQueries, newColumnNames, oldColumnNames;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n upQueries = [];\n downQueries = [];\n // drop old table indices\n oldTable.indices.forEach(function (index) {\n upQueries.push(_this.dropIndexSql(index));\n downQueries.push(_this.createIndexSql(oldTable, index));\n });\n // change table name into 'temporary_table'\n newTable.name = \"temporary_\" + newTable.name;\n // create new table\n upQueries.push(this.createTableSql(newTable, true));\n downQueries.push(this.dropTableSql(newTable));\n // migrate all data from the old table into new table\n if (migrateData) {\n newColumnNames = newTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n oldColumnNames = oldTable.columns.map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n if (oldTable.columns.length < newTable.columns.length) {\n newColumnNames = newTable.columns.filter(function (column) {\n return oldTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n else if (oldTable.columns.length > newTable.columns.length) {\n oldColumnNames = oldTable.columns.filter(function (column) {\n return newTable.columns.find(function (c) { return c.name === column.name; });\n }).map(function (column) { return \"\\\"\" + column.name + \"\\\"\"; }).join(\", \");\n }\n upQueries.push(new Query(\"INSERT INTO \\\"\" + newTable.name + \"\\\"(\" + newColumnNames + \") SELECT \" + oldColumnNames + \" FROM \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"INSERT INTO \\\"\" + oldTable.name + \"\\\"(\" + oldColumnNames + \") SELECT \" + newColumnNames + \" FROM \\\"\" + newTable.name + \"\\\"\"));\n }\n // drop old table\n upQueries.push(this.dropTableSql(oldTable));\n downQueries.push(this.createTableSql(oldTable, true));\n // rename old table\n upQueries.push(new Query(\"ALTER TABLE \\\"\" + newTable.name + \"\\\" RENAME TO \\\"\" + oldTable.name + \"\\\"\"));\n downQueries.push(new Query(\"ALTER TABLE \\\"\" + oldTable.name + \"\\\" RENAME TO \\\"\" + newTable.name + \"\\\"\"));\n newTable.name = oldTable.name;\n // recreate table indices\n newTable.indices.forEach(function (index) {\n // new index may be passed without name. In this case we generate index name manually.\n if (!index.name)\n index.name = _this.connection.namingStrategy.indexName(newTable.name, index.columnNames, index.where);\n upQueries.push(_this.createIndexSql(newTable, index));\n downQueries.push(_this.dropIndexSql(index));\n });\n return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];\n case 1:\n _a.sent();\n this.replaceCachedTable(oldTable, newTable);\n return [2 /*return*/];\n }\n });\n });\n };\n return AbstractSqliteQueryRunner;\n}(BaseQueryRunner));\nexport { AbstractSqliteQueryRunner };\n\n//# sourceMappingURL=AbstractSqliteQueryRunner.js.map\n","/**\n * Interface for entity metadata mappings stored inside \"schemas\" instead of models decorated by decorators.\n */\nvar EntitySchema = /** @class */ (function () {\n function EntitySchema(options) {\n this.options = options;\n }\n return EntitySchema;\n}());\nexport { EntitySchema };\n\n//# sourceMappingURL=EntitySchema.js.map\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncBaseModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass EasySyncBaseModel extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this._delegate = null;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.version = 1;\n this.deleted = false;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n obj[attribute] = this[attribute];\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"createdAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"updatedAt\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE\n };\n columns[\"version\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n };\n columns[\"deleted\"] = {\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN\n };\n return columns;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (shared_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version && jsonObject.version !== 0) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns(entities[index]);\n this._handleRelations(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n static prepareSync(entities) {\n return entities;\n }\n}\nexports.EasySyncBaseModel = EasySyncBaseModel;\nEasySyncBaseModel.delegateClass = null;\nEasySyncBaseModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncBaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractFragment = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\n/**\n * Ein Fragment ist ein TeilView einer Ansicht.\n */\nclass AbstractFragment extends Context_1.Context {\n /**\n * Erstellt ein neues Fragment\n *\n * @param site\n * @param view\n */\n constructor(site, view) {\n super(view);\n this._site = site;\n this._viewQuery = null;\n this._active = true;\n }\n /**\n * Gibt die zugehörige Seite zurück\n *\n * @returns\n */\n getSite() {\n if (this._site instanceof AbstractFragment) {\n return this._site.getSite();\n }\n return this._site;\n }\n startSite(site, args) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.startSite(site, args);\n });\n }\n /**\n * Gibt zurück, ob das Fragment aktiv ist. Wenn nicht, wird es in der Seite nicht angezeigt\n *\n * @returns {boolean}\n */\n isActive() {\n return this._active;\n }\n setViewQuery(query) {\n this._viewQuery = query;\n }\n getViewQuery() {\n return this._viewQuery;\n }\n setActive(active) {\n this._active = active;\n if (Helper_1.Helper.isNotNull(this._view)) {\n if (active) {\n this._view.classList.remove(\"hidden\");\n }\n else {\n this._view.classList.add(\"hidden\");\n }\n }\n }\n}\nexports.AbstractFragment = AbstractFragment;\n//# sourceMappingURL=AbstractFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuAction = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Container für verschiedene Eigenschaften\n */\nclass MenuAction {\n /**\n * Erstellt eine MenuAction.\n * Außer name und action ist alles mit Default-werten vorbelegt\n *\n * @param name\n * @param action\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(name, action, showFor, order, icon) {\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._copies = [];\n this._menu = null;\n this._name = name;\n this._action = action;\n this._showFor = Helper_1.Helper.nonNull(showFor, MenuAction.SHOW_FOR_MEDIUM);\n this._order = Helper_1.Helper.nonNull(order, 1000);\n this._icon = icon;\n this._id = MenuAction.lastId++;\n this._liClass = \"\";\n this._shouldTranslate = true;\n this._visible = true;\n this._activated = true;\n this._menu = null;\n this._copies = [];\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new MenuAction());\n copiedAction._name = this._name;\n copiedAction._action = this._action;\n copiedAction._showFor = this._showFor;\n copiedAction._order = this._order;\n copiedAction._liClass = this._liClass;\n copiedAction._shouldTranslate = this._shouldTranslate;\n copiedAction._visible = this._visible;\n copiedAction._activated = this._activated;\n copiedAction._icon = this._icon;\n copiedAction._id = MenuAction.lastId++;\n this._copies.push(copiedAction);\n return copiedAction;\n // return new MenuActionSlave(this);\n }\n // _triggerCopies(fn, args){\n // this._copies.forEach(copy => {\n // copy[fn].apply(copy, args);\n // })\n // }\n /**\n * Sorgt dafür, dass die Action neu gezeichnet wird\n */\n redraw() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.redrawAction(this);\n }\n this._copies.forEach(copy => copy.redraw());\n }\n /**\n * Sorgt dafür, dass die ActionElemente geupdatet wird\n */\n update() {\n this._menu.updateAction(this);\n this._copies.forEach(copy => copy.update());\n }\n /**\n * Gibt die Order der MenuAction zurück. Die Order bestimmt die Reihenfolge in der die Elemente angezeigt werden.\n * Je kleiner die Order, desto weiter rechts/oben werden diese angezeigt\n *\n * @returns {*}\n */\n getOrder() {\n return this._order;\n }\n /**\n * Gibt zurück, ob die MenuAction aktiv ist\n *\n * @returns {boolean}\n */\n isActivated() {\n return this._activated;\n }\n /**\n * Gibt an, ob der Name übersetzt werden soll\n *\n * @returns {boolean}\n */\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n setShouldTranslate(shouldTranslate) {\n this._shouldTranslate = (shouldTranslate === true);\n this.redraw();\n }\n setVisibility(visibility) {\n this._visible = visibility;\n this.redraw();\n this._copies.forEach(copy => copy.setVisibility(visibility));\n }\n /**\n * Gibt an, ob die MenuAction sichtbar ist\n *\n * @returns {boolean}\n */\n isVisible() {\n return this._visible;\n }\n /**\n * Gibt den Namen zurück\n *\n * @returns {*}\n */\n getName() {\n return this._name;\n }\n setName(name) {\n this._name = name;\n this.redraw();\n }\n /**\n * Gibt die Action, welche beim Click ausgeführt werden soll zurück\n * @returns {string|function}\n */\n getAction() {\n return this._action;\n }\n /**\n * Gibt die ID der MenuAction zurück\n * @returns {number}\n */\n getId() {\n return this._id;\n }\n /**\n * Gibt das Icon der MenuAction zurück\n * @returns {string|null}\n */\n getIcon() {\n return this._icon;\n }\n setIcon(icon) {\n this._icon = icon;\n this.redraw();\n }\n /**\n * Gibt die View-Klasse der Action zurück\n * @returns {string}\n */\n getShowFor() {\n return this._showFor;\n }\n /**\n * Gibt eine odder mehrere extra Klasse zurück, die dem li-Element der Action hinzugefügt werden kann\n * @returns {string}\n */\n getLiClass() {\n return this._liClass;\n }\n setLiClass(cssClass) {\n this._liClass = cssClass;\n this._copies.forEach(c => c.setLiClass(cssClass));\n this.redraw();\n }\n /**\n * Gibt das zugehörige Menu zurück\n *\n * @returns {null}\n */\n getMenu() {\n return this._menu;\n }\n /**\n * Setzt das zugehörige Menu\n *\n * @param menu\n */\n setMenu(menu) {\n this._menu = menu;\n }\n}\nexports.MenuAction = MenuAction;\n/**\n * Letzte ID, die vergeben wurde. Wird beim Erstellen einer Acton um eins erhöht\n * @type {number}\n */\nMenuAction.lastId = 0;\n/**\n * Die SHOW_ALWAYS-Visibility-Klasse\n * Das Element wird bei jeder Größe in der NavBar angezeigt\n *\n * @type {string}\n */\nMenuAction.SHOW_ALWAYS = \"always\";\n/**\n * Die SHOW_FOR_SMEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"SMedium\" (zwischen Small und Medium) hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_SMEDIUM = \"smedium\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Medium\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_MEDIUM = \"medium\";\n/**\n * Die SHOW_FOR_LARGE-Visibility-Klasse\n * Das Element wird in der NavBar angezeigt, wenn der Bildschirm mindestens die Größe \"Large\" hat\n *\n * @type {string}\n */\nMenuAction.SHOW_FOR_LARGE = \"large\";\n/**\n * Die SHOW_FOR_MEDIUM-Visibility-Klasse\n * Das Element wird nie in der NavBar angezeigt, sondern immer nur im aufklapbaren Menu\n *\n * @type {string}\n */\nMenuAction.SHOW_NEVER = \"never\";\n//# sourceMappingURL=MenuAction.js.map","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dialog = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nclass Dialog {\n constructor(content, title) {\n this._resolver = null;\n this._content = null;\n this._backgroundElement = null;\n this._cancelable = true;\n this._title = Helper_1.Helper.nonNull(title, \"\");\n this._translatable = true;\n this._additionalClasses = \"\";\n this._buttons = [];\n this._result = null;\n this._contentPromise = null;\n this._addedToDomePromise = new Promise(r => {\n this._addedToDomePromiseResolver = r;\n });\n if (Helper_1.Helper.isNotNull(content)) {\n this.setContent(content);\n }\n }\n setTitle(title) {\n this._title = title;\n return this;\n }\n setTranslatable(translatable) {\n this._translatable = translatable;\n }\n setAdditionalClasses(classes) {\n this._additionalClasses = classes;\n }\n getTitle() {\n return this._title;\n }\n setCancelable(cancelable) {\n this._cancelable = (cancelable === true);\n return this;\n }\n setContent(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof content === \"string\" && content.endsWith(\".html\")) {\n content = ViewInflater_1.ViewInflater.getInstance().load(content);\n }\n this._contentPromise = Promise.resolve(content);\n this._content = yield this._contentPromise;\n return this;\n });\n }\n addButton(elementOrText, listenerOrResult, shouldClose) {\n shouldClose = Helper_1.Helper.nonNull(shouldClose, true);\n let button = null;\n if (typeof elementOrText === \"string\") {\n button = document.createElement(\"button\");\n button.classList.add(\"button\");\n button.classList.add(\"right\");\n button.appendChild(Translator_1.Translator.makePersistentTranslation(elementOrText));\n }\n else {\n button = elementOrText;\n }\n let self = this;\n if (typeof listenerOrResult !== \"function\") {\n let result = listenerOrResult;\n listenerOrResult = function () {\n self._result = result;\n };\n }\n let callback = null;\n if (shouldClose) {\n callback = function (e) {\n if (Helper_1.Helper.isNotNull(listenerOrResult)) {\n listenerOrResult(e);\n }\n self.close();\n };\n }\n else {\n callback = listenerOrResult;\n }\n if (Helper_1.Helper.isNotNull(callback)) {\n button.addEventListener(\"click\", callback);\n }\n this._buttons.push(button);\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._contentPromise;\n this._backgroundElement = this.createModalDialogElement();\n this._backgroundElement.addEventListener(\"keyup\", e => {\n if (e.key === \"Escape\" && this._cancelable) {\n this.close();\n }\n });\n document.body.appendChild(this._backgroundElement);\n yield Translator_1.Translator.getInstance().updateTranslations();\n this._addedToDomePromiseResolver();\n return new Promise((resolve) => {\n this._resolver = resolve;\n });\n });\n }\n createModalDialogElement() {\n let titleElement = document.createElement(\"span\");\n titleElement.classList.add(\"title\");\n if (this._translatable && this._title !== \"\") {\n titleElement.appendChild(Translator_1.Translator.makePersistentTranslation(this._title));\n }\n else {\n titleElement.innerHTML = this._title;\n }\n let titleBar = document.createElement(\"div\");\n titleBar.appendChild(titleElement);\n let contentContainer = document.createElement(\"div\");\n contentContainer.classList.add(\"content-container\");\n let modalDialog = document.createElement(\"div\");\n modalDialog.className = this._additionalClasses;\n modalDialog.classList.add(\"modal\");\n modalDialog.appendChild(titleBar);\n modalDialog.appendChild(contentContainer);\n let buttonBar = document.createElement(\"div\");\n buttonBar.classList.add(\"modal-button-container\");\n for (let i = 0, n = this._buttons.length; i < n; i++) {\n buttonBar.appendChild(this._buttons[i]);\n }\n if (!(this._content instanceof Node)) {\n this._content = (this._translatable) ? Translator_1.Translator.makePersistentTranslation(this._content) : document.createTextNode(this._content);\n }\n contentContainer.appendChild(this._content);\n this._backgroundElement = document.createElement(\"div\");\n this._backgroundElement.classList.add(\"background\");\n this._backgroundElement.style.display = \"block\";\n this._backgroundElement.appendChild(modalDialog);\n this._backgroundElement.querySelector(\".modal\").appendChild(buttonBar);\n if (this._cancelable) {\n let closeButton = document.createElement(\"span\");\n closeButton.classList.add(\"close\");\n closeButton.innerHTML = \"×\";\n titleBar.appendChild(closeButton);\n closeButton.addEventListener(\"click\", () => {\n this.close();\n });\n window.addEventListener(\"click\", (e) => {\n if (e.target === this._backgroundElement) {\n this.close();\n }\n });\n }\n return this._backgroundElement;\n }\n waitForAddedToDom() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._addedToDomePromise;\n });\n }\n close() {\n this.waitForAddedToDom().then(() => {\n if (Helper_1.Helper.isNotNull(this._backgroundElement)) {\n this._backgroundElement.style.display = \"none\";\n this._backgroundElement.remove();\n this._backgroundElement = null;\n }\n });\n if (Helper_1.Helper.isNotNull(this._resolver)) {\n this._resolver(this._result);\n }\n }\n}\nexports.Dialog = Dialog;\n//# sourceMappingURL=Dialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Toast = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ToastManager_1 = require(\"./ToastManager\");\nclass Toast {\n constructor(message, duration, shouldTranslateOrTranslationArgs) {\n this._message = message;\n this._duration = Helper_1.Helper.nonNull(duration, Toast.DEFAULT_DURATION);\n this._shouldTranslate = shouldTranslateOrTranslationArgs !== false;\n this._translationArgs = Helper_1.Helper.nonNull(shouldTranslateOrTranslationArgs, []);\n this._id = Toast.LAST_ID++;\n this._toastElement = null;\n }\n getId() {\n return this._id;\n }\n getMessage() {\n return this._message;\n }\n getDuration() {\n return this._duration;\n }\n isShouldTranslate() {\n return this._shouldTranslate;\n }\n getTranslationArgs() {\n return this._translationArgs;\n }\n setToastElement(element) {\n this._toastElement = element;\n }\n getToastElement() {\n return this._toastElement;\n }\n show() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().showToast(this);\n });\n }\n hide() {\n return __awaiter(this, void 0, void 0, function* () {\n return ToastManager_1.ToastManager.getInstance().hideToast(this);\n });\n }\n}\nexports.Toast = Toast;\nToast.LAST_ID = 0;\nToast.DEFAULT_DURATION = 2500;\n//# sourceMappingURL=Toast.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when selected sql driver does not supports locking.\n */\nvar LockNotSupportedOnGivenDriverError = /** @class */ (function (_super) {\n __extends(LockNotSupportedOnGivenDriverError, _super);\n function LockNotSupportedOnGivenDriverError() {\n var _this = _super.call(this) || this;\n _this.name = \"LockNotSupportedOnGivenDriverError\";\n Object.setPrototypeOf(_this, LockNotSupportedOnGivenDriverError.prototype);\n _this.message = \"Locking not supported on given driver.\";\n return _this;\n }\n return LockNotSupportedOnGivenDriverError;\n}(Error));\nexport { LockNotSupportedOnGivenDriverError };\n\n//# sourceMappingURL=LockNotSupportedOnGivenDriverError.js.map\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenSubmenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\n/**\n * Action, welche ein Untermenü öffnet\n */\nclass OpenSubmenuAction extends MenuAction_1.MenuAction {\n /**\n * Bekommt ein submenu anstelle einer Action übergeben.\n * Erstellt automatisch die action zum öffnen/schließen des Menüs\n *\n * @param title\n * @param menu\n * @param showFor\n * @param order\n * @param icon\n */\n constructor(title, menu, showFor, order, icon) {\n //Erstellt die action zum schließen/öffnen des Submenüs\n super(title, action => {\n action.getSubmenu().toggle();\n action.update();\n }, showFor, order, icon);\n this._submenu = menu;\n menu.setParentAction(this);\n }\n /**\n * Erstellt eine neue MenuAction auf grundlage dieser MenuAction. Alle Eigenschaften sind identisch, bis auf die ID\n * und das Submenu, welches ebenfalls kopiert wird\n *\n * @param action\n * @return {MenuAction}\n */\n copy(action) {\n action = Helper_1.Helper.nonNull(action, new OpenSubmenuAction(null, this._submenu.copy()));\n action = super.copy(action);\n action._submenu.setParentAction(action);\n return action;\n }\n /**\n * Gibt das Submenu zurück\n *\n * @returns {*}\n */\n getSubmenu() {\n return this._submenu;\n }\n}\nexports.OpenSubmenuAction = OpenSubmenuAction;\n//# sourceMappingURL=OpenSubmenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserManager = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nclass UserManager {\n constructor() {\n this._defaultUserData = {\n id: null,\n loggedIn: false,\n online: false,\n username: null,\n email: null,\n accesses: UserManager.OFFLINE_ACCESSES,\n };\n this._userData = this._defaultUserData;\n this._lastLoginChangeCallbackId = -1;\n this._loginChangeCallbacks = {};\n this._getMePromise = null;\n }\n addLoginChangeCallback(callback, callImmediately) {\n this._lastLoginChangeCallbackId++;\n this._loginChangeCallbacks[this._lastLoginChangeCallbackId] = callback;\n if (client_1.Helper.nonNull(callImmediately, false)) {\n callback(this._userData.loggedIn, this);\n }\n return this._lastLoginChangeCallbackId;\n }\n hasAccess(access) {\n return (this._userData.accesses.indexOf(access) !== -1);\n }\n _checkChangedLogin(before) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._userData.loggedIn !== before.loggedIn || (this._userData.loggedIn === true && this._userData.id !== before.id)) {\n yield this._callLoginChangeCallbacks();\n }\n });\n }\n _callLoginChangeCallbacks() {\n return __awaiter(this, void 0, void 0, function* () {\n yield client_1.Helper.asyncForEach(Object.keys(this._loginChangeCallbacks), callbackId => {\n this._loginChangeCallbacks[callbackId](this._userData.loggedIn, this);\n }, true);\n });\n }\n getUserData() {\n return this._userData;\n }\n getMe() {\n return __awaiter(this, void 0, void 0, function* () {\n this._getMePromise = new Promise((r) => __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doGetMe();\n yield this._checkChangedLogin(before);\n r(res);\n }));\n return this._getMePromise;\n });\n }\n waitForGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._getMePromise === null) {\n this.getMe();\n }\n yield this._getMePromise;\n });\n }\n login(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogin(email, password, saveLogin);\n //do it after the result is returned\n setTimeout(() => {\n this._checkChangedLogin(before);\n }, 1);\n return res;\n });\n }\n logout() {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doLogout();\n yield this._checkChangedLogin(before);\n if (!this._userData.loggedIn) {\n yield new client_1.Toast(\"goodbye\").show();\n }\n return res;\n });\n }\n register(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let before = this._userData;\n let res = yield this._doRegister(email, username, password);\n yield this._checkChangedLogin(before);\n return res;\n });\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager.updateHeaders();\n let data = yield client_1.DataManager.load(\"user\");\n if (client_1.Helper.isSet(data, \"userData\")) {\n yield client_1.NativeStoragePromise.setItem(\"user-data\", data.userData);\n this._userData = data.userData;\n }\n else {\n this._userData = this._defaultUserData;\n }\n this._updateAccessClasses();\n if (client_1.Helper.isSet(data, \"token\")) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n if (client_1.Helper.isNotNull(yield client_1.NativeStoragePromise.getItem(\"auth-token\"))) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n }\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/login\", {\n \"email\": email,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n if (saveLogin) {\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", data.token);\n }\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield this._doGetMe();\n return true;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/register\", {\n \"email\": email,\n \"username\": username,\n \"password\": password\n });\n if (data.success) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + data.token);\n sessionStorage.setItem(\"auth-token\", data.token);\n yield this._doGetMe();\n return true;\n }\n else {\n client_1.DataManager.setHeader(\"Authorization\", \"\");\n sessionStorage.setItem(\"auth-token\", \"\");\n yield client_1.NativeStoragePromise.setItem(\"auth-token\", \"\");\n yield new client_1.Toast(data.message).show();\n return false;\n }\n });\n }\n /**\n * @returns {UserManager}\n */\n static getInstance() {\n if (!UserManager._instance) {\n UserManager._instance = new UserManager();\n }\n return UserManager._instance;\n }\n static updateHeaders() {\n return __awaiter(this, void 0, void 0, function* () {\n let token = client_1.Helper.nonNull(sessionStorage.getItem(\"auth-token\"), yield client_1.NativeStoragePromise.getItem(\"auth-token\"));\n if (token) {\n client_1.DataManager.setHeader(\"Authorization\", \"Bearer \" + token);\n }\n });\n }\n _updateAccessClasses() {\n document.body.classList.forEach(cl => {\n if (cl.startsWith(UserManager.ACCESS_CLASS_PREFIX)) {\n document.body.classList.remove(cl);\n }\n });\n this._userData.accesses.forEach(access => {\n document.body.classList.add(UserManager.ACCESS_CLASS_PREFIX + access);\n });\n }\n hasOfflineAccess(access) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isOnline()) {\n return false;\n }\n let offlineData = client_1.Helper.nonNull(yield client_1.NativeStoragePromise.getItem(\"user-data\"), { accesses: UserManager.OFFLINE_ACCESSES });\n return (offlineData.accesses.indexOf(access) !== -1);\n });\n }\n sendForgotPasswordEmail(email) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW\", { email: email });\n return data.success;\n });\n }\n resetPassword(token, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield client_1.DataManager.send(\"user/forgotPW/2\", { token: token, password: password });\n return data.success;\n });\n }\n isOnline() {\n return this._userData.online;\n }\n isLoggedIn() {\n return this._userData.loggedIn;\n }\n static syncParamFor(model) {\n return {\n model: model,\n where: {\n user: { id: this.getInstance().getUserData().id }\n }\n };\n }\n static userSyncParam() {\n return {\n model: User_1.User,\n where: {\n id: this.getInstance().getUserData().id\n }\n };\n }\n}\nexports.UserManager = UserManager;\nUserManager.ACCESS_CLASS_PREFIX = \"access-\";\nUserManager.OFFLINE_ACCESSES = [\n \"offline\"\n];\n//# sourceMappingURL=UserManager.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to update using QueryBuilder but do not specify what to update.\n */\nvar UpdateValuesMissingError = /** @class */ (function (_super) {\n __extends(UpdateValuesMissingError, _super);\n function UpdateValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"UpdateValuesMissingError\";\n Object.setPrototypeOf(_this, UpdateValuesMissingError.prototype);\n _this.message = \"Cannot perform update query because update values are not defined. Call \\\"qb.set(...)\\\" method to specify updated values.\";\n return _this;\n }\n return UpdateValuesMissingError;\n}(Error));\nexport { UpdateValuesMissingError };\n\n//# sourceMappingURL=UpdateValuesMissingError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when an optimistic lock cannot be used in query builder.\n */\nvar OptimisticLockCanNotBeUsedError = /** @class */ (function (_super) {\n __extends(OptimisticLockCanNotBeUsedError, _super);\n function OptimisticLockCanNotBeUsedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockCanNotBeUsedError\";\n Object.setPrototypeOf(_this, OptimisticLockCanNotBeUsedError.prototype);\n _this.message = \"The optimistic lock can be used only with getOne() method.\";\n return _this;\n }\n return OptimisticLockCanNotBeUsedError;\n}(Error));\nexport { OptimisticLockCanNotBeUsedError };\n\n//# sourceMappingURL=OptimisticLockCanNotBeUsedError.js.map\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Context = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\n/**\n * Basis-Klasse für Seiten und Fragmente\n */\nclass Context {\n /**\n * Erstellt einen neuen Context. Erwartet den Link zu einem HTML-File, welches vom ViewInflater geladen werden kann.\n * Im Constructor sollten fragmente hinzugefügt werden (nachdem super.constructor(<>) aufgerufen wurde)\n *\n * @param view\n */\n constructor(view) {\n this.onViewLoadedCalled = false;\n this._pauseParameters = [];\n this._view = null;\n this._fragments = [];\n this._state = Context.STATE_CREATED;\n this._viewLoadedPromise = Helper_1.Helper.newPromiseWithResolve();\n this._viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then((siteContent) => {\n this._view = siteContent;\n return siteContent;\n }).catch(e => {\n // @ts-ignore\n this._viewLoadedPromise.reject(e);\n });\n }\n getState() {\n return this._state;\n }\n /**\n * Wird von SiteManager aufgerufen, wenn Klasse erstellt wird. Das ViewPromise ist noch nicht zwangsweise geladen!\n * Gibt ein Promise zurück. onViewLoaded wird erst aufgerufen, wenn onConstruct-Promise und view-Promise fullfilled sind.\n *\n * @param constructParameters, Object|Null\n * @returns {Promise}\n */\n onConstruct(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_CONSTRUCTED;\n this.constructParameters = constructParameters;\n let onConstructPromises = [];\n for (let k in this._fragments) {\n onConstructPromises.push(this._fragments[k].onConstruct.apply(this._fragments[k], [constructParameters]));\n onConstructPromises.push(this._fragments[k]._viewPromise);\n }\n return Promise.all(onConstructPromises);\n });\n }\n callOnViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.onViewLoadedCalled) {\n this.onViewLoadedCalled = true;\n const res = yield this.onViewLoaded();\n // @ts-ignore\n this._viewLoadedPromise.resolve(res);\n }\n return this._viewLoadedPromise;\n });\n }\n /**\n * Methode wird aufgerufen, sobald onConstruct-Promise und view-Promise fullfilled sind.\n * View ist hier noch nicht im Dokument hinzugefügt.\n *\n * Benutze diese Methode, um die View beim starten zu manipulieren.\n */\n onViewLoaded() {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_VIEW_LOADED;\n let onViewLoadedPromises = [];\n for (let k in this._fragments) {\n onViewLoadedPromises.push(this._fragments[k]._viewPromise.then(() => this._fragments[k].callOnViewLoaded()).then(() => this._fragments[k]._viewLoadedPromise.resolve()));\n }\n return Promise.all(onViewLoadedPromises);\n });\n }\n /**\n * onViewLoaded-Promise ist erfüllt => View wird dem Document hinzugefügt => onStart wird aufgerufen\n *\n * Seite wird pausiert => onPause wird aufgerufen => View wird aus dem Document entfernt => - etwas passiert -\n * => Seite wird fortgesetzt => View wird dem Document hinzugefügt => onStart wird mit dem Rückgabewert von onPause ausgeführt\n *\n * Zurückgegebenes Promise wird ignoriert!\n * @param pauseArguments, Object|NULL\n */\n onStart(pauseArguments) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_RUNNING;\n for (let k in this._fragments) {\n let fragment = this._fragments[k];\n fragment.onStart.apply(this._fragments[k], [yield this._fragments[k]._pauseParameters]);\n this._fragments[k]._viewPromise.then(function (fragmentView) {\n if (fragment.isActive()) {\n fragmentView.classList.remove(\"hidden\");\n }\n else {\n fragmentView.classList.add(\"hidden\");\n }\n });\n }\n });\n }\n /**\n * Seite wird pausiet => onPause wird ausgeführt => View wird aus dem Document entfernt\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird als Pause-Parameter gespeichert und wird beim Fortsetzen der Seite ausgeführt\n * @returns {Promise}\n */\n onPause(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_PAUSED;\n for (let k in this._fragments) {\n let pauseParameters = this._fragments[k].onPause.apply(this._fragments[k], args);\n this._fragments[k].setPauseParameters(pauseParameters);\n }\n });\n }\n /**\n * Seite wird beendet => onPause wird ausgeführt (falls State === running) => View wird aus dem Document entfernt\n * => onDestroy wird ausgeführt\n *\n * Rückgabe-Promise wird ignoriert\n */\n onDestroy(...args) {\n return __awaiter(this, void 0, void 0, function* () {\n this._state = Context.STATE_DESTROYED;\n for (let k in this._fragments) {\n this._fragments[k].onDestroy.apply(this._fragments[k], args);\n }\n });\n }\n isShowing() {\n return this._state === Context.STATE_RUNNING;\n }\n /**\n * Fügt ein neues Fragment hinzu.\n *\n * @param viewQuery\n * @param fragment\n */\n addFragment(viewQuery, fragment) {\n this._fragments.push(fragment);\n fragment.setViewQuery(viewQuery);\n this._viewPromise = Promise.all([this._viewPromise, fragment._viewPromise]).then(res => {\n res[0].querySelector(viewQuery).appendChild(res[1]);\n return res[0];\n }).catch(e => console.error(e));\n if (this._state >= Context.STATE_CONSTRUCTED) {\n fragment.onConstruct(this.constructParameters);\n }\n if (this._state >= Context.STATE_VIEW_LOADED) {\n Promise.all([this._viewLoadedPromise, fragment.getViewPromise()]).then(() => fragment.callOnViewLoaded());\n }\n if (this._state >= Context.STATE_RUNNING) {\n fragment._viewLoadedPromise.then(() => {\n if (this._state >= Context.STATE_RUNNING) {\n fragment.onStart();\n }\n });\n }\n }\n /**\n * Entfernt ein Fragment.\n *\n * @param fragment\n */\n removeFragment(fragment) {\n const index = this._fragments.indexOf(fragment);\n if (index !== -1) {\n this._fragments.splice(index, 1);\n }\n fragment._viewPromise.then(res => res.remove());\n this._fragments.push(fragment);\n if (this._state < Context.STATE_PAUSED) {\n fragment.onPause();\n }\n if (this._state < Context.STATE_DESTROYING) {\n fragment.onDestroy();\n }\n }\n /**\n * Findet ein Element anhand eines Selectors\n *\n * Wenn all = true, werden alle gefundenen Elemente zurückgegeben\n *\n * Wenn asPromise = true, wird das Ergebnis als Promise zurückgegeben. Hier wird gewartet, bis das _viewPromise fullfilled ist\n * Nutze das, um die View in onConstruct zu manipulieren. Evtl entfernen\n *\n * @param query\n * @param all\n * @param asPromise\n * @returns {*}\n */\n findBy(query, all, asPromise) {\n all = Helper_1.Helper.nonNull(all, false);\n asPromise = Helper_1.Helper.nonNull(asPromise, false);\n let getVal = function (root) {\n let res = null;\n if (all) {\n res = root.querySelectorAll(query);\n if (root.matches(query)) {\n res.push(root);\n }\n }\n else {\n if (root.matches(query)) {\n res = root;\n }\n else {\n res = root.querySelector(query);\n }\n }\n return res;\n };\n if (asPromise) {\n return this._viewPromise.then(function (rootView) {\n return getVal(rootView);\n });\n }\n return getVal(this._view);\n }\n find(selector) {\n if (this._view.matches(selector)) {\n return this._view;\n }\n else {\n return this._view.querySelector(selector);\n }\n }\n findAll(selector) {\n const res = this._view.querySelectorAll(selector);\n if (this._view.matches(selector)) {\n res.push(this._view);\n }\n return res;\n }\n /**\n * Setzt die PauseParameters\n * @param pauseParameters\n */\n setPauseParameters(pauseParameters) {\n this._pauseParameters = pauseParameters;\n }\n /**\n * Gibt das ViewPromise zurück\n * @returns {*}\n */\n getViewPromise() {\n return this._viewPromise;\n }\n}\nexports.Context = Context;\nContext.STATE_CREATED = 0;\nContext.STATE_CONSTRUCTED = 1;\nContext.STATE_VIEW_LOADED = 2;\nContext.STATE_RUNNING = 3;\nContext.STATE_PAUSED = 4;\nContext.STATE_DESTROYING = 5;\nContext.STATE_DESTROYED = 6;\n//# sourceMappingURL=Context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.User = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Role_1 = require(\"./Role\");\nclass User extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.username = null;\n this.email = null;\n this.password = null;\n this.roles = null;\n this.activated = false;\n this.blocked = false;\n this.salt = null;\n }\n toJSON() {\n return {\n id: this.id,\n username: this.username,\n };\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"username\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"email\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"password\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"activated\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"blocked\"] = cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN;\n columns[\"salt\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"roles\"] = {\n target: Role_1.Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"userRole\"\n },\n cascade: false\n };\n return relations;\n }\n static prepareSync(entities) {\n let jsonEntities = [];\n entities.forEach(entity => {\n let jsonEntity = {};\n jsonEntity.id = entity.id;\n jsonEntity.createdAt = new Date();\n jsonEntity.updatedAt = new Date();\n jsonEntity.username = \"\";\n jsonEntity.email = \"\";\n jsonEntity.password = \"\";\n jsonEntity.salt = \"\";\n jsonEntity.activated = 1;\n jsonEntity.blocked = 1;\n jsonEntity.version = 1;\n jsonEntity.deleted = 0;\n jsonEntities.push(jsonEntity);\n });\n return jsonEntities;\n }\n}\nexports.User = User;\ncordova_sites_database_1.BaseDatabase.addModel(User);\n//# sourceMappingURL=User.js.map","import { __extends } from \"tslib\";\nimport { EntitySchema } from \"../index\";\n/**\n * Thrown when no result could be found in methods which are not allowed to return undefined or an empty set.\n */\nvar EntityNotFoundError = /** @class */ (function (_super) {\n __extends(EntityNotFoundError, _super);\n function EntityNotFoundError(entityClass, criteria) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityNotFound\";\n Object.setPrototypeOf(_this, EntityNotFoundError.prototype);\n var targetName;\n if (entityClass instanceof EntitySchema) {\n targetName = entityClass.options.name;\n }\n else if (typeof entityClass === \"function\") {\n targetName = entityClass.name;\n }\n else if (typeof entityClass === \"object\" && \"name\" in entityClass) {\n targetName = entityClass.name;\n }\n else {\n targetName = entityClass;\n }\n var criteriaString = _this.stringifyCriteria(criteria);\n _this.message = \"Could not find any entity of type \\\"\" + targetName + \"\\\" matching: \" + criteriaString;\n return _this;\n }\n EntityNotFoundError.prototype.stringifyCriteria = function (criteria) {\n try {\n return JSON.stringify(criteria, null, 4);\n }\n catch (e) { }\n return \"\" + criteria;\n };\n return EntityNotFoundError;\n}(Error));\nexport { EntityNotFoundError };\n\n//# sourceMappingURL=EntityNotFoundError.js.map\n","import { __extends } from \"tslib\";\n/**\n *\n */\nvar EntityColumnNotFound = /** @class */ (function (_super) {\n __extends(EntityColumnNotFound, _super);\n function EntityColumnNotFound(propertyPath) {\n var _this = _super.call(this) || this;\n _this.name = \"EntityColumnNotFound\";\n Object.setPrototypeOf(_this, EntityColumnNotFound.prototype);\n _this.message = \"No entity column \\\"\" + propertyPath + \"\\\" was found.\";\n return _this;\n }\n return EntityColumnNotFound;\n}(Error));\nexport { EntityColumnNotFound };\n\n//# sourceMappingURL=EntityColumnNotFound.js.map\n","/**\n * Result object returned by UpdateQueryBuilder execution.\n */\nvar UpdateResult = /** @class */ (function () {\n function UpdateResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n // identifier: ObjectLiteral[] = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return UpdateResult;\n}());\nexport { UpdateResult };\n\n//# sourceMappingURL=UpdateResult.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build an UPDATE query with LIMIT but the database does not support it.\n*/\nvar LimitOnUpdateNotSupportedError = /** @class */ (function (_super) {\n __extends(LimitOnUpdateNotSupportedError, _super);\n function LimitOnUpdateNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"LimitOnUpdateNotSupportedError\";\n Object.setPrototypeOf(_this, LimitOnUpdateNotSupportedError.prototype);\n _this.message = \"Your database does not support LIMIT on UPDATE statements.\";\n return _this;\n }\n return LimitOnUpdateNotSupportedError;\n}(Error));\nexport { LimitOnUpdateNotSupportedError };\n\n//# sourceMappingURL=LimitOnUpdateNotSupportedError.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\nvar RelationIdLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdLoader(connection, queryRunner, relationIdAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationIdAttributes = relationIdAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var promises;\n var _this = this;\n return __generator(this, function (_a) {\n promises = this.relationIdAttributes.map(function (relationIdAttr) { return __awaiter(_this, void 0, void 0, function () {\n var duplicates_1, results, relation_1, joinColumns_1, table, tableName, tableAlias_1, duplicates_2, parameters_1, condition, qb_1, results, relation, joinColumns_2, inverseJoinColumns_1, junctionAlias_1, inverseSideTableName, inverseSideTableAlias_1, junctionTableName, mappedColumns, parameters_2, duplicates_3, joinColumnConditions, inverseJoinColumnCondition_1, condition, qb_2, results;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(relationIdAttr.relation.isManyToOne || relationIdAttr.relation.isOneToOneOwner)) return [3 /*break*/, 1];\n // example: Post and Tag\n // loadRelationIdAndMap(\"post.tagId\", \"post.tag\")\n // we expect it to load id of tag\n if (relationIdAttr.queryBuilderFactory)\n throw new Error(\"Additional condition can not be used with ManyToOne or OneToOne owner relations.\");\n duplicates_1 = [];\n results = rawEntities.map(function (rawEntity) {\n var result = {};\n var duplicateParts = [];\n relationIdAttr.relation.joinColumns.forEach(function (joinColumn) {\n result[joinColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.databaseName)], joinColumn.referencedColumn);\n var duplicatePart = joinColumn.databaseName + \":\" + result[joinColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n relationIdAttr.relation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n result[primaryColumn.databaseName] = _this.connection.driver.prepareHydratedValue(rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, primaryColumn.databaseName)], primaryColumn);\n var duplicatePart = primaryColumn.databaseName + \":\" + result[primaryColumn.databaseName];\n if (duplicateParts.indexOf(duplicatePart) === -1) {\n duplicateParts.push(duplicatePart);\n }\n });\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_1.indexOf(duplicate) !== -1) {\n return null;\n }\n duplicates_1.push(duplicate);\n return result;\n }).filter(function (v) { return v; });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 1:\n if (!(relationIdAttr.relation.isOneToMany || relationIdAttr.relation.isOneToOneNotOwner)) return [3 /*break*/, 3];\n relation_1 = relationIdAttr.relation;\n joinColumns_1 = relation_1.isOwning ? relation_1.joinColumns : relation_1.inverseRelation.joinColumns;\n table = relation_1.inverseEntityMetadata.target;\n tableName = relation_1.inverseEntityMetadata.tableName;\n tableAlias_1 = relationIdAttr.alias || tableName;\n duplicates_2 = [];\n parameters_1 = {};\n condition = rawEntities.map(function (rawEntity, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = joinColumns_1.map(function (joinColumn) {\n var parameterName = joinColumn.databaseName + index;\n var parameterValue = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n var duplicatePart = tableAlias_1 + \":\" + joinColumn.propertyPath + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return tableAlias_1 + \".\" + joinColumn.propertyPath + \" = :\" + parameterName;\n }).filter(function (v) { return v; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_2.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_2.push(duplicate);\n Object.assign(parameters_1, parameterParts);\n return queryPart;\n }).filter(function (v) { return v; }).map(function (condition) { return \"(\" + condition + \")\"; })\n .join(\" OR \");\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (!condition)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n qb_1 = this.connection.createQueryBuilder(this.queryRunner);\n joinColumns_1.forEach(function (joinColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (primaryColumn) {\n qb_1.addSelect(tableAlias_1 + \".\" + primaryColumn.propertyPath, primaryColumn.databaseName);\n });\n qb_1.from(table, tableAlias_1)\n .where(\"(\" + condition + \")\") // need brackets because if we have additional condition and no brackets, it looks like (a = 1) OR (a = 2) AND b = 1, that is incorrect\n .setParameters(parameters_1);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_1);\n return [4 /*yield*/, qb_1.getRawMany()];\n case 2:\n results = _a.sent();\n results.forEach(function (result) {\n joinColumns_1.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n relation_1.inverseRelation.entityMetadata.primaryColumns.forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n case 3:\n relation = relationIdAttr.relation;\n joinColumns_2 = relation.isOwning ? relation.joinColumns : relation.inverseRelation.inverseJoinColumns;\n inverseJoinColumns_1 = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation.joinColumns;\n junctionAlias_1 = relationIdAttr.junctionAlias;\n inverseSideTableName = relationIdAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias_1 = relationIdAttr.alias || inverseSideTableName;\n junctionTableName = relation.isOwning ? relation.junctionEntityMetadata.tableName : relation.inverseRelation.junctionEntityMetadata.tableName;\n mappedColumns = rawEntities.map(function (rawEntity) {\n return joinColumns_2.reduce(function (map, joinColumn) {\n map[joinColumn.propertyPath] = rawEntity[DriverUtils.buildColumnAlias(_this.connection.driver, relationIdAttr.parentAlias, joinColumn.referencedColumn.databaseName)];\n return map;\n }, {});\n });\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (mappedColumns.length === 0)\n return [2 /*return*/, { relationIdAttribute: relationIdAttr, results: [] }];\n parameters_2 = {};\n duplicates_3 = [];\n joinColumnConditions = mappedColumns.map(function (mappedColumn, index) {\n var duplicateParts = [];\n var parameterParts = {};\n var queryPart = Object.keys(mappedColumn).map(function (key) {\n var parameterName = key + index;\n var parameterValue = mappedColumn[key];\n var duplicatePart = junctionAlias_1 + \":\" + key + \":\" + parameterValue;\n if (duplicateParts.indexOf(duplicatePart) !== -1) {\n return \"\";\n }\n duplicateParts.push(duplicatePart);\n parameterParts[parameterName] = parameterValue;\n return junctionAlias_1 + \".\" + key + \" = :\" + parameterName;\n }).filter(function (s) { return s; }).join(\" AND \");\n duplicateParts.sort();\n var duplicate = duplicateParts.join(\"::\");\n if (duplicates_3.indexOf(duplicate) !== -1) {\n return \"\";\n }\n duplicates_3.push(duplicate);\n Object.assign(parameters_2, parameterParts);\n return queryPart;\n }).filter(function (s) { return s; });\n inverseJoinColumnCondition_1 = inverseJoinColumns_1.map(function (joinColumn) {\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \" = \" + inverseSideTableAlias_1 + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n condition = joinColumnConditions.map(function (condition) {\n return \"(\" + condition + \" AND \" + inverseJoinColumnCondition_1 + \")\";\n }).join(\" OR \");\n qb_2 = this.connection.createQueryBuilder(this.queryRunner);\n inverseJoinColumns_1.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n joinColumns_2.forEach(function (joinColumn) {\n qb_2.addSelect(junctionAlias_1 + \".\" + joinColumn.propertyPath, joinColumn.databaseName)\n .addOrderBy(junctionAlias_1 + \".\" + joinColumn.propertyPath);\n });\n qb_2.from(inverseSideTableName, inverseSideTableAlias_1)\n .innerJoin(junctionTableName, junctionAlias_1, condition)\n .setParameters(parameters_2);\n // apply condition (custom query builder factory)\n if (relationIdAttr.queryBuilderFactory)\n relationIdAttr.queryBuilderFactory(qb_2);\n return [4 /*yield*/, qb_2.getRawMany()];\n case 4:\n results = _a.sent();\n results.forEach(function (result) {\n __spreadArray(__spreadArray([], __read(joinColumns_2)), __read(inverseJoinColumns_1)).forEach(function (column) {\n result[column.databaseName] = _this.connection.driver.prepareHydratedValue(result[column.databaseName], column.referencedColumn);\n });\n });\n return [2 /*return*/, {\n relationIdAttribute: relationIdAttr,\n results: results\n }];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationIdLoader;\n}());\nexport { RelationIdLoader };\n\n//# sourceMappingURL=RelationIdLoader.js.map\n","import { RelationIdAttribute } from \"./RelationIdAttribute\";\nvar RelationIdMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation id:\n // @RelationId(post => post.categories) categoryIds\n // category has relation id\n // @RelationId(category => category.images) imageIds\n // we load post and join category\n // we expect post.categoryIds and post.category.imageIds to have relation ids\n var _this = this;\n // first create relation id attributes for all relation id metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n }\n // second create relation id attributes for all relation id metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation id can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationIds.forEach(function (relationId) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationId);\n _this.expressionMap.relationIdAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationIdMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationId) {\n return new RelationIdAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationId.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationId.propertyName,\n alias: relationId.alias,\n queryBuilderFactory: relationId.queryBuilderFactory\n });\n };\n return RelationIdMetadataToAttributeTransformer;\n}());\nexport { RelationIdMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationIdMetadataToAttributeTransformer.js.map\n","import { __awaiter, __generator } from \"tslib\";\nvar RelationCountLoader = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountLoader(connection, queryRunner, relationCountAttributes) {\n this.connection = connection;\n this.queryRunner = queryRunner;\n this.relationCountAttributes = relationCountAttributes;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountLoader.prototype.load = function (rawEntities) {\n return __awaiter(this, void 0, void 0, function () {\n var onlyUnique, promises;\n var _this = this;\n return __generator(this, function (_a) {\n onlyUnique = function (value, index, self) {\n return self.indexOf(value) === index;\n };\n promises = this.relationCountAttributes.map(function (relationCountAttr) { return __awaiter(_this, void 0, void 0, function () {\n var relation, inverseRelation, referenceColumnName_1, inverseSideTable, inverseSideTableName, inverseSideTableAlias, inverseSidePropertyName, referenceColumnValues, qb, joinTableColumnName_1, inverseJoinColumnName, firstJunctionColumn, secondJunctionColumn, referenceColumnValues, junctionAlias, inverseSideTableName, inverseSideTableAlias, junctionTableName, condition, qb;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!relationCountAttr.relation.isOneToMany) return [3 /*break*/, 2];\n relation = relationCountAttr.relation;\n inverseRelation = relation.inverseRelation;\n referenceColumnName_1 = inverseRelation.joinColumns[0].referencedColumn.propertyName;\n inverseSideTable = relation.inverseEntityMetadata.target;\n inverseSideTableName = relation.inverseEntityMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n inverseSidePropertyName = inverseRelation.propertyName;\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + referenceColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(inverseSideTableAlias + \".\" + inverseSidePropertyName, \"parentId\")\n .addSelect(\"COUNT(*)\", \"cnt\")\n .from(inverseSideTable, inverseSideTableAlias)\n .where(inverseSideTableAlias + \".\" + inverseSidePropertyName + \" IN (:...ids)\")\n .addGroupBy(inverseSideTableAlias + \".\" + inverseSidePropertyName)\n .setParameter(\"ids\", referenceColumnValues);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _a = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 1: return [2 /*return*/, (_a.results = _c.sent(),\n _a)];\n case 2:\n inverseJoinColumnName = void 0;\n firstJunctionColumn = void 0;\n secondJunctionColumn = void 0;\n if (relationCountAttr.relation.isOwning) { // todo fix joinColumns[0] and inverseJoinColumns[0].\n joinTableColumnName_1 = relationCountAttr.relation.joinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseJoinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n }\n else {\n joinTableColumnName_1 = relationCountAttr.relation.inverseRelation.inverseJoinColumns[0].referencedColumn.databaseName;\n inverseJoinColumnName = relationCountAttr.relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[1];\n secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columns[0];\n }\n referenceColumnValues = rawEntities\n .map(function (rawEntity) { return rawEntity[relationCountAttr.parentAlias + \"_\" + joinTableColumnName_1]; })\n .filter(function (value) { return !!value; });\n referenceColumnValues = referenceColumnValues.filter(onlyUnique);\n // ensure we won't perform redundant queries for joined data which was not found in selection\n // example: if post.category was not found in db then no need to execute query for category.imageIds\n if (referenceColumnValues.length === 0)\n return [2 /*return*/, { relationCountAttribute: relationCountAttr, results: [] }];\n junctionAlias = relationCountAttr.junctionAlias;\n inverseSideTableName = relationCountAttr.joinInverseSideMetadata.tableName;\n inverseSideTableAlias = relationCountAttr.alias || inverseSideTableName;\n junctionTableName = relationCountAttr.relation.junctionEntityMetadata.tableName;\n condition = junctionAlias + \".\" + firstJunctionColumn.propertyName + \" IN (\" + referenceColumnValues.map(function (vals) { return isNaN(vals) ? \"'\" + vals + \"'\" : vals; }) + \")\" +\n \" AND \" + junctionAlias + \".\" + secondJunctionColumn.propertyName + \" = \" + inverseSideTableAlias + \".\" + inverseJoinColumnName;\n qb = this.connection.createQueryBuilder(this.queryRunner);\n qb.select(junctionAlias + \".\" + firstJunctionColumn.propertyName, \"parentId\")\n .addSelect(\"COUNT(\" + qb.escape(inverseSideTableAlias) + \".\" + qb.escape(inverseJoinColumnName) + \")\", \"cnt\")\n .from(inverseSideTableName, inverseSideTableAlias)\n .innerJoin(junctionTableName, junctionAlias, condition)\n .addGroupBy(junctionAlias + \".\" + firstJunctionColumn.propertyName);\n // apply condition (custom query builder factory)\n if (relationCountAttr.queryBuilderFactory)\n relationCountAttr.queryBuilderFactory(qb);\n _b = {\n relationCountAttribute: relationCountAttr\n };\n return [4 /*yield*/, qb.getRawMany()];\n case 3: return [2 /*return*/, (_b.results = _c.sent(),\n _b)];\n }\n });\n }); });\n return [2 /*return*/, Promise.all(promises)];\n });\n });\n };\n return RelationCountLoader;\n}());\nexport { RelationCountLoader };\n\n//# sourceMappingURL=RelationCountLoader.js.map\n","import { RelationCountAttribute } from \"./RelationCountAttribute\";\nvar RelationCountMetadataToAttributeTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountMetadataToAttributeTransformer(expressionMap) {\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.transform = function () {\n // by example:\n // post has relation count:\n // @RelationCount(post => post.categories) categoryCount\n // category has relation count\n // @RelationCount(category => category.images) imageCount\n // we load post and join category\n // we expect post.categoryCount and post.category.imageCount to have relation counts\n var _this = this;\n // first create relation count attributes for all relation count metadatas of the main selected object (post from example)\n if (this.expressionMap.mainAlias) {\n this.expressionMap.mainAlias.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(_this.expressionMap.mainAlias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n }\n // second create relation count attributes for all relation count metadatas of all joined objects (category from example)\n this.expressionMap.joinAttributes.forEach(function (join) {\n // ensure this join has a metadata, because relation count can only work for real orm entities\n if (!join.metadata || join.metadata.isJunction)\n return;\n join.metadata.relationCounts.forEach(function (relationCount) {\n var attribute = _this.metadataToAttribute(join.alias.name, relationCount);\n _this.expressionMap.relationCountAttributes.push(attribute);\n });\n });\n };\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n RelationCountMetadataToAttributeTransformer.prototype.metadataToAttribute = function (parentAliasName, relationCount) {\n return new RelationCountAttribute(this.expressionMap, {\n relationName: parentAliasName + \".\" + relationCount.relation.propertyName,\n mapToProperty: parentAliasName + \".\" + relationCount.propertyName,\n alias: relationCount.alias,\n queryBuilderFactory: relationCount.queryBuilderFactory\n });\n };\n return RelationCountMetadataToAttributeTransformer;\n}());\nexport { RelationCountMetadataToAttributeTransformer };\n\n//# sourceMappingURL=RelationCountMetadataToAttributeTransformer.js.map\n","import { __awaiter, __extends, __generator, __read, __spreadArray } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { RawSqlResultsToEntityTransformer } from \"./transformer/RawSqlResultsToEntityTransformer\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PessimisticLockTransactionRequiredError } from \"../error/PessimisticLockTransactionRequiredError\";\nimport { NoVersionOrUpdateDateColumnError } from \"../error/NoVersionOrUpdateDateColumnError\";\nimport { OptimisticLockVersionMismatchError } from \"../error/OptimisticLockVersionMismatchError\";\nimport { OptimisticLockCanNotBeUsedError } from \"../error/OptimisticLockCanNotBeUsedError\";\nimport { JoinAttribute } from \"./JoinAttribute\";\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\";\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\";\nimport { RelationIdLoader } from \"./relation-id/RelationIdLoader\";\nimport { RelationIdMetadataToAttributeTransformer } from \"./relation-id/RelationIdMetadataToAttributeTransformer\";\nimport { RelationCountLoader } from \"./relation-count/RelationCountLoader\";\nimport { RelationCountMetadataToAttributeTransformer } from \"./relation-count/RelationCountMetadataToAttributeTransformer\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { LockNotSupportedOnGivenDriverError } from \"../error/LockNotSupportedOnGivenDriverError\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { OffsetWithoutLimitNotSupportedError } from \"../error/OffsetWithoutLimitNotSupportedError\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\nimport { DriverUtils } from \"../driver/DriverUtils\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { EntityNotFoundError } from \"../error/EntityNotFoundError\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SelectQueryBuilder = /** @class */ (function (_super) {\n __extends(SelectQueryBuilder, _super);\n function SelectQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SelectQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createSelectExpression();\n sql += this.createJoinExpression();\n sql += this.createWhereExpression();\n sql += this.createGroupByExpression();\n sql += this.createHavingExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitOffsetExpression();\n sql += this.createLockExpression();\n sql = sql.trim();\n if (this.expressionMap.subQuery)\n sql = \"(\" + sql + \")\";\n return sql;\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Creates a subquery - query that can be used inside other queries.\n */\n SelectQueryBuilder.prototype.subQuery = function () {\n var qb = this.createQueryBuilder();\n qb.expressionMap.subQuery = true;\n qb.expressionMap.parentQueryBuilder = this;\n return qb;\n };\n /**\n * Creates SELECT query and selects given data.\n * Replaces all previous selections if they exist.\n */\n SelectQueryBuilder.prototype.select = function (selection, selectionAliasName) {\n this.expressionMap.queryType = \"select\";\n if (Array.isArray(selection)) {\n this.expressionMap.selects = selection.map(function (selection) { return ({ selection: selection }); });\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects = [{ selection: selection, aliasName: selectionAliasName }];\n }\n return this;\n };\n /**\n * Adds new selection to the SELECT query.\n */\n SelectQueryBuilder.prototype.addSelect = function (selection, selectionAliasName) {\n if (!selection)\n return this;\n if (Array.isArray(selection)) {\n this.expressionMap.selects = this.expressionMap.selects.concat(selection.map(function (selection) { return ({ selection: selection }); }));\n }\n else if (selection instanceof Function) {\n var subQueryBuilder = selection(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n this.expressionMap.selects.push({ selection: subQueryBuilder.getQuery(), aliasName: selectionAliasName });\n }\n else if (selection) {\n this.expressionMap.selects.push({ selection: selection, aliasName: selectionAliasName });\n }\n return this;\n };\n /**\n * Sets whether the selection is DISTINCT.\n */\n SelectQueryBuilder.prototype.distinct = function (distinct) {\n if (distinct === void 0) { distinct = true; }\n this.expressionMap.selectDistinct = distinct;\n return this;\n };\n /**\n * Sets the distinct on clause for Postgres.\n */\n SelectQueryBuilder.prototype.distinctOn = function (distinctOn) {\n this.expressionMap.selectDistinctOn = distinctOn;\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n * Removes all previously set from-s.\n */\n SelectQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SelectQueryBuilder.prototype.addFrom = function (entityTarget, aliasName) {\n var alias = this.createFromAlias(entityTarget, aliasName);\n if (!this.expressionMap.mainAlias)\n this.expressionMap.setMainAlias(alias);\n return this;\n };\n /**\n * INNER JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs (without selection).\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoin = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.innerJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * LEFT JOINs and adds all selection properties to SELECT.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndSelect = function (entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.leftJoin(entityOrProperty, alias, condition, parameters);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * INNER JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.innerJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"INNER\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there are multiple rows of selecting data, and mapped result will be an array.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapMany = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, true);\n return this;\n };\n /**\n * LEFT JOINs, SELECTs the data returned by a join and MAPs all that data to some entity's property.\n * This is extremely useful when you want to select some data and map it to some virtual property.\n * It will assume that there is a single row of selecting data, and mapped result will be a single selected value.\n * You also need to specify an alias of the joined data.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.leftJoinAndMapOne = function (mapToProperty, entityOrProperty, alias, condition, parameters) {\n if (condition === void 0) { condition = \"\"; }\n this.addSelect(alias);\n this.join(\"LEFT\", entityOrProperty, alias, condition, parameters, mapToProperty, false);\n return this;\n };\n /**\n * LEFT JOINs relation id and maps it into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationIdAndMap = function (mapToProperty, relationName, aliasNameOrOptions, queryBuilderFactory) {\n var relationIdAttribute = new RelationIdAttribute(this.expressionMap);\n relationIdAttribute.mapToProperty = mapToProperty;\n relationIdAttribute.relationName = relationName;\n if (typeof aliasNameOrOptions === \"string\")\n relationIdAttribute.alias = aliasNameOrOptions;\n if (aliasNameOrOptions instanceof Object && aliasNameOrOptions.disableMixedMap)\n relationIdAttribute.disableMixedMap = true;\n relationIdAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationIdAttributes.push(relationIdAttribute);\n if (relationIdAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationIdAttribute.junctionAlias,\n metadata: relationIdAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Counts number of entities of entity's relation and maps the value into some entity's property.\n * Optionally, you can add condition and parameters used in condition.\n */\n SelectQueryBuilder.prototype.loadRelationCountAndMap = function (mapToProperty, relationName, aliasName, queryBuilderFactory) {\n var relationCountAttribute = new RelationCountAttribute(this.expressionMap);\n relationCountAttribute.mapToProperty = mapToProperty;\n relationCountAttribute.relationName = relationName;\n relationCountAttribute.alias = aliasName;\n relationCountAttribute.queryBuilderFactory = queryBuilderFactory;\n this.expressionMap.relationCountAttributes.push(relationCountAttribute);\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias\n });\n if (relationCountAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"other\",\n name: relationCountAttribute.junctionAlias,\n metadata: relationCountAttribute.relation.junctionEntityMetadata\n });\n }\n return this;\n };\n /**\n * Loads all relation ids for all relations of the selected entity.\n * All relation ids will be mapped to relation property themself.\n * If array of strings is given then loads only relation ids of the given properties.\n */\n SelectQueryBuilder.prototype.loadAllRelationIds = function (options) {\n var _this = this;\n this.expressionMap.mainAlias.metadata.relations.forEach(function (relation) {\n if (options !== undefined && options.relations !== undefined && options.relations.indexOf(relation.propertyPath) === -1)\n return;\n _this.loadRelationIdAndMap(_this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, _this.expressionMap.mainAlias.name + \".\" + relation.propertyPath, options);\n });\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n *\n * Ids are mixed.\n * It means if you have single primary key you can pass a simple id values, for example [1, 2, 3].\n * If you have multiple primary keys you need to pass object with property names and values specified,\n * for example [{ firstId: 1, secondId: 2 }, { firstId: 2, secondId: 3 }, ...]\n */\n SelectQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Sets HAVING condition in the query builder.\n * If you had previously HAVING expression defined,\n * calling this function will override previously set HAVING conditions.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.having = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"simple\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.andHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"and\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR HAVING condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SelectQueryBuilder.prototype.orHaving = function (having, parameters) {\n this.expressionMap.havings.push({ type: \"or\", condition: having });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Sets GROUP BY condition in the query builder.\n * If you had previously GROUP BY expression defined,\n * calling this function will override previously set GROUP BY conditions.\n */\n SelectQueryBuilder.prototype.groupBy = function (groupBy) {\n if (groupBy) {\n this.expressionMap.groupBys = [groupBy];\n }\n else {\n this.expressionMap.groupBys = [];\n }\n return this;\n };\n /**\n * Adds GROUP BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addGroupBy = function (groupBy) {\n this.expressionMap.groupBys.push(groupBy);\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SelectQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SelectQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (order !== undefined && order !== \"ASC\" && order !== \"DESC\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"order\\\" can accept only \\\"ASC\\\" and \\\"DESC\\\" values.\");\n if (nulls !== undefined && nulls !== \"NULLS FIRST\" && nulls !== \"NULLS LAST\")\n throw new Error(\"SelectQueryBuilder.addOrderBy \\\"nulls\\\" can accept only \\\"NULLS FIRST\\\" and \\\"NULLS LAST\\\" values.\");\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Set's LIMIT - maximum number of rows to be selected.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead take method instead.\n */\n SelectQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = this.normalizeNumber(limit);\n if (this.expressionMap.limit !== undefined && isNaN(this.expressionMap.limit))\n throw new Error(\"Provided \\\"limit\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Set's OFFSET - selection offset.\n * NOTE that it may not work as you expect if you are using joins.\n * If you want to implement pagination, and you are having join in your query,\n * then use instead skip method instead.\n */\n SelectQueryBuilder.prototype.offset = function (offset) {\n this.expressionMap.offset = this.normalizeNumber(offset);\n if (this.expressionMap.offset !== undefined && isNaN(this.expressionMap.offset))\n throw new Error(\"Provided \\\"offset\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets maximal number of entities to take.\n */\n SelectQueryBuilder.prototype.take = function (take) {\n this.expressionMap.take = this.normalizeNumber(take);\n if (this.expressionMap.take !== undefined && isNaN(this.expressionMap.take))\n throw new Error(\"Provided \\\"take\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets number of entities to skip.\n */\n SelectQueryBuilder.prototype.skip = function (skip) {\n this.expressionMap.skip = this.normalizeNumber(skip);\n if (this.expressionMap.skip !== undefined && isNaN(this.expressionMap.skip))\n throw new Error(\"Provided \\\"skip\\\" value is not a number. Please provide a numeric value.\");\n return this;\n };\n /**\n * Sets locking mode.\n */\n SelectQueryBuilder.prototype.setLock = function (lockMode, lockVersion, lockTables) {\n this.expressionMap.lockMode = lockMode;\n this.expressionMap.lockVersion = lockVersion;\n this.expressionMap.lockTables = lockTables;\n return this;\n };\n /**\n * Disables the global condition of \"non-deleted\" for the entity with delete date columns.\n */\n SelectQueryBuilder.prototype.withDeleted = function () {\n this.expressionMap.withDeleted = true;\n return this;\n };\n /**\n * Gets first raw result returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawMany()];\n case 1: return [2 /*return*/, (_a.sent())[0]];\n }\n });\n });\n };\n /**\n * Gets all raw results returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getRawMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_1, rollbackError_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n this.expressionMap.queryEntity = false;\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_1 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_1 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_1;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.getRawAndEntities = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_2, rollbackError_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_2 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_2 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_2;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets single entity returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results, result, metadata, actualVersion, actualVersion;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n result = results.entities[0];\n if (result && this.expressionMap.lockMode === \"optimistic\" && this.expressionMap.lockVersion) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (this.expressionMap.lockVersion instanceof Date) {\n actualVersion = metadata.updateDateColumn.getEntityValue(result);\n if (actualVersion.getTime() !== this.expressionMap.lockVersion.getTime())\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n else {\n actualVersion = metadata.versionColumn.getEntityValue(result);\n if (actualVersion !== this.expressionMap.lockVersion)\n throw new OptimisticLockVersionMismatchError(metadata.name, this.expressionMap.lockVersion, actualVersion);\n }\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Gets the first entity returned by execution of generated query builder sql or rejects the returned promise on error.\n */\n SelectQueryBuilder.prototype.getOneOrFail = function () {\n return __awaiter(this, void 0, void 0, function () {\n var entity;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getOne()];\n case 1:\n entity = _a.sent();\n if (!entity) {\n throw new EntityNotFoundError(this.expressionMap.mainAlias.target, this);\n }\n return [2 /*return*/, entity];\n }\n });\n });\n };\n /**\n * Gets entities returned by execution of generated query builder sql.\n */\n SelectQueryBuilder.prototype.getMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n return [4 /*yield*/, this.getRawAndEntities()];\n case 1:\n results = _a.sent();\n return [2 /*return*/, results.entities];\n }\n });\n });\n };\n /**\n * Gets count - number of entities selected by sql generated by this query builder.\n * Count excludes all limitations set by setFirstResult and setMaxResults methods call.\n */\n SelectQueryBuilder.prototype.getCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, results, error_3, rollbackError_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, 12, 15]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 4:\n results = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 6];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 5:\n _a.sent();\n _a.label = 6;\n case 6: return [2 /*return*/, results];\n case 7:\n error_3 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 11];\n _a.label = 8;\n case 8:\n _a.trys.push([8, 10, , 11]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 9:\n _a.sent();\n return [3 /*break*/, 11];\n case 10:\n rollbackError_3 = _a.sent();\n return [3 /*break*/, 11];\n case 11: throw error_3;\n case 12:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 14];\n return [4 /*yield*/, queryRunner.release()];\n case 13:\n _a.sent();\n _a.label = 14;\n case 14: return [7 /*endfinally*/];\n case 15: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns entities and overall entities count (without limitation).\n * This method is useful to build pagination.\n */\n SelectQueryBuilder.prototype.getManyAndCount = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, entitiesAndRaw, count, results, error_4, rollbackError_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.expressionMap.lockMode === \"optimistic\")\n throw new OptimisticLockCanNotBeUsedError();\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 8, 13, 16]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _a.sent();\n transactionStartedByUs = true;\n _a.label = 3;\n case 3:\n this.expressionMap.queryEntity = true;\n return [4 /*yield*/, this.executeEntitiesAndRawResults(queryRunner)];\n case 4:\n entitiesAndRaw = _a.sent();\n this.expressionMap.queryEntity = false;\n return [4 /*yield*/, this.executeCountQuery(queryRunner)];\n case 5:\n count = _a.sent();\n results = [entitiesAndRaw.entities, count];\n if (!transactionStartedByUs) return [3 /*break*/, 7];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 6:\n _a.sent();\n _a.label = 7;\n case 7: return [2 /*return*/, results];\n case 8:\n error_4 = _a.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n _a.label = 9;\n case 9:\n _a.trys.push([9, 11, , 12]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 10:\n _a.sent();\n return [3 /*break*/, 12];\n case 11:\n rollbackError_4 = _a.sent();\n return [3 /*break*/, 12];\n case 12: throw error_4;\n case 13:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 15];\n return [4 /*yield*/, queryRunner.release()];\n case 14:\n _a.sent();\n _a.label = 15;\n case 15: return [7 /*endfinally*/];\n case 16: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes built SQL query and returns raw data stream.\n */\n SelectQueryBuilder.prototype.stream = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, releaseFn, results, error_5, rollbackError_5;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.expressionMap.queryEntity = false;\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 6, , 11]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n releaseFn = function () {\n if (queryRunner !== _this.queryRunner) // means we created our own query runner\n return queryRunner.release();\n return;\n };\n results = queryRunner.stream(sql, parameters, releaseFn, releaseFn);\n if (!transactionStartedByUs) return [3 /*break*/, 5];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n case 6:\n error_5 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n _b.label = 7;\n case 7:\n _b.trys.push([7, 9, , 10]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 8:\n _b.sent();\n return [3 /*break*/, 10];\n case 9:\n rollbackError_5 = _b.sent();\n return [3 /*break*/, 10];\n case 10: throw error_5;\n case 11: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Enables or disables query result caching.\n */\n SelectQueryBuilder.prototype.cache = function (enabledOrMillisecondsOrId, maybeMilliseconds) {\n if (typeof enabledOrMillisecondsOrId === \"boolean\") {\n this.expressionMap.cache = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheDuration = enabledOrMillisecondsOrId;\n }\n else if (typeof enabledOrMillisecondsOrId === \"string\" || typeof enabledOrMillisecondsOrId === \"number\") {\n this.expressionMap.cache = true;\n this.expressionMap.cacheId = enabledOrMillisecondsOrId;\n }\n if (maybeMilliseconds) {\n this.expressionMap.cacheDuration = maybeMilliseconds;\n }\n return this;\n };\n /**\n * Sets extra options that can be used to configure how query builder works.\n */\n SelectQueryBuilder.prototype.setOption = function (option) {\n this.expressionMap.options.push(option);\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n SelectQueryBuilder.prototype.join = function (direction, entityOrProperty, aliasName, condition, parameters, mapToProperty, isMappingMany) {\n this.setParameters(parameters || {});\n var joinAttribute = new JoinAttribute(this.connection, this.expressionMap);\n joinAttribute.direction = direction;\n joinAttribute.mapToProperty = mapToProperty;\n joinAttribute.isMappingMany = isMappingMany;\n joinAttribute.entityOrProperty = entityOrProperty; // relationName\n joinAttribute.condition = condition; // joinInverseSideCondition\n // joinAttribute.junctionAlias = joinAttribute.relation.isOwning ? parentAlias + \"_\" + destinationTableAlias : destinationTableAlias + \"_\" + parentAlias;\n this.expressionMap.joinAttributes.push(joinAttribute);\n if (joinAttribute.metadata) {\n if (joinAttribute.metadata.deleteDateColumn && !this.expressionMap.withDeleted) {\n var conditionDeleteColumn = aliasName + \".\" + joinAttribute.metadata.deleteDateColumn.propertyName + \" IS NULL\";\n joinAttribute.condition += joinAttribute.condition ? \" AND \" + conditionDeleteColumn : \"\" + conditionDeleteColumn;\n }\n // todo: find and set metadata right there?\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n metadata: joinAttribute.metadata\n });\n if (joinAttribute.relation && joinAttribute.relation.junctionEntityMetadata) {\n this.expressionMap.createAlias({\n type: \"join\",\n name: joinAttribute.junctionAlias,\n metadata: joinAttribute.relation.junctionEntityMetadata\n });\n }\n }\n else {\n var subQuery = \"\";\n if (entityOrProperty instanceof Function) {\n var subQueryBuilder = entityOrProperty(this.subQuery());\n this.setParameters(subQueryBuilder.getParameters());\n subQuery = subQueryBuilder.getQuery();\n }\n else {\n subQuery = entityOrProperty;\n }\n var isSubQuery = entityOrProperty instanceof Function || entityOrProperty.substr(0, 1) === \"(\" && entityOrProperty.substr(-1) === \")\";\n joinAttribute.alias = this.expressionMap.createAlias({\n type: \"join\",\n name: aliasName,\n tablePath: isSubQuery === false ? entityOrProperty : undefined,\n subQuery: isSubQuery === true ? subQuery : undefined,\n });\n }\n };\n /**\n * Creates \"SELECT FROM\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectExpression = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Cannot build query because main alias is not set (call qb#from method)\");\n // todo throw exception if selects or from is missing\n var allSelects = [];\n var excludedSelects = [];\n if (this.expressionMap.mainAlias.hasMetadata) {\n var metadata = this.expressionMap.mainAlias.metadata;\n allSelects.push.apply(allSelects, __spreadArray([], __read(this.buildEscapedEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(this.findEntityColumnSelects(this.expressionMap.mainAlias.name, metadata))));\n }\n // add selects from joins\n this.expressionMap.joinAttributes\n .forEach(function (join) {\n if (join.metadata) {\n allSelects.push.apply(allSelects, __spreadArray([], __read(_this.buildEscapedEntityColumnSelects(join.alias.name, join.metadata))));\n excludedSelects.push.apply(excludedSelects, __spreadArray([], __read(_this.findEntityColumnSelects(join.alias.name, join.metadata))));\n }\n else {\n var hasMainAlias = _this.expressionMap.selects.some(function (select) { return select.selection === join.alias.name; });\n if (hasMainAlias) {\n allSelects.push({ selection: _this.escape(join.alias.name) + \".*\" });\n var excludedSelect = _this.expressionMap.selects.find(function (select) { return select.selection === join.alias.name; });\n excludedSelects.push(excludedSelect);\n }\n }\n });\n // add all other selects\n this.expressionMap.selects\n .filter(function (select) { return excludedSelects.indexOf(select) === -1; })\n .forEach(function (select) { return allSelects.push({ selection: _this.replacePropertyNames(select.selection), aliasName: select.aliasName }); });\n // if still selection is empty, then simply set it to all (*)\n if (allSelects.length === 0)\n allSelects.push({ selection: \"*\" });\n var lock = \"\";\n if (this.connection.driver instanceof SqlServerDriver) {\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n lock = \" WITH (HOLDLOCK, ROWLOCK)\";\n break;\n case \"pessimistic_write\":\n lock = \" WITH (UPDLOCK, ROWLOCK)\";\n break;\n case \"dirty_read\":\n lock = \" WITH (NOLOCK)\";\n break;\n }\n }\n // create a selection query\n var froms = this.expressionMap.aliases\n .filter(function (alias) { return alias.type === \"from\" && (alias.tablePath || alias.subQuery); })\n .map(function (alias) {\n if (alias.subQuery)\n return alias.subQuery + \" \" + _this.escape(alias.name);\n return _this.getTableName(alias.tablePath) + \" \" + _this.escape(alias.name);\n });\n var select = this.createSelectDistinctExpression();\n var selection = allSelects.map(function (select) { return select.selection + (select.aliasName ? \" AS \" + _this.escape(select.aliasName) : \"\"); }).join(\", \");\n return select + selection + \" FROM \" + froms.join(\", \") + lock;\n };\n /**\n * Creates select | select distinct part of SQL query.\n */\n SelectQueryBuilder.prototype.createSelectDistinctExpression = function () {\n var _this = this;\n var _a = this.expressionMap, selectDistinct = _a.selectDistinct, selectDistinctOn = _a.selectDistinctOn;\n var driver = this.connection.driver;\n var select = \"SELECT \";\n if (driver instanceof PostgresDriver && selectDistinctOn.length > 0) {\n var selectDistinctOnMap = selectDistinctOn.map(function (on) { return _this.replacePropertyNames(on); }).join(\", \");\n select = \"SELECT DISTINCT ON (\" + selectDistinctOnMap + \") \";\n }\n else if (selectDistinct) {\n select = \"SELECT DISTINCT \";\n }\n return select;\n };\n /**\n * Creates \"JOIN\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createJoinExpression = function () {\n // examples:\n // select from owning side\n // qb.select(\"post\")\n // .leftJoinAndSelect(\"post.category\", \"category\");\n // select from non-owning side\n // qb.select(\"category\")\n // .leftJoinAndSelect(\"category.post\", \"post\");\n var _this = this;\n var joins = this.expressionMap.joinAttributes.map(function (joinAttr) {\n var relation = joinAttr.relation;\n var destinationTableName = joinAttr.tablePath;\n var destinationTableAlias = joinAttr.alias.name;\n var appendedCondition = joinAttr.condition ? \" AND (\" + joinAttr.condition + \")\" : \"\";\n var parentAlias = joinAttr.parentAlias;\n // if join was build without relation (e.g. without \"post.category\") then it means that we have direct\n // table to join, without junction table involved. This means we simply join direct table.\n if (!parentAlias || !relation) {\n var destinationJoin = joinAttr.alias.subQuery ? joinAttr.alias.subQuery : _this.getTableName(destinationTableName);\n return \" \" + joinAttr.direction + \" JOIN \" + destinationJoin + \" \" + _this.escape(destinationTableAlias) +\n (joinAttr.condition ? \" ON \" + _this.replacePropertyNames(joinAttr.condition) : \"\");\n }\n // if real entity relation is involved\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n // JOIN `category` `category` ON `category`.`id` = `post`.`categoryId`\n var condition = relation.joinColumns.map(function (joinColumn) {\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + relation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n // JOIN `post` `post` ON `post`.`categoryId` = `category`.`id`\n var condition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n if (relation.inverseEntityMetadata.tableType === \"entity-child\" && relation.inverseEntityMetadata.discriminatorColumn) {\n appendedCondition += \" AND \" + destinationTableAlias + \".\" + relation.inverseEntityMetadata.discriminatorColumn.databaseName + \"='\" + relation.inverseEntityMetadata.discriminatorValue + \"'\";\n }\n return destinationTableAlias + \".\" + relation.inverseRelation.propertyPath + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" +\n parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(condition + appendedCondition);\n }\n else { // means many-to-many\n var junctionTableName = relation.junctionEntityMetadata.tablePath;\n var junctionAlias_1 = joinAttr.junctionAlias;\n var junctionCondition = \"\", destinationCondition = \"\";\n if (relation.isOwning) {\n junctionCondition = relation.joinColumns.map(function (joinColumn) {\n // `post_category`.`postId` = `post`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseJoinColumns.map(function (joinColumn) {\n // `category`.`id` = `post_category`.`categoryId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n else {\n junctionCondition = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) {\n // `post_category`.`categoryId` = `category`.`id`\n return junctionAlias_1 + \".\" + joinColumn.propertyPath + \"=\" + parentAlias + \".\" + joinColumn.referencedColumn.propertyPath;\n }).join(\" AND \");\n destinationCondition = relation.inverseRelation.joinColumns.map(function (joinColumn) {\n // `post`.`id` = `post_category`.`postId`\n return destinationTableAlias + \".\" + joinColumn.referencedColumn.propertyPath + \"=\" + junctionAlias_1 + \".\" + joinColumn.propertyPath;\n }).join(\" AND \");\n }\n return \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(junctionTableName) + \" \" + _this.escape(junctionAlias_1) + \" ON \" + _this.replacePropertyNames(junctionCondition) +\n \" \" + joinAttr.direction + \" JOIN \" + _this.getTableName(destinationTableName) + \" \" + _this.escape(destinationTableAlias) + \" ON \" + _this.replacePropertyNames(destinationCondition + appendedCondition);\n }\n });\n return joins.join(\" \");\n };\n /**\n * Creates \"GROUP BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createGroupByExpression = function () {\n if (!this.expressionMap.groupBys || !this.expressionMap.groupBys.length)\n return \"\";\n return \" GROUP BY \" + this.replacePropertyNames(this.expressionMap.groupBys.join(\", \"));\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.allOrderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" and \"OFFSET\" parts of SQL query.\n */\n SelectQueryBuilder.prototype.createLimitOffsetExpression = function () {\n // in the case if nothing is joined in the query builder we don't need to make two requests to get paginated results\n // we can use regular limit / offset, that's why we add offset and limit construction here based on skip and take values\n var offset = this.expressionMap.offset, limit = this.expressionMap.limit;\n if (!offset && !limit && this.expressionMap.joinAttributes.length === 0) {\n offset = this.expressionMap.skip;\n limit = this.expressionMap.take;\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // Due to a limitation in SQL Server's parser implementation it does not support using\n // OFFSET or FETCH NEXT without an ORDER BY clause being provided. In cases where the\n // user does not request one we insert a dummy ORDER BY that does nothing and should\n // have no effect on the query planner or on the order of the results returned.\n // https://dba.stackexchange.com/a/193799\n var prefix = \"\";\n if ((limit || offset) && Object.keys(this.expressionMap.allOrderBys).length <= 0) {\n prefix = \" ORDER BY (SELECT NULL)\";\n }\n if (limit && offset)\n return prefix + \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return prefix + \" OFFSET 0 ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return prefix + \" OFFSET \" + offset + \" ROWS\";\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver || this.connection.driver instanceof SapDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n throw new OffsetWithoutLimitNotSupportedError();\n }\n else if (this.connection.driver instanceof AbstractSqliteDriver) {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" LIMIT -1 OFFSET \" + offset;\n }\n else if (this.connection.driver instanceof OracleDriver) {\n if (limit && offset)\n return \" OFFSET \" + offset + \" ROWS FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (limit)\n return \" FETCH NEXT \" + limit + \" ROWS ONLY\";\n if (offset)\n return \" OFFSET \" + offset + \" ROWS\";\n }\n else {\n if (limit && offset)\n return \" LIMIT \" + limit + \" OFFSET \" + offset;\n if (limit)\n return \" LIMIT \" + limit;\n if (offset)\n return \" OFFSET \" + offset;\n }\n return \"\";\n };\n /**\n * Creates \"LOCK\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createLockExpression = function () {\n var driver = this.connection.driver;\n var lockTablesClause = \"\";\n if (this.expressionMap.lockTables) {\n if (!(driver instanceof PostgresDriver)) {\n throw new Error(\"Lock tables not supported in selected driver\");\n }\n if (this.expressionMap.lockTables.length < 1) {\n throw new Error(\"lockTables cannot be an empty array\");\n }\n lockTablesClause = \" OF \" + this.expressionMap.lockTables.join(\", \");\n }\n switch (this.expressionMap.lockMode) {\n case \"pessimistic_read\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n return \" LOCK IN SHARE MODE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR SHARE\" + lockTablesClause;\n }\n else if (driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write\":\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver || driver instanceof OracleDriver) {\n return \" FOR UPDATE\";\n }\n else if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause;\n }\n else if (driver instanceof SqlServerDriver) {\n return \"\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_partial_write\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" SKIP LOCKED\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE SKIP LOCKED\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"pessimistic_write_or_fail\":\n if (driver instanceof PostgresDriver) {\n return \" FOR UPDATE\" + lockTablesClause + \" NOWAIT\";\n }\n else if (driver instanceof MysqlDriver) {\n return \" FOR UPDATE NOWAIT\";\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n case \"for_no_key_update\":\n if (driver instanceof PostgresDriver) {\n return \" FOR NO KEY UPDATE\" + lockTablesClause;\n }\n else {\n throw new LockNotSupportedOnGivenDriverError();\n }\n default:\n return \"\";\n }\n };\n /**\n * Creates \"HAVING\" part of SQL query.\n */\n SelectQueryBuilder.prototype.createHavingExpression = function () {\n var _this = this;\n if (!this.expressionMap.havings || !this.expressionMap.havings.length)\n return \"\";\n var conditions = this.expressionMap.havings.map(function (having, index) {\n switch (having.type) {\n case \"and\":\n return (index > 0 ? \"AND \" : \"\") + _this.replacePropertyNames(having.condition);\n case \"or\":\n return (index > 0 ? \"OR \" : \"\") + _this.replacePropertyNames(having.condition);\n default:\n return _this.replacePropertyNames(having.condition);\n }\n }).join(\" \");\n if (!conditions.length)\n return \"\";\n return \" HAVING \" + conditions;\n };\n SelectQueryBuilder.prototype.buildEscapedEntityColumnSelects = function (aliasName, metadata) {\n var _this = this;\n var hasMainAlias = this.expressionMap.selects.some(function (select) { return select.selection === aliasName; });\n var columns = [];\n if (hasMainAlias) {\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) { return column.isSelect === true; }))));\n }\n columns.push.apply(columns, __spreadArray([], __read(metadata.columns.filter(function (column) {\n return _this.expressionMap.selects.some(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n }))));\n // if user used partial selection and did not select some primary columns which are required to be selected\n // we select those primary columns and mark them as \"virtual\". Later virtual column values will be removed from final entity\n // to make entity contain exactly what user selected\n if (columns.length === 0) // however not in the case when nothing (even partial) was selected from this target (for example joins without selection)\n return [];\n var nonSelectedPrimaryColumns = this.expressionMap.queryEntity ? metadata.primaryColumns.filter(function (primaryColumn) { return columns.indexOf(primaryColumn) === -1; }) : [];\n var allColumns = __spreadArray(__spreadArray([], __read(columns)), __read(nonSelectedPrimaryColumns));\n return allColumns.map(function (column) {\n var selection = _this.expressionMap.selects.find(function (select) { return select.selection === aliasName + \".\" + column.propertyPath; });\n var selectionPath = _this.escape(aliasName) + \".\" + _this.escape(column.databaseName);\n if (_this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var asText = useLegacy ? \"AsText\" : \"ST_AsText\";\n selectionPath = asText + \"(\" + selectionPath + \")\";\n }\n if (_this.connection.driver instanceof PostgresDriver)\n // cast to JSON to trigger parsing in the driver\n if (column.precision) {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \", \" + column.precision + \")::json\";\n }\n else {\n selectionPath = \"ST_AsGeoJSON(\" + selectionPath + \")::json\";\n }\n if (_this.connection.driver instanceof SqlServerDriver)\n selectionPath = selectionPath + \".ToString()\";\n }\n return {\n selection: selectionPath,\n aliasName: selection && selection.aliasName ? selection.aliasName : DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName),\n // todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!\n virtual: selection ? selection.virtual === true : (hasMainAlias ? false : true),\n };\n });\n };\n SelectQueryBuilder.prototype.findEntityColumnSelects = function (aliasName, metadata) {\n var mainSelect = this.expressionMap.selects.find(function (select) { return select.selection === aliasName; });\n if (mainSelect)\n return [mainSelect];\n return this.expressionMap.selects.filter(function (select) {\n return metadata.columns.some(function (column) { return select.selection === aliasName + \".\" + column.propertyPath; });\n });\n };\n SelectQueryBuilder.prototype.computeCountExpression = function () {\n var _this = this;\n var mainAlias = this.expressionMap.mainAlias.name; // todo: will this work with \"fromTableName\"?\n var metadata = this.expressionMap.mainAlias.metadata;\n var primaryColumns = metadata.primaryColumns;\n var distinctAlias = this.escape(mainAlias);\n // If we aren't doing anything that will create a join, we can use a simpler `COUNT` instead\n // so we prevent poor query patterns in the most likely cases\n if (this.expressionMap.joinAttributes.length === 0 &&\n this.expressionMap.relationIdAttributes.length === 0 &&\n this.expressionMap.relationCountAttributes.length === 0) {\n return \"COUNT(1)\";\n }\n // For everything else, we'll need to do some hackery to get the correct count values.\n if (this.connection.driver instanceof CockroachDriver || this.connection.driver instanceof PostgresDriver) {\n // Postgres and CockroachDB can pass multiple parameters to the `DISTINCT` function\n // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-DISTINCT\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \"))\";\n }\n if (this.connection.driver instanceof MysqlDriver) {\n // MySQL & MariaDB can pass multiple parameters to the `DISTINCT` language construct\n // https://mariadb.com/kb/en/count-distinct/\n return \"COUNT(DISTINCT \" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\", \") +\n \")\";\n }\n if (this.connection.driver instanceof SqlServerDriver) {\n // SQL Server has gotta be different from everyone else. They don't support\n // distinct counting multiple columns & they don't have the same operator\n // characteristic for concatenating, so we gotta use the `CONCAT` function.\n // However, If it's exactly 1 column we can omit the `CONCAT` for better performance.\n var columnsExpression = primaryColumns.map(function (primaryColumn) { return distinctAlias + \".\" + _this.escape(primaryColumn.databaseName); }).join(\", '|;|', \");\n if (primaryColumns.length === 1) {\n return \"COUNT(DISTINCT(\" + columnsExpression + \"))\";\n }\n return \"COUNT(DISTINCT(CONCAT(\" + columnsExpression + \")))\";\n }\n // If all else fails, fall back to a `COUNT` and `DISTINCT` across all the primary columns concatenated.\n // Per the SQL spec, this is the canonical string concatenation mechanism which is most\n // likely to work across servers implementing the SQL standard.\n // Please note, if there is only one primary column that the concatenation does not occur in this\n // query and the query is a standard `COUNT DISTINCT` in that case.\n return \"COUNT(DISTINCT(\" +\n primaryColumns.map(function (c) { return distinctAlias + \".\" + _this.escape(c.databaseName); }).join(\" || '|;|' || \") +\n \"))\";\n };\n SelectQueryBuilder.prototype.executeCountQuery = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var countSql, results;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n countSql = this.computeCountExpression();\n return [4 /*yield*/, this.clone()\n .orderBy()\n .groupBy()\n .offset(undefined)\n .limit(undefined)\n .skip(undefined)\n .take(undefined)\n .select(countSql, \"cnt\")\n .setOption(\"disable-global-order\")\n .loadRawResults(queryRunner)];\n case 1:\n results = _a.sent();\n if (!results || !results[0] || !results[0][\"cnt\"])\n return [2 /*return*/, 0];\n return [2 /*return*/, parseInt(results[0][\"cnt\"])];\n }\n });\n });\n };\n /**\n * Executes sql generated by query builder and returns object with raw results and entities created from them.\n */\n SelectQueryBuilder.prototype.executeEntitiesAndRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, relationIdLoader, relationCountLoader, relationIdMetadataTransformer, relationCountMetadataTransformer, rawResults, entities, _a, selects, orderBys_1, metadata_1, mainAliasName_1, querySelects, condition, parameters_1, alias_1, ids, areAllNumbers, rawRelationIdResults, rawRelationCountResults, transformer, broadcastResult;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.expressionMap.mainAlias)\n throw new Error(\"Alias is not set. Use \\\"from\\\" method to set an alias.\");\n if ((this.expressionMap.lockMode === \"pessimistic_read\" || this.expressionMap.lockMode === \"pessimistic_write\" || this.expressionMap.lockMode === \"pessimistic_partial_write\" || this.expressionMap.lockMode === \"pessimistic_write_or_fail\" || this.expressionMap.lockMode === \"for_no_key_update\") && !queryRunner.isTransactionActive)\n throw new PessimisticLockTransactionRequiredError();\n if (this.expressionMap.lockMode === \"optimistic\") {\n metadata = this.expressionMap.mainAlias.metadata;\n if (!metadata.versionColumn && !metadata.updateDateColumn)\n throw new NoVersionOrUpdateDateColumnError(metadata.name);\n }\n relationIdLoader = new RelationIdLoader(this.connection, queryRunner, this.expressionMap.relationIdAttributes);\n relationCountLoader = new RelationCountLoader(this.connection, queryRunner, this.expressionMap.relationCountAttributes);\n relationIdMetadataTransformer = new RelationIdMetadataToAttributeTransformer(this.expressionMap);\n relationIdMetadataTransformer.transform();\n relationCountMetadataTransformer = new RelationCountMetadataToAttributeTransformer(this.expressionMap);\n relationCountMetadataTransformer.transform();\n rawResults = [], entities = [];\n if (!((this.expressionMap.skip || this.expressionMap.take) && this.expressionMap.joinAttributes.length > 0)) return [3 /*break*/, 4];\n _a = __read(this.createOrderByCombinedWithSelectExpression(\"distinctAlias\"), 2), selects = _a[0], orderBys_1 = _a[1];\n metadata_1 = this.expressionMap.mainAlias.metadata;\n mainAliasName_1 = this.expressionMap.mainAlias.name;\n querySelects = metadata_1.primaryColumns.map(function (primaryColumn) {\n var distinctAlias = _this.escape(\"distinctAlias\");\n var columnAlias = _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, mainAliasName_1, primaryColumn.databaseName));\n if (!orderBys_1[columnAlias]) // make sure we aren't overriding user-defined order in inverse direction\n orderBys_1[columnAlias] = \"ASC\";\n var alias = DriverUtils.buildColumnAlias(_this.connection.driver, \"ids_\" + mainAliasName_1, primaryColumn.databaseName);\n return distinctAlias + \".\" + columnAlias + \" as \\\"\" + alias + \"\\\"\";\n });\n return [4 /*yield*/, new SelectQueryBuilder(this.connection, queryRunner)\n .select(\"DISTINCT \" + querySelects.join(\", \"))\n .addSelect(selects)\n .from(\"(\" + this.clone().orderBy().getQuery() + \")\", \"distinctAlias\")\n .offset(this.expressionMap.skip)\n .limit(this.expressionMap.take)\n .orderBy(orderBys_1)\n .cache(this.expressionMap.cache ? this.expressionMap.cache : this.expressionMap.cacheId, this.expressionMap.cacheDuration)\n .setParameters(this.getParameters())\n .setNativeParameters(this.expressionMap.nativeParameters)\n .getRawMany()];\n case 1:\n rawResults = _b.sent();\n if (!(rawResults.length > 0)) return [3 /*break*/, 3];\n condition = \"\";\n parameters_1 = {};\n if (metadata_1.hasMultiplePrimaryKeys) {\n condition = rawResults.map(function (result, index) {\n return metadata_1.primaryColumns.map(function (primaryColumn) {\n var paramKey = \"orm_distinct_ids_\" + index + \"_\" + primaryColumn.databaseName;\n parameters_1[paramKey] = result[\"ids_\" + mainAliasName_1 + \"_\" + primaryColumn.databaseName];\n return mainAliasName_1 + \".\" + primaryColumn.propertyPath + \"=:\" + paramKey;\n }).join(\" AND \");\n }).join(\" OR \");\n }\n else {\n alias_1 = DriverUtils.buildColumnAlias(this.connection.driver, \"ids_\" + mainAliasName_1, metadata_1.primaryColumns[0].databaseName);\n ids = rawResults.map(function (result) { return result[alias_1]; });\n areAllNumbers = ids.every(function (id) { return typeof id === \"number\"; });\n if (areAllNumbers) {\n // fixes #190. if all numbers then its safe to perform query without parameter\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (\" + ids.join(\", \") + \")\";\n }\n else {\n parameters_1[\"orm_distinct_ids\"] = ids;\n condition = mainAliasName_1 + \".\" + metadata_1.primaryColumns[0].propertyPath + \" IN (:...orm_distinct_ids)\";\n }\n }\n return [4 /*yield*/, this.clone()\n .mergeExpressionMap({ extraAppendedAndWhereCondition: condition })\n .setParameters(parameters_1)\n .loadRawResults(queryRunner)];\n case 2:\n rawResults = _b.sent();\n _b.label = 3;\n case 3: return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, this.loadRawResults(queryRunner)];\n case 5:\n rawResults = _b.sent();\n _b.label = 6;\n case 6:\n if (!(rawResults.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, relationIdLoader.load(rawResults)];\n case 7:\n rawRelationIdResults = _b.sent();\n return [4 /*yield*/, relationCountLoader.load(rawResults)];\n case 8:\n rawRelationCountResults = _b.sent();\n transformer = new RawSqlResultsToEntityTransformer(this.expressionMap, this.connection.driver, rawRelationIdResults, rawRelationCountResults, this.queryRunner);\n entities = transformer.transform(rawResults, this.expressionMap.mainAlias);\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastLoadEventsForAll(broadcastResult, this.expressionMap.mainAlias.metadata, entities);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, {\n raw: rawResults,\n entities: entities,\n }];\n }\n });\n });\n };\n SelectQueryBuilder.prototype.createOrderByCombinedWithSelectExpression = function (parentAlias) {\n var _this = this;\n // if table has a default order then apply it\n var orderBys = this.expressionMap.allOrderBys;\n var selectString = Object.keys(orderBys)\n .map(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n return _this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName));\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; }))\n return _this.escape(parentAlias) + \".\" + orderCriteria;\n return \"\";\n }\n })\n .join(\", \");\n var orderByObject = {};\n Object.keys(orderBys).forEach(function (orderCriteria) {\n if (orderCriteria.indexOf(\".\") !== -1) {\n var criteriaParts = orderCriteria.split(\".\");\n var aliasName = criteriaParts[0];\n var propertyPath = criteriaParts.slice(1).join(\".\");\n var alias = _this.expressionMap.findAliasByName(aliasName);\n var column = alias.metadata.findColumnWithPropertyPath(propertyPath);\n orderByObject[_this.escape(parentAlias) + \".\" + _this.escape(DriverUtils.buildColumnAlias(_this.connection.driver, aliasName, column.databaseName))] = orderBys[orderCriteria];\n }\n else {\n if (_this.expressionMap.selects.find(function (select) { return select.selection === orderCriteria || select.aliasName === orderCriteria; })) {\n orderByObject[_this.escape(parentAlias) + \".\" + orderCriteria] = orderBys[orderCriteria];\n }\n else {\n orderByObject[orderCriteria] = orderBys[orderCriteria];\n }\n }\n });\n return [selectString, orderByObject];\n };\n /**\n * Loads raw results from the database.\n */\n SelectQueryBuilder.prototype.loadRawResults = function (queryRunner) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryId, cacheOptions, savedQueryResultCacheOptions, results;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryId = sql + \" -- PARAMETERS: \" + JSON.stringify(parameters);\n cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n savedQueryResultCacheOptions = undefined;\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 2];\n return [4 /*yield*/, this.connection.queryResultCache.getFromCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000\n }, queryRunner)];\n case 1:\n savedQueryResultCacheOptions = _b.sent();\n if (savedQueryResultCacheOptions && !this.connection.queryResultCache.isExpired(savedQueryResultCacheOptions))\n return [2 /*return*/, JSON.parse(savedQueryResultCacheOptions.result)];\n _b.label = 2;\n case 2: return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 3:\n results = _b.sent();\n if (!(this.connection.queryResultCache && (this.expressionMap.cache || cacheOptions.alwaysEnabled))) return [3 /*break*/, 5];\n return [4 /*yield*/, this.connection.queryResultCache.storeInCache({\n identifier: this.expressionMap.cacheId,\n query: queryId,\n time: new Date().getTime(),\n duration: this.expressionMap.cacheDuration || cacheOptions.duration || 1000,\n result: JSON.stringify(results)\n }, savedQueryResultCacheOptions, queryRunner)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5: return [2 /*return*/, results];\n }\n });\n });\n };\n /**\n * Merges into expression map given expression map properties.\n */\n SelectQueryBuilder.prototype.mergeExpressionMap = function (expressionMap) {\n ObjectUtils.assign(this.expressionMap, expressionMap);\n return this;\n };\n /**\n * Normalizes a give number - converts to int if possible.\n */\n SelectQueryBuilder.prototype.normalizeNumber = function (num) {\n if (typeof num === \"number\" || num === undefined || num === null)\n return num;\n return Number(num);\n };\n /**\n * Creates a query builder used to execute sql queries inside this query builder.\n */\n SelectQueryBuilder.prototype.obtainQueryRunner = function () {\n return this.queryRunner || this.connection.createQueryRunner(\"slave\");\n };\n return SelectQueryBuilder;\n}(QueryBuilder));\nexport { SelectQueryBuilder };\n\n//# sourceMappingURL=SelectQueryBuilder.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\n/**\n * Stores all join relation id attributes which will be used to build a JOIN query.\n */\nvar RelationIdAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationIdAttribute(queryExpressionMap, relationIdAttribute) {\n this.queryExpressionMap = queryExpressionMap;\n /**\n * Indicates if relation id should NOT be loaded as id map.\n */\n this.disableMixedMap = false;\n ObjectUtils.assign(this, relationIdAttribute || {});\n }\n Object.defineProperty(RelationIdAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(0, this.relationName.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.substr(this.relationName.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n var relationOwnerSelection = this.queryExpressionMap.findAliasByName(this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(this.relationPropertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + this.relationPropertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rid\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"junctionMetadata\", {\n /**\n * Metadata of the joined entity.\n * If extra condition without entity was joined, then it will return undefined.\n */\n get: function () {\n return this.relation.junctionEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n return this.mapToProperty.substr(0, this.mapToProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationIdAttribute.prototype, \"mapToPropertyPropertyPath\", {\n get: function () {\n return this.mapToProperty.substr(this.mapToProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n return RelationIdAttribute;\n}());\nexport { RelationIdAttribute };\n\n//# sourceMappingURL=RelationIdAttribute.js.map\n","import { __read } from \"tslib\";\nimport { QueryBuilderUtils } from \"../QueryBuilderUtils\";\nimport { ObjectUtils } from \"../../util/ObjectUtils\";\nvar RelationCountAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationCountAttribute(expressionMap, relationCountAttribute) {\n this.expressionMap = expressionMap;\n ObjectUtils.assign(this, relationCountAttribute || {});\n }\n Object.defineProperty(RelationCountAttribute.prototype, \"joinInverseSideMetadata\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n return this.relation.inverseEntityMetadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value must be a string representation of alias property\");\n return this.relationName.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relationProperty\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n return this.relationName.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"junctionAlias\", {\n get: function () {\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], relationProperty = _a[1];\n return parentAlias + \"_\" + relationProperty + \"_rc\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var _a = __read(this.relationName.split(\".\"), 2), parentAlias = _a[0], propertyPath = _a[1];\n var relationOwnerSelection = this.expressionMap.findAliasByName(parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(propertyPath);\n if (!relation)\n throw new Error(\"Relation with property path \" + propertyPath + \" in entity was not found.\");\n return relation;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.relationName))\n throw new Error(\"Given value is a string representation of alias property\");\n var parentAlias = this.relationName.split(\".\")[0];\n var selection = this.expressionMap.findAliasByName(parentAlias);\n return selection.metadata;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RelationCountAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return RelationCountAttribute;\n}());\nexport { RelationCountAttribute };\n\n//# sourceMappingURL=RelationCountAttribute.js.map\n","import { __awaiter, __generator } from \"tslib\";\nimport { OrmUtils } from \"../util/OrmUtils\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Updates entity with returning results in the entity insert and update operations.\n */\nvar ReturningResultsEntityUpdator = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function ReturningResultsEntityUpdator(queryRunner, expressionMap) {\n this.queryRunner = queryRunner;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Updates entities with a special columns after updation query execution.\n */\n ReturningResultsEntityUpdator.prototype.update = function (updateResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n return [4 /*yield*/, Promise.all(entities.map(function (entity, entityIndex) { return __awaiter(_this, void 0, void 0, function () {\n var result, returningColumns, updationColumns, entityId, loadedReturningColumns;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.queryRunner.connection.driver.isReturningSqlSupported()) return [3 /*break*/, 1];\n if (this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(updateResult.raw) && this.expressionMap.extraReturningColumns.length > 0) {\n updateResult.raw = updateResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n result = Array.isArray(updateResult.raw) ? updateResult.raw[entityIndex] : updateResult.raw;\n returningColumns = this.queryRunner.connection.driver.createGeneratedMap(metadata, result);\n if (returningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, returningColumns);\n updateResult.generatedMaps.push(returningColumns);\n }\n return [3 /*break*/, 3];\n case 1:\n updationColumns = this.getUpdationReturningColumns();\n if (!(updationColumns.length > 0)) return [3 /*break*/, 3];\n entityId = this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(this.getUpdationReturningColumns().map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityId)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getOne()];\n case 2:\n loadedReturningColumns = _a.sent();\n if (loadedReturningColumns) {\n this.queryRunner.manager.merge(metadata.target, entity, loadedReturningColumns);\n updateResult.generatedMaps.push(loadedReturningColumns);\n }\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); }))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Updates entities with a special columns after insertion query execution.\n */\n ReturningResultsEntityUpdator.prototype.insert = function (insertResult, entities) {\n return __awaiter(this, void 0, void 0, function () {\n var metadata, insertionColumns, generatedMaps, entityIds, returningResult_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n metadata = this.expressionMap.mainAlias.metadata;\n insertionColumns = this.getInsertionReturningColumns();\n generatedMaps = entities.map(function (entity, entityIndex) {\n if (_this.queryRunner.connection.driver instanceof OracleDriver && Array.isArray(insertResult.raw) && _this.expressionMap.extraReturningColumns.length > 0) {\n insertResult.raw = insertResult.raw.reduce(function (newRaw, rawItem, rawItemIndex) {\n newRaw[_this.expressionMap.extraReturningColumns[rawItemIndex].databaseName] = rawItem[0];\n return newRaw;\n }, {});\n }\n // get all values generated by a database for us\n var result = Array.isArray(insertResult.raw) ? insertResult.raw[entityIndex] : insertResult.raw;\n var generatedMap = _this.queryRunner.connection.driver.createGeneratedMap(metadata, result, entityIndex, entities.length) || {};\n // if database does not support uuid generation we need to get uuid values\n // generated by orm and set them to the generatedMap\n if (_this.queryRunner.connection.driver.isUUIDGenerationSupported() === false) {\n metadata.generatedColumns.forEach(function (generatedColumn) {\n if (generatedColumn.generationStrategy === \"uuid\") {\n // uuid can be defined by user in a model, that's why first we get it\n var uuid = generatedColumn.getEntityValue(entity);\n if (!uuid) // if it was not defined by a user then InsertQueryBuilder generates it by its own, get this generated uuid value\n uuid = _this.expressionMap.nativeParameters[\"uuid_\" + generatedColumn.databaseName + entityIndex];\n OrmUtils.mergeDeep(generatedMap, generatedColumn.createValueMap(uuid));\n }\n });\n }\n _this.queryRunner.manager.merge(metadata.target, entity, generatedMap); // todo: this should not be here, but problem with below line\n return generatedMap;\n });\n if (!(this.queryRunner.connection.driver.isReturningSqlSupported() === false && insertionColumns.length > 0)) return [3 /*break*/, 2];\n entityIds = entities.map(function (entity) {\n var entityId = metadata.getEntityIdMap(entity);\n // We have to check for an empty `entityId` - if we don't, the query against the database\n // effectively drops the `where` clause entirely and the first record will be returned -\n // not what we want at all.\n if (!entityId)\n throw new Error(\"Cannot update entity because entity id is not set in the entity.\");\n return entityId;\n });\n return [4 /*yield*/, this.queryRunner.manager\n .createQueryBuilder()\n .select(metadata.primaryColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .addSelect(insertionColumns.map(function (column) { return metadata.targetName + \".\" + column.propertyPath; }))\n .from(metadata.target, metadata.targetName)\n .where(entityIds)\n .setOption(\"create-pojo\") // use POJO because created object can contain default values, e.g. property = null and those properties maight be overridden by merge process\n .getMany()];\n case 1:\n returningResult_1 = _a.sent();\n entities.forEach(function (entity, entityIndex) {\n _this.queryRunner.manager.merge(metadata.target, generatedMaps[entityIndex], returningResult_1[entityIndex]);\n });\n _a.label = 2;\n case 2:\n entities.forEach(function (entity, entityIndex) {\n var entityId = metadata.getEntityIdMap(entity);\n insertResult.identifiers.push(entityId);\n insertResult.generatedMaps.push(generatedMaps[entityIndex]);\n _this.queryRunner.manager.merge(_this.expressionMap.mainAlias.metadata.target, entity, generatedMaps[entityIndex], generatedMaps[entityIndex]); // todo: why twice?!\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Columns we need to be returned from the database when we insert entity.\n */\n ReturningResultsEntityUpdator.prototype.getInsertionReturningColumns = function () {\n // for databases which support returning statement we need to return extra columns like id\n // for other databases we don't need to return id column since its returned by a driver already\n var needToCheckGenerated = this.queryRunner.connection.driver.isReturningSqlSupported();\n // filter out the columns of which we need database inserted values to update our entity\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.default !== undefined ||\n (needToCheckGenerated && column.isGenerated) ||\n column.isCreateDate ||\n column.isUpdateDate ||\n column.isDeleteDate ||\n column.isVersion;\n });\n };\n /**\n * Columns we need to be returned from the database when we update entity.\n */\n ReturningResultsEntityUpdator.prototype.getUpdationReturningColumns = function () {\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n return column.isUpdateDate || column.isVersion;\n });\n };\n return ReturningResultsEntityUpdator;\n}());\nexport { ReturningResultsEntityUpdator };\n\n//# sourceMappingURL=ReturningResultsEntityUpdator.js.map\n","var TableUtils = /** @class */ (function () {\n function TableUtils() {\n }\n TableUtils.createTableColumnOptions = function (columnMetadata, driver) {\n return {\n name: columnMetadata.databaseName,\n length: columnMetadata.length,\n width: columnMetadata.width,\n charset: columnMetadata.charset,\n collation: columnMetadata.collation,\n precision: columnMetadata.precision,\n scale: columnMetadata.scale,\n zerofill: columnMetadata.zerofill,\n unsigned: columnMetadata.unsigned,\n asExpression: columnMetadata.asExpression,\n generatedType: columnMetadata.generatedType,\n default: driver.normalizeDefault(columnMetadata),\n onUpdate: columnMetadata.onUpdate,\n comment: columnMetadata.comment,\n isGenerated: columnMetadata.isGenerated,\n generationStrategy: columnMetadata.generationStrategy,\n isNullable: columnMetadata.isNullable,\n type: driver.normalizeType(columnMetadata),\n isPrimary: columnMetadata.isPrimary,\n isUnique: driver.normalizeIsUnique(columnMetadata),\n isArray: columnMetadata.isArray || false,\n enum: columnMetadata.enum ? columnMetadata.enum.map(function (val) { return val + \"\"; }) : columnMetadata.enum,\n enumName: columnMetadata.enumName,\n spatialFeatureType: columnMetadata.spatialFeatureType,\n srid: columnMetadata.srid\n };\n };\n return TableUtils;\n}());\nexport { TableUtils };\n\n//# sourceMappingURL=TableUtils.js.map\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSite = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"../Site/LoginSite\");\nconst NotAllowedSite_1 = require(\"../Site/NotAllowedSite\");\nclass UserSite extends client_1.DelegateSite {\n constructor(site, access, allowOfflineAccess) {\n super(site);\n this._access = access;\n this._allowOfflineAccess = shared_1.Helper.nonNull(allowOfflineAccess, false);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().waitForGetMe();\n if (yield this._checkRights()) {\n let res = yield _super.onConstruct.call(this, constructParameters);\n UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => __awaiter(this, void 0, void 0, function* () {\n yield this._checkRights();\n }), false);\n return res;\n }\n });\n }\n _checkRights() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(UserManager_1.UserManager.getInstance().hasAccess(this._access) || (this._allowOfflineAccess && (yield UserManager_1.UserManager.getInstance().hasOfflineAccess(this._access))))) {\n // if (this.isShowing() && !this.isDestroying()) {\n // await this.startSite(NotAllowedSite);\n // }\n if (UserManager_1.UserManager.getInstance().isOnline() && !UserManager_1.UserManager.getInstance().isLoggedIn() && !(this._site instanceof LoginSite_1.LoginSite)) {\n this.startSite(LoginSite_1.LoginSite, {\n deepLink: this._site._siteManager.getDeepLinkFor(this._site),\n args: this._site.getParameters()\n });\n }\n else if (this._site._siteManager.getCurrentSite() === this._site && !this.isDestroying()) {\n new client_1.Toast(\"wrong rights\").show();\n yield this.startSite(NotAllowedSite_1.NotAllowedSite);\n }\n if (!this.isDestroying()) {\n yield this.finish();\n }\n return false;\n }\n return true;\n });\n }\n onStart(args) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (yield this._checkRights()) {\n yield _super.onStart.call(this, args);\n }\n });\n }\n}\nexports.UserSite = UserSite;\n//# sourceMappingURL=UserSite.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./shared/Translator\"), exports);\n//# sourceMappingURL=shared.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncClientDb = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst ClientModel_1 = require(\"./ClientModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst ClientPartialModel_1 = require(\"./ClientPartialModel\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass EasySyncClientDb extends cordova_sites_database_1.BaseDatabase {\n constructor(dbName) {\n super(dbName || \"EasySync\");\n }\n _createConnectionOptions(database) {\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel, ClientModel_1.ClientModel);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel, ClientPartialModel_1.ClientPartialModel);\n JSObject.setPrototypeOf(EasySyncBaseModel_1.EasySyncBaseModel.prototype, ClientModel_1.ClientModel.prototype);\n JSObject.setPrototypeOf(EasySyncPartialModel_1.EasySyncPartialModel.prototype, ClientPartialModel_1.ClientPartialModel.prototype);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium, ClientFileMedium_1.ClientFileMedium);\n JSObject.setPrototypeOf(FileMedium_1.FileMedium.prototype, ClientFileMedium_1.ClientFileMedium.prototype);\n let options = super._createConnectionOptions(database);\n options[\"migrationsTableName\"] = \"migrations\";\n return options;\n }\n}\nexports.EasySyncClientDb = EasySyncClientDb;\nEasySyncClientDb.BASE_MODEL = null;\nclient_1.App.addInitialization(() => __awaiter(void 0, void 0, void 0, function* () {\n yield EasySyncClientDb.getInstance()._connectionPromise.catch(function (e) {\n if (typeof EasySyncClientDb.errorListener === \"function\") {\n return EasySyncClientDb.errorListener(...arguments);\n }\n else {\n throw (e);\n }\n });\n}));\n//# sourceMappingURL=EasySyncClientDb.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LastSyncDates = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass LastSyncDates extends cordova_sites_database_1.BaseModel {\n constructor() {\n super();\n this.model = \"\";\n this.lastSynced = 0;\n this.where = {};\n }\n getModel() {\n return this.model;\n }\n setModel(model) {\n this.model = model;\n }\n getLastSynced() {\n return this.lastSynced;\n }\n setLastSynced(lastSynced) {\n this.lastSynced = lastSynced;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"model\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, nullable: true };\n columns[\"lastSynced\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER, nullable: true };\n columns[\"where\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON };\n return columns;\n }\n}\nexports.LastSyncDates = LastSyncDates;\nLastSyncDates.SCHEMA_NAME = \"easy-sync-last-sync-dates\";\ncordova_sites_database_1.BaseDatabase.addModel(LastSyncDates);\n//# sourceMappingURL=LastSyncDates.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when a version check on an object that uses optimistic locking through a version field fails.\n */\nvar OptimisticLockVersionMismatchError = /** @class */ (function (_super) {\n __extends(OptimisticLockVersionMismatchError, _super);\n function OptimisticLockVersionMismatchError(entity, expectedVersion, actualVersion) {\n var _this = _super.call(this) || this;\n _this.name = \"OptimisticLockVersionMismatchError\";\n Object.setPrototypeOf(_this, OptimisticLockVersionMismatchError.prototype);\n _this.message = \"The optimistic lock on entity \" + entity + \" failed, version \" + expectedVersion + \" was expected, but is actually \" + actualVersion + \".\";\n return _this;\n }\n return OptimisticLockVersionMismatchError;\n}(Error));\nexport { OptimisticLockVersionMismatchError };\n\n//# sourceMappingURL=OptimisticLockVersionMismatchError.js.map\n","/**\n * Result object returned by InsertQueryBuilder execution.\n */\nvar InsertResult = /** @class */ (function () {\n function InsertResult() {\n /**\n * Contains inserted entity id.\n * Has entity-like structure (not just column database name and values).\n */\n this.identifiers = [];\n /**\n * Generated values returned by a database.\n * Has entity-like structure (not just column database name and values).\n */\n this.generatedMaps = [];\n }\n return InsertResult;\n}());\nexport { InsertResult };\n\n//# sourceMappingURL=InsertResult.js.map\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$
') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractSite = void 0;\nconst Context_1 = require(\"./Context\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Basisklasse für eine Seite\n */\nclass AbstractSite extends Context_1.Context {\n /**\n * Construktor für eine Seite, sollte überladen werden und view sollte definiert werden. Seitenkonstruktoren bekommen NUR den siteManager übergebn\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(view);\n this._isDestroying = false;\n this._isDestroying = false;\n //Promise und Resolver, welches erfüllt wird, wenn Seite beendet wird\n this._finishPromiseResolver = {\n resolve: null,\n reject: null\n };\n this._finishPromise = new Promise((resolve, reject) => {\n this._finishPromiseResolver = { resolve: resolve, reject: reject };\n });\n //Promise, welches erfüllt wird, wenn onConstruct-Promsise erfüllt wurde. Wird für onDestroy gebraucht\n this._onConstructPromise = null;\n this._parameters = {};\n this._result = null;\n this._siteManager = siteManager;\n this._title = {\n element: null,\n text: null\n };\n this._loadingSymbol = null;\n //Wird zum speichern der zugehörigen HistoryID genutzt\n this._historyId = null;\n }\n getTitle() {\n return this._title;\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n this.setParameters(Helper_1.Helper.nonNull(constructParameters, {}));\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_CONSTRUCT, {\n site: this, params: constructParameters\n });\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n this._updateTitle();\n this.updateUrl(this._parameters);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_START, {\n site: this, params: pauseArguments\n });\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_VIEW_LOADED, {\n site: this\n });\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_PAUSE, {\n site: this\n });\n return res;\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onDestroy.call(this);\n EventManager_1.EventManager.trigger(AbstractSite.EVENT.ON_DESTROY, {\n site: this\n });\n return res;\n });\n }\n /**\n * Setzt den Titel der Website\n *\n * @param titleElement\n * @param title\n */\n setTitle(titleElement, title) {\n if (typeof titleElement === \"string\") {\n let args = title;\n title = titleElement;\n titleElement = Translator_1.Translator.makePersistentTranslation(title, args);\n }\n title = Helper_1.Helper.nonNull(title, titleElement.textContent);\n this._title = {\n element: titleElement,\n text: title\n };\n this._updateTitle();\n }\n setParameter(name, value) {\n this._parameters[name] = value;\n this.updateUrl(this._parameters);\n }\n setParameters(parameters) {\n this._parameters = parameters;\n this.updateUrl(this._parameters);\n }\n getParameters() {\n return this._parameters;\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._loadingSymbol)) {\n this._loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n let view = yield this.getViewPromise();\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n view.appendChild(this._loadingSymbol);\n }\n }\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._loadingSymbol)) {\n this._loadingSymbol.remove();\n this._loadingSymbol = null;\n }\n });\n }\n onBeforeUnload(e) {\n return null;\n }\n /**\n * Updatet den Title der Webseite\n * @protected\n */\n _updateTitle() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateTitle(this._title.text);\n }\n }\n updateUrl(args) {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.updateUrl(this, args);\n }\n }\n /**\n * Startet eine andere Seite mit den angegebenen Parametern\n *\n * @param site\n * @param args\n * @returns {*|Promise<*>}\n */\n startSite(site, args) {\n return this._siteManager.startSite(site, args);\n }\n /**\n * Alias für\n * this.startSite(...);\n * this.finish(...);\n *\n * @param site\n * @param args\n * @param result\n * @returns {*|Promise<*>}\n */\n finishAndStartSite(site, args, result) {\n let res = this.startSite(site, args);\n this.finish(result);\n return res;\n }\n /**\n * Beendet die aktuelle Seite. Kann ein Ergebnis setzen\n *\n * @param result\n */\n finish(result) {\n if (!(this._isDestroying || this._state === Context_1.Context.STATE_DESTROYED)) {\n this._isDestroying = true;\n if (Helper_1.Helper.isNotNull(result)) {\n this.setResult(result);\n }\n return this._siteManager.endSite(this);\n }\n }\n goBack() {\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this._siteManager.goBack();\n }\n }\n /**\n * Wird aufgerufen, falls zurück gedrückt wird. Gib false zurück, um das beenden der Seite zu verhindern\n */\n onBackPressed() {\n }\n /**\n * TODO Einbauen\n */\n onMenuPressed() {\n }\n /**\n * TODO Einbauen\n */\n onSearchPressed() {\n }\n /**\n * Gibt das FinishPromise zurück\n * @returns {Promise}\n */\n getFinishPromise() {\n return this._finishPromise;\n }\n /**\n * Setzt das Resultat. Letztes Setzen gilt\n * @param result\n */\n setResult(result) {\n this._result = result;\n }\n /**\n * Gibt den FinishResolver zurück. Genutzt, um FinishPromise zu resolven order rejecten\n * @returns {*}\n */\n getFinishResolver() {\n return this._finishPromiseResolver;\n }\n addEventListener(siteEvent, listener) {\n return EventManager_1.EventManager.getInstance().addListener(siteEvent, data => {\n if (data.site && data.site instanceof this.constructor) {\n listener(data);\n }\n });\n }\n isDestroying() {\n return this._isDestroying;\n }\n}\nexports.AbstractSite = AbstractSite;\nAbstractSite.EVENT = {\n ON_CONSTRUCT: \"abstract-site-on-construct\",\n ON_VIEW_LOADED: \"abstract-site-on-view-loaded\",\n ON_START: \"abstract-site-on-start\",\n ON_PAUSE: \"abstract-site-on-pause\",\n ON_DESTROY: \"abstract-site-on-destroy\"\n};\n//# sourceMappingURL=AbstractSite.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client/Dragger/DragHelper\"), exports);\n__exportStar(require(\"./client/Dragger/DraggedElement\"), exports);\n__exportStar(require(\"./client/HotkeyManager\"), exports);\n__exportStar(require(\"./client/InputSelect\"), exports);\n__exportStar(require(\"./client/ViewHelper\"), exports);\n//# sourceMappingURL=client.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _typeorm = require(\"typeorm\");\nlet typeorm = _typeorm;\nclass BaseDatabase {\n constructor(database) {\n let options = this._createConnectionOptions(database);\n this._connectionPromise = this._createConnection(options);\n }\n _createConnection(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (options.type === \"sqljs\") {\n //wait for SQL to be initialized\n window[\"SQL\"] = yield window[\"initSqlJs\"]();\n }\n return typeorm.createConnection(options).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n });\n }\n _createConnectionOptions(database) {\n let options = BaseDatabase.CONNECTION_OPTIONS;\n if (typeof device === \"undefined\" || device.platform !== \"browser\") {\n options.type = \"cordova\";\n options.database = database;\n }\n else {\n let saveTimeout = null;\n options.type = \"sqljs\";\n options.location = database;\n options.autoSave = true;\n options.useLocalForage = true;\n //Deactivated delay of saving since PRAGMA foreign_keys = ON is not saved with delay (why ever!)\n // options.autoSaveCallback = function () {\n // clearTimeout(saveTimeout);\n // saveTimeout = setTimeout(() => {\n // typeorm.getSqljsManager().saveDatabase();\n // }, 150);\n // }\n }\n options.entities = this.getEntityDefinitions();\n // options.migrations = this.constructor._migrations;\n return options;\n }\n getEntityDefinitions() {\n let entities = [];\n Object.keys(BaseDatabase._models).forEach(modelName => {\n BaseDatabase._models[modelName]._database = this;\n entities.push(new typeorm.EntitySchema(BaseDatabase._models[modelName].getSchemaDefinition()));\n });\n // console.log(\"entities\", entities);\n return entities;\n }\n saveEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = null;\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n repository = yield this._getRepository(entity[0].constructor);\n }\n else {\n repository = yield this._getRepository(entity.constructor);\n }\n return repository.save(entity);\n });\n }\n static _buildQuery(where, order, limit, offset, relations) {\n let query = {};\n if (where) {\n query[\"where\"] = where;\n }\n if (order) {\n query[\"order\"] = order;\n }\n if (limit) {\n query[\"take\"] = limit;\n }\n if (offset) {\n query[\"skip\"] = offset;\n }\n if (relations) {\n query[\"relations\"] = relations;\n }\n return query;\n }\n static _setLoaded(models) {\n return __awaiter(this, void 0, void 0, function* () {\n models = yield models;\n if (models === null || models === undefined) {\n return null;\n }\n let isArray = Array.isArray(models);\n if (!isArray) {\n models = [models];\n }\n models.forEach(models => models.setLoaded(true));\n return (isArray) ? models : models[0];\n });\n }\n findEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.find(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findAndCountEntities(model, where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findAndCount(BaseDatabase._buildQuery(where, order, limit, offset, relations)));\n });\n }\n findOneEntity(model, where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(BaseDatabase._buildQuery(where, order, undefined, offset, relations)));\n });\n }\n findById(model, id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findOne(id, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n findByIds(model, ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return BaseDatabase._setLoaded(repository.findByIds(ids, BaseDatabase._buildQuery(undefined, undefined, undefined, undefined, relations)));\n });\n }\n clearModel(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let repository = yield this._getRepository(model);\n return repository.clear();\n });\n }\n _getRepository(model) {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.getRepository(model);\n });\n }\n createQueryBuilder(model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (model) {\n let repo = yield this._getRepository(model);\n return repo.createQueryBuilder(model.getSchemaName());\n }\n else {\n let connection = yield this._connectionPromise;\n return connection.createQueryBuilder();\n }\n });\n }\n createQueryRunner() {\n return __awaiter(this, void 0, void 0, function* () {\n let connection = yield this._connectionPromise;\n return connection.createQueryRunner();\n });\n }\n deleteEntity(entity, model) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Array.isArray(entity)) {\n if (entity.length === 0) {\n return entity;\n }\n if (!model) {\n model = entity[0].constructor;\n }\n if (typeof entity[0] !== \"number\") {\n let ids = [];\n entity.forEach(ent => ids.push(ent.id));\n entity = ids;\n }\n }\n else {\n if (!model) {\n model = entity.constructor;\n }\n if (typeof entity !== \"number\") {\n entity = entity.id;\n }\n }\n let repository = yield this._getRepository(model);\n return repository.delete(entity);\n });\n }\n rawQuery(sql, params) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this._connectionPromise).query(sql, params);\n });\n }\n waitForConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._connectionPromise;\n });\n }\n /**\n * @return {BaseDatabase}\n */\n static getInstance() {\n if (!this.instance) {\n this.instance = new this();\n }\n return this.instance;\n }\n static addModel(model) {\n BaseDatabase._models[model.getSchemaName()] = model;\n }\n static getModel(modelName) {\n if (modelName) {\n return this._models[modelName];\n }\n else {\n return this._models;\n }\n }\n}\nexports.BaseDatabase = BaseDatabase;\nBaseDatabase._models = {};\nBaseDatabase.CONNECTION_OPTIONS = {\n location: \"default\",\n // autoSave: true,\n logging: [\"error\", \"warn\"],\n synchronize: true,\n};\nBaseDatabase.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\",\n};\n//# sourceMappingURL=BaseDatabase.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LoginSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/loginSite.html\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst ForgotPasswordSite_1 = require(\"./ForgotPasswordSite\");\nclass LoginSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#login-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n // await this.showLoadingSymbol();\n if (yield UserManager_1.UserManager.getInstance().login(data[\"email\"], data[\"password\"], client_1.Helper.isNotNull(data[\"saveLogin\"]))) {\n new client_1.Toast(\"welcome back\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email or password is wrong\"\n });\n // await this.removeLoadingSymbol();\n }\n }));\n let listener = () => form.clearErrors();\n this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n this.findBy(\"#forgot-pw\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.startSite(ForgotPasswordSite_1.ForgotPasswordSite);\n }));\n return res;\n });\n }\n}\nexports.LoginSite = LoginSite;\nLoginSite.ACCESS = \"loggedOut\";\nLoginSite.LOGOUT_ACCESS = \"loggedIn\";\nLoginSite.ADD_LOGIN_ACTION = true;\nLoginSite.ADD_LOGOUT_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (LoginSite.ADD_LOGIN_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"login\", LoginSite.ACCESS, LoginSite));\n }\n if (LoginSite.ADD_LOGOUT_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"logout\", LoginSite.LOGOUT_ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n yield UserManager_1.UserManager.getInstance().logout();\n })));\n }\n app.addDeepLink(\"login\", LoginSite);\n});\n//# sourceMappingURL=LoginSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserMenuAction = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"../UserManager\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass UserMenuAction extends client_1.MenuAction {\n constructor(name, access, action, showFor, order, icon) {\n super(name, action, showFor, order, icon);\n this._access = access;\n this._loginChangedCallbackId = UserManager_1.UserManager.getInstance().addLoginChangeCallback(() => {\n this.redraw();\n });\n }\n isVisible() {\n return (super.isVisible() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n isActivated() {\n return (super.isActivated() && UserManager_1.UserManager.getInstance().hasAccess(this._access));\n }\n copy(action) {\n let copiedAction = Helper_1.Helper.nonNull(action, new UserMenuAction());\n copiedAction._access = this._access;\n return super.copy(copiedAction);\n }\n}\nexports.UserMenuAction = UserMenuAction;\n//# sourceMappingURL=UserMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientFileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst FileTransferPromise_1 = require(\"./FileWriter/FileTransferPromise\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FileWriter/FilePromise\");\nclass ClientFileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n setLoaded(isLoaded) {\n // @ts-ignore\n super.setLoaded(isLoaded);\n this._isDownloaded = true;\n FilePromise_1.FilePromise.open(this.src, { create: false }).then(() => this._isDownloaded = true).catch(e => {\n console.log(\"not downloaded, yet!\");\n this._isDownloaded = false;\n ClientFileMedium._handleImages(this);\n });\n }\n save() {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(this);\n return _super.save.call(this);\n });\n }\n static saveMany(entities) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield ClientFileMedium._handleImages(entities);\n return _super.saveMany.call(this, entities);\n });\n }\n static _handleImages(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n let isArray = Array.isArray(entities);\n if (!isArray) {\n entities = [entities];\n }\n yield Helper_1.Helper.asyncForEach(entities, (entity) => __awaiter(this, void 0, void 0, function* () {\n if (entity.saveOffline && device.platform !== \"browser\" && !entity.src.startsWith(\"data\") && !entity.src.startsWith(\"http\") && !entity.src.startsWith(\"//\")) {\n yield new FileTransferPromise_1.FileTransferPromise(entity.getServerUrl(false), entity.src).download().catch(e => console.log(e));\n entity._isDownloaded = true;\n }\n }), true);\n });\n }\n}\nexports.ClientFileMedium = ClientFileMedium;\n//# sourceMappingURL=ClientFileMedium.js.map","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to create entity id map from the mixed id value,\n * but id value is a single value when entity requires multiple values.\n */\nvar CannotCreateEntityIdMapError = /** @class */ (function (_super) {\n __extends(CannotCreateEntityIdMapError, _super);\n function CannotCreateEntityIdMapError(metadata, id) {\n var _this = _super.call(this) || this;\n _this.name = \"CannotCreateEntityIdMapError\";\n Object.setPrototypeOf(_this, CannotCreateEntityIdMapError.prototype);\n var objectExample = metadata.primaryColumns.reduce(function (object, column, index) {\n column.setEntityValue(object, index + 1);\n return object;\n }, {});\n _this.message = \"Cannot use given entity id \\\"\" + id + \"\\\" because \\\"\" + metadata.targetName + \"\\\" contains multiple primary columns, you must provide object in following form: \" + JSON.stringify(objectExample) + \" as an id.\";\n return _this;\n }\n return CannotCreateEntityIdMapError;\n}(Error));\nexport { CannotCreateEntityIdMapError };\n\n//# sourceMappingURL=CannotCreateEntityIdMapError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when a transaction is required for the current operation, but there is none open.\n */\nvar PessimisticLockTransactionRequiredError = /** @class */ (function (_super) {\n __extends(PessimisticLockTransactionRequiredError, _super);\n function PessimisticLockTransactionRequiredError() {\n var _this = _super.call(this) || this;\n _this.name = \"PessimisticLockTransactionRequiredError\";\n Object.setPrototypeOf(_this, PessimisticLockTransactionRequiredError.prototype);\n _this.message = \"An open transaction is required for pessimistic lock.\";\n return _this;\n }\n return PessimisticLockTransactionRequiredError;\n}(Error));\nexport { PessimisticLockTransactionRequiredError };\n\n//# sourceMappingURL=PessimisticLockTransactionRequiredError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when an entity does not have no version and no update date column.\n */\nvar NoVersionOrUpdateDateColumnError = /** @class */ (function (_super) {\n __extends(NoVersionOrUpdateDateColumnError, _super);\n function NoVersionOrUpdateDateColumnError(entity) {\n var _this = _super.call(this) || this;\n _this.name = \"NoVersionOrUpdateDateColumnError\";\n Object.setPrototypeOf(_this, NoVersionOrUpdateDateColumnError.prototype);\n _this.message = \"Entity \" + entity + \" does not have version or update date columns.\";\n return _this;\n }\n return NoVersionOrUpdateDateColumnError;\n}(Error));\nexport { NoVersionOrUpdateDateColumnError };\n\n//# sourceMappingURL=NoVersionOrUpdateDateColumnError.js.map\n","/**\n * Syntax sugar.\n * Allows to use brackets in WHERE expressions for better syntax.\n */\nvar Brackets = /** @class */ (function () {\n /**\n * Given WHERE query builder that will build a WHERE expression that will be taken into brackets.\n */\n function Brackets(whereFactory) {\n this.whereFactory = whereFactory;\n }\n return Brackets;\n}());\nexport { Brackets };\n\n//# sourceMappingURL=Brackets.js.map\n","import { FindOperator } from \"../FindOperator\";\n/**\n * Find Options Operator.\n * Example: { someField: In([...]) }\n */\nexport function In(value) {\n return new FindOperator(\"in\", value, true, true);\n}\n\n//# sourceMappingURL=In.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to insert using QueryBuilder but do not specify what to insert.\n */\nvar InsertValuesMissingError = /** @class */ (function (_super) {\n __extends(InsertValuesMissingError, _super);\n function InsertValuesMissingError() {\n var _this = _super.call(this) || this;\n _this.name = \"InsertValuesMissingError\";\n Object.setPrototypeOf(_this, InsertValuesMissingError.prototype);\n _this.message = \"Cannot perform insert query because values are not defined. Call \\\"qb.values(...)\\\" method to specify inserted values.\";\n return _this;\n }\n return InsertValuesMissingError;\n}(Error));\nexport { InsertValuesMissingError };\n\n//# sourceMappingURL=InsertValuesMissingError.js.map\n","/**\n * Result object returned by DeleteQueryBuilder execution.\n */\nvar DeleteResult = /** @class */ (function () {\n function DeleteResult() {\n }\n return DeleteResult;\n}());\nexport { DeleteResult };\n\n//# sourceMappingURL=DeleteResult.js.map\n","import { __extends } from \"tslib\";\n/**\n */\nvar MissingDeleteDateColumnError = /** @class */ (function (_super) {\n __extends(MissingDeleteDateColumnError, _super);\n function MissingDeleteDateColumnError(entityMetadata) {\n var _this = _super.call(this) || this;\n _this.name = \"MissingDeleteDateColumnError\";\n Object.setPrototypeOf(_this, MissingDeleteDateColumnError.prototype);\n _this.message = \"Entity \\\"\" + entityMetadata.name + \"\\\" does not have delete date columns.\";\n return _this;\n }\n return MissingDeleteDateColumnError;\n}(Error));\nexport { MissingDeleteDateColumnError };\n\n//# sourceMappingURL=MissingDeleteDateColumnError.js.map\n","import { __extends } from \"tslib\";\n/**\n * Thrown when user tries to build SELECT query using OFFSET without LIMIT applied but database does not support it.\n*/\nvar OffsetWithoutLimitNotSupportedError = /** @class */ (function (_super) {\n __extends(OffsetWithoutLimitNotSupportedError, _super);\n function OffsetWithoutLimitNotSupportedError() {\n var _this = _super.call(this) || this;\n _this.name = \"OffsetWithoutLimitNotSupportedError\";\n Object.setPrototypeOf(_this, OffsetWithoutLimitNotSupportedError.prototype);\n _this.message = \"RDBMS does not support OFFSET without LIMIT in SELECT statements. You must use limit in conjunction with offset function (or take in conjunction with skip function if you are using pagination).\";\n return _this;\n }\n return OffsetWithoutLimitNotSupportedError;\n}(Error));\nexport { OffsetWithoutLimitNotSupportedError };\n\n//# sourceMappingURL=OffsetWithoutLimitNotSupportedError.js.map\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NavbarFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultViewNavbar = require(\"../../../html/siteTemplates/navbar.html\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Context_1 = require(\"../Context\");\nconst Menu_1 = require(\"./Menu\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\nconst DropdownRenderer_1 = require(\"./Renderer/DropdownRenderer\");\nconst AccordionRenderer_1 = require(\"./Renderer/AccordionRenderer\");\nconst ColorIndicator_1 = require(\"../../ColorIndicator/ColorIndicator\");\nconst App_1 = require(\"../../App\");\n/**\n * Fragment, welches ein Menü in der Navbar anzeigt und hinzufügt.\n *\n * Technisch gesehen wird das gleiche Menü zwei mal gerendert und hinzugefügt. Einmal das Menü in der Navbar, welches\n * immer sichtbar ist und einmal das versteckte Menü, welches durch einen Toggle-Button angezeigt werden kann.\n * Dabei hat jede MenuAction eine Sichtbarkeitsklasse. Anhand der Sichtbarkeitsklasse und der Bildschirmgröße wird\n * entweder das eine oder das andere Element sichtbar, jedoch niemals beide.\n */\nclass NavbarFragment extends AbstractFragment_1.AbstractFragment {\n /**\n * Erstellt das Fragment\n * @param site\n * @param {string|Node|null} viewNavbar\n */\n constructor(site, viewNavbar) {\n super(site, Helper_1.Helper.nonNull(viewNavbar, defaultViewNavbar));\n this._menu = null;\n this._responsiveMenu = null;\n this._backgroundImage = \"\";\n this._menuActions = [];\n NavbarFragment.defaultActions.forEach(action => {\n this._menuActions.push(action.copy());\n });\n this._scrollWidget = null;\n this._canGoBack = true;\n this._logo = App_1.App.getLogo();\n }\n setLogo(logo) {\n this._logo = logo;\n if (this._view) {\n if (Helper_1.Helper.isNotNull(this._logo)) {\n this.findBy(\".logo\").classList.remove(\"hidden\");\n this.findBy(\".logo-img\").src = this._logo;\n }\n else {\n this.findBy(\".logo\").classList.add(\"hidden\");\n }\n }\n }\n setCanGoBack(canGoBack) {\n this._canGoBack = canGoBack;\n if (this._view) {\n if (this._canGoBack) {\n this.findBy(\".back-button\").classList.remove(\"hidden\");\n }\n else {\n this.findBy(\".back-button\").classList.add(\"hidden\");\n }\n }\n }\n setScrollWidget(scrollWidget) {\n this._scrollWidget = scrollWidget;\n if (this._view && this._scrollWidget) {\n let nav = this.findBy(\".top-bar > span\");\n let background = this.findBy(\".background-img\");\n let listener = () => {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (nav.getBoundingClientRect().bottom >= background.getBoundingClientRect().bottom) {\n navbarElem.classList.add(\"solid\");\n }\n else {\n navbarElem.classList.remove(\"solid\");\n }\n };\n background.addEventListener(\"load\", listener);\n scrollWidget.addEventListener(\"scroll\", listener);\n requestAnimationFrame(listener);\n }\n }\n setBackgroundImage(backgroundImage) {\n this._backgroundImage = backgroundImage;\n if (this._view) {\n let navbarElem = this.findBy(\"nav.top-bar\");\n if (Helper_1.Helper.isNotNull(this._backgroundImage)) {\n let imgElem = this.findBy(\".background-img\");\n let colorIndicator = ColorIndicator_1.ColorIndicator.getInstance();\n // navbarElem.classList.add(\"color-black\");\n imgElem.addEventListener(\"load\", () => {\n if (this._backgroundImage !== \"\") {\n let color = (colorIndicator.getAverageImgColor(imgElem, undefined, 150));\n let textColor = colorIndicator.invertColorBW(color);\n if (textColor.r === 0 && textColor.g === 0 && textColor.b === 0) {\n navbarElem.classList.remove(\"color-white\");\n navbarElem.classList.add(\"color-black\");\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.add(\"color-white\");\n }\n }\n else {\n navbarElem.classList.remove(\"color-black\");\n navbarElem.classList.remove(\"color-white\");\n }\n });\n requestAnimationFrame(() => {\n let heightElement = navbarElem.querySelector(\".grid-container\");\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n if (entry.borderBoxSize) {\n navbarElem.style = \"min-height:\" + entry.borderBoxSize[0].blockSize + \"px\";\n }\n else if (entry.contentRect) {\n navbarElem.style = \"min-height:\" + entry.contentRect.height + \"px\";\n }\n else {\n console.log(\"entry\", entry);\n }\n });\n });\n resizeObserver.observe(heightElement);\n }\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 500);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1000);\n setTimeout(() => {\n navbarElem.style = \"min-height:\" + heightElement.getBoundingClientRect().height + \"px\";\n }, 1500);\n });\n imgElem.src = this._backgroundImage;\n navbarElem.classList.add(\"with-image\");\n }\n else {\n navbarElem.classList.remove(\"with-image\");\n }\n }\n }\n /**\n * Wird aufgerufen, sobald die View geladen ist\n * @returns {Promise<*>}\n */\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.setTitleElement(document.createTextNode(NavbarFragment.title));\n //Erstelle die Renderers und das Menü\n let renderers = [];\n renderers.push(new DropdownRenderer_1.DropdownRenderer(this.findBy(\"#navbar-menu-visible\")));\n renderers.push(new AccordionRenderer_1.AccordionRenderer(this.findBy(\"#navbar-menu-hidden\")));\n this._menu = new Menu_1.Menu(renderers, this._menuActions);\n this._closeListenerContainer = this.findBy(\"#navbar-close-listener-container\");\n //Falls im visible-submenu eine Submenu-Action zu sehen ist\n this._menu.setOpenSubmenuListener(() => {\n this._showCloseListener();\n });\n //Falls ein Element im Menü angeklickt wird, sollte das Menü geschlossen werden,\n //außer dadurch wird ein Untermenü geöffnet/geschlossen\n let oldListener = this._menu.getOnClickListener();\n this._menu.setOnClickListener(e => {\n if (!(oldListener(e) instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.closeMenu();\n }\n });\n //Fügt close/open-Listener für den Toggle-Button hinzu\n this._responsiveMenu = this.findBy(\"#responsive-menu\");\n this.findBy(\"#responsive-menu-toggle\").onclick = () => {\n if (this._responsiveMenu.classList.contains(\"visible\")) {\n this.closeMenu();\n }\n else {\n this.openMenu();\n }\n };\n //Wenn das \"versteckte\" Menü geöffnet ist, sollte jeder Click nicht auf das Menü dieses wieder schließen\n //Dazu gibt es den navbar-close-listener der sich vor allen (außer dem Menü) befindet. Er wird nur angezeigt,\n //wenn das Menü offen ist\n let navbarFragment = this;\n this.findBy(\"#navbar-close-listener\").addEventListener(\"click\", function (e) {\n if (e.target === this) {\n navbarFragment.closeMenu();\n }\n });\n //Wenn die größe des Fenster geändert wird, muss nachgeschaut werden, ob der Menü-Button für das hidden-Menü noch angezeigt werden muss\n window.addEventListener('resize', () => {\n //Reicht aus, wenn Seite im Vordergrund, da bei jedem Start (durch onStart) der toggleButton geupdatet wird\n if (this._state === Context_1.Context.STATE_RUNNING) {\n this.updateToggleButton();\n }\n });\n //Rendere das Menü\n this.drawMenu();\n this.findBy(\".back-button\").addEventListener(\"click\", () => {\n this.goBack();\n });\n this.findBy(\".logo\").addEventListener(\"click\", () => {\n if (NavbarFragment.onLogoClickListener) {\n NavbarFragment.onLogoClickListener(this.getSite());\n }\n });\n this.setCanGoBack(this._canGoBack);\n this.setBackgroundImage(this._backgroundImage);\n this.setScrollWidget(this._scrollWidget);\n this.setLogo(this._logo);\n return res;\n });\n }\n goBack() {\n if (this._canGoBack) {\n this.getSite().goBack();\n }\n }\n /**\n * Jedes mal, wenn die Seite startet, update den toggleButton\n *\n * @param pauseArguments\n * @returns {Promise}\n */\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n _super.onStart.call(this, pauseArguments);\n this.updateToggleButton();\n });\n }\n _showCloseListener() {\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'block';\n }\n }\n /**\n * Schließe das Menü\n */\n closeMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n this._responsiveMenu.classList.remove(\"visible\");\n this._view.classList.remove(\"navbar-is-open\");\n }\n if (this._closeListenerContainer) {\n this._closeListenerContainer.style.display = 'none';\n }\n if (this._menu) {\n this._menu.close();\n }\n }\n /**\n * Öffne das Menü\n */\n openMenu() {\n if (Helper_1.Helper.isNotNull(this._responsiveMenu)) {\n // this._responsiveMenu.style.display = 'block';\n this._responsiveMenu.classList.add(\"visible\");\n this._view.classList.add(\"navbar-is-open\");\n }\n this._showCloseListener();\n }\n /**\n * rendere das Menü\n */\n drawMenu() {\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.draw();\n }\n }\n /**\n * Update die Sichtbarkeit des MenüButtons für das \"versteckte\" Menü\n */\n updateToggleButton() {\n //Bekomme die aktuelle Bildschirm-größe als Foundation-Klasse\n let size = NavbarFragment._getCurrentSize();\n //schaue hier nach den enthaltenen Elementen. Evtl sollte das direkt an den MenüActions gemacht werden\n let firstParentElement = this.findBy(\"#navbar-menu-visible\");\n if (\n //Es existieren Elemente für large und Bildschirmgröße ist kleiner large => ToggleButton muss angezeigt werden\n (size === \"medium\" || size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_LARGE + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für medium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"smedium\" || size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_MEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente für smedium und Bildschirmgröße ist kleiner medium=> ToggleButton muss angezeigt werden\n (size === \"small\") &&\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_FOR_SMEDIUM + \":not(.hidden)\").length > 0 ||\n //Es existieren Elemente, welche nie angezeigt werden sollen => ToggleButton muss angezeigt werden\n firstParentElement.querySelectorAll(\".\" + MenuAction_1.MenuAction.SHOW_NEVER + \":not(.hidden)\").length > 0) {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'block';\n }\n else {\n document.getElementById(\"responsive-menu-toggle\").style.display = 'none';\n //schließe Menü, falls es offen war\n this.closeMenu();\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param action\n */\n addAction(action) {\n this._menuActions.push(action);\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.addAction(action);\n }\n }\n /**\n * Funktion zum hinzufügen von Actions\n * @param redraw\n */\n removeAllActions(redraw) {\n this._menuActions = [];\n //Falls Menü schon existiert, füge Elemente hinzu\n if (Helper_1.Helper.isNotNull(this._menu)) {\n this._menu.removeAllActions(redraw);\n }\n }\n /**\n * Updatet das Title-Element\n * @param titleElement\n */\n setTitleElement(titleElement) {\n Helper_1.Helper.removeAllChildren(this.findBy(\"#title-element-container\")).appendChild(titleElement);\n }\n /**\n * Gibt die aktuelle Size zurück\n *\n * @returns {*}\n * @private\n */\n static _getCurrentSize() {\n let matched;\n //Queries sind paare von css-selektoren auf die Mindest-Breite und Namen\n //Queries sind so geordnet, dass größter zum schluss kommt\n let queries = NavbarFragment._getViewQueries();\n for (let i = 0; i < queries.length; i++) {\n let query = queries[i];\n //Letzter sollte matchen, daher noch nicht breaken\n if (matchMedia(query._value).matches) {\n matched = query;\n }\n }\n if (typeof matched === 'object') {\n return matched._name;\n }\n else {\n return matched;\n }\n }\n /**\n * Gibt die ViewQueries zurück, triggert die Berechnung der ViewQueries, falls das noch nicht geschehen ist\n *\n * @returns {Array}\n * @private\n */\n static _getViewQueries() {\n if (NavbarFragment.queries.length === 0) {\n NavbarFragment.queries = NavbarFragment._calculateViewQueries();\n }\n return NavbarFragment.queries;\n }\n /**\n * Berechnet die ViewQueries, bzw liest diese aus Foundation/CSS ein\n * Eine Veränderung der Werte in SASS, verändert daher auch hier die Werte\n *\n * @returns {*}\n * @private\n */\n static _calculateViewQueries() {\n //Hilfs-Funktion zum Parsen der Bildschirmgröße\n function parseStyleToObject(str) {\n let styleObject = {};\n if (typeof str !== 'string') {\n return styleObject;\n }\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n if (!str) {\n return styleObject;\n }\n styleObject = str.split('&').reduce(function (ret, param) {\n const parts = param.replace(/\\+/g, ' ').split('=');\n let key = parts[0];\n let val = parts[1];\n key = decodeURIComponent(key);\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = val === undefined ? null : decodeURIComponent(val);\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n }\n else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n }\n else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n return styleObject;\n }\n //die Font-Family ist reiner Text. Daher übergibt Foundation die Bildchirmgröße mit den dazugehörigen Namen als\n // Font-Family in einem Element im Head\n let cssStyle = document.getElementsByClassName('foundation-mq');\n if (cssStyle.length === 0) {\n return;\n }\n let queries = [];\n //Lade Bildschirmgrößen und speichere diese als Query in einem Array\n let cssStyleElements = parseStyleToObject(window.getComputedStyle(cssStyle[0]).getPropertyValue('font-family'));\n for (let key in cssStyleElements) {\n if (cssStyleElements.hasOwnProperty(key)) {\n //Erstelle aus der Bildschirmgröße die Queries\n queries.push({\n _name: key,\n _value: 'only screen and (min-width: ' + cssStyleElements[key] + ')'\n });\n }\n }\n return queries;\n }\n /**\n * Setzt den Listener, welcher ausgeführt wird, wenn auf das Logo geklickt wird\n *\n * @param listener\n */\n static setOnLogoClickListener(listener) {\n this.onLogoClickListener = listener;\n }\n}\nexports.NavbarFragment = NavbarFragment;\nNavbarFragment.queries = [];\nNavbarFragment.onLogoClickListener = () => App_1.App.addInitialization(app => app.startStartingSite());\nNavbarFragment.title = \"MeinBerufBau\";\nNavbarFragment.defaultActions = [];\n//# sourceMappingURL=NavbarFragment.js.map","import { __values } from \"tslib\";\nimport { QueryBuilderUtils } from \"./QueryBuilderUtils\";\nimport { ObjectUtils } from \"../util/ObjectUtils\";\n/**\n * Stores all join attributes which will be used to build a JOIN query.\n */\nvar JoinAttribute = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function JoinAttribute(connection, queryExpressionMap, joinAttribute) {\n this.connection = connection;\n this.queryExpressionMap = queryExpressionMap;\n this.isSelectedEvaluated = false;\n this.relationEvaluated = false;\n ObjectUtils.assign(this, joinAttribute || {});\n }\n Object.defineProperty(JoinAttribute.prototype, \"isMany\", {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n get: function () {\n if (this.isMappingMany !== undefined)\n return this.isMappingMany;\n if (this.relation)\n return this.relation.isManyToMany || this.relation.isOneToMany;\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"isSelected\", {\n /**\n * Indicates if this join is selected.\n */\n get: function () {\n var _this = this;\n if (!this.isSelectedEvaluated) {\n var getValue = function () {\n var e_1, _a;\n var _loop_1 = function (select) {\n if (select.selection === _this.alias.name)\n return { value: true };\n if (_this.metadata && !!_this.metadata.columns.find(function (column) { return select.selection === _this.alias.name + \".\" + column.propertyPath; }))\n return { value: true };\n };\n try {\n for (var _b = __values(_this.queryExpressionMap.selects), _c = _b.next(); !_c.done; _c = _b.next()) {\n var select = _c.value;\n var state_1 = _loop_1(select);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n };\n this.isSelectedCache = getValue();\n this.isSelectedEvaluated = true;\n }\n return this.isSelectedCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"tablePath\", {\n /**\n * Name of the table which we should join.\n */\n get: function () {\n return this.metadata ? this.metadata.tablePath : this.entityOrProperty;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"parentAlias\", {\n /**\n * Alias of the parent of this join.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"post\" is a parent alias.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(0, this.entityOrProperty.indexOf(\".\"));\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relationPropertyPath\", {\n /**\n * Relation property name of the parent.\n * This is used to understand what is joined.\n * For example, if we join (\"post.category\", \"categoryAlias\") then \"category\" is a relation property.\n * This value is extracted from entityOrProperty value.\n * This is available when join was made using \"post.category\" syntax.\n */\n get: function () {\n if (!QueryBuilderUtils.isAliasProperty(this.entityOrProperty))\n return undefined;\n return this.entityOrProperty.substr(this.entityOrProperty.indexOf(\".\") + 1);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"relation\", {\n /**\n * Relation of the parent.\n * This is used to understand what is joined.\n * This is available when join was made using \"post.category\" syntax.\n * Relation can be undefined if entityOrProperty is regular entity or custom table.\n */\n get: function () {\n var _this = this;\n if (!this.relationEvaluated) {\n var getValue = function () {\n if (!QueryBuilderUtils.isAliasProperty(_this.entityOrProperty))\n return undefined;\n var relationOwnerSelection = _this.queryExpressionMap.findAliasByName(_this.parentAlias);\n var relation = relationOwnerSelection.metadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n if (relationOwnerSelection.metadata.parentEntityMetadata) {\n relation = relationOwnerSelection.metadata.parentEntityMetadata.findRelationWithPropertyPath(_this.relationPropertyPath);\n if (relation) {\n return relation;\n }\n }\n throw new Error(\"Relation with property path \" + _this.relationPropertyPath + \" in entity was not found.\");\n };\n this.relationCache = getValue.bind(this)();\n this.relationEvaluated = true;\n }\n return this.relationCache;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"metadata\", {\n /**\n * Metadata of the joined entity.\n * If table without entity was joined, then it will return undefined.\n */\n get: function () {\n // entityOrProperty is relation, e.g. \"post.category\"\n if (this.relation)\n return this.relation.inverseEntityMetadata;\n // entityOrProperty is Entity class\n if (this.connection.hasMetadata(this.entityOrProperty))\n return this.connection.getMetadata(this.entityOrProperty);\n return undefined;\n /*if (typeof this.entityOrProperty === \"string\") { // entityOrProperty is a custom table\n \n // first try to find entity with such name, this is needed when entity does not have a target class,\n // and its target is a string name (scenario when plain old javascript is used or entity schema is loaded from files)\n const metadata = this.connection.entityMetadatas.find(metadata => metadata.name === this.entityOrProperty);\n if (metadata)\n return metadata;\n \n // check if we have entity with such table name, and use its metadata if found\n return this.connection.entityMetadatas.find(metadata => metadata.tableName === this.entityOrProperty);\n }*/\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"junctionAlias\", {\n /**\n * Generates alias of junction table, whose ids we get.\n */\n get: function () {\n if (!this.relation)\n throw new Error(\"Cannot get junction table for join without relation.\");\n return this.relation.isOwning ? this.parentAlias + \"_\" + this.alias.name : this.alias.name + \"_\" + this.parentAlias;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyParentAlias\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[0];\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(JoinAttribute.prototype, \"mapToPropertyPropertyName\", {\n get: function () {\n if (!this.mapToProperty)\n return undefined;\n return this.mapToProperty.split(\".\")[1];\n },\n enumerable: false,\n configurable: true\n });\n return JoinAttribute;\n}());\nexport { JoinAttribute };\n\n//# sourceMappingURL=JoinAttribute.js.map\n","/**\n * This class stores up and down queries needed for migrations functionality.\n */\nvar SqlInMemory = /** @class */ (function () {\n function SqlInMemory() {\n this.upQueries = [];\n this.downQueries = [];\n }\n return SqlInMemory;\n}());\nexport { SqlInMemory };\n\n//# sourceMappingURL=SqlInMemory.js.map\n","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { Query } from \"../driver/Query\";\nimport { SqlInMemory } from \"../driver/SqlInMemory\";\nvar BaseQueryRunner = /** @class */ (function () {\n function BaseQueryRunner() {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n /**\n * Indicates if connection for this query runner is released.\n * Once its released, query runner cannot run queries anymore.\n */\n this.isReleased = false;\n /**\n * Indicates if transaction is in progress.\n */\n this.isTransactionActive = false;\n /**\n * Stores temporarily user data.\n * Useful for sharing data with subscribers.\n */\n this.data = {};\n /**\n * All synchronized tables in the database.\n */\n this.loadedTables = [];\n /**\n * All synchronized views in the database.\n */\n this.loadedViews = [];\n /**\n * Indicates if special query runner mode in which sql queries won't be executed is enabled.\n */\n this.sqlMemoryMode = false;\n /**\n * Sql-s stored if \"sql in memory\" mode is enabled.\n */\n this.sqlInMemory = new SqlInMemory();\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Loads given table's data from the database.\n */\n BaseQueryRunner.prototype.getTable = function (tablePath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables([tablePath])];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables.length > 0 ? this.loadedTables[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads all tables (with given names) from the database.\n */\n BaseQueryRunner.prototype.getTables = function (tableNames) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadTables(tableNames)];\n case 1:\n _a.loadedTables = _b.sent();\n return [2 /*return*/, this.loadedTables];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getView = function (viewPath) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews([viewPath])];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews.length > 0 ? this.loadedViews[0] : undefined];\n }\n });\n });\n };\n /**\n * Loads given view's data from the database.\n */\n BaseQueryRunner.prototype.getViews = function (viewPaths) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.loadViews(viewPaths)];\n case 1:\n _a.loadedViews = _b.sent();\n return [2 /*return*/, this.loadedViews];\n }\n });\n });\n };\n /**\n * Enables special query runner mode in which sql queries won't be executed,\n * instead they will be memorized into a special variable inside query runner.\n * You can get memorized sql using getMemorySql() method.\n */\n BaseQueryRunner.prototype.enableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = true;\n };\n /**\n * Disables special query runner mode in which sql queries won't be executed\n * started by calling enableSqlMemory() method.\n *\n * Previously memorized sql will be flushed.\n */\n BaseQueryRunner.prototype.disableSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n this.sqlMemoryMode = false;\n };\n /**\n * Flushes all memorized sqls.\n */\n BaseQueryRunner.prototype.clearSqlMemory = function () {\n this.sqlInMemory = new SqlInMemory();\n };\n /**\n * Gets sql stored in the memory. Parameters in the sql are already replaced.\n */\n BaseQueryRunner.prototype.getMemorySql = function () {\n return this.sqlInMemory;\n };\n /**\n * Executes up sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryUpSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_1_1;\n var e_1, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.upQueries), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes down sql queries.\n */\n BaseQueryRunner.prototype.executeMemoryDownSql = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, _c, query, parameters, e_2_1;\n var e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n _e.trys.push([0, 5, 6, 7]);\n _a = __values(this.sqlInMemory.downQueries.reverse()), _b = _a.next();\n _e.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n _c = _b.value, query = _c.query, parameters = _c.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 2:\n _e.sent();\n _e.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Gets view from previously loaded views, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedView = function (viewName) {\n return __awaiter(this, void 0, void 0, function () {\n var view, foundViews;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n view = this.loadedViews.find(function (view) { return view.name === viewName; });\n if (view)\n return [2 /*return*/, view];\n return [4 /*yield*/, this.loadViews([viewName])];\n case 1:\n foundViews = _a.sent();\n if (foundViews.length > 0) {\n this.loadedViews.push(foundViews[0]);\n return [2 /*return*/, foundViews[0]];\n }\n else {\n throw new Error(\"View \\\"\" + viewName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets table from previously loaded tables, otherwise loads it from database.\n */\n BaseQueryRunner.prototype.getCachedTable = function (tableName) {\n return __awaiter(this, void 0, void 0, function () {\n var table, foundTables;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n table = this.loadedTables.find(function (table) { return table.name === tableName; });\n if (table)\n return [2 /*return*/, table];\n return [4 /*yield*/, this.loadTables([tableName])];\n case 1:\n foundTables = _a.sent();\n if (foundTables.length > 0) {\n this.loadedTables.push(foundTables[0]);\n return [2 /*return*/, foundTables[0]];\n }\n else {\n throw new Error(\"Table \\\"\" + tableName + \"\\\" does not exist.\");\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Replaces loaded table with given changed table.\n */\n BaseQueryRunner.prototype.replaceCachedTable = function (table, changedTable) {\n var foundTable = this.loadedTables.find(function (loadedTable) { return loadedTable.name === table.name; });\n if (foundTable) {\n foundTable.name = changedTable.name;\n foundTable.columns = changedTable.columns;\n foundTable.indices = changedTable.indices;\n foundTable.foreignKeys = changedTable.foreignKeys;\n foundTable.uniques = changedTable.uniques;\n foundTable.checks = changedTable.checks;\n foundTable.justCreated = changedTable.justCreated;\n foundTable.engine = changedTable.engine;\n }\n };\n BaseQueryRunner.prototype.getTypeormMetadataTableName = function () {\n var options = this.connection.driver.options;\n return this.connection.driver.buildTableName(\"typeorm_metadata\", options.schema, options.database);\n };\n /**\n * Checks if at least one of column properties was changed.\n * Does not checks column type, length and autoincrement, because these properties changes separately.\n */\n BaseQueryRunner.prototype.isColumnChanged = function (oldColumn, newColumn, checkDefault, checkComment) {\n // this logs need to debug issues in column change detection. Do not delete it!\n // console.log(\"charset ---------------\");\n // console.log(oldColumn.charset !== newColumn.charset);\n // console.log(oldColumn.charset, newColumn.charset);\n // console.log(\"collation ---------------\");\n // console.log(oldColumn.collation !== newColumn.collation);\n // console.log(oldColumn.collation, newColumn.collation);\n // console.log(\"precision ---------------\");\n // console.log(oldColumn.precision !== newColumn.precision);\n // console.log(oldColumn.precision, newColumn.precision);\n // console.log(\"scale ---------------\");\n // console.log(oldColumn.scale !== newColumn.scale);\n // console.log(oldColumn.scale, newColumn.scale);\n // console.log(\"default ---------------\");\n // console.log((checkDefault && oldColumn.default !== newColumn.default));\n // console.log(oldColumn.default, newColumn.default);\n // console.log(\"isNullable ---------------\");\n // console.log(oldColumn.isNullable !== newColumn.isNullable);\n // console.log(oldColumn.isNullable, newColumn.isNullable);\n // console.log(\"comment ---------------\");\n // console.log((checkComment && oldColumn.comment !== newColumn.comment));\n // console.log(oldColumn.comment, newColumn.comment);\n // console.log(\"enum ---------------\");\n // console.log(oldColumn.enum !== newColumn.enum);\n // console.log(oldColumn.enum, newColumn.enum);\n return oldColumn.charset !== newColumn.charset\n || oldColumn.collation !== newColumn.collation\n || oldColumn.precision !== newColumn.precision\n || oldColumn.scale !== newColumn.scale\n || oldColumn.width !== newColumn.width // MySQL only\n || oldColumn.zerofill !== newColumn.zerofill // MySQL only\n || oldColumn.unsigned !== newColumn.unsigned // MySQL only\n || oldColumn.asExpression !== newColumn.asExpression // MySQL only\n || (checkDefault && oldColumn.default !== newColumn.default)\n || oldColumn.onUpdate !== newColumn.onUpdate // MySQL only\n || oldColumn.isNullable !== newColumn.isNullable\n || (checkComment && oldColumn.comment !== newColumn.comment)\n || oldColumn.enum !== newColumn.enum;\n };\n /**\n * Checks if column length is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnLength = function (table, column, length) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.length)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].length) {\n return this.connection.driver.dataTypeDefaults[column.type].length.toString() === length.toString();\n }\n return false;\n };\n /**\n * Checks if column precision is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnPrecision = function (table, column, precision) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.precision !== null && columnMetadata.precision !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].precision !== null\n && this.connection.driver.dataTypeDefaults[column.type].precision !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].precision === precision;\n return false;\n };\n /**\n * Checks if column scale is by default.\n */\n BaseQueryRunner.prototype.isDefaultColumnScale = function (table, column, scale) {\n // if table have metadata, we check if length is specified in column metadata\n if (this.connection.hasMetadata(table.name)) {\n var metadata = this.connection.getMetadata(table.name);\n var columnMetadata = metadata.findColumnWithDatabaseName(column.name);\n if (columnMetadata && columnMetadata.scale !== null && columnMetadata.scale !== undefined)\n return false;\n }\n if (this.connection.driver.dataTypeDefaults\n && this.connection.driver.dataTypeDefaults[column.type]\n && this.connection.driver.dataTypeDefaults[column.type].scale !== null\n && this.connection.driver.dataTypeDefaults[column.type].scale !== undefined)\n return this.connection.driver.dataTypeDefaults[column.type].scale === scale;\n return false;\n };\n /**\n * Executes sql used special for schema build.\n */\n BaseQueryRunner.prototype.executeQueries = function (upQueries, downQueries) {\n return __awaiter(this, void 0, void 0, function () {\n var upQueries_1, upQueries_1_1, _a, query, parameters, e_3_1;\n var _b, _c, e_3, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (upQueries instanceof Query)\n upQueries = [upQueries];\n if (downQueries instanceof Query)\n downQueries = [downQueries];\n (_b = this.sqlInMemory.upQueries).push.apply(_b, __spreadArray([], __read(upQueries)));\n (_c = this.sqlInMemory.downQueries).push.apply(_c, __spreadArray([], __read(downQueries)));\n // if sql-in-memory mode is enabled then simply store sql in memory and return\n if (this.sqlMemoryMode === true)\n return [2 /*return*/, Promise.resolve()];\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n upQueries_1 = __values(upQueries), upQueries_1_1 = upQueries_1.next();\n _e.label = 2;\n case 2:\n if (!!upQueries_1_1.done) return [3 /*break*/, 5];\n _a = upQueries_1_1.value, query = _a.query, parameters = _a.parameters;\n return [4 /*yield*/, this.query(query, parameters)];\n case 3:\n _e.sent();\n _e.label = 4;\n case 4:\n upQueries_1_1 = upQueries_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_3_1 = _e.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (upQueries_1_1 && !upQueries_1_1.done && (_d = upQueries_1.return)) _d.call(upQueries_1);\n }\n finally { if (e_3) throw e_3.error; }\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n return BaseQueryRunner;\n}());\nexport { BaseQueryRunner };\n\n//# sourceMappingURL=BaseQueryRunner.js.map\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass JsonHelper {\n static deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n // array deepEqual\n if (a instanceof Array && b instanceof Array && a.length === b.length) {\n return a[\"every\"]((obj, i) => {\n return JsonHelper.deepEqual(obj, b[i]);\n });\n }\n //date deepEqual\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n // object deep copy\n if (typeof a === \"object\" && typeof b === \"object\") {\n let aKeys = Object.keys(a);\n let bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys[\"every\"]((key) => {\n return Helper_1.Helper.isNotNull(b[key]) && JsonHelper.deepEqual(a[key], b[key]);\n });\n }\n //else is false (or not handled)\n return false;\n }\n /**\n * Deepcopies JSON\n *\n * @param obj\n * @returns {*}\n */\n static deepCopy(obj) {\n // https://stackoverflow.com/questions/4120475/how-to-create-and-clone-a-json-object/17502990#17502990\n let i;\n // basic type deep copy\n if (Helper_1.Helper.isNull(obj) || typeof obj !== 'object') {\n return obj;\n }\n // array deep copy\n if (obj instanceof Array) {\n let cloneA = [];\n for (i = 0; i < obj.length; ++i) {\n cloneA[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneA;\n }\n if (obj instanceof Date) {\n return new Date(obj.getTime());\n }\n // object deep copy\n let cloneO = {};\n for (i in obj) {\n cloneO[i] = JsonHelper.deepCopy(obj[i]);\n }\n return cloneO;\n }\n static deepAssign(...objects) {\n if (objects.length > 0 && Array.isArray(objects)) {\n const result = [];\n objects.forEach(arr => result.push(...arr));\n return result;\n }\n const resultObj = {};\n objects.forEach(obj => {\n for (let i in obj) {\n if (resultObj[i] && typeof obj[i] === \"object\" && typeof resultObj[i] === \"object\") {\n resultObj[i] = JsonHelper.deepAssign(resultObj[i], obj[i]);\n }\n else {\n resultObj[i] = obj[i];\n }\n }\n });\n return resultObj;\n }\n static getDiff(a, b) {\n const result = {\n changed: {},\n added: {},\n removed: [],\n };\n // if (Array.isArray(a) && Array.isArray(b)){\n // const lengthA = a.length;\n // const lengthB = b.length;\n //\n // const minLength = Math.min(lengthA, lengthB);\n // for (let i = 0; i < minLength; i++){\n // const\n // }\n // }\n if ((typeof a !== \"object\" || typeof b !== \"object\")\n && (!Array.isArray(a) && !Array.isArray(b))) {\n if (a === b) {\n return null;\n }\n else {\n return { value: b };\n }\n }\n let hasChanged = false;\n let hasRemoved = false;\n let hasAdded = false;\n for (let i in a) {\n if (i in b) {\n const newVal = JsonHelper.getDiff(a[i], b[i]);\n if (newVal !== null) {\n result.changed[i] = newVal;\n hasChanged = true;\n }\n }\n else {\n result.removed.push(i);\n hasRemoved = true;\n }\n }\n for (let i in b) {\n if (!(i in a)) {\n result.added[i] = b[i];\n hasAdded = true;\n }\n }\n if (hasRemoved || hasAdded || hasChanged) {\n return result;\n }\n else {\n return null;\n }\n }\n static applyDiff(obj, diff) {\n if (!Array.isArray(diff.removed)) {\n debugger;\n }\n Object.keys(diff.changed).forEach(key => {\n if (\"value\" in diff.changed[key]) {\n obj[key] = diff.changed[key].value;\n }\n else {\n obj[key] = JsonHelper.applyDiff(obj[key], diff.changed[key]);\n }\n });\n Object.keys(diff.added).forEach(key => obj[key] = diff.added[key]);\n if (Array.isArray(obj)) {\n diff.removed.sort((a, b) => (parseInt(b) - parseInt(a))).forEach(index => {\n obj.splice(parseInt(index), 1);\n });\n }\n else {\n diff.removed.forEach(rem => delete obj[rem]);\n }\n return obj;\n }\n}\nexports.JsonHelper = JsonHelper;\n//# sourceMappingURL=JsonHelper.js.map","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { RandomGenerator } from \"../util/RandomGenerator\";\nimport { InsertResult } from \"./result/InsertResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { InsertValuesMissingError } from \"../error/InsertValuesMissingError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar InsertQueryBuilder = /** @class */ (function (_super) {\n __extends(InsertQueryBuilder, _super);\n function InsertQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n InsertQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n InsertQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var valueSets, queryRunner, transactionStartedByUs, broadcastResult_1, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, insertSql, parameters, insertResult, statements, _b, broadcastResult_2, error_1, rollbackError_1;\n var _this = this;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n valueSets = this.getValueSets();\n // console.timeEnd(\".value sets\");\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return [2 /*return*/, new InsertResult()];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _c.sent();\n transactionStartedByUs = true;\n _c.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult_1 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult_1, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_1.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult_1.promises)];\n case 4:\n _c.sent();\n _c.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), insertSql = _a[0], parameters = _a[1];\n insertResult = new InsertResult();\n statements = [declareSql, insertSql, selectOutputSql];\n _b = insertResult;\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n _b.raw = _c.sent();\n if (!(this.expressionMap.updateEntity === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n // console.time(\".updating entity\");\n return [4 /*yield*/, returningResultsEntityUpdator.insert(insertResult, valueSets)];\n case 7:\n // console.time(\".updating entity\");\n _c.sent();\n _c.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult_2 = new BroadcasterResult();\n valueSets.forEach(function (valueSet) {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult_2, _this.expressionMap.mainAlias.metadata, valueSet);\n });\n if (!(broadcastResult_2.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult_2.promises)];\n case 9:\n _c.sent();\n _c.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _c.sent();\n _c.label = 12;\n case 12: \n // console.timeEnd(\".commit\");\n return [2 /*return*/, insertResult];\n case 13:\n error_1 = _c.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _c.label = 14;\n case 14:\n _c.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _c.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _c.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _c.sent();\n _c.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _c.sent();\n _c.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n InsertQueryBuilder.prototype.into = function (entityTarget, columns) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return this;\n };\n /**\n * Values needs to be inserted into table.\n */\n InsertQueryBuilder.prototype.values = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n InsertQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n InsertQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n */\n InsertQueryBuilder.prototype.onConflict = function (statement) {\n this.expressionMap.onConflict = statement;\n return this;\n };\n /**\n * Adds additional ignore statement supported in databases.\n */\n InsertQueryBuilder.prototype.orIgnore = function (statement) {\n if (statement === void 0) { statement = true; }\n this.expressionMap.onIgnore = statement;\n return this;\n };\n /**\n * Adds additional update statement supported in databases.\n */\n InsertQueryBuilder.prototype.orUpdate = function (statement) {\n var _this = this;\n this.expressionMap.onUpdate = {};\n if (statement && Array.isArray(statement.conflict_target))\n this.expressionMap.onUpdate.conflict = \" ( \" + statement.conflict_target.map(function (columnName) { return _this.escape(columnName); }).join(\", \") + \" ) \";\n if (statement && typeof statement.conflict_target === \"string\")\n this.expressionMap.onUpdate.conflict = \" ON CONSTRAINT \" + this.escape(statement.conflict_target) + \" \";\n if (statement && Array.isArray(statement.columns))\n this.expressionMap.onUpdate.columns = statement.columns.map(function (column) { return _this.escape(column) + \" = :\" + column; }).join(\", \");\n if (statement && Array.isArray(statement.overwrite)) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return column + \" = VALUES(\" + column + \")\"; }).join(\", \");\n }\n else if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n this.expressionMap.onUpdate.overwrite = statement.overwrite.map(function (column) { return _this.escape(column) + \" = EXCLUDED.\" + _this.escape(column); }).join(\", \");\n }\n }\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates INSERT express used to perform insert query.\n */\n InsertQueryBuilder.prototype.createInsertExpression = function () {\n var _this = this;\n var tableName = this.getTableName(this.getMainTableName());\n var valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n var returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n var columnsExpression = this.createColumnNamesExpression();\n var query = \"INSERT \";\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" IGNORE \" : \"\");\n }\n query += \"INTO \" + tableName;\n // add columns expression\n if (columnsExpression) {\n query += \"(\" + columnsExpression + \")\";\n }\n else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += \" OUTPUT \" + returningExpression;\n }\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += \" \" + valuesExpression;\n }\n else {\n query += \" VALUES \" + valuesExpression;\n }\n }\n else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n }\n else {\n query += \" DEFAULT VALUES\";\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n query += \"\" + (this.expressionMap.onIgnore ? \" ON CONFLICT DO NOTHING \" : \"\");\n query += \"\" + (this.expressionMap.onConflict ? \" ON CONFLICT \" + this.expressionMap.onConflict : \"\");\n if (this.expressionMap.onUpdate) {\n var _a = this.expressionMap.onUpdate, overwrite = _a.overwrite, columns = _a.columns, conflict = _a.conflict;\n query += \"\" + (columns ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON CONFLICT \" + conflict + \" DO UPDATE SET \" + overwrite : \"\");\n }\n }\n else if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n var _b = this.expressionMap.onUpdate, overwrite = _b.overwrite, columns = _b.columns;\n query += \"\" + (columns ? \" ON DUPLICATE KEY UPDATE \" + columns : \"\");\n query += \"\" + (overwrite ? \" ON DUPLICATE KEY UPDATE \" + overwrite : \"\");\n }\n }\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += \" RETURNING \" + returningExpression;\n }\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias.hasMetadata\n && this.expressionMap.mainAlias.metadata.columns\n .filter(function (column) { return _this.expressionMap.insertColumns.length > 0 ? _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert; })\n .some(function (column) { return _this.isOverridingAutoIncrementBehavior(column); })) {\n query = \"SET IDENTITY_INSERT \" + tableName + \" ON; \" + query + \"; SET IDENTITY_INSERT \" + tableName + \" OFF\";\n }\n return query;\n };\n /**\n * Gets list of columns where values must be inserted to.\n */\n InsertQueryBuilder.prototype.getInsertedColumns = function () {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n return [];\n return this.expressionMap.mainAlias.metadata.columns.filter(function (column) {\n // if user specified list of columns he wants to insert to, then we filter only them\n if (_this.expressionMap.insertColumns.length)\n return _this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n // skip columns the user doesn't want included by default\n if (!column.isInsert) {\n return false;\n }\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(_this.connection.driver instanceof OracleDriver)\n && !(_this.connection.driver instanceof AbstractSqliteDriver)\n && !(_this.connection.driver instanceof MysqlDriver)\n && !(_this.connection.driver instanceof AuroraDataApiDriver)\n && !(_this.connection.driver instanceof SqlServerDriver && _this.isOverridingAutoIncrementBehavior(column)))\n return false;\n return true;\n });\n };\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n InsertQueryBuilder.prototype.createColumnNamesExpression = function () {\n var _this = this;\n var columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(function (column) { return _this.escape(column.databaseName); }).join(\", \");\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias.hasMetadata && !this.expressionMap.insertColumns.length) {\n var valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n }\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(function (columnName) { return _this.escape(columnName); }).join(\", \");\n };\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n InsertQueryBuilder.prototype.createValuesExpression = function () {\n var _this = this;\n var valueSets = this.getValueSets();\n var columns = this.getInsertedColumns();\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n var expression_1 = \"\";\n var parametersCount_1 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, valueSetIndex) {\n columns.forEach(function (column, columnIndex) {\n if (columnIndex === 0) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" SELECT \";\n }\n else {\n expression_1 += \"(\";\n }\n }\n var paramName = \"i\" + valueSetIndex + \"_\" + column.databaseName;\n // extract real value from the entity\n var value = column.getEntityValue(valueSet);\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression_1 += \"1\";\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n }\n else if (column.isDiscriminator) {\n _this.expressionMap.nativeParameters[\"discriminator_value_\" + parametersCount_1] = _this.expressionMap.mainAlias.metadata.discriminatorValue;\n expression_1 += _this.connection.driver.createParameter(\"discriminator_value_\" + parametersCount_1, parametersCount_1);\n parametersCount_1++;\n // return \"1\";\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n }\n else if (column.isGenerated && column.generationStrategy === \"uuid\" && !_this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n var paramName_1 = \"uuid_\" + column.databaseName + valueSetIndex;\n value = RandomGenerator.uuid4();\n _this.expressionMap.nativeParameters[paramName_1] = value;\n expression_1 += _this.connection.driver.createParameter(paramName_1, parametersCount_1);\n parametersCount_1++;\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if ((_this.connection.driver instanceof OracleDriver && valueSets.length > 1) || _this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression_1 += _this.connection.driver.normalizeDefault(column);\n }\n else {\n expression_1 += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n }\n else {\n expression_1 += \"DEFAULT\";\n }\n // support for SQL expressions in queries\n }\n else if (value instanceof Function) {\n expression_1 += value();\n // just any other regular value\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver)\n value = _this.connection.driver.parametrizeValue(column, value);\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n _this.expressionMap.nativeParameters[paramName] = value;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + column.srid + \")\";\n }\n else {\n expression_1 += geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression_1 += \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression_1 += \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression_1 += column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount_1) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression_1 += _this.connection.driver.createParameter(paramName, parametersCount_1);\n }\n parametersCount_1++;\n }\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL \";\n }\n else {\n expression_1 += \")\";\n }\n }\n else {\n if (_this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression_1 += \" FROM DUAL UNION ALL \";\n }\n else {\n expression_1 += \"), \";\n }\n }\n }\n else {\n expression_1 += \", \";\n }\n });\n });\n if (expression_1 === \"()\")\n return \"\";\n return expression_1;\n }\n else { // for tables without metadata\n // get values needs to be inserted\n var expression_2 = \"\";\n var parametersCount_2 = Object.keys(this.expressionMap.nativeParameters).length;\n valueSets.forEach(function (valueSet, insertionIndex) {\n var columns = Object.keys(valueSet);\n columns.forEach(function (columnName, columnIndex) {\n if (columnIndex === 0) {\n expression_2 += \"(\";\n }\n var paramName = \"i\" + insertionIndex + \"_\" + columnName;\n var value = valueSet[columnName];\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression_2 += value();\n // if value for this column was not provided then insert default value\n }\n else if (value === undefined) {\n if (_this.connection.driver instanceof AbstractSqliteDriver || _this.connection.driver instanceof SapDriver) {\n expression_2 += \"NULL\";\n }\n else {\n expression_2 += \"DEFAULT\";\n }\n // just any other regular value\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n expression_2 += _this.connection.driver.createParameter(paramName, parametersCount_2);\n parametersCount_2++;\n }\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression_2 += \")\";\n }\n else {\n expression_2 += \"), \";\n }\n }\n else {\n expression_2 += \", \";\n }\n });\n });\n if (expression_2 === \"()\")\n return \"\";\n return expression_2;\n }\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n InsertQueryBuilder.prototype.getValueSets = function () {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n throw new InsertValuesMissingError();\n };\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n InsertQueryBuilder.prototype.isOverridingAutoIncrementBehavior = function (column) {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some(function (valueSet) {\n return column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null;\n });\n };\n return InsertQueryBuilder;\n}(QueryBuilder));\nexport { InsertQueryBuilder };\n\n//# sourceMappingURL=InsertQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { EntityMetadata } from \"../metadata/EntityMetadata\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntityColumnNotFound } from \"../error/EntityColumnNotFound\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar UpdateQueryBuilder = /** @class */ (function (_super) {\n __extends(UpdateQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function UpdateQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n UpdateQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n UpdateQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, declareSql, selectOutputSql, returningResultsEntityUpdator, _a, updateSql, parameters, updateResult, statements, result, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata, this.expressionMap.valuesSet);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n declareSql = null;\n selectOutputSql = null;\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n if (this.expressionMap.extraReturningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", this.expressionMap.extraReturningColumns);\n selectOutputSql = \"SELECT * FROM @OutputTable\";\n }\n }\n _a = __read(this.getQueryAndParameters(), 2), updateSql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n statements = [declareSql, updateSql, selectOutputSql];\n return [4 /*yield*/, queryRunner.query(statements.filter(function (sql) { return sql != null; }).join(\";\\n\\n\"), parameters)];\n case 6:\n result = _b.sent();\n if (this.connection.driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else if (this.connection.driver instanceof MysqlDriver) {\n updateResult.raw = result;\n updateResult.affected = result.affectedRows;\n }\n else if (this.connection.driver instanceof AuroraDataApiDriver) {\n updateResult.raw = result;\n updateResult.affected = result.numberOfRecordsUpdated;\n }\n else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n updateResult.raw = result;\n updateResult.affected = result.changes;\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Values needs to be updated.\n */\n UpdateQueryBuilder.prototype.set = function (values) {\n this.expressionMap.valuesSet = values;\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n UpdateQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n UpdateQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n UpdateQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n UpdateQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n UpdateQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n UpdateQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n UpdateQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n UpdateQueryBuilder.prototype.createUpdateExpression = function () {\n var _this = this;\n var valuesSet = this.getValueSet();\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var updatedColumns = [];\n var newParameters = {};\n var parametersCount = this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver\n ? 0 : Object.keys(this.expressionMap.nativeParameters).length;\n if (metadata) {\n EntityMetadata.createPropertyPath(metadata, valuesSet).forEach(function (propertyPath) {\n // todo: make this and other query builder to work with properly with tables without metadata\n var columns = metadata.findColumnsWithPropertyPath(propertyPath);\n if (columns.length <= 0) {\n throw new EntityColumnNotFound(propertyPath);\n }\n columns.forEach(function (column) {\n if (!column.isUpdate) {\n return;\n }\n updatedColumns.push(column);\n var paramName = \"upd_\" + column.databaseName;\n //\n var value = column.getEntityValue(valuesSet);\n if (column.referencedColumn && value instanceof Object) {\n value = column.referencedColumn.getEntityValue(value);\n }\n else if (!(value instanceof Function)) {\n value = _this.connection.driver.preparePersistentValue(value, column);\n }\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = NULL\");\n }\n else {\n if (_this.connection.driver instanceof SqlServerDriver) {\n value = _this.connection.driver.parametrizeValue(column, value);\n // } else if (value instanceof Array) {\n // value = new ArrayParameter(value);\n }\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[paramName] = value;\n }\n else {\n _this.expressionMap.nativeParameters[paramName] = value;\n }\n var expression = null;\n if ((_this.connection.driver instanceof MysqlDriver || _this.connection.driver instanceof AuroraDataApiDriver) && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n var useLegacy = _this.connection.driver.options.legacySpatialSupport;\n var geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + column.srid + \")\";\n }\n else {\n expression = geomFromText + \"(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")\";\n }\n }\n else if (_this.connection.driver instanceof PostgresDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression = \"ST_SetSRID(ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \"), \" + column.srid + \")::\" + column.type;\n }\n else {\n expression = \"ST_GeomFromGeoJSON(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \")::\" + column.type;\n }\n }\n else if (_this.connection.driver instanceof SqlServerDriver && _this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression = column.type + \"::STGeomFromText(\" + _this.connection.driver.createParameter(paramName, parametersCount) + \", \" + (column.srid || \"0\") + \")\";\n }\n else {\n expression = _this.connection.driver.createParameter(paramName, parametersCount);\n }\n updateColumnAndValues.push(_this.escape(column.databaseName) + \" = \" + expression);\n parametersCount++;\n }\n });\n });\n if (metadata.versionColumn && updatedColumns.indexOf(metadata.versionColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn && updatedColumns.indexOf(metadata.updateDateColumn) === -1)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n }\n else {\n Object.keys(valuesSet).map(function (key) {\n var value = valuesSet[key];\n // todo: duplication zone\n if (value instanceof Function) { // support for SQL expressions in update query\n updateColumnAndValues.push(_this.escape(key) + \" = \" + value());\n }\n else if (_this.connection.driver instanceof SapDriver && value === null) {\n updateColumnAndValues.push(_this.escape(key) + \" = NULL\");\n }\n else {\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n if (_this.connection.driver instanceof MysqlDriver ||\n _this.connection.driver instanceof AuroraDataApiDriver ||\n _this.connection.driver instanceof OracleDriver ||\n _this.connection.driver instanceof AbstractSqliteDriver ||\n _this.connection.driver instanceof SapDriver) {\n newParameters[key] = value;\n }\n else {\n _this.expressionMap.nativeParameters[key] = value;\n }\n updateColumnAndValues.push(_this.escape(key) + \" = \" + _this.connection.driver.createParameter(key, parametersCount));\n parametersCount++;\n }\n });\n }\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof AuroraDataApiDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver ||\n this.connection.driver instanceof SapDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n UpdateQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n UpdateQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n /**\n * Gets array of values need to be inserted into the target table.\n */\n UpdateQueryBuilder.prototype.getValueSet = function () {\n if (this.expressionMap.valuesSet instanceof Object)\n return this.expressionMap.valuesSet;\n throw new UpdateValuesMissingError();\n };\n return UpdateQueryBuilder;\n}(QueryBuilder));\nexport { UpdateQueryBuilder };\n\n//# sourceMappingURL=UpdateQueryBuilder.js.map\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { DeleteResult } from \"./result/DeleteResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { EntitySchema } from \"../index\";\nimport { AuroraDataApiDriver } from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { BetterSqlite3Driver } from \"../driver/better-sqlite3/BetterSqlite3Driver\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar DeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(DeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function DeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n DeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createComment();\n sql += this.createDeleteExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n DeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, sql, parameters, queryRunner, transactionStartedByUs, broadcastResult, deleteResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 11, 16, 21]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n deleteResult = new DeleteResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof MysqlDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.affectedRows;\n }\n else if (driver instanceof AuroraDataApiDriver) {\n deleteResult.raw = result;\n deleteResult.affected = result.numberOfRecordsUpdated;\n }\n else if (driver instanceof SqlServerDriver || driver instanceof PostgresDriver || driver instanceof CockroachDriver) {\n deleteResult.raw = result[0] ? result[0] : null;\n // don't return 0 because it could confuse. null means that we did not receive this value\n deleteResult.affected = typeof result[1] === \"number\" ? result[1] : null;\n }\n else if (driver instanceof OracleDriver) {\n deleteResult.affected = result;\n }\n else if (driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3\n deleteResult.raw = result;\n deleteResult.affected = result.changes;\n }\n else {\n deleteResult.raw = result;\n }\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 8];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterRemoveEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!transactionStartedByUs) return [3 /*break*/, 10];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10: return [2 /*return*/, deleteResult];\n case 11:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 15];\n _b.label = 12;\n case 12:\n _b.trys.push([12, 14, , 15]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 13:\n _b.sent();\n return [3 /*break*/, 15];\n case 14:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 15];\n case 15: throw error_1;\n case 16:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 18];\n return [4 /*yield*/, queryRunner.release()];\n case 17:\n _b.sent();\n _b.label = 18;\n case 18:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 20];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20: return [7 /*endfinally*/];\n case 21: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n DeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n DeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n DeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n DeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates DELETE express used to perform query.\n */\n DeleteQueryBuilder.prototype.createDeleteExpression = function () {\n var tableName = this.getTableName(this.getMainTableName());\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"DELETE FROM \" + tableName + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression !== \"\" && this.connection.driver instanceof SqlServerDriver) {\n return \"DELETE FROM \" + tableName + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"DELETE FROM \" + tableName + whereExpression;\n }\n };\n return DeleteQueryBuilder;\n}(QueryBuilder));\nexport { DeleteQueryBuilder };\n\n//# sourceMappingURL=DeleteQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventManager = void 0;\nconst cs_event_manager_1 = require(\"cs-event-manager\");\nclass EventManager extends cs_event_manager_1.EventManager {\n}\nexports.EventManager = EventManager;\n//# sourceMappingURL=EventManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TemplateSite = void 0;\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst MasterSite_1 = require(\"./Delegate/MasterSite\");\n/**\n * Die Seite bekommt ein Template übergeben und ersetzt in diesem Template das mit dem Selector gefundene\n * Element mit der angebenen View\n */\nclass TemplateSite extends MasterSite_1.MasterSite {\n /**\n * Constructor für eine TemplateSite\n *\n * @param siteManager\n * @param view\n * @param template\n * @param selectorToReplace\n */\n constructor(siteManager, view, template, selectorToReplace) {\n super(siteManager, template);\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(selectorToReplace).replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n}\nexports.TemplateSite = TemplateSite;\n//# sourceMappingURL=TemplateSite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Menu = void 0;\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst MenuAction_1 = require(\"./MenuAction/MenuAction\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Klasse für ein Menü, was im Prinzip nichts anderes als eine Collection für MenuActions ist\n * Ein Menü hat einen oder mehrere Renderer, die für die Anzeige zuständig sind\n */\nclass Menu {\n /**\n * Setzt die Renderer und die initialen Actions\n *\n * @param renderer\n * @param actions\n */\n constructor(renderer, actions) {\n this._actions = [];\n this._renderers = [];\n this._submenus = [];\n if (Array.isArray(renderer)) {\n this._renderers = renderer;\n }\n else {\n this._renderers = [renderer];\n }\n //Initialisiert onClickListener\n this._onClickListener = this._generateOnClickListener();\n //Setze die Actions so, um einzelne Actions noch zu überprüfen\n Helper_1.Helper.nonNull(actions, []).forEach(action => {\n this.addAction(action, false);\n });\n this._openSubmenuListener = null;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n * @param menu\n * @return {Menu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Menu());\n menu._actions = [];\n this._actions.forEach(action => {\n menu.addAction(action.copy());\n });\n menu._renderers = this._renderers;\n menu._onClickListener = this._onClickListener;\n return menu;\n }\n /**\n * Schließt das Menü, hauptsächlich hier zum Schließen der Submenüs.\n * Zum öffnen wird nicht so eine Funktion gebraucht, da beim öffnen nicht die untermenüs geöffnet werden sollen\n */\n close() {\n this._submenus.forEach(submenu => {\n submenu.close();\n });\n }\n /**\n * Fügt eine Action dem Menü hinzu\n *\n * @param action\n * @param redraw\n */\n addAction(action, redraw) {\n //Überprüfung, ob es die richtige Klasse ist und ob die Action nicht schon hinzugefügt wurde\n if (action instanceof MenuAction_1.MenuAction && this._actions.indexOf(action) === -1) {\n //Falls es sich um ein Submenu handelt, füge dieses hinzu\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._submenus.push(action.getSubmenu());\n }\n this._actions.push(action);\n action.setMenu(this);\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n }\n removeAllActions(redraw) {\n this._actions.forEach(action => action.setMenu(null));\n this._actions = [];\n this._submenus = [];\n //Falls redraw true (oder nicht angegeben, redraw)\n if (Helper_1.Helper.nonNull(redraw, true)) {\n this.redraw();\n }\n }\n /**\n * Sortiert die Actions und sagt danach den Renderern, dass diese das Menü zeuchnen sollen\n */\n draw() {\n try {\n this.sortActions();\n this._renderers.forEach(renderer => {\n renderer.render(this);\n });\n }\n catch (e) {\n console.error(e);\n }\n }\n /**\n * Sortiert die Actions der Order nach\n */\n sortActions() {\n this._actions = this._actions.sort(function (first, second) {\n return first.getOrder() - second.getOrder();\n });\n }\n openSubmenu(submenu) {\n if (this._openSubmenuListener) {\n this._openSubmenuListener(submenu);\n }\n }\n setOpenSubmenuListener(listener) {\n this._openSubmenuListener = listener;\n }\n /**\n * Generiert den defaultmäßigen onclick-listener.\n * @returns {Function}\n * @private\n */\n _generateOnClickListener() {\n return (event) => {\n let _element = event.target;\n //Falls es eine Action oder ein Unterlement einer Action war...\n if (_element.matches('li') || _element.matches('li *')) {\n //...finde das zugehörige Element und lese ID aus\n _element = _element.closest(\"li\");\n let actionId = parseInt(_element.dataset[\"id\"]);\n //Schaue nach, welche Action angeklickt wurde\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n //Falls action eine Funktion (und kein Link), sowie aktiv ist, führe action aus\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n //Gebe gefundene Action zurück\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n }\n return null;\n };\n }\n /**\n * Setzt den OnClickListener\n *\n * @param listener\n */\n setOnClickListener(listener) {\n this._onClickListener = listener;\n }\n /**\n * Gibt den OnClickListener zurück\n *\n * @returns {*}\n */\n getOnClickListener() {\n return this._onClickListener;\n }\n /**\n * Gibt die Actions zurück\n * @returns {Array}\n */\n getActions() {\n return this._actions;\n }\n /**\n * Triggert ein neues Rendern für eine Action. Das entsprechende ActionElement wird ausgetauscht\n * @param action\n */\n redrawAction(action) {\n this._renderers.forEach(renderer => {\n renderer._triggerRenderAction(action);\n });\n }\n /**\n * Updated das entsprechende ActionElement abhängig vom Renderer. Das Element wird nicht ausgetauscht\n * @param action\n */\n updateAction(action) {\n this._renderers.forEach(renderer => {\n renderer.updateAction(action);\n });\n }\n /**\n * alias für draw\n */\n redraw() {\n this.draw();\n }\n}\nexports.Menu = Menu;\n//# sourceMappingURL=Menu.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccordionRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst MenuRenderer_1 = require(\"./MenuRenderer\");\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst Translator_1 = require(\"../../../Translator\");\n/**\n * Leitet von DropdownRenderer ab, da Funktionalität fast gleich ist\n */\nclass AccordionRenderer extends MenuRenderer_1.MenuRenderer {\n /**\n * Rendert eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderAction(action) {\n let linkElement = this.renderLinkElement(action);\n let liElement = this.renderLiElement(action);\n liElement.insertBefore(linkElement, liElement.firstChild);\n return liElement;\n }\n /**\n * Rendert das AnchorElement für eine Action\n * @param action\n * @returns {HTMLAnchorElement}\n */\n renderLinkElement(action) {\n let aElement = document.createElement(\"a\");\n if (typeof action.getAction() === 'string') {\n aElement.href = action.getAction();\n }\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n let iconElement = document.createElement(\"img\");\n iconElement.src = action.getIcon();\n iconElement.classList.add('action-image');\n if (action.isShouldTranslate()) {\n iconElement.dataset[\"translationTitle\"] = action.getName();\n iconElement.classList.add(Translator_1.Translator.getInstance().getTranslationClass());\n }\n else {\n iconElement.title = action.getName();\n }\n aElement.appendChild(iconElement);\n }\n let name = action.getName();\n // debugger;\n if (action.isShouldTranslate()) {\n name = Translator_1.Translator.makePersistentTranslation(name);\n }\n else {\n name = document.createTextNode(name);\n }\n aElement.appendChild(name);\n return aElement;\n }\n /**\n * Render das LI-Element für eine Action\n *\n * @param action\n * @returns {HTMLLIElement}\n */\n renderLiElement(action) {\n let liElement = document.createElement(\"li\");\n if (action.getLiClass().trim() !== \"\") {\n liElement.classList.add(...action.getLiClass().split(\" \"));\n }\n // liElement.appendChild(aElement);\n liElement.dataset[\"id\"] = action.getId();\n if (Helper_1.Helper.isNotNull(action.getIcon())) {\n liElement.classList.add(\"img\");\n }\n if (!action.isVisible()) {\n liElement.classList.add(\"hidden\");\n }\n liElement.classList.add(action.getShowFor());\n return liElement;\n }\n /**\n * Da abgeleitet von DropdownRenderer, muss eine Klasse wieder entfernt werden\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.remove('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('is-accordion-submenu-parent');\n return submenuActionElement;\n }\n /**\n * erstellt ein SubmenuParent für Accordion\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-accordion-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet ein ActionElement\n * @param action\n */\n updateAction(action) {\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n this.getElementForAction(action).setAttribute(\"aria-expanded\", true);\n submenuElement.classList.add(\"js-active\");\n submenuElement.style = \"\";\n }\n else {\n this.getElementForAction(action).removeAttribute(\"aria-expanded\");\n submenuElement.classList.remove(\"js-activ\");\n submenuElement.style = \"display:none;\";\n }\n }\n }\n}\nexports.AccordionRenderer = AccordionRenderer;\n//# sourceMappingURL=AccordionRenderer.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EasySyncPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst _typeorm = require(\"typeorm\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst XSSHelper_1 = require(\"js-helper/dist/shared/XSSHelper\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nlet typeorm = _typeorm;\n// if (typeorm.default) {\n// typeorm = typeorm.default;\n// }\nclass EasySyncPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.find({\n \"id\": typeorm.In(ids)\n }, null, null, null, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.findOne({\n \"id\": id\n }, null, null, relations);\n });\n }\n static findByClientId(id, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, id, relations);\n });\n }\n static findByClientIds(ids, relations) {\n const _super = Object.create(null, {\n findById: { get: () => super.findById }\n });\n return __awaiter(this, void 0, void 0, function* () {\n return _super.findById.call(this, ids, relations);\n });\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n static _fromJson(jsonObjects, entities, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n entities = entities || [];\n let isArray = Array.isArray(jsonObjects);\n if (!isArray) {\n jsonObjects = [jsonObjects];\n }\n if (!Array.isArray(entities)) {\n entities = [entities];\n }\n let loadPromises = [];\n let addLoadPromises = [];\n jsonObjects.forEach((jsonObject, index) => {\n addLoadPromises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n let entity = null;\n if (entities.length > index) {\n entity = entities[index];\n }\n else if (Helper_1.Helper.isNotNull(jsonObject.id)) {\n entity = yield this.findById(jsonObject.id, this.getRelations());\n }\n if (entity === null) {\n entity = new this();\n }\n if (!jsonObject.version) {\n jsonObject.version = 1;\n }\n entities[index] = Object.assign(entity, jsonObject);\n this._handleColumns_(entities[index]);\n this._handleRelations_(entities[index], includeRelations, loadPromises);\n resolve();\n })));\n });\n //addLoadPromises adds other loadPromises. Therefore wait until done, then wait for other\n yield Promise.all(addLoadPromises);\n yield Promise.all(loadPromises);\n if (!isArray) {\n entities = (entities.length > 0) ? entities[0] : null;\n }\n return entities;\n });\n }\n static _handleRelations_(entity, includeRelations, loadPromises) {\n let relations = this.getRelationDefinitions();\n Object.keys(relations).forEach(relationName => {\n let values = entity[relationName];\n if (typeof values === \"number\" || (Array.isArray(values) && values.length >= 1 && typeof values[0] === \"number\")) {\n if (includeRelations === true) {\n let loadPromise = null;\n if (Array.isArray(values)) {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findByIds(values);\n }\n else {\n loadPromise = cordova_sites_database_1.BaseDatabase.getModel(relations[relationName].target).findById(values);\n }\n loadPromises.push(loadPromise.then(value => {\n entity[relationName] = value;\n }));\n }\n else if (includeRelations === false) {\n if (relations[relationName].type === \"many-to-many\" || relations[relationName].type === \"one-to-many\") {\n entity[relationName] = [];\n }\n else {\n entity[relationName] = null;\n }\n }\n }\n });\n }\n static _handleColumns_(entity) {\n let schemaDefinition = this.getSchemaDefinition();\n let columns = schemaDefinition[\"columns\"];\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = XSSHelper_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n }\n}\nexports.EasySyncPartialModel = EasySyncPartialModel;\nEasySyncPartialModel.CAN_BE_SYNCED = true;\n//# sourceMappingURL=EasySyncPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileMedium = void 0;\nconst EasySyncBaseModel_1 = require(\"./EasySyncBaseModel\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass FileMedium extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super(...arguments);\n this.saveOffline = true;\n this._isDownloaded = true;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"src\"] = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[\"saveOffline\"] = { type: BaseDatabase_1.BaseDatabase.TYPES.BOOLEAN, default: 1 };\n return columns;\n }\n getServerUrl(appendDate) {\n appendDate = Helper_1.Helper.nonNull(appendDate, true);\n if (!this.src.startsWith(\"http\") && !this.src.startsWith(\"//\") && !this.src.startsWith(\"data\")) {\n let path = FileMedium.PUBLIC_PATH + this.src;\n if (appendDate) {\n path += \"?t=\" + new Date(this.updatedAt).getTime();\n }\n return path;\n }\n return this.src;\n }\n getUrl() {\n if (device.platform !== \"browser\" && this.saveOffline && this._isDownloaded && Helper_1.Helper.isNotNull(this.id) && !this.src.startsWith(\"data\") && !this.src.startsWith(\"http\")) {\n return \"cdvfile://localhost/persistent/\" + this.src;\n }\n else {\n return this.getServerUrl();\n }\n }\n toString() {\n console.warn(\"to string called on FileMedium. Only for dependency. Please look inside your sourcecode\");\n return this.getUrl();\n }\n}\nexports.FileMedium = FileMedium;\nFileMedium.PUBLIC_PATH = \"./\";\nFileMedium.SCHEMA_NAME = \"FileMedium\";\nBaseDatabase_1.BaseDatabase.addModel(FileMedium);\n//# sourceMappingURL=FileMedium.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Role = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst Access_1 = require(\"./Access\");\nclass Role extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n this.accesses = null;\n this.parents = null;\n this.children = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"accesses\"] = {\n target: Access_1.Access.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleAccess\"\n },\n cascade: false\n };\n relations[\"parents\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n relations[\"children\"] = {\n target: Role.getSchemaName(),\n type: \"many-to-many\",\n joinTable: {\n name: \"roleChildren\",\n joinColumn: {\n name: \"parentId\",\n referencedColumnName: \"id\"\n },\n inverseJoinColumn: {\n name: \"childId\",\n referencedColumnName: \"id\"\n }\n },\n cascade: false\n };\n return relations;\n }\n}\nexports.Role = Role;\nRole.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Role);\n//# sourceMappingURL=Role.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartUserSiteMenuAction = void 0;\nconst UserMenuAction_1 = require(\"./UserMenuAction\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nclass StartUserSiteMenuAction extends UserMenuAction_1.UserMenuAction {\n constructor(name, access, site, showFor, order, icon) {\n super(name, access, () => {\n if (client_1.StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n client_1.StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n client_1.StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartUserSiteMenuAction = StartUserSiteMenuAction;\n//# sourceMappingURL=StartUserSiteMenuAction.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FilePromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FileWriterPromise_1 = require(\"./FileWriterPromise\");\nclass FilePromise {\n constructor(fileEntry) {\n this.fileEntry = fileEntry;\n }\n createWriter() {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((res) => {\n this.fileEntry.createWriter(writer => {\n res(new FileWriterPromise_1.FileWriterPromise(writer));\n });\n });\n });\n }\n static open(file, options) {\n return __awaiter(this, void 0, void 0, function* () {\n options = Helper_1.Helper.nonNull(options, { create: true, exclusive: false });\n return new Promise((r, rej) => {\n window[\"resolveLocalFileSystemURL\"](\"cdvfile://localhost/persistent/\", dirEntry => {\n dirEntry.getFile(file, options, fileEntry => {\n r(new FilePromise(fileEntry));\n }, rej);\n }, rej);\n });\n });\n }\n}\nexports.FilePromise = FilePromise;\n//# sourceMappingURL=FilePromise.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { SapDriver } from \"../driver/sap/SapDriver\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationUpdater = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationUpdater(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs set or add operation on a relation.\n */\n RelationUpdater.prototype.update = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updateSet, updateSet_1, ofs, parameters_1, conditions_1, condition, of_1, updateSet, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, bulkInserted_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!(relation.isManyToOne || relation.isOneToOneOwner)) return [3 /*break*/, 2];\n updateSet = relation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = value instanceof Object ? joinColumn.referencedColumn.getEntityValue(value) : value;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!this.expressionMap.of || (Array.isArray(this.expressionMap.of) && !this.expressionMap.of.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.entityMetadata.target)\n .set(updateSet)\n .whereInIds(this.expressionMap.of)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 10];\n case 2:\n if (!((relation.isOneToOneNotOwner || relation.isOneToMany) && value === null)) return [3 /*break*/, 4];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n conditions_1.push(column.propertyPath + \" = :\" + parameterName);\n });\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 3:\n _a.sent();\n return [3 /*break*/, 10];\n case 4:\n if (!(relation.isOneToOneNotOwner || relation.isOneToMany)) return [3 /*break*/, 6];\n if (Array.isArray(this.expressionMap.of))\n throw new Error(\"You cannot update relations of multiple entities with the same related object. Provide a single entity into .of method.\");\n of_1 = this.expressionMap.of;\n updateSet = relation.inverseRelation.joinColumns.reduce(function (updateSet, joinColumn) {\n var relationValue = of_1 instanceof Object ? joinColumn.referencedColumn.getEntityValue(of_1) : of_1;\n joinColumn.setEntityValue(updateSet, relationValue);\n return updateSet;\n }, {});\n if (!value || (Array.isArray(value) && !value.length))\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet)\n .whereInIds(value)\n .execute()];\n case 5:\n _a.sent();\n return [3 /*break*/, 10];\n case 6:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n bulkInserted_1 = [];\n firstColumnValues.forEach(function (firstColumnVal) {\n secondColumnValues_1.forEach(function (secondColumnVal) {\n var inserted = {};\n junctionMetadata_1.ownerColumns.forEach(function (column) {\n inserted[column.databaseName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n });\n junctionMetadata_1.inverseColumns.forEach(function (column) {\n inserted[column.databaseName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n });\n bulkInserted_1.push(inserted);\n });\n });\n if (!bulkInserted_1.length)\n return [2 /*return*/];\n if (!(this.queryBuilder.connection.driver instanceof OracleDriver || this.queryBuilder.connection.driver instanceof SapDriver)) return [3 /*break*/, 8];\n return [4 /*yield*/, Promise.all(bulkInserted_1.map(function (value) {\n return _this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(value)\n .execute();\n }))];\n case 7:\n _a.sent();\n return [3 /*break*/, 10];\n case 8: return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .insert()\n .into(junctionMetadata_1.tableName)\n .values(bulkInserted_1)\n .execute()];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n return RelationUpdater;\n}());\nexport { RelationUpdater };\n\n//# sourceMappingURL=RelationUpdater.js.map\n","import { __awaiter, __generator, __read, __spreadArray } from \"tslib\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationRemover = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RelationRemover(queryBuilder, expressionMap) {\n this.queryBuilder = queryBuilder;\n this.expressionMap = expressionMap;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Performs remove operation on a relation.\n */\n RelationRemover.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, ofs, values_1, updateSet_1, parameters_1, conditions_1, condition, junctionMetadata_1, ofs, values, firstColumnValues, secondColumnValues_1, parameters_2, conditions_2, condition;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n relation = this.expressionMap.relationMetadata;\n if (!relation.isOneToMany) return [3 /*break*/, 2];\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values_1 = Array.isArray(value) ? value : [value];\n updateSet_1 = {};\n relation.inverseRelation.joinColumns.forEach(function (column) {\n updateSet_1[column.propertyName] = null;\n });\n parameters_1 = {};\n conditions_1 = [];\n ofs.forEach(function (of, ofIndex) {\n conditions_1.push.apply(conditions_1, __spreadArray([], __read(values_1.map(function (value, valueIndex) {\n return __spreadArray(__spreadArray([], __read(relation.inverseRelation.joinColumns.map(function (column, columnIndex) {\n var parameterName = \"joinColumn_\" + ofIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = of instanceof Object ? column.referencedColumn.getEntityValue(of) : of;\n return column.propertyPath + \" = :\" + parameterName;\n }))), __read(relation.inverseRelation.entityMetadata.primaryColumns.map(function (column, columnIndex) {\n var parameterName = \"primaryColumn_\" + valueIndex + \"_\" + valueIndex + \"_\" + columnIndex;\n parameters_1[parameterName] = value instanceof Object ? column.getEntityValue(value) : value;\n return column.propertyPath + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_1.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n if (!condition)\n return [2 /*return*/];\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .update(relation.inverseEntityMetadata.target)\n .set(updateSet_1)\n .where(condition)\n .setParameters(parameters_1)\n .execute()];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2:\n junctionMetadata_1 = relation.junctionEntityMetadata;\n ofs = Array.isArray(this.expressionMap.of) ? this.expressionMap.of : [this.expressionMap.of];\n values = Array.isArray(value) ? value : [value];\n firstColumnValues = relation.isManyToManyOwner ? ofs : values;\n secondColumnValues_1 = relation.isManyToManyOwner ? values : ofs;\n parameters_2 = {};\n conditions_2 = [];\n firstColumnValues.forEach(function (firstColumnVal, firstColumnValIndex) {\n conditions_2.push.apply(conditions_2, __spreadArray([], __read(secondColumnValues_1.map(function (secondColumnVal, secondColumnValIndex) {\n return __spreadArray(__spreadArray([], __read(junctionMetadata_1.ownerColumns.map(function (column, columnIndex) {\n var parameterName = \"firstValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = firstColumnVal instanceof Object ? column.referencedColumn.getEntityValue(firstColumnVal) : firstColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))), __read(junctionMetadata_1.inverseColumns.map(function (column, columnIndex) {\n var parameterName = \"secondValue_\" + firstColumnValIndex + \"_\" + secondColumnValIndex + \"_\" + columnIndex;\n parameters_2[parameterName] = secondColumnVal instanceof Object ? column.referencedColumn.getEntityValue(secondColumnVal) : secondColumnVal;\n return column.databaseName + \" = :\" + parameterName;\n }))).join(\" AND \");\n }))));\n });\n condition = conditions_2.map(function (str) { return \"(\" + str + \")\"; }).join(\" OR \");\n return [4 /*yield*/, this.queryBuilder\n .createQueryBuilder()\n .delete()\n .from(junctionMetadata_1.tableName)\n .where(condition)\n .setParameters(parameters_2)\n .execute()];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return RelationRemover;\n}());\nexport { RelationRemover };\n\n//# sourceMappingURL=RelationRemover.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { RelationUpdater } from \"./RelationUpdater\";\nimport { RelationRemover } from \"./RelationRemover\";\n/**\n * Allows to work with entity relations and perform specific operations with those relations.\n *\n * todo: add transactions everywhere\n */\nvar RelationQueryBuilder = /** @class */ (function (_super) {\n __extends(RelationQueryBuilder, _super);\n function RelationQueryBuilder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n RelationQueryBuilder.prototype.getQuery = function () {\n return \"\";\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Sets entity (target) which relations will be updated.\n */\n RelationQueryBuilder.prototype.of = function (entity) {\n this.expressionMap.of = entity;\n return this;\n };\n /**\n * Sets entity relation's value.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Works only for many-to-one and one-to-one relations.\n * For many-to-many and one-to-many relations use #add and #remove methods instead.\n */\n RelationQueryBuilder.prototype.set = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToMany || relation.isOneToMany)\n throw new Error(\"Set operation is only supported for many-to-one and one-to-one relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .add() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Adds (binds) given value to entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.add = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, updater;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set() method instead.\");\n // if there are multiple join columns then user must send id map as \"value\" argument. check if he really did it\n if (relation.joinColumns &&\n relation.joinColumns.length > 1 &&\n (!(value instanceof Object) || Object.keys(value).length < relation.joinColumns.length))\n throw new Error(\"Value to be set into the relation must be a map of relation ids, for example: .set({ firstName: \\\"...\\\", lastName: \\\"...\\\" })\");\n updater = new RelationUpdater(this, this.expressionMap);\n return [2 /*return*/, updater.update(value)];\n });\n });\n };\n /**\n * Removes (unbinds) given value from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.remove = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var relation, remover;\n return __generator(this, function (_a) {\n if (Array.isArray(value) && value.length === 0)\n return [2 /*return*/];\n relation = this.expressionMap.relationMetadata;\n if (!this.expressionMap.of) // todo: move this check before relation query builder creation?\n throw new Error(\"Entity whose relation needs to be set is not set. Use .of method to define whose relation you want to set.\");\n if (relation.isManyToOne || relation.isOneToOne)\n throw new Error(\"Add operation is only supported for many-to-many and one-to-many relations. \" +\n (\"However given \\\"\" + relation.propertyPath + \"\\\" has \" + relation.relationType + \" relation. \") +\n \"Use .set(null) method instead.\");\n remover = new RelationRemover(this, this.expressionMap);\n return [2 /*return*/, remover.remove(value)];\n });\n });\n };\n /**\n * Adds (binds) and removes (unbinds) given values to/from entity relation.\n * Value can be entity, entity id or entity id map (if entity has composite ids).\n * Value also can be array of entities, array of entity ids or array of entity id maps (if entity has composite ids).\n * Works only for many-to-many and one-to-many relations.\n * For many-to-one and one-to-one use #set method instead.\n */\n RelationQueryBuilder.prototype.addAndRemove = function (added, removed) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.remove(removed)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.add(added)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Gets entity's relation id.\n async getId(): Promise {\n\n }*/\n /**\n * Gets entity's relation ids.\n async getIds(): Promise {\n return [];\n }*/\n /**\n * Loads a single entity (relational) from the relation.\n * You can also provide id of relational entity to filter by.\n */\n RelationQueryBuilder.prototype.loadOne = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.loadMany().then(function (results) { return results[0]; })];\n });\n });\n };\n /**\n * Loads many entities (relational) from the relation.\n * You can also provide ids of relational entities to filter by.\n */\n RelationQueryBuilder.prototype.loadMany = function () {\n return __awaiter(this, void 0, void 0, function () {\n var of, metadata;\n return __generator(this, function (_a) {\n of = this.expressionMap.of;\n if (!(of instanceof Object)) {\n metadata = this.expressionMap.mainAlias.metadata;\n if (metadata.hasMultiplePrimaryKeys)\n throw new Error(\"Cannot load entity because only one primary key was specified, however entity contains multiple primary keys\");\n of = metadata.primaryColumns[0].createValueMap(of);\n }\n return [2 /*return*/, this.connection.relationLoader.load(this.expressionMap.relationMetadata, of, this.queryRunner)];\n });\n });\n };\n return RelationQueryBuilder;\n}(QueryBuilder));\nexport { RelationQueryBuilder };\n\n//# sourceMappingURL=RelationQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareManager = void 0;\nconst ShareDialog_1 = require(\"./ShareDialog\");\nclass ShareManager {\n share(text) {\n if (device.platform === \"browser\") {\n this._shareBrowser(text);\n }\n else {\n this._shareMobile(text);\n }\n }\n _shareMobile(text) {\n navigator[\"share\"](text);\n }\n _shareBrowser(text) {\n new ShareDialog_1.ShareDialog(text).show();\n }\n}\nexports.ShareManager = ShareManager;\n//# sourceMappingURL=ShareManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseDatabase_1 = require(\"./BaseDatabase\");\nclass BaseModel {\n constructor() {\n this.id = null;\n this._isLoaded = false;\n }\n getId() {\n return this.id;\n }\n setId(id) {\n this.id = id;\n }\n static getColumnDefinitions() {\n return {\n id: {\n primary: true,\n type: BaseDatabase_1.BaseDatabase.TYPES.INTEGER,\n generated: true\n },\n };\n }\n static getRelationDefinitions() {\n return {};\n }\n static getRelations() {\n return Object.keys(this.getRelationDefinitions());\n }\n static getSchemaDefinition() {\n let columns = this.getColumnDefinitions();\n Object.keys(columns).forEach(column => {\n if (typeof columns[column] === \"string\") {\n columns[column] = { type: columns[column] };\n }\n if (columns[column].type === BaseDatabase_1.BaseDatabase.TYPES.MY_JSON && !columns[column].transformer) {\n columns[column].type = BaseDatabase_1.BaseDatabase.TYPES.MEDIUMTEXT;\n columns[column].transformer = {\n from: text => {\n return (text ? JSON.parse(text) : null);\n },\n to: json => {\n return (json ? JSON.stringify(json) : \"\");\n }\n };\n }\n });\n return {\n name: this.getSchemaName(),\n target: this,\n columns: columns,\n relations: this.getRelationDefinitions()\n };\n }\n static getSchemaName() {\n if (!this.SCHEMA_NAME) {\n this.SCHEMA_NAME = this.name;\n }\n return this.SCHEMA_NAME;\n }\n setLoaded(isLoaded) {\n this._isLoaded = isLoaded;\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.saveEntity(this);\n });\n }\n delete() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.constructor._database.deleteEntity(this);\n });\n }\n static deleteMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.deleteEntity(entities);\n });\n }\n static saveMany(entities) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.saveEntity(entities);\n });\n }\n static find(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findEntities(this, where, order, limit, offset, relations);\n });\n }\n static findAndCount(where, order, limit, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findAndCountEntities(this, where, order, limit, offset, relations);\n });\n }\n static findOne(where, order, offset, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findOneEntity(this, where, order, offset, relations);\n });\n }\n static findById(id, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findById(this, id, relations);\n });\n }\n static findByIds(ids, relations) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.findByIds(this, ids, relations);\n });\n }\n static clear() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._database.clearModel(this);\n });\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return false;\n }\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.every((subA, index) => {\n this.equals(subA, b[index]);\n });\n }\n else if (a instanceof this && b instanceof this) {\n return a.constructor === b.constructor && a.getId() === b.getId();\n }\n }\n}\nexports.BaseModel = BaseModel;\n/**\n * @type {null | BaseDatabase}\n * @private\n */\nBaseModel._database = null;\nBaseModel.RELATION = {\n MANY_TO_MANY: \"many-to-many\",\n MANY_TO_ONE: \"many-to-one\",\n ONE_TO_MANY: \"one-to-many\",\n ONE_TO_ONE: \"one-to-one\"\n};\n//# sourceMappingURL=BaseModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nconst FileMedium_1 = require(\"../shared/FileMedium\");\nconst BaseDatabase_1 = require(\"cordova-sites-database/dist/BaseDatabase\");\nclass SyncJob {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromise = Promise.resolve();\n this._queryRunner = null;\n this._finalRes = {};\n this._manyToManyRelations = {};\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (Object.keys(this._lastSyncDates).length === 0) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n yield this._doRuns(requestQueries);\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //disabled in doRuns. Cannot be reenabled sooner, but since lastSyncDates should not have any relations, it should be okay\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().rawQuery(\"PRAGMA foreign_keys = ON;\");\n if (this._finalRes[\"FileMedium\"] && this._finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(yield FileMedium_1.FileMedium.findByIds(this._finalRes[\"FileMedium\"][\"changed\"]));\n }\n return this._finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n //startTransaction maybe allow read, but not write?\n this._queryRunner = yield EasySyncClientDb_1.EasySyncClientDb.getInstance().createQueryRunner();\n this._savePromise = this._queryRunner.query(\"PRAGMA foreign_keys = OFF;\").then(() => {\n return this._queryRunner.startTransaction();\n });\n //Ask for next run until no more runs needed\n let shouldAskAgain;\n do {\n shouldAskAgain = false;\n response = yield SyncJob._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query and save changes\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (res && res.shouldAskAgain) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n //Extract entities\n this._extractEntities(res);\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n yield this._handleManyToManyRelations();\n //wait for savePromises, stop transaction\n return this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.commitTransaction();\n })).catch((e) => __awaiter(this, void 0, void 0, function* () {\n console.error(e);\n yield this._queryRunner.rollbackTransaction();\n })).finally(() => __awaiter(this, void 0, void 0, function* () {\n yield this._queryRunner.release();\n }));\n });\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return;\n }\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedEntities = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedEntities.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n let schemaDefinition = modelClass.getSchemaDefinition();\n let relations = schemaDefinition[\"relations\"];\n let columns = schemaDefinition[\"columns\"];\n let changedEntityIds = [];\n changedEntities.forEach(entity => {\n Object.keys(relations).forEach(relation => {\n if (relations[relation].type === \"many-to-many\" && Array.isArray(entity[relation])) {\n let table = relations[relation].joinTable;\n let ownName;\n if (table.joinColumn && table.joinColumn.name) {\n ownName = table.joinColumn.name;\n }\n else {\n ownName = modelClass.getSchemaName();\n ownName = ownName.substr(0, 1).toLowerCase() + ownName.substr(1) + \"Id\";\n }\n let otherName;\n if (table.inverseJoinColumn && table.inverseJoinColumn.name) {\n otherName = table.inverseJoinColumn.name;\n }\n else {\n otherName = relations[relation].target;\n otherName = otherName.substr(0, 1).toLowerCase() + otherName.substr(1) + \"Id\";\n }\n this._manyToManyRelations[table.name] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name], {});\n this._manyToManyRelations[table.name][\"values\"] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"values\"], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName] = shared_1.Helper.nonNull(this._manyToManyRelations[table.name][\"delete_\" + ownName], []);\n this._manyToManyRelations[table.name][\"delete_\" + ownName].push(entity.id);\n let otherIdsAlreadyInserted = [];\n let insertedRelations = this._manyToManyRelations[table.name][\"values\"].filter(relValue => relValue[ownName] === entity.id);\n insertedRelations.forEach(relValue => otherIdsAlreadyInserted.push(relValue[otherName]));\n entity[relation].forEach(otherId => {\n let index = otherIdsAlreadyInserted.indexOf(otherId);\n if (index === -1) {\n let value = {};\n value[ownName] = entity.id;\n value[otherName] = otherId;\n this._manyToManyRelations[table.name][\"values\"].push(value);\n }\n });\n }\n else if ((relations[relation].type === \"many-to-one\"\n || (relations[relation].type === \"one-to-one\" && relations[relation].joinColumn))\n //DO not check for a value of the relation here. Else If the first entity has no value set, the field\n // will not be set and therefore ignored for all other entites too\n ) {\n let fieldName;\n if (relations[relation].joinColumn && relations[relation].joinColumn.name) {\n fieldName = relations[relation].joinColumn.name;\n }\n else {\n fieldName = relation + \"Id\";\n }\n entity[fieldName] = entity[relation];\n }\n delete entity[relation];\n });\n Object.keys(columns).forEach(columnName => {\n if (columns[columnName].escapeHTML) {\n entity[columnName] = shared_1.XSSHelper.escapeHTML(entity[columnName]);\n }\n if (columns[columnName].escapeJS) {\n entity[columnName] = shared_1.XSSHelper.escapeJS(entity[columnName]);\n }\n });\n changedEntityIds.push(entity.id);\n });\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._insertOrReplace(modelClass, changedEntities); }));\n this._savePromise = this._savePromise.then(() => __awaiter(this, void 0, void 0, function* () { return yield this._deleteModels(modelClass, deletedModelsIds); }));\n this._finalRes[modelName] = shared_1.Helper.nonNull(this._finalRes[modelName], { \"deleted\": [], \"changed\": [] });\n this._finalRes[modelName][\"deleted\"].push(...deletedModelsIds);\n this._finalRes[modelName][\"changed\"].push(...changedEntityIds);\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n _insertOrReplace(modelClass, changedEntities) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_INSERT_IN_ONE_GO = 300;\n if (changedEntities.length === 0) {\n return;\n }\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = schemaDefinition.name;\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let columns = schemaDefinition.columns;\n //Get fields from entity for including relation fields\n const fields = Object.keys(changedEntities[0]);\n let values = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(changedEntities, (entity) => __awaiter(this, void 0, void 0, function* () {\n let valueString = [];\n //Stellt die reihenfolge sicher\n fields.forEach(field => {\n let val = entity[field];\n if (columns[field] && columns[field].transformer) {\n val = columns[field].transformer.to(val);\n }\n if (columns[field] && columns[field].type === BaseDatabase_1.BaseDatabase.TYPES.SIMPLE_JSON) {\n val = JSON.stringify(val);\n }\n values.push(val);\n valueString.push(\"?\");\n });\n valueStrings.push(\"(\" + valueString.join(\",\") + \")\");\n if (valueStrings.length >= MAX_INSERT_IN_ONE_GO) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n valueStrings = [];\n values = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"INSERT OR REPLACE INTO \" + tableName + \" (\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\");\n yield this._queryRunner.query(sql, values);\n }\n });\n }\n _deleteModels(modelClass, deletedModelsIds) {\n return __awaiter(this, void 0, void 0, function* () {\n const MAX_DELETES_IN_ONE_GO = 300;\n if (deletedModelsIds.length === 0) {\n return;\n }\n let tableName = modelClass.getSchemaName();\n tableName = shared_1.Helper.toSnakeCase(tableName);\n let ids = [];\n let valueStrings = [];\n yield shared_1.Helper.asyncForEach(deletedModelsIds, (entityId) => __awaiter(this, void 0, void 0, function* () {\n ids.push(entityId);\n valueStrings.push(\"?\");\n if (valueStrings.length >= MAX_DELETES_IN_ONE_GO) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n valueStrings = [];\n ids = [];\n }\n }));\n if (valueStrings.length > 0) {\n let sql = \"DELETE FROM \" + tableName + \" WHERE id IN (\" + ids.join(\",\") + \")\";\n yield this._queryRunner.query(sql);\n }\n });\n }\n _handleManyToManyRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._savePromise;\n let promises = [];\n Object.keys(this._manyToManyRelations).forEach(table => {\n let sql = \"DELETE FROM \" + table + \" WHERE \";\n let deleteSqls = [];\n Object.keys(this._manyToManyRelations[table]).forEach(field => {\n if (field.startsWith(\"delete_\")) {\n deleteSqls.push(field.substr(7) + \" IN (\" + this._manyToManyRelations[table][field].join(\",\") + \")\");\n }\n });\n sql += deleteSqls.join(\" OR \") + \";\";\n promises.push(this._queryRunner.query(sql).then(() => {\n if (this._manyToManyRelations[table].values.length > 0) {\n let fields = Object.keys(this._manyToManyRelations[table].values[0]);\n let valueStrings = [];\n this._manyToManyRelations[table].values.forEach(valuePair => {\n let values = [];\n fields.forEach(field => {\n values.push(valuePair[field]);\n });\n valueStrings.push(\"(\" + values.join(\",\") + \")\");\n });\n let sql = \"INSERT OR REPLACE INTO \" + table + \"(\" + fields.join(\",\") + \") VALUES \" + valueStrings.join(\",\") + \";\";\n return this._queryRunner.query(sql);\n }\n }));\n });\n yield Promise.all(promises);\n });\n }\n}\nexports.SyncJob = SyncJob;\nSyncJob.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Form = void 0;\nconst DataManager_1 = require(\"./DataManager\");\nconst Helper_1 = require(\"./Legacy/Helper\");\nconst Translator_1 = require(\"./Translator\");\nconst Toast_1 = require(\"./Toast/Toast\");\nclass Form {\n constructor(formElem, urlOrCallback, method) {\n this._formElem = formElem;\n this._method = Helper_1.Helper.nonNull(method, formElem[\"method\"], \"POST\");\n this._elementChangeListener = null;\n this._validators = [];\n this._isBusy = false;\n if (typeof urlOrCallback === \"string\") {\n this._submitHandler = (values) => {\n if (this._method.toLowerCase() === \"get\") {\n return (DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)));\n }\n else {\n //TODO, wenn Serververbindung kommt\n // return (DataManager.send(urlOrCallback, values));\n }\n };\n }\n else {\n this._submitHandler = urlOrCallback;\n }\n this._editors = [];\n this._submitCallback = null;\n this.errorCallback = (errors) => __awaiter(this, void 0, void 0, function* () {\n yield this.setErrors(errors);\n });\n formElem.addEventListener(\"submit\", function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n yield self.doSubmit(e);\n });\n });\n let self = this;\n [...formElem.elements].forEach(element => {\n element.addEventListener(\"change\", function () {\n if (this.value.trim() !== \"\") {\n this.classList.add(\"notEmpty\");\n }\n else {\n this.classList.remove(\"notEmpty\");\n }\n this.setCustomValidity(\"\");\n if (Helper_1.Helper.isNotNull(self._elementChangeListener)) {\n self._elementChangeListener(element, this);\n }\n this.setCustomValidity(\"\");\n if (element.accept && element.accept.indexOf(\"image\") !== -1) {\n if (element.files && element.files[0]) {\n let reader = new FileReader();\n reader.onload = e => {\n const previewElem = formElem.querySelector(\".\" + element.name + \"-preview\");\n if (previewElem) {\n previewElem.src = e.target[\"result\"];\n }\n };\n reader.readAsDataURL(element.files[0]);\n }\n else {\n formElem.querySelector(\".\" + element.name + \"-preview\").src = \"\";\n }\n }\n });\n element.addEventListener(\"keydown\", function () {\n this.setCustomValidity(\"\");\n });\n });\n }\n addValidator(validatorCallback) {\n this._validators.push(validatorCallback);\n }\n onError(errorHandler) {\n this.errorCallback = errorHandler;\n }\n addEditor(e) {\n this._editors.push(e);\n }\n doSubmit(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._isBusy) {\n let res = yield this.submit();\n //TODO einbauen, wenn server dazu kommt\n // if (res[\"success\"]) {\n // if (self._submitCallback !== null) {\n // return self._submitCallback(res[\"result\"]);\n // }\n // } else if (Helper.isNotNull(self.errorCallback)) {\n // return self.errorCallback(res[\"errors\"]);\n // }\n return res;\n }\n return false;\n });\n }\n setValues(valuePromise) {\n return __awaiter(this, void 0, void 0, function* () {\n this.setIsBusy(true);\n let values = yield Promise.resolve(valuePromise);\n this.setIsBusy(false);\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k])) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + \"Options\"])) {\n let options = this._formElem.elements[k].options;\n for (let val in values[k + \"Options\"]) {\n let option = document.createElement(\"option\");\n option.value = val;\n option.innerText = values[k + \"Options\"][val];\n options.add(option);\n }\n }\n if (this._formElem.elements[k].type && (this._formElem.elements[k].type === \"checkbox\" || this._formElem.elements[k].type === \"radio\")) {\n this._formElem.elements[k].checked = this._formElem.elements[k].value == values[k];\n }\n else if (this._formElem.elements[k].type && this._formElem.elements[k].type === \"file\") {\n if (this._formElem.elements[k + \"-hidden\"]) {\n this._formElem.elements[k + \"-hidden\"].value = values[k];\n }\n if (this._formElem.elements[k].accept && this._formElem.elements[k].accept.indexOf(\"image\") !== -1) {\n let previewImage = this._formElem.querySelector(\".\" + k + \"-preview\");\n if (previewImage) {\n previewImage.src = values[k];\n }\n }\n }\n else {\n this._formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]);\n if (this._formElem.elements[k].classList) {\n if (Helper_1.Helper.isNotNull(values[k]) && (\"\" + values[k]).trim() !== \"\") {\n this._formElem.elements[k].classList.add(\"notEmpty\");\n }\n else {\n this._formElem.elements[k].classList.remove(\"notEmpty\");\n }\n }\n }\n }\n }\n return this;\n });\n }\n getValues(filesToBase64) {\n return __awaiter(this, void 0, void 0, function* () {\n let valuesFormData = new FormData(this._formElem);\n let values = Array.from(valuesFormData[\"entries\"]()).reduce((memo, pair) => (Object.assign(Object.assign({}, memo), { [pair[0]]: pair[1] })), {});\n if (Helper_1.Helper.nonNull(filesToBase64, true)) {\n values = yield Form.filesToBase64(values);\n }\n return values;\n });\n }\n static filesToBase64(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let filePromises = [];\n Object.keys(values).forEach(key => {\n if (values[key] instanceof Blob) {\n filePromises.push(new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n reader.readAsDataURL(values[key]);\n }).then(base64 => values[key] = base64));\n }\n });\n yield Promise.all(filePromises);\n return values;\n });\n }\n setElementChangeListener(listener) {\n this._elementChangeListener = listener;\n }\n clearErrors() {\n Object.keys(this._formElem.elements).forEach(elemKey => {\n this._formElem.elements[elemKey].setCustomValidity(\"\");\n });\n }\n setErrors(errors) {\n let hasElem = false;\n let firstError = null;\n // let notCatchedErrors = [];\n for (let k in errors) {\n if (Helper_1.Helper.isNotNull(this._formElem.elements[k]) && this._formElem.elements[k].type !== \"hidden\"\n && Helper_1.Helper.isNull(this._formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this._formElem.elements[k].disabled) || !this._formElem.elements[k].disabled)) {\n this._formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")));\n hasElem = true;\n }\n else {\n new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")).show();\n }\n // if (Helper.isNull(firstError)) {\n // firstError = ;\n // }\n }\n // if (!hasElem && Helper.isNotNull(firstError)) {\n // for (let k in this._formElem.elements) {\n // if (this._formElem.elements[k].type !== \"hidden\") {\n // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError));\n // hasElem = true;\n // break;\n // }\n // }\n // }\n if (hasElem) {\n \"reportValidity\" in this._formElem && this._formElem.reportValidity();\n }\n }\n setIsBusy(isBusy) {\n this._isBusy = isBusy;\n if (this._isBusy) {\n this._formElem.classList.add(\"sending\");\n }\n else {\n this._formElem.classList.remove(\"sending\");\n }\n }\n submit() {\n return __awaiter(this, void 0, void 0, function* () {\n this._editors.forEach(e => e.updateSourceElement());\n this.setIsBusy(true);\n if (yield this.validate()) {\n let res = false;\n try {\n res = yield (this._submitHandler(yield this.getValues(), this));\n }\n catch (e) {\n console.error(e);\n }\n finally {\n this.setIsBusy(false);\n }\n return res;\n }\n this.setIsBusy(false);\n return false;\n });\n }\n validate() {\n return __awaiter(this, void 0, void 0, function* () {\n if (\"reportValidity\" in this._formElem && !this._formElem.reportValidity()) {\n return false;\n }\n let values = yield this.getValues();\n let res = yield Helper_1.Helper.asyncForEach(this._validators, (validator) => __awaiter(this, void 0, void 0, function* () {\n return validator(values, this);\n }), true);\n let hasErrors = false;\n let errors = {};\n res.forEach(value => {\n if (value !== true) {\n hasErrors = true;\n if (typeof value === \"object\") {\n for (let k in value) {\n errors[k] = value[k];\n }\n }\n }\n });\n if (hasErrors) {\n yield this.setErrors(errors);\n return false;\n }\n return true;\n });\n }\n onSubmit(callback) {\n this._submitCallback = callback;\n }\n getFormElement() {\n return this._formElem;\n }\n}\nexports.Form = Form;\n//# sourceMappingURL=Form.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DeleteUserManagement1000000000000 = void 0;\nclass DeleteUserManagement1000000000000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"roleAccess\", true);\n yield queryRunner.dropTable(\"roleChildren\", true);\n yield queryRunner.dropTable(\"userRole\", true);\n if (this._isServer()) {\n yield queryRunner.dropTable(\"user_access\", true);\n }\n yield queryRunner.dropTable(\"access\", true);\n yield queryRunner.dropTable(\"role\", true);\n yield queryRunner.dropTable(\"user\", true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.DeleteUserManagement1000000000000 = DeleteUserManagement1000000000000;\n//# sourceMappingURL=DeleteUserManagement.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupUserManagement1000000001000 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupUserManagement1000000001000 {\n _isServer() {\n return (typeof document !== \"object\");\n }\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._addAccess(queryRunner);\n yield this._addRole(queryRunner);\n yield this._addUser(queryRunner);\n yield this._addRoleAccess(queryRunner);\n yield this._addRoleChildren(queryRunner);\n yield this._addUserRole(queryRunner);\n if (this._isServer()) {\n yield this._addUserAccess(queryRunner);\n }\n });\n }\n _addAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let accessTable = new typeorm_1.Table({\n name: \"access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(accessTable, true);\n });\n }\n _addRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleTable = new typeorm_1.Table({\n name: \"role\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"name\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"description\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING\n }\n ]\n });\n return yield queryRunner.createTable(roleTable, true);\n });\n }\n _addUser(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userTable = new typeorm_1.Table({\n name: \"user\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\"\n },\n {\n name: \"createdAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"updatedAt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n },\n {\n name: \"version\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n },\n {\n name: \"deleted\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"username\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"email\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isUnique: true\n },\n {\n name: \"password\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n {\n name: \"activated\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"blocked\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.BOOLEAN,\n },\n {\n name: \"salt\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n },\n ]\n });\n return yield queryRunner.createTable(userTable, true);\n });\n }\n _addRoleAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleAccessTable = new typeorm_1.Table({\n name: \"roleAccess\",\n columns: [\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"accessId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_38300dd4683a436f8db90b42bd\",\n columnNames: [\"roleId\"]\n },\n {\n name: \"IDX_bd55fc382ad2480f75a17e33cb\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_38300dd4683a436f8db90b42bd9\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_bd55fc382ad2480f75a17e33cb5\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleAccessTable, true);\n });\n }\n _addRoleChildren(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let roleChildrenTable = new typeorm_1.Table({\n name: \"roleChildren\",\n columns: [\n {\n name: \"childId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"parentId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_030234c342756c67cefa480687\",\n columnNames: [\"childId\"]\n },\n {\n name: \"IDX_35741f2d68a65c2765047705f8\",\n columnNames: [\"parentId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_roleChildren_childId\",\n columnNames: [\"childId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_roleChildren_parentId\",\n columnNames: [\"parentId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(roleChildrenTable, true);\n });\n }\n _addUserRole(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"userRole\",\n columns: [\n {\n name: \"userId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"roleId\",\n isPrimary: true,\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n }\n ],\n indices: [\n {\n name: \"IDX_userRole_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userRole_roleId\",\n columnNames: [\"roleId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userRole_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userRole_roleId\",\n columnNames: [\"roleId\"],\n referencedTableName: \"role\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n _addUserAccess(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let userRoleTable = new typeorm_1.Table({\n name: \"user_access\",\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isGenerated: this._isServer(),\n generationStrategy: \"increment\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER\n },\n {\n name: \"userId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n },\n {\n name: \"accessId\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.INTEGER,\n isNullable: true\n }\n ],\n indices: [\n {\n name: \"IDX_userAccess_userId\",\n columnNames: [\"userId\"]\n },\n {\n name: \"IDX_userAccess_accessId\",\n columnNames: [\"accessId\"]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_userAccess_userId\",\n columnNames: [\"userId\"],\n referencedTableName: \"user\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_userAccess_accessId\",\n columnNames: [\"accessId\"],\n referencedTableName: \"access\",\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return yield queryRunner.createTable(userRoleTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupUserManagement1000000001000 = SetupUserManagement1000000001000;\n//# sourceMappingURL=SetupUserManagement.js.map","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Translator = void 0;\nconst shared_1 = require(\"js-helper/dist/shared\");\n/**\n * Singleton-Klasse zum Übersetzen von Text-Inhalten\n */\nclass Translator {\n /**\n * Erstellt einen neuen Translator\n * @param config\n */\n constructor(config = {\n translations: {},\n fallbackLanguage: \"en\",\n markUntranslatedTranslations: true,\n markTranslations: false,\n logMissingTranslations: true\n }) {\n this._dynamicKey = 0;\n this._translations = {};\n this.addDynamicTranslations(Translator._translations);\n this.addDynamicTranslations(config.translations);\n this._fallbackLanguage = config.fallbackLanguage;\n this._markUntranslatedTranslations = config.markUntranslatedTranslations;\n this._markTranslations = config.markTranslations;\n if (config.logMissingTranslations === true) {\n this._logMissingTranslationsFunction = (missingTranslation, language) => {\n if (language === this._fallbackLanguage) {\n console.error(\"missing base translation for key \" + missingTranslation);\n }\n else {\n console.warn(\"missing translation for language >\" + language + \"< and key >\" + missingTranslation + \"<\");\n }\n };\n }\n else if (typeof config.logMissingTranslations === \"function\") {\n this._logMissingTranslationsFunction = config.logMissingTranslations;\n }\n else {\n this._logMissingTranslationsFunction = null;\n }\n this._translationCallbacks = new Map();\n this._lastTranslationCallbackId = 0;\n }\n createDynamicKey() {\n this._dynamicKey++;\n return \"translator-dynamic-\" + new Date().getTime() + \"-\" + this._dynamicKey;\n }\n /**\n * Übersetzt sofort einen Key in die aktuelle Sprache\n * @param key\n * @param args\n * @param language\n * @returns {*}\n */\n translate(key, args, language) {\n if (shared_1.Helper.isNull(key)) {\n return \"\";\n }\n language = shared_1.Helper.nonNull(language, args, this._fallbackLanguage);\n let translation = null;\n key = key.toLowerCase();\n if (shared_1.Helper.isNotNull(this._translations[language]) && shared_1.Helper.isNotNull(this._translations[language][key])) {\n translation = this._translations[language][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n if (this._translations[this._fallbackLanguage]) {\n translation = this._translations[this._fallbackLanguage][key];\n }\n if (!Translator._isValid(translation)) {\n if (this._logMissingTranslationsFunction !== null) {\n this._logMissingTranslationsFunction(key, language);\n }\n translation = key;\n }\n if (this._markUntranslatedTranslations) {\n translation = \">>\" + translation + \"<<\";\n }\n }\n if (this._markTranslations) {\n translation = \"$\" + translation + \"$\";\n }\n if (args !== undefined) {\n translation = Translator._format(translation, args);\n }\n return translation;\n }\n /**\n * Fügt neue Übersetzungen hinzu\n * @param trans\n */\n addDynamicTranslations(trans) {\n for (let lang in trans) {\n if (!this._translations[lang]) {\n this._translations[lang] = {};\n }\n for (let key in trans[lang]) {\n this._translations[lang][key.toLowerCase()] = trans[lang][key];\n }\n }\n }\n getLanguages() {\n return Object.keys(this._translations);\n }\n getFallbackLanguage() {\n return this._fallbackLanguage;\n }\n static translate(key, args, language) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.translate(key, args, language);\n }\n return \"\";\n }\n static addDynamicTranslations(trans) {\n let instance = Translator.getInstance();\n if (instance) {\n return instance.addDynamicTranslations(trans);\n }\n else {\n Object.keys(trans).forEach(lang => {\n if (shared_1.Helper.isNull(Translator._translations[lang])) {\n Translator._translations[lang] = {};\n }\n Object.assign(Translator._translations[lang], trans[lang]);\n });\n }\n }\n static init(config) {\n Translator.instance = new Translator(config);\n }\n /**\n * @returns {Translator|null}\n */\n static getInstance() {\n return Translator.instance;\n }\n static _isValid(translation) {\n return (typeof translation === \"string\");\n }\n static _format(translation, args) {\n return translation.replace(/{(\\d+)}/g, function (match, number) {\n return args[number] !== undefined ? args[number] : match;\n });\n }\n}\nexports.Translator = Translator;\nTranslator._translations = {};\nTranslator.instance = null;\n//# sourceMappingURL=Translator.js.map","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","import { __awaiter, __extends, __generator, __read } from \"tslib\";\nimport { CockroachDriver } from \"../driver/cockroachdb/CockroachDriver\";\nimport { QueryBuilder } from \"./QueryBuilder\";\nimport { SqlServerDriver } from \"../driver/sqlserver/SqlServerDriver\";\nimport { PostgresDriver } from \"../driver/postgres/PostgresDriver\";\nimport { UpdateResult } from \"./result/UpdateResult\";\nimport { ReturningStatementNotSupportedError } from \"../error/ReturningStatementNotSupportedError\";\nimport { ReturningResultsEntityUpdator } from \"./ReturningResultsEntityUpdator\";\nimport { SqljsDriver } from \"../driver/sqljs/SqljsDriver\";\nimport { MysqlDriver } from \"../driver/mysql/MysqlDriver\";\nimport { BroadcasterResult } from \"../subscriber/BroadcasterResult\";\nimport { AbstractSqliteDriver } from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport { LimitOnUpdateNotSupportedError } from \"../error/LimitOnUpdateNotSupportedError\";\nimport { MissingDeleteDateColumnError } from \"../error/MissingDeleteDateColumnError\";\nimport { OracleDriver } from \"../driver/oracle/OracleDriver\";\nimport { UpdateValuesMissingError } from \"../error/UpdateValuesMissingError\";\nimport { EntitySchema } from \"../entity-schema/EntitySchema\";\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nvar SoftDeleteQueryBuilder = /** @class */ (function (_super) {\n __extends(SoftDeleteQueryBuilder, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SoftDeleteQueryBuilder(connectionOrQueryBuilder, queryRunner) {\n var _this = _super.call(this, connectionOrQueryBuilder, queryRunner) || this;\n _this.expressionMap.aliasNamePrefixingEnabled = false;\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n /**\n * Gets generated sql query without parameters being replaced.\n */\n SoftDeleteQueryBuilder.prototype.getQuery = function () {\n var sql = this.createUpdateExpression();\n sql += this.createOrderByExpression();\n sql += this.createLimitExpression();\n return sql.trim();\n };\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n SoftDeleteQueryBuilder.prototype.execute = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queryRunner, transactionStartedByUs, broadcastResult, returningResultsEntityUpdator, _a, sql, parameters, updateResult, result, driver, broadcastResult, error_1, rollbackError_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queryRunner = this.obtainQueryRunner();\n transactionStartedByUs = false;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 18, 23]);\n if (!(this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false)) return [3 /*break*/, 3];\n return [4 /*yield*/, queryRunner.startTransaction()];\n case 2:\n _b.sent();\n transactionStartedByUs = true;\n _b.label = 3;\n case 3:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 5];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastBeforeUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 4:\n _b.sent();\n _b.label = 5;\n case 5:\n returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n if (this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getUpdationReturningColumns();\n }\n _a = __read(this.getQueryAndParameters(), 2), sql = _a[0], parameters = _a[1];\n updateResult = new UpdateResult();\n return [4 /*yield*/, queryRunner.query(sql, parameters)];\n case 6:\n result = _b.sent();\n driver = queryRunner.connection.driver;\n if (driver instanceof PostgresDriver) {\n updateResult.raw = result[0];\n updateResult.affected = result[1];\n }\n else {\n updateResult.raw = result;\n }\n if (!(this.expressionMap.updateEntity === true &&\n this.expressionMap.mainAlias.hasMetadata &&\n this.expressionMap.whereEntities.length > 0)) return [3 /*break*/, 8];\n return [4 /*yield*/, returningResultsEntityUpdator.update(updateResult, this.expressionMap.whereEntities)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8:\n if (!(this.expressionMap.callListeners === true && this.expressionMap.mainAlias.hasMetadata)) return [3 /*break*/, 10];\n broadcastResult = new BroadcasterResult();\n queryRunner.broadcaster.broadcastAfterUpdateEvent(broadcastResult, this.expressionMap.mainAlias.metadata);\n if (!(broadcastResult.promises.length > 0)) return [3 /*break*/, 10];\n return [4 /*yield*/, Promise.all(broadcastResult.promises)];\n case 9:\n _b.sent();\n _b.label = 10;\n case 10:\n if (!transactionStartedByUs) return [3 /*break*/, 12];\n return [4 /*yield*/, queryRunner.commitTransaction()];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/, updateResult];\n case 13:\n error_1 = _b.sent();\n if (!transactionStartedByUs) return [3 /*break*/, 17];\n _b.label = 14;\n case 14:\n _b.trys.push([14, 16, , 17]);\n return [4 /*yield*/, queryRunner.rollbackTransaction()];\n case 15:\n _b.sent();\n return [3 /*break*/, 17];\n case 16:\n rollbackError_1 = _b.sent();\n return [3 /*break*/, 17];\n case 17: throw error_1;\n case 18:\n if (!(queryRunner !== this.queryRunner)) return [3 /*break*/, 20];\n return [4 /*yield*/, queryRunner.release()];\n case 19:\n _b.sent();\n _b.label = 20;\n case 20:\n if (!(this.connection.driver instanceof SqljsDriver && !queryRunner.isTransactionActive)) return [3 /*break*/, 22];\n return [4 /*yield*/, this.connection.driver.autoSave()];\n case 21:\n _b.sent();\n _b.label = 22;\n case 22: return [7 /*endfinally*/];\n case 23: return [2 /*return*/];\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Specifies FROM which entity's table select/update/delete/soft-delete will be executed.\n * Also sets a main string alias of the selection data.\n */\n SoftDeleteQueryBuilder.prototype.from = function (entityTarget, aliasName) {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n var mainAlias = this.createFromAlias(entityTarget, aliasName);\n this.expressionMap.setMainAlias(mainAlias);\n return this;\n };\n /**\n * Sets WHERE condition in the query builder.\n * If you had previously WHERE expression defined,\n * calling this function will override previously set WHERE conditions.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.where = function (where, parameters) {\n this.expressionMap.wheres = []; // don't move this block below since computeWhereParameter can add where expressions\n var condition = this.computeWhereParameter(where);\n if (condition)\n this.expressionMap.wheres = [{ type: \"simple\", condition: condition }];\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.andWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"and\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new OR WHERE condition in the query builder.\n * Additionally you can add parameters used in where expression.\n */\n SoftDeleteQueryBuilder.prototype.orWhere = function (where, parameters) {\n this.expressionMap.wheres.push({ type: \"or\", condition: this.computeWhereParameter(where) });\n if (parameters)\n this.setParameters(parameters);\n return this;\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.whereInIds = function (ids) {\n return this.where(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new AND WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.andWhereInIds = function (ids) {\n return this.andWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Adds new OR WHERE with conditions for the given ids.\n */\n SoftDeleteQueryBuilder.prototype.orWhereInIds = function (ids) {\n return this.orWhere(this.createWhereIdsExpression(ids));\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.output = function (output) {\n return this.returning(output);\n };\n /**\n * Optional returning/output clause.\n */\n SoftDeleteQueryBuilder.prototype.returning = function (returning) {\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n this.expressionMap.returning = returning;\n return this;\n };\n /**\n * Sets ORDER BY condition in the query builder.\n * If you had previously ORDER BY expression defined,\n * calling this function will override previously set ORDER BY conditions.\n */\n SoftDeleteQueryBuilder.prototype.orderBy = function (sort, order, nulls) {\n var _a, _b;\n if (order === void 0) { order = \"ASC\"; }\n if (sort) {\n if (sort instanceof Object) {\n this.expressionMap.orderBys = sort;\n }\n else {\n if (nulls) {\n this.expressionMap.orderBys = (_a = {}, _a[sort] = { order: order, nulls: nulls }, _a);\n }\n else {\n this.expressionMap.orderBys = (_b = {}, _b[sort] = order, _b);\n }\n }\n }\n else {\n this.expressionMap.orderBys = {};\n }\n return this;\n };\n /**\n * Adds ORDER BY condition in the query builder.\n */\n SoftDeleteQueryBuilder.prototype.addOrderBy = function (sort, order, nulls) {\n if (order === void 0) { order = \"ASC\"; }\n if (nulls) {\n this.expressionMap.orderBys[sort] = { order: order, nulls: nulls };\n }\n else {\n this.expressionMap.orderBys[sort] = order;\n }\n return this;\n };\n /**\n * Sets LIMIT - maximum number of rows to be selected.\n */\n SoftDeleteQueryBuilder.prototype.limit = function (limit) {\n this.expressionMap.limit = limit;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.whereEntity = function (entity) {\n var _this = this;\n if (!this.expressionMap.mainAlias.hasMetadata)\n throw new Error(\".whereEntity method can only be used on queries which update real entity table.\");\n this.expressionMap.wheres = [];\n var entities = Array.isArray(entity) ? entity : [entity];\n entities.forEach(function (entity) {\n var entityIdMap = _this.expressionMap.mainAlias.metadata.getEntityIdMap(entity);\n if (!entityIdMap)\n throw new Error(\"Provided entity does not have ids set, cannot perform operation.\");\n _this.orWhereInIds(entityIdMap);\n });\n this.expressionMap.whereEntities = entities;\n return this;\n };\n /**\n * Indicates if entity must be updated after update operation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n SoftDeleteQueryBuilder.prototype.updateEntity = function (enabled) {\n this.expressionMap.updateEntity = enabled;\n return this;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates UPDATE express used to perform insert query.\n */\n SoftDeleteQueryBuilder.prototype.createUpdateExpression = function () {\n var metadata = this.expressionMap.mainAlias.hasMetadata ? this.expressionMap.mainAlias.metadata : undefined;\n if (!metadata)\n throw new Error(\"Cannot get entity metadata for the given alias \\\"\" + this.expressionMap.mainAlias + \"\\\"\");\n if (!metadata.deleteDateColumn) {\n throw new MissingDeleteDateColumnError(metadata);\n }\n // prepare columns and values to be updated\n var updateColumnAndValues = [];\n var newParameters = {};\n switch (this.expressionMap.queryType) {\n case \"soft-delete\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\");\n break;\n case \"restore\":\n updateColumnAndValues.push(this.escape(metadata.deleteDateColumn.databaseName) + \" = NULL\");\n break;\n default:\n throw new Error(\"The queryType must be \\\"soft-delete\\\" or \\\"restore\\\"\");\n }\n if (metadata.versionColumn)\n updateColumnAndValues.push(this.escape(metadata.versionColumn.databaseName) + \" = \" + this.escape(metadata.versionColumn.databaseName) + \" + 1\");\n if (metadata.updateDateColumn)\n updateColumnAndValues.push(this.escape(metadata.updateDateColumn.databaseName) + \" = CURRENT_TIMESTAMP\"); // todo: fix issue with CURRENT_TIMESTAMP(6) being used, can \"DEFAULT\" be used?!\n if (updateColumnAndValues.length <= 0) {\n throw new UpdateValuesMissingError();\n }\n // we re-write parameters this way because we want our \"UPDATE ... SET\" parameters to be first in the list of \"nativeParameters\"\n // because some drivers like mysql depend on order of parameters\n if (this.connection.driver instanceof MysqlDriver ||\n this.connection.driver instanceof OracleDriver ||\n this.connection.driver instanceof AbstractSqliteDriver) {\n this.expressionMap.nativeParameters = Object.assign(newParameters, this.expressionMap.nativeParameters);\n }\n // get a table name and all column database names\n var whereExpression = this.createWhereExpression();\n var returningExpression = this.createReturningExpression();\n // generate and return sql update query\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression + \" RETURNING \" + returningExpression;\n }\n else if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + \" OUTPUT \" + returningExpression + whereExpression;\n }\n else {\n return \"UPDATE \" + this.getTableName(this.getMainTableName()) + \" SET \" + updateColumnAndValues.join(\", \") + whereExpression; // todo: how do we replace aliases in where to nothing?\n }\n };\n /**\n * Creates \"ORDER BY\" part of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createOrderByExpression = function () {\n var _this = this;\n var orderBys = this.expressionMap.orderBys;\n if (Object.keys(orderBys).length > 0)\n return \" ORDER BY \" + Object.keys(orderBys)\n .map(function (columnName) {\n if (typeof orderBys[columnName] === \"string\") {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName];\n }\n else {\n return _this.replacePropertyNames(columnName) + \" \" + orderBys[columnName].order + \" \" + orderBys[columnName].nulls;\n }\n })\n .join(\", \");\n return \"\";\n };\n /**\n * Creates \"LIMIT\" parts of SQL query.\n */\n SoftDeleteQueryBuilder.prototype.createLimitExpression = function () {\n var limit = this.expressionMap.limit;\n if (limit) {\n if (this.connection.driver instanceof MysqlDriver) {\n return \" LIMIT \" + limit;\n }\n else {\n throw new LimitOnUpdateNotSupportedError();\n }\n }\n return \"\";\n };\n return SoftDeleteQueryBuilder;\n}(QueryBuilder));\nexport { SoftDeleteQueryBuilder };\n\n//# sourceMappingURL=SoftDeleteQueryBuilder.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XSSHelper = void 0;\nclass XSSHelper {\n static escapeHTML(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n const MAP = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, function (m) {\n return MAP[m];\n });\n }\n static escapeJS(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n return text.replace(/[<]([\\\\s]*\\\\\\/?[\\\\s]*)script([^<]*)[>]/g, function (match, p1, p2) {\n return \"<\" + p1 + \"sc‌ript\" + p2 + \">\";\n });\n }\n}\nexports.XSSHelper = XSSHelper;\n//# sourceMappingURL=XSSHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SiteManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst AbstractSite_1 = require(\"./AbstractSite\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst Context_1 = require(\"./Context\");\nconst Translator_1 = require(\"../Translator\");\nconst DataManager_1 = require(\"../DataManager\");\nconst HistoryManager_1 = require(\"../HistoryManager\");\nconst EventManager_1 = require(\"../Legacy/EventManager/EventManager\");\n/**\n * Manager-Klasse für die Seiten\n */\nclass SiteManager {\n /**\n * Constructor für Manager. Fügt Listener für zurück (onpopstate) hinzu\n */\n constructor() {\n this._isInit = false;\n }\n /**\n *\n * @return {SiteManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new SiteManager();\n }\n return this._instance;\n }\n /**\n * @param siteDivId\n * @param deepLinks\n */\n init(siteDivId, deepLinks) {\n this._siteDiv = null;\n this._siteStack = [];\n this._siteDiv = document.getElementById(siteDivId);\n this._titleTranslationCallbackId = null;\n this._appEndedListener = null;\n this._inversedDeepLinks = Helper_1.Helper.invertKeyValues(deepLinks);\n //Listener, welcher beim klicken auf Zurück oder Forward ausgeführt wird\n HistoryManager_1.HistoryManager.getInstance().setOnPopStateListener((state, direction) => {\n //Falls zurück\n if (direction === HistoryManager_1.HistoryManager.BACK) {\n this.goBack();\n }\n //Falls vorwärts\n else if (HistoryManager_1.HistoryManager.FORWARD === direction) {\n if (this._siteStack.indexOf(state.state.site) !== -1) {\n this.toForeground(state.state.site);\n }\n else {\n this.startSite(state.state.site.constructor, state.state.parameters);\n }\n }\n });\n //Cordova-Callbacks\n document.addEventListener(\"pause\", () => this._pauseSite(), false);\n document.addEventListener(\"resume\", () => __awaiter(this, void 0, void 0, function* () { return yield this._resumeSite(); }), false);\n document.addEventListener(\"menubutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onMenuPressed();\n }\n }, false);\n document.addEventListener(\"searchbutton\", () => {\n let site = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(site)) {\n site.onSearchPressed();\n }\n }, false);\n window.addEventListener(\"beforeunload\", e => {\n const returnMessage = this.beforeUnload(e);\n if (returnMessage !== null) {\n e.preventDefault();\n e.returnValue = returnMessage;\n return returnMessage;\n }\n });\n this._isInit = true;\n }\n setAppEndedListener(listener) {\n this._appEndedListener = listener;\n }\n goBack() {\n if (this._siteStack.length >= 1) {\n let site = this.getCurrentSite();\n if (site && site.onBackPressed() !== false) {\n this.endSite(site);\n }\n }\n }\n /**\n * gibt die aktuelle Seite zurück\n * @returns AbstractSite\n */\n getCurrentSite() {\n if (this._siteStack.length >= 1) {\n return this._siteStack[this._siteStack.length - 1];\n }\n return null;\n }\n /**\n * Erstellt eine neue Seite und zeigt diese an. ParamsPromise kann entweder ein Promise oder ein Objekt oder null sein.\n *\n * @param siteConstructor\n * @param paramsPromise\n * @returns {Promise}\n */\n startSite(siteConstructor, paramsPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n //Testen, ob der Constructor vom richtigen Typen ist\n if (!(siteConstructor.prototype instanceof AbstractSite_1.AbstractSite)) {\n throw {\n \"error\": \"wrong class given! Expected AbstractSite, given \" + siteConstructor.name\n };\n }\n EventManager_1.EventManager.trigger(\"site-manager-start-site\", {\n site: siteConstructor, paramPromise: paramsPromise\n });\n //Loading-Symbol, falls ViewParameters noch länger brauchen\n let loadingSymbol = ViewInflater_1.ViewInflater.createLoadingSymbol(\"overlay\");\n this._siteDiv.appendChild(loadingSymbol);\n //create Site\n let site = new siteConstructor(this);\n this._siteStack.unshift(site);\n //Wartet auf onConstruct, viewPromise, onViewLoaded und zeigt dann Seite\n Promise.resolve(paramsPromise).then((params) => __awaiter(this, void 0, void 0, function* () {\n site._onConstructPromise = site.onConstruct(Helper_1.Helper.nonNull(params, {}));\n yield Promise.all([site._onConstructPromise, site.getViewPromise()]);\n //If site is ended inside onConstruct, don't do anything\n if (site._state !== Context_1.Context.STATE_DESTROYED && site._state !== Context_1.Context.STATE_DESTROYING) {\n yield site.callOnViewLoaded();\n site._viewLoadedPromise.resolve();\n return this._show(site);\n }\n loadingSymbol.remove();\n })).catch((e) => {\n console.error(\"site start error for site \", siteConstructor.name, e);\n site.getFinishResolver().reject(e);\n loadingSymbol.remove();\n //Zeige alte Seite im Fehlerfall wieder an\n for (let i = this._siteStack.length - 1; i >= 0; i--) {\n if (this._siteStack[i] !== site) {\n return this._show(this._siteStack[i]);\n }\n }\n site._viewLoadedPromise.reject();\n });\n //Gebe Site-Promise zurück\n return site.getFinishPromise();\n });\n }\n updateUrl(site, args) {\n let url = this._generateUrl(site, args);\n HistoryManager_1.HistoryManager.getInstance().replaceState({\n 'site': site,\n 'parameters': args\n }, site.constructor.name, url);\n }\n _generateUrl(site, args) {\n let deepLink = this.getDeepLinkFor(site);\n let url = [location.protocol, '//', location.host, location.pathname].join('');\n if (Helper_1.Helper.isNotNull(deepLink)) {\n args[\"s\"] = deepLink;\n url = [url, DataManager_1.DataManager.buildQuery(args)].join('');\n }\n return url;\n }\n /**\n * Gibt einen DeepLink zurück\n *\n * @param site\n * @return string\n */\n getDeepLinkFor(site) {\n return this._inversedDeepLinks[site.constructor];\n }\n /**\n * Pausiert eine Seite\n *\n * @param site\n * @private\n */\n _pauseSite(site) {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && site._state === Context_1.Context.STATE_RUNNING) {\n site._pauseParameters = site.onPause();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n }\n }\n /**\n * Lässt eine Seite weiterlaufen\n *\n * @param site\n * @private\n */\n _resumeSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n site = Helper_1.Helper.nonNull(site, this.getCurrentSite());\n if (Helper_1.Helper.isNotNull(site) && (site._state === Context_1.Context.STATE_PAUSED || site._state === Context_1.Context.STATE_VIEW_LOADED)) {\n yield site.getViewPromise();\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(site._view);\n yield Translator_1.Translator.getInstance().updateTranslations();\n if (Helper_1.Helper.isNull(site._historyId)) {\n site._historyId = HistoryManager_1.HistoryManager.getInstance().pushState({\n 'site': site,\n 'parameters': site.getParameters()\n }, site.constructor.name, this._generateUrl(site, site.getParameters()));\n }\n else {\n HistoryManager_1.HistoryManager.getInstance().stateToCurrentPosition(site._historyId);\n }\n yield site.onStart(site._pauseParameters);\n }\n });\n }\n /**\n * Zeigt eine Seite an\n *\n * @param site\n * @returns {Promise<*>}\n * @private\n */\n _show(site) {\n return __awaiter(this, void 0, void 0, function* () {\n //check if site is ended\n if (site._state === Context_1.Context.STATE_DESTROYING || site._state === Context_1.Context.STATE_DESTROYED) {\n return;\n }\n //Mache nichts, wenn Seite bereits angezeigt wird\n if (site._state === Context_1.Context.STATE_RUNNING && this.getCurrentSite() === site) {\n return;\n }\n //Speichere alte Seite\n this._pauseSite();\n //Zeige Ladesymbol\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol());\n //Hinzufügen/Updaten zum SiteStack\n let currentSiteIndex = this._siteStack.indexOf(site);\n if (-1 !== currentSiteIndex) {\n this._siteStack.splice(currentSiteIndex, 1);\n }\n this._siteStack.push(site);\n //Anzeigen der Seite. Stelle sicher, dass die View wirklich geladen ist!\n return site.getViewPromise().then(() => __awaiter(this, void 0, void 0, function* () {\n //Stelle sicher, dass in der Zwischenzeit keine andere Seite gestartet wurde\n if (this.getCurrentSite() === site) {\n yield this._resumeSite(site);\n }\n }));\n });\n }\n /**\n * Beendet eine Seite. Muss nicht die aktive Seite sein\n *\n * @param site\n */\n endSite(site) {\n return __awaiter(this, void 0, void 0, function* () {\n // return site._onConstructPromise.then(async () => {\n //Aus Index entfernen\n let index = this._siteStack.indexOf(site);\n this._siteStack.splice(index, 1);\n //Seite war/ist die aktive Seite\n if (index === this._siteStack.length) {\n this._pauseSite(site);\n //Seite ist aktiv, zeige Ladesymbol\n this._siteDiv.appendChild(ViewInflater_1.ViewInflater.createLoadingSymbol('overlay'));\n site.getFinishPromise().then(() => {\n let newSiteToShow = this.getCurrentSite();\n if (Helper_1.Helper.isNotNull(newSiteToShow)) {\n this.toForeground(newSiteToShow);\n }\n });\n }\n if (this._siteStack.length <= 0) {\n console.log(\"stack is empty, starting normal site!\");\n HistoryManager_1.HistoryManager.getInstance().cutStack(0);\n HistoryManager_1.HistoryManager.getInstance().go(-1 * history.length, true);\n Helper_1.Helper.removeAllChildren(this._siteDiv).appendChild(document.createTextNode(\"App ist beendet\"));\n if (typeof this._appEndedListener === \"function\") {\n this._appEndedListener(this);\n }\n }\n site._context = Context_1.Context.STATE_DESTROYING;\n yield site.onDestroy();\n site._context = Context_1.Context.STATE_DESTROYED;\n site.getFinishResolver().resolve(site._result);\n });\n }\n /**\n * Stellt eine aktive Seite in den Vordergrund;\n * @param site\n * @returns {Promise<*>}\n */\n toForeground(site) {\n return this._show(site);\n }\n /**\n * Updated den Seitentitel. Dafür gibt es im translation-file den Key document-title (document-title-empty, falls title null),\n * der als Parameter in der Übersetzung den übergebenen Title übergeben bekommt.\n *\n * Der übergebene title wird mit den angebenenen argumenten zuerst übersetz, bevor der gesamte document-Title überstzt wird\n *\n * Wenn args === false, dann wird title nicht übersetzt\n *\n * Durch das argument titleTemplate kann der key im translation-file von document-title individuell abweichen\n *\n * @param title\n * @param args\n * @param titleTemplate\n */\n updateTitle(title, args, titleTemplate) {\n titleTemplate = Helper_1.Helper.nonNull(titleTemplate, Helper_1.Helper.isNull(title) ? \"document-title-empty\" : \"document-title\");\n if (Helper_1.Helper.isNotNull(this._titleTranslationCallbackId)) {\n Translator_1.Translator.removeTranslationCallback(this._titleTranslationCallbackId);\n }\n this._titleTranslationCallbackId = Translator_1.Translator.addTranslationCallback(() => {\n if (args !== false) {\n title = Translator_1.Translator.translate(title, args);\n }\n document.title = Translator_1.Translator.translate(titleTemplate, [title]);\n });\n }\n beforeUnload(e) {\n return this.getCurrentSite().onBeforeUnload(e);\n }\n}\nexports.SiteManager = SiteManager;\nSiteManager._instance = null;\n//# sourceMappingURL=SiteManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DraggedElement = void 0;\nclass DraggedElement {\n constructor(element) {\n this.isDragging = false;\n this.element = element;\n }\n onStart(listener) {\n this.startListener = listener;\n return this;\n }\n onStop(listener) {\n this.stopListener = listener;\n return this;\n }\n onMove(listener) {\n this.moveListener = listener;\n return this;\n }\n start() {\n this.isDragging = true;\n if (!this.previewElement) {\n this.previewElement = this.element.cloneNode(true);\n const styles = getComputedStyle(this.element);\n for (let i = 0; i < styles.length; i++) {\n this.previewElement.style[styles[i]] = styles.getPropertyValue(styles[i]);\n }\n this.previewElement.style.opacity = \"0.6\";\n this.previewElement.style.position = \"fixed\";\n }\n const boundingRect = this.element.getBoundingClientRect();\n this.startPosition = { x: boundingRect.left, y: boundingRect.top };\n this.previewElement.style.top = boundingRect.top + \"px\";\n this.previewElement.style.left = boundingRect.left + \"px\";\n this.previewElement.style.width = (boundingRect.right - boundingRect.left) + \"px\";\n this.previewElement.style.height = (boundingRect.bottom - boundingRect.top) + \"px\";\n document.body.appendChild(this.previewElement);\n if (this.startListener) {\n this.startListener(this.element);\n }\n }\n stop(mousePosition) {\n this.isDragging = false;\n if (this.previewElement) {\n this.previewElement.remove();\n }\n const droppedAt = document.elementFromPoint(mousePosition.x, mousePosition.y);\n if (this.stopListener) {\n this.stopListener(this.element, droppedAt);\n }\n }\n moved() {\n if (this.isDragging && this.moveListener) {\n this.moveListener(this.element);\n }\n }\n moveRelativeTo(relativePos) {\n if (this.startPosition && this.previewElement) {\n const newPosition = { x: this.startPosition.x + relativePos.x, y: this.startPosition.y + relativePos.y };\n this.previewElement.style.left = newPosition.x + \"px\";\n this.previewElement.style.top = newPosition.y + \"px\";\n this.moved();\n }\n }\n}\nexports.DraggedElement = DraggedElement;\n//# sourceMappingURL=DraggedElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotOnlineError = void 0;\nclass NotOnlineError extends Error {\n constructor(message, url) {\n super(message + \" for url \" + url);\n this._url = url;\n }\n}\nexports.NotOnlineError = NotOnlineError;\n//# sourceMappingURL=NotOnlineError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryManager = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\n/**\n * Manager, welcher sich um die Manipulation von der Historie kümmert\n */\nclass HistoryManager {\n /**\n * Constructor für den Manager. Fügt den onPopstateListener hinzu\n */\n constructor() {\n this._lastStateId = -1;\n this._states = {};\n this._stack = [];\n this._ignoreOnPopState = false;\n this._isUpdateNativeStack = false;\n this._onPopStateListener = null;\n this._currentStackIndex = -1;\n window.onpopstate = (e) => {\n //Wenn nativeStack geupdated wird, mache nichts\n if (this._isUpdateNativeStack) {\n this._isUpdateNativeStack = false;\n return;\n }\n let direction = e.state[\"type\"];\n this._currentStackIndex += direction;\n this._updateNativeHistoryStack();\n //Wenn popState ignoriert werden soll, mache ebenfalls nichts außer Stack updaten\n if (this._ignoreOnPopState) {\n this._ignoreOnPopState = false;\n return;\n }\n //Wenn Listener gesetzt, hole daten und führe Listener aus\n if (typeof this._onPopStateListener === 'function') {\n let data = {};\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n data = this._states[this._stack[this._currentStackIndex]];\n }\n this._onPopStateListener(data, direction, e);\n }\n };\n this._updateNativeHistoryStack();\n }\n /**\n * Updated den History-Stack innerhalb des Browsers\n *\n * @param url\n * @private\n */\n _updateNativeHistoryStack(url) {\n url = Helper_1.Helper.nonNull(url, window.location.href);\n //setze das weitere zurückgehen\n if (this._currentStackIndex >= 0) {\n history.pushState({\n \"type\": HistoryManager.BACK,\n }, \"back\", url);\n }\n history.pushState({\n \"type\": HistoryManager.CURRENT,\n }, \"current\", url);\n if (this._currentStackIndex < this._stack.length - 1) {\n history.pushState({\n \"type\": HistoryManager.FORWARD,\n }, \"forward\", url);\n this._isUpdateNativeStack = true;\n history.go(-1);\n }\n }\n /**\n * Generiert einen neuen History-Eintrag. Gibt die ID des Eintrages zurück\n *\n * @param value\n * @param name\n * @param url\n *\n * @return {number}\n */\n pushState(value, name, url) {\n let newState = {\n state: value,\n title: name,\n url: url\n };\n this._lastStateId++;\n this._states[this._lastStateId] = newState;\n this._currentStackIndex++;\n this._stack.splice(this._currentStackIndex, this._stack.length, this._lastStateId);\n this._updateNativeHistoryStack(url);\n return this._lastStateId;\n }\n /**\n * Ersetzt den Eintrag mit der gegebenen ID. Ist die ID nicht gegeben, wird der aktuelle Eintrag ersetzt\n *\n * @param value\n * @param name\n * @param url\n * @param id\n */\n replaceState(value, name, url, id) {\n id = Helper_1.Helper.nonNull(id, this._stack[this._currentStackIndex]);\n if (this._stack.length > this._currentStackIndex && this._currentStackIndex >= 0) {\n this._states[id] = {\n state: value,\n title: name,\n url: url\n };\n this._updateNativeHistoryStack(url);\n }\n }\n /**\n * Verschiebt den Eintrag mit der entsprechenden ID an die aktuell aktive Stelle\n * @param id\n */\n stateToCurrentPosition(id) {\n if (Helper_1.Helper.isNotNull(this._states[id])) {\n let oldStackPosition = this._stack.indexOf(id);\n if (oldStackPosition !== -1) {\n this._stack.splice(oldStackPosition, 1);\n this._stack.splice(this._currentStackIndex + ((oldStackPosition <= this._currentStackIndex) ? -1 : 0), 0, id);\n }\n }\n }\n /**\n * Gehe um to in der Historie\n *\n * @param to\n * @param ignoreOnPopState\n */\n go(to, ignoreOnPopState) {\n this._ignoreOnPopState = (Helper_1.Helper.nonNull(ignoreOnPopState, false) === true);\n history.go(to);\n }\n /**\n * Entferne alle Einträge ab at (inklusive). Wenn at nicht gesetzt ist, wird alles über der aktuellen position abgeschnitten\n * @param at\n */\n cutStack(at) {\n at = Helper_1.Helper.nonNull(at, this._currentStackIndex + 1);\n this._stack.splice(at);\n this._currentStackIndex = Math.min(this._currentStackIndex, this._stack.length - 1);\n this._updateNativeHistoryStack();\n }\n /**\n * Alias für this.go(-1)\n */\n back() {\n this.go(-1);\n }\n /**\n * Alias für this.go(1)\n */\n forward() {\n this.go(+1);\n }\n /**\n * Setzt den onPopStateListener\n *\n * @param listener\n */\n setOnPopStateListener(listener) {\n this._onPopStateListener = listener;\n }\n /**\n * Singelton-Getter\n * @return {HistoryManager}\n */\n static getInstance() {\n if (Helper_1.Helper.isNull(HistoryManager._instance)) {\n HistoryManager._instance = new HistoryManager();\n }\n return HistoryManager._instance;\n }\n}\nexports.HistoryManager = HistoryManager;\nHistoryManager.BACK = -1;\nHistoryManager.FORWARD = 1;\nHistoryManager.CURRENT = 0;\n//# sourceMappingURL=HistoryManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ColorIndicator = void 0;\nconst Singleton_1 = require(\"../Singleton\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ColorIndicator extends Singleton_1.Singleton {\n getAverageImgColor(imgEl, areaWidth, areaHeight) {\n //https://stackoverflow.com/questions/2541481/get-average-color-of-image-via-javascript\n let blockSize = 5, // only visit every 5 pixels\n defaultRGB = { r: 255, g: 255, b: 255 }, // for non-supporting envs\n canvas = document.createElement('canvas'), context = canvas.getContext && canvas.getContext('2d'), data, width, height, i = -4 * blockSize, //start with first pixel\n length, rgb = { r: 0, g: 0, b: 0 }, count = 0;\n if (!context) {\n return defaultRGB;\n }\n height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;\n width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;\n areaWidth = Helper_1.Helper.nonNull(areaWidth, width);\n areaHeight = Helper_1.Helper.nonNull(areaWidth, height);\n context.drawImage(imgEl, 0, 0);\n try {\n data = context.getImageData(0, 0, Math.min(width, areaWidth), Math.min(height, areaHeight));\n }\n catch (e) {\n /* security error, img on diff domain */\n console.error(e);\n return defaultRGB;\n }\n length = data.data.length;\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb.r += data.data[i];\n rgb.g += data.data[i + 1];\n rgb.b += data.data[i + 2];\n }\n // ~~ used to floor values\n rgb.r = ~~(rgb.r / count);\n rgb.g = ~~(rgb.g / count);\n rgb.b = ~~(rgb.b / count);\n return rgb;\n }\n invertColorBW(r, g, b) {\n return this.invertColor(r, g, b, true);\n }\n invertColor(r, g, b, bw) {\n if (typeof r === \"object\") {\n bw = g || bw;\n g = r.g;\n b = r.b;\n r = r.r;\n }\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) > 186\n ? { r: 0, g: 0, b: 0 }\n : { r: 255, g: 255, b: 255 };\n }\n // invert color components\n r = (255 - r);\n g = (255 - g);\n b = (255 - b);\n // pad each with zeros and return\n return {\n r: r,\n g: g,\n b: b,\n };\n }\n toHEX(r, g, b) {\n if (typeof r === \"object\") {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n r = r.toString(16);\n g = g.toString(16);\n b = b.toString(16);\n return \"#\" + Helper_1.Helper.padZero(r) + Helper_1.Helper.padZero(g) + Helper_1.Helper.padZero(b);\n }\n}\nexports.ColorIndicator = ColorIndicator;\n//# sourceMappingURL=ColorIndicator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Singleton = void 0;\nclass Singleton {\n /**\n *\n * @returns {Singleton|this}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new this();\n }\n return this._instance;\n }\n}\nexports.Singleton = Singleton;\n//# sourceMappingURL=Singleton.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MasterSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass MasterSite extends AbstractSite_1.AbstractSite {\n constructor(siteManager, view) {\n super(siteManager, view);\n this._delegates = [];\n }\n addDelegate(delegateSite) {\n this._delegates.push(delegateSite);\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onConstruct(constructParameters);\n }));\n return res;\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onStart.call(this, pauseArguments);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onStart(pauseArguments);\n }));\n });\n }\n onBackPressed() {\n super.onBackPressed();\n this._delegates.forEach(delegate => {\n delegate.onBackPressed();\n });\n }\n onMenuPressed() {\n super.onMenuPressed();\n this._delegates.forEach(delegate => {\n delegate.onMenuPressed();\n });\n }\n onSearchPressed() {\n super.onSearchPressed();\n this._delegates.forEach(delegate => {\n delegate.onSearchPressed();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onViewLoaded();\n }));\n return res;\n });\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onPause.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onPause();\n }));\n });\n }\n onDestroy() {\n const _super = Object.create(null, {\n onDestroy: { get: () => super.onDestroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.onDestroy.call(this);\n yield Helper_1.Helper.asyncForEach(this._delegates, (delegate) => __awaiter(this, void 0, void 0, function* () {\n yield delegate.onDestroy();\n }));\n });\n }\n}\nexports.MasterSite = MasterSite;\n//# sourceMappingURL=MasterSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ToastManager = void 0;\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nclass ToastManager {\n constructor() {\n this._toastContainer = document.querySelector(ToastManager._toastContainerSelector);\n this._toastTemplate = this._toastContainer.querySelector(\".toast-template\");\n this._toastTemplate.classList.remove(\"toast-template\");\n this._toastTemplate.remove();\n }\n showToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n let message = toast.getMessage();\n if (toast.isShouldTranslate()) {\n message = Translator_1.Translator.makePersistentTranslation(message, toast.getTranslationArgs());\n }\n else {\n message = document.createTextNode(message);\n }\n let toastElement = this._toastTemplate.cloneNode(true);\n toastElement.querySelector(\".message\").appendChild(message);\n toast.setToastElement(toastElement);\n this._toastContainer.appendChild(toastElement);\n toastElement.style.opacity = 1;\n return new Promise(resolve => {\n toastElement.querySelector(\".message\").onclick = () => {\n this.hideToast(toast);\n resolve(true);\n };\n setTimeout(() => {\n this.hideToast(toast);\n resolve(false);\n }, toast.getDuration());\n });\n });\n }\n hideToast(toast) {\n return __awaiter(this, void 0, void 0, function* () {\n //TODO Animation hinzufügen\n let element = toast.getToastElement();\n if (Helper_1.Helper.isNotNull(element)) {\n element.style.opacity = 0;\n return new Promise(res => {\n setTimeout(() => {\n element.remove();\n res();\n }, 250);\n });\n }\n return Promise.reject(\"toast is not showing\");\n });\n }\n static setToastContainerSelector(selector) {\n ToastManager._toastContainerSelector = selector;\n }\n static getInstance() {\n if (!ToastManager._instance) {\n ToastManager._instance = new ToastManager();\n }\n return ToastManager._instance;\n }\n}\nexports.ToastManager = ToastManager;\nToastManager._instance = null;\nToastManager._toastContainerSelector = \"#toast-container\";\n//# sourceMappingURL=ToastManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DropdownRenderer = void 0;\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\nconst AccordionRenderer_1 = require(\"./AccordionRenderer\");\nconst Submenu_1 = require(\"../Submenu\");\n/**\n * Erstellt ein Dropdown-Menu\n */\nclass DropdownRenderer extends AccordionRenderer_1.AccordionRenderer {\n constructor(parentElement) {\n super(parentElement);\n this._accordionMenuRenderer = new AccordionRenderer_1.AccordionRenderer();\n }\n /**\n * Rendert die SubmenuAction\n *\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.renderSubmenuAction(action);\n }\n let submenuActionElement = super.renderSubmenuAction(action);\n submenuActionElement.classList.add('is-dropdown-submenu-parent');\n submenuActionElement.classList.add('opens-right');\n return submenuActionElement;\n }\n /**\n * Erstellt ein SubmenuParent\n *\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.createSubmenuParentElement(action);\n }\n let menuElement = document.createElement(\"ul\");\n menuElement.classList.add(\"menu\");\n menuElement.classList.add(\"vertical\");\n menuElement.classList.add(\"submenu\");\n menuElement.classList.add(\"accordion-menu\");\n menuElement.classList.add(\"is-dropdown-submenu\");\n menuElement.classList.add(\"first-sub\");\n return menuElement;\n }\n /**\n * Updatet das Element für eine Action\n * @param action\n */\n updateAction(action) {\n if (action.getMenu() instanceof Submenu_1.Submenu) {\n return super.updateAction(action);\n }\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n let submenuElement = this.getElementForAction(action).querySelector(\".submenu\");\n if (action.getSubmenu().isOpen()) {\n submenuElement.classList.add(\"js-dropdown-active\");\n }\n else {\n submenuElement.classList.remove(\"js-dropdown-active\");\n }\n }\n }\n}\nexports.DropdownRenderer = DropdownRenderer;\n//# sourceMappingURL=DropdownRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuRenderer = void 0;\nconst Helper_1 = require(\"../../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"../MenuAction/OpenSubmenuAction\");\n/**\n * Rendert ein Menü\n */\nclass MenuRenderer {\n /**\n * Jeder Renderer hat ein Element, wo er die gerenderten Elemente hinzufügt\n *\n * @param parentElement\n */\n constructor(parentElement) {\n this._parentElement = parentElement;\n this._renderedElements = {};\n }\n /**\n * Stößt das Rendern an\n * @param menu\n * @param parentElement\n */\n render(menu, parentElement) {\n let actions = menu.getActions();\n //Funktion wird auch für Submenüs genutzt. Daher muss hier ein anderes parentElement übergeben werden\n parentElement = Helper_1.Helper.nonNull(parentElement, this._parentElement);\n if (Helper_1.Helper.isNotNull(parentElement)) {\n Helper_1.Helper.removeAllChildren(parentElement);\n //Füge Elemente hinzu\n actions.forEach(action => {\n parentElement.appendChild(this.getElementForAction(action));\n });\n //Setze den onclick-Listener\n parentElement.onclick = (e) => {\n if (typeof menu.getOnClickListener() === 'function') {\n menu.getOnClickListener()(e);\n }\n };\n }\n }\n /**\n * Führt das Rendern der Elemente aus und ersetzt evtl schon alte Elemente\n * Auslagern von renderAction und renderSubmenuAction zum besseren überschreiben der Funktionen.\n *\n * renderSubmenuAction und renderAction sollten nur von dieser Funktion aufgerufen werden, damit die\n * _rendererElements aktuell bleiben!\n *\n * @param action\n * @returns {HTMLElement}\n * @private\n */\n _triggerRenderAction(action) {\n let oldElement = this._renderedElements[action.getId()];\n if (action instanceof OpenSubmenuAction_1.OpenSubmenuAction) {\n this._renderedElements[action.getId()] = this.renderSubmenuAction(action);\n }\n else {\n this._renderedElements[action.getId()] = this.renderAction(action);\n }\n this.updateAction(action);\n if (Helper_1.Helper.isNotNull(oldElement)) {\n oldElement.replaceWith(this._renderedElements[action.getId()]);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Gibt das Element zur Action. Falls es noch nicht existiert, wird dieses gerendert\n * @param action\n * @returns {*}\n */\n getElementForAction(action) {\n if (Helper_1.Helper.isNull(this._renderedElements[action.getId()])) {\n this._triggerRenderAction(action);\n }\n return this._renderedElements[action.getId()];\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n renderAction(action) {\n return null;\n }\n /**\n * Funktion zum überladen\n * @param action\n */\n updateAction(action) {\n }\n /**\n * Rendert eine SubmenuAction, kann/sollte überladen werden\n * @param action\n * @returns {*}\n */\n renderSubmenuAction(action) {\n let actionElement = this.renderAction(action);\n action.getSubmenu().sortActions();\n let submenuParentElement = this.createSubmenuParentElement(action);\n this.render(action.getSubmenu(), submenuParentElement);\n actionElement.appendChild(submenuParentElement);\n return actionElement;\n }\n ;\n /**\n * Erstellt ein Element für ein Submenu. Sollte überladen werden\n * @param action\n * @returns {HTMLUListElement}\n */\n createSubmenuParentElement(action) {\n return document.createElement(\"ul\");\n }\n}\nexports.MenuRenderer = MenuRenderer;\n//# sourceMappingURL=MenuRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Submenu = void 0;\nconst Menu_1 = require(\"./Menu\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst OpenSubmenuAction_1 = require(\"./MenuAction/OpenSubmenuAction\");\n/**\n * Submenü, ein untermenü\n */\nclass Submenu extends Menu_1.Menu {\n /**\n * Constructor für ein Submenu\n *\n * Bekommt parameter für die OpenSubmenuAction übergeben und reicht diese weiter.\n * Renderer besitzt das Menü keine, da die Renderer des ParentMenus genutzt werden\n * Actions können nicht bei der Erstellung hinzugefügt werden\n *\n * @param title\n * @param showFor\n * @param order\n * @param icon\n * @param renderers\n */\n constructor(title, showFor, order, icon, renderers) {\n super(Helper_1.Helper.nonNull(renderers, []));\n this._parentAction = new OpenSubmenuAction_1.OpenSubmenuAction(title, this, showFor, order, icon);\n this._isOpen = false;\n }\n /**\n * Erstellt ein neues Menu auf grundlage dieses Menüs. Alle Actions & Submenüs werden ebenfalls kopiert\n *\n * @param menu\n * @return {Submenu}\n */\n copy(menu) {\n menu = Helper_1.Helper.nonNull(menu, new Submenu());\n menu = super.copy(menu);\n menu._isOpen = this._isOpen;\n return menu;\n }\n /**\n * Setzt die ParentAction\n *\n * @param action\n */\n setParentAction(action) {\n this._parentAction = action;\n }\n /**\n * Gibt das ParentMenu zurück\n */\n getParentMenu() {\n return this._parentAction.getMenu();\n }\n /**\n * Erstelle keinen onClickListener, damit der Listener aus dem Obermenü aufgerufen wird\n *\n * @returns {null}\n * @private\n */\n _generateOnClickListener() {\n return null;\n }\n /**\n * Wird vom Obermenü aufgerufen, um die ensprechende Action zu finden\n *\n * @param actionId\n * @param event\n * @returns {boolean}\n */\n click(actionId, event) {\n for (let i = 0, n = this._actions.length; i < n; i++) {\n if (this._actions[i].getId() === actionId) {\n if (typeof this._actions[i].getAction() === 'function' && this._actions[i].isActivated()) {\n this._actions[i].getAction()(this._actions[i], event);\n event.preventDefault();\n }\n if (!(this._actions[i] instanceof OpenSubmenuAction_1.OpenSubmenuAction)) {\n this.close();\n }\n return this._actions[i];\n }\n }\n //Falls action nicht gefunden (da noch nicht beendet), suche in den submenüs nach der Action\n for (let i = 0, n = this._submenus.length; i < n; i++) {\n let action = this._submenus[i].click(actionId, event);\n if (action) {\n return action;\n }\n }\n return null;\n }\n /**\n * Öffnet oder schließt das Menü\n */\n toggle() {\n if (this._isOpen) {\n this.close();\n }\n else {\n this.open();\n }\n }\n /**\n * öffnet das Menü und updatet die Elemente\n */\n open() {\n this._isOpen = true;\n this.openSubmenu(this);\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n openSubmenu(submenu) {\n this.getParentMenu().openSubmenu(submenu);\n }\n /**\n * schließt das Menü und updatet die Elemente\n */\n close() {\n this._isOpen = false;\n super.close();\n if (Helper_1.Helper.isNotNull(this._parentAction)) {\n this._parentAction.update();\n }\n }\n /**\n * Gibt die ParentAction zurück\n *\n * @returns {OpenSubmenuAction}\n */\n getParentAction() {\n return this._parentAction;\n }\n /**\n * Updated eine Action. Da ein Submenu keine Renderer hat, muss es ans parentMenu weitergegeben werden\n * @param action\n */\n updateAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.updateAction(action);\n }\n }\n redrawAction(action) {\n const parentMenu = this.getParentMenu();\n if (parentMenu) {\n parentMenu.redrawAction(action);\n }\n }\n /**\n * Gibt an, ob das Submenu offen ist oder nicht\n *\n * @returns {boolean}\n */\n isOpen() {\n return this._isOpen;\n }\n}\nexports.Submenu = Submenu;\n//# sourceMappingURL=Submenu.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeChildFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nclass SwipeChildFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, view);\n this._parent = null;\n }\n onSwipeRight() {\n return __awaiter(this, void 0, void 0, function* () {\n this.previousFragment();\n });\n }\n onSwipeLeft() {\n return __awaiter(this, void 0, void 0, function* () {\n this.nextFragment();\n });\n }\n setParent(parent) {\n this._parent = parent;\n }\n nextFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.nextFragment();\n }\n }\n previousFragment() {\n if (Helper_1.Helper.isNotNull(this._parent)) {\n this._parent.previousFragment();\n }\n }\n}\nexports.SwipeChildFragment = SwipeChildFragment;\n//# sourceMappingURL=SwipeChildFragment.js.map","module.exports = __webpack_public_path__ + \"html/chooseDialog.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElemChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nclass ElemChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n valueElem.querySelector(\".choose-dialog-value\").appendChild(valueNames[k]);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ElemChooseDialog = ElemChooseDialog;\n//# sourceMappingURL=ElemChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageSelectionElement = void 0;\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst client_1 = require(\"js-helper/dist/client\");\nconst defaultView = require(\"../../html/Form/imageSelectionElement.html\");\nclass ImageSelectionElement {\n constructor(name, view) {\n this.images = {};\n this.name = name;\n this.viewLoadedPromise = ViewInflater_1.ViewInflater.getInstance().load(shared_1.Helper.nonNull(view, defaultView)).then((v) => __awaiter(this, void 0, void 0, function* () {\n this.view = v;\n yield this.prepareView();\n this.showSelection();\n return v;\n }));\n }\n prepareView() {\n this.imageContainerTemplate = this.view.querySelector(\".image-selection-image-container\");\n this.imageContainerTemplate.remove();\n this.categoryTemplate = this.view.querySelector(\".image-selection-category\");\n this.categoryTemplate.remove();\n this.imageSelectionContainer = this.view.querySelector(\".image-selection-category-container\");\n this.imageSelectionPreviewContainer = this.view.querySelector(\".image-selection-preview\");\n this.inputElement = this.view.querySelector(\".image-selection-value\");\n this.inputElement.name = this.name;\n const imageSelection = this.view.querySelector(\".image-selection\");\n imageSelection.addEventListener(\"dragenter\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.add(\"highlight\");\n });\n imageSelection.addEventListener(\"dragover\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.add(\"highlight\");\n });\n imageSelection.addEventListener(\"dragleave\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.remove(\"highlight\");\n });\n imageSelection.addEventListener(\"drop\", (e) => __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n e.stopPropagation();\n imageSelection.classList.remove(\"highlight\");\n if (e instanceof DragEvent) {\n let file = null;\n if (e.dataTransfer.items && e.dataTransfer.items.length >= 1) {\n if (e.dataTransfer.items[0].kind === \"file\") {\n file = e.dataTransfer.items[0].getAsFile();\n }\n }\n else if (e.dataTransfer.files && e.dataTransfer.files.length >= 1) {\n file = e.dataTransfer.files[0];\n }\n if (!file || !file.type.startsWith(\"image/\")) {\n return;\n }\n let imageValue = null;\n let base64 = yield new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result);\n };\n reader.onerror = error => reject(error);\n reader.readAsDataURL(file);\n });\n imageValue = { src: base64, name: file.name };\n this.addImages({ \"Uploads\": [imageValue] });\n this.setValue(imageValue);\n }\n }));\n }\n showSelection() {\n client_1.ViewHelper.removeAllChildren(this.imageSelectionContainer);\n Object.keys(this.images).sort((a, b) => {\n if (a.toLowerCase() === \"uploads\") {\n return -1;\n }\n else if (b.toLowerCase() === \"uploads\") {\n return 1;\n }\n else {\n return a.localeCompare(b);\n }\n }).forEach(category => {\n const categoryElement = this.categoryTemplate.cloneNode(true);\n categoryElement.querySelector(\".image-selection-category-name\").innerText = category;\n this.images[category].forEach(image => {\n let imageContainerElement = this.createImageElement(image);\n imageContainerElement.addEventListener(\"click\", () => this.setValue(image));\n categoryElement.appendChild(imageContainerElement);\n });\n this.imageSelectionContainer.appendChild(categoryElement);\n });\n }\n createImageElement(image) {\n const imageContainerElement = this.imageContainerTemplate.cloneNode(true);\n imageContainerElement.querySelector(\".image-selection-image\").src = image.src;\n if (image.name) {\n imageContainerElement.querySelector(\".image-selection-image-name\").innerText = image.name;\n }\n return imageContainerElement;\n }\n setImages(images) {\n this.images = images;\n if (this.view) {\n this.showSelection();\n }\n }\n addImages(images) {\n Object.keys(images).forEach(category => {\n if (this.images[category]) {\n const sources = this.images[category].map(i => i.src);\n const newImages = images[category].filter(i => {\n return (sources.indexOf(i.src) === -1);\n });\n this.images[category].push(...newImages);\n }\n else {\n this.images[category] = images[category];\n }\n });\n if (this.view) {\n this.showSelection();\n }\n }\n getView() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.viewLoadedPromise;\n });\n }\n setValue(image) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (typeof image === \"string\") {\n image = JSON.parse(image);\n }\n yield this.viewLoadedPromise;\n client_1.ViewHelper.removeAllChildren(this.imageSelectionPreviewContainer);\n if (image.src) {\n this.imageSelectionPreviewContainer.appendChild(this.createImageElement(image));\n }\n this.inputElement.value = JSON.stringify(image);\n }\n catch (e) {\n }\n });\n }\n}\nexports.ImageSelectionElement = ImageSelectionElement;\n//# sourceMappingURL=ImageSelectionElement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShareDialog = void 0;\nconst Dialog_1 = require(\"../Dialog/Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Dialog/shareDialog.html\");\nclass ShareDialog extends Dialog_1.Dialog {\n constructor(textToShare) {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n view.querySelector(\"#whatsapp-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"\";\n linkToOpen = \"https://web.whatsapp.com/send?text=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n view.querySelector(\"#telegram-share\").addEventListener(\"click\", () => {\n let linkToOpen = \"https://t.me/share/url?url=\" + encodeURIComponent(textToShare);\n window.open(linkToOpen, '_blank', \"noopener\");\n this.close();\n });\n return view;\n }), \"Share\");\n }\n}\nexports.ShareDialog = ShareDialog;\n//# sourceMappingURL=ShareDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AudioChain = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass AudioChain {\n constructor(context, sourceBuffer, chainFunction) {\n this._buffer = sourceBuffer;\n this._shouldLoop = false;\n this._loopStart = null;\n this._loopEnd = null;\n this._chainFunction = chainFunction;\n this._context = context;\n this._startTime = null;\n this._pauseTime = null;\n this._source = null;\n this._running = false;\n }\n setBuffer(buffer) {\n this._buffer = buffer;\n }\n setLooping(shouldLoop, loopStart, loopEnd) {\n this._shouldLoop = shouldLoop;\n if (Helper_1.Helper.isNotNull(loopStart)) {\n this._loopStart = loopStart;\n }\n if (Helper_1.Helper.isNotNull(loopEnd)) {\n this._loopEnd = loopEnd;\n }\n }\n start(delay, offset, duration) {\n return __awaiter(this, void 0, void 0, function* () {\n //sind sonst null, schmeißt in Android 5 einen fehler\n delay = Helper_1.Helper.nonNull(delay, 0);\n offset = Helper_1.Helper.nonNull(offset, 0);\n //Duration darf nicht gesetzt werden\n // duration = Helper.nonNull(duration, -1);\n let source = this._context.createBufferSource();\n source.loop = this._shouldLoop;\n if (Helper_1.Helper.isNotNull(this._loopStart)) {\n source.loopStart = this._loopStart;\n }\n if (Helper_1.Helper.isNotNull(this._loopEnd)) {\n source.loopEnd = this._loopEnd;\n }\n source.buffer = this._buffer;\n yield this._chainFunction(source);\n if (Helper_1.Helper.isNull(duration)) {\n source.start(delay, offset);\n }\n else {\n source.start(delay, offset, duration);\n }\n this._startTime = (new Date()).getTime() - (Helper_1.Helper.nonNull(offset, 0) * 1000);\n this._source = source;\n this._running = true;\n });\n }\n stop(delay) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNotNull(this._source)) {\n delay = Helper_1.Helper.nonNull(delay, 0);\n this._pauseTime = ((new Date()).getTime()) - this._startTime;\n this._running = false;\n return this._source.stop(delay);\n }\n return null;\n });\n }\n resume() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._running) {\n return this.start(null, Helper_1.Helper.nonNull(this._pauseTime, 0) / 1000.0);\n }\n });\n }\n}\nexports.AudioChain = AudioChain;\n//# sourceMappingURL=AudioChain.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"cordova-sites/dist/shared\");\nconst deTranslations = require(\"../translations/de\");\nconst enTranslations = require(\"../translations/en\");\nclient_1.App.addInitialization(() => {\n shared_1.Translator.addDynamicTranslations({\n \"de\": deTranslations,\n \"en\": enTranslations\n });\n});\n//# sourceMappingURL=translationInit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Access = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass Access extends shared_1.EasySyncBaseModel {\n constructor() {\n super();\n this.name = null;\n this.description = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"name\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING, unique: true };\n columns[\"description\"] = { type: cordova_sites_database_1.BaseDatabase.TYPES.STRING };\n return columns;\n }\n}\nexports.Access = Access;\nAccess.CAN_BE_SYNCED = false;\ncordova_sites_database_1.BaseDatabase.addModel(Access);\n//# sourceMappingURL=Access.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ForgotPasswordSite = void 0;\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/forgotPasswordSite.html\");\nconst UserManager_1 = require(\"../UserManager\");\nconst LoginSite_1 = require(\"./LoginSite\");\nclass ForgotPasswordSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, LoginSite_1.LoginSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n if (client_1.Helper.isSet(constructParameters[\"t\"])) {\n this._token = constructParameters[\"t\"];\n }\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#forgot-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().sendForgotPasswordEmail(data[\"email\"])) {\n new client_1.Toast(\"forgot-password-mail sent\").show();\n yield this.finish();\n }\n else {\n form.setErrors({\n \"email\": \"email is not in our database\"\n });\n }\n }));\n let resetForm = new client_1.Form(this.findBy(\"#reset-password-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n if (yield UserManager_1.UserManager.getInstance().resetPassword(this._token, data[\"password1\"])) {\n new client_1.Toast(\"password resetted\").show();\n yield this.finish();\n }\n else {\n yield new client_1.Toast(\"token is not valid!\").show();\n }\n }));\n resetForm.addValidator(data => {\n let errors = {};\n let hasErrors = false;\n if (data[\"password1\"].trim() === \"\") {\n hasErrors = true;\n errors[\"password1\"] = \"no password set\";\n }\n if (data[\"password1\"] !== data[\"password2\"]) {\n hasErrors = true;\n errors[\"password2\"] = \"not equal to password1\";\n }\n if (hasErrors) {\n return errors;\n }\n else {\n return true;\n }\n });\n if (this._token) {\n this.findBy(\"#reset-password\").classList.remove(\"hidden\");\n this.findBy(\"#forgot-password\").classList.add(\"hidden\");\n }\n return res;\n });\n }\n}\nexports.ForgotPasswordSite = ForgotPasswordSite;\nclient_1.App.addInitialization(app => {\n app.addDeepLink(\"forgotPW\", ForgotPasswordSite);\n});\n//# sourceMappingURL=ForgotPasswordSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NotAllowedSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst view = require(\"./../../html/sites/notAllowedSite.html\");\nclass NotAllowedSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n onConstruct(constructParameters) {\n return super.onConstruct(constructParameters);\n }\n onCreateMenu(navbar) {\n return super.onCreateMenu(navbar);\n }\n onPause() {\n const _super = Object.create(null, {\n onPause: { get: () => super.onPause }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onPause.call(this);\n yield this.finish();\n return res;\n });\n }\n}\nexports.NotAllowedSite = NotAllowedSite;\n//# sourceMappingURL=NotAllowedSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectUserDialog = void 0;\nconst Dialog_1 = require(\"cordova-sites/dist/client/js/Dialog/Dialog\");\nconst ViewInflater_1 = require(\"cordova-sites/dist/client/js/ViewInflater\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst view = require(\"../../html/dialog/selectUserDialog.html\");\nclass SelectUserDialog extends Dialog_1.Dialog {\n constructor() {\n super(ViewInflater_1.ViewInflater.getInstance().load(view).then((view) => __awaiter(this, void 0, void 0, function* () {\n this._loadUserTimeout = null;\n this._usernameInput =\n view.querySelector(\"#username-input\");\n this._usernameInput.addEventListener(\"keydown\", () => {\n clearTimeout(this._loadUserTimeout);\n this._loadUserTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield this._loadUsers(this._usernameInput.value);\n }), 500);\n });\n this._userContainer = view.querySelector(\"#user-container\");\n this._userTemplate = view.querySelector(\"#user-template\");\n this._userTemplate.remove();\n this._userTemplate.removeAttribute(\"id\");\n this._loadUsers();\n return view;\n })), \"select user\");\n }\n _loadUsers(username) {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let res = yield DataManager_1.DataManager.load(\"user/listUsers\" + DataManager_1.DataManager.buildQuery({ username: Helper_1.Helper.nonNull(username, \"\") }));\n if (res[\"success\"]) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._userContainer);\n let users = res[\"data\"];\n users.forEach(user => {\n let userElement = this._userTemplate.cloneNode(true);\n userElement.querySelector(\".name\").innerText = user.username;\n userElement.addEventListener(\"click\", () => {\n this._result = user;\n this.close();\n });\n this._userContainer.appendChild(userElement);\n });\n }\n });\n }\n}\nexports.SelectUserDialog = SelectUserDialog;\n//# sourceMappingURL=SelectUserDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileTransferPromise = void 0;\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst FilePromise_1 = require(\"./FilePromise\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nclass FileTransferPromise {\n constructor(downloadUrl, storagePath) {\n this.downloadUrl = downloadUrl;\n if (Helper_1.Helper.isNull(storagePath)) {\n let parts = this.downloadUrl.split(\"/\");\n if (parts.length > 0) {\n storagePath = parts[parts.length - 1];\n }\n }\n this.storagePath = storagePath;\n }\n download() {\n return __awaiter(this, void 0, void 0, function* () {\n debugger;\n let blob = DataManager_1.DataManager.fetchBlob(this.downloadUrl);\n let filePromise = yield FilePromise_1.FilePromise.open(this.storagePath);\n let fileWriter = yield filePromise.createWriter();\n // blob = await blob;\n yield fileWriter.write(yield blob);\n });\n }\n}\nexports.FileTransferPromise = FileTransferPromise;\n//# sourceMappingURL=FileTransferPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileWriterPromise = void 0;\nclass FileWriterPromise {\n constructor(fileWriter) {\n this.fileWriter = fileWriter;\n this._isWritingPromise = Promise.resolve();\n }\n write(data) {\n return __awaiter(this, void 0, void 0, function* () {\n let promise = this._isWritingPromise.then(() => new Promise((res, rej) => {\n this.fileWriter.onwriteend = res;\n this.fileWriter.onerror = rej;\n this.fileWriter.write(data);\n }));\n this._isWritingPromise = promise.catch(console.error);\n return promise;\n });\n }\n}\nexports.FileWriterPromise = FileWriterPromise;\n//# sourceMappingURL=FileWriterPromise.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientModel = void 0;\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nclass ClientModel extends cordova_sites_database_1.BaseModel {\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"] && columns[\"id\"][\"generated\"]) {\n columns[\"id\"][\"generated\"] = false;\n }\n return columns;\n }\n static _fromJson(jsonObjects, models, includeRelations) {\n return __awaiter(this, void 0, void 0, function* () {\n });\n }\n toJSON(includeFull) {\n }\n ;\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n yield this.constructor._fromJson(data, this, true);\n }\n return _super.save.call(this);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n entities = yield this._fromJson(data, undefined, true);\n }\n return _super.saveMany.call(this, entities);\n });\n }\n static getSchemaDefinition() {\n const TYPES_FOR_DEFAULT_ESCAPING = [\n cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT,\n cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n ];\n let definitions = super.getSchemaDefinition();\n let columns = definitions[\"columns\"];\n Object.keys(columns).forEach(column => {\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.MEDIUMTEXT) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.TEXT;\n }\n if (columns[column].type === cordova_sites_database_1.BaseDatabase.TYPES.JSON) {\n columns[column].type = cordova_sites_database_1.BaseDatabase.TYPES.SIMPLE_JSON;\n }\n if (TYPES_FOR_DEFAULT_ESCAPING.indexOf(columns[column].type) !== -1) {\n columns[column].escapeJS = shared_1.Helper.nonNull(columns[column].escapeJS, true);\n columns[column].escapeHTML = shared_1.Helper.nonNull(columns[column].escapeHTML, true);\n }\n });\n return definitions;\n }\n}\nexports.ClientModel = ClientModel;\nClientModel.SAVE_PATH = \"/sync\";\nClientModel.DELETE_PATH = \"/sync/delete\";\n//# sourceMappingURL=ClientModel.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientPartialModel = void 0;\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ClientPartialModel extends EasySyncBaseModel_1.EasySyncBaseModel {\n constructor() {\n super();\n this.clientId = null;\n }\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n if (columns[\"id\"]) {\n columns[\"id\"][\"primary\"] = false;\n columns[\"id\"][\"generated\"] = false;\n columns[\"id\"][\"nullable\"] = true;\n columns[\"id\"][\"unique\"] = true;\n }\n columns[\"clientId\"] = {\n type: \"integer\",\n primary: true,\n generated: true,\n };\n return columns;\n }\n toJSON(includeFull) {\n let relations = this.constructor.getRelationDefinitions();\n let columns = this.constructor.getColumnDefinitions();\n let obj = {};\n Object.keys(columns).forEach(attribute => {\n if (attribute !== \"clientId\") {\n obj[attribute] = this[attribute];\n }\n });\n Object.keys(relations).forEach(relationName => {\n if (includeFull === true) {\n obj[relationName] = this[relationName];\n }\n else {\n if (Array.isArray(this[relationName])) {\n let ids = [];\n this[relationName].forEach(child => (child && ids.push(child.id)));\n obj[relationName] = ids;\n }\n else if (this[relationName] instanceof cordova_sites_database_1.BaseModel) {\n obj[relationName] = this[relationName].id;\n }\n else {\n obj[relationName] = null;\n }\n }\n });\n return obj;\n }\n save(local) {\n const _super = Object.create(null, {\n save: { get: () => super.save }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n if (typeof this.clientId !== \"number\") {\n this.clientId = undefined;\n }\n if (!local) {\n let values = this.toJSON();\n let data = yield client_1.DataManager.send(this.constructor.SAVE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n yield this.constructor._fromJson(data, this, true);\n }\n }\n return _super.save.call(this, true);\n });\n }\n delete(local) {\n const _super = Object.create(null, {\n delete: { get: () => super.delete }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!local) {\n let data = yield client_1.DataManager.send(this.constructor.DELETE_PATH, {\n \"model\": this.constructor.getSchemaName(),\n \"id\": this.id\n });\n if (data.success === false) {\n throw new Error(data.errors);\n }\n }\n return _super.delete.call(this, true);\n });\n }\n static saveMany(entities, local) {\n const _super = Object.create(null, {\n saveMany: { get: () => super.saveMany }\n });\n return __awaiter(this, void 0, void 0, function* () {\n local = Helper_1.Helper.nonNull(local, true);\n entities.forEach(entity => {\n if (typeof entity.clientId !== \"number\") {\n entity.clientId = undefined;\n }\n });\n if (!local) {\n let values = [];\n entities.forEach(entity => {\n values.push(entity.toJSON());\n });\n let data = yield client_1.DataManager.send(this.SAVE_PATH, {\n \"model\": this.getSchemaName(),\n \"values\": values\n });\n if (data.success !== false) {\n entities = yield this._fromJson(data, entities, true);\n }\n }\n return _super.saveMany.call(this, entities, true);\n });\n }\n}\nexports.ClientPartialModel = ClientPartialModel;\n//# sourceMappingURL=ClientPartialModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AccessEasySyncModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nclass AccessEasySyncModel extends shared_1.EasySyncBaseModel {\n}\nexports.AccessEasySyncModel = AccessEasySyncModel;\nAccessEasySyncModel.ACCESS_READ = true;\nAccessEasySyncModel.ACCESS_MODIFY = false;\nAccessEasySyncModel.CAN_BE_SYNCED = false;\n//# sourceMappingURL=AccessEasySyncModel.js.map","export default \"img/help.png\";","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar SqljsQueryRunner = /** @class */ (function (_super) {\n __extends(SqljsQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function SqljsQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public methods\n // -------------------------------------------------------------------------\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n SqljsQueryRunner.prototype.commitTransaction = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, _super.prototype.commitTransaction.call(this)];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.driver.autoSave()];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Executes a given SQL query.\n */\n SqljsQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (parameters === void 0) { parameters = []; }\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n return new Promise(function (ok, fail) { return __awaiter(_this, void 0, void 0, function () {\n var databaseConnection, queryStartTime, statement, maxQueryExecutionTime, queryEndTime, queryExecutionTime, result;\n return __generator(this, function (_a) {\n databaseConnection = this.driver.databaseConnection;\n this.driver.connection.logger.logQuery(query, parameters, this);\n queryStartTime = +new Date();\n try {\n statement = databaseConnection.prepare(query);\n if (parameters) {\n parameters = parameters.map(function (p) { return typeof p !== 'undefined' ? p : null; });\n statement.bind(parameters);\n }\n maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;\n queryEndTime = +new Date();\n queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n result = [];\n while (statement.step()) {\n result.push(statement.getAsObject());\n }\n statement.free();\n ok(result);\n }\n catch (e) {\n if (statement) {\n statement.free();\n }\n this.driver.connection.logger.logQueryError(e, query, parameters, this);\n fail(new QueryFailedError(query, parameters, e));\n }\n return [2 /*return*/];\n });\n }); });\n };\n return SqljsQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { SqljsQueryRunner };\n\n//# sourceMappingURL=SqljsQueryRunner.js.map\n","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { NativescriptQueryRunner } from \"./NativescriptQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\n/**\n * Organizes communication with sqlite DBMS within Nativescript.\n */\nvar NativescriptDriver = /** @class */ (function (_super) {\n __extends(NativescriptDriver, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptDriver(connection) {\n var _this = _super.call(this, connection) || this;\n _this.connection = connection;\n _this.options = connection.options;\n _this.database = _this.options.database;\n _this.driver = _this.options.driver;\n // validate options to make sure everything is set\n if (!_this.options.database) {\n throw new DriverOptionNotSetError(\"database\");\n }\n // load sqlite package\n _this.loadDependencies();\n return _this;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Closes connection with database.\n */\n NativescriptDriver.prototype.disconnect = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (ok, fail) {\n _this.queryRunner = undefined;\n _this.databaseConnection.close().then(ok).catch(fail);\n })];\n });\n });\n };\n /**\n * Creates a query runner used to execute database queries.\n */\n NativescriptDriver.prototype.createQueryRunner = function (mode) {\n if (!this.queryRunner) {\n this.queryRunner = new NativescriptQueryRunner(this);\n }\n return this.queryRunner;\n };\n NativescriptDriver.prototype.normalizeType = function (column) {\n if (column.type === Buffer) {\n return \"blob\";\n }\n return _super.prototype.normalizeType.call(this, column);\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Creates connection with the database.\n */\n NativescriptDriver.prototype.createDatabaseConnection = function () {\n var _this = this;\n return new Promise(function (ok, fail) {\n var options = Object.assign({}, {\n readOnly: _this.options.readOnly,\n key: _this.options.key,\n multithreading: _this.options.multithreading,\n migrate: _this.options.migrate,\n iosFlags: _this.options.iosFlags,\n androidFlags: _this.options.androidFlags,\n }, _this.options.extra || {});\n new _this.sqlite(_this.options.database, options, function (err, db) {\n if (err)\n return fail(err);\n // use object mode to work with TypeORM\n db.resultType(_this.sqlite.RESULTSASOBJECT);\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete work with sqlite.\n db.execSQL(\"PRAGMA foreign_keys = ON;\", [], function (err, result) {\n if (err)\n return fail(err);\n // We are all set\n ok(db);\n });\n });\n });\n };\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n NativescriptDriver.prototype.loadDependencies = function () {\n this.sqlite = this.driver;\n if (!this.driver) {\n throw new DriverPackageNotInstalledError(\"Nativescript\", \"nativescript-sqlite\");\n }\n };\n return NativescriptDriver;\n}(AbstractSqliteDriver));\nexport { NativescriptDriver };\n\n//# sourceMappingURL=NativescriptDriver.js.map\n","import { __extends } from \"tslib\";\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\n/**\n * Runs queries on a single sqlite database connection.\n */\nvar NativescriptQueryRunner = /** @class */ (function (_super) {\n __extends(NativescriptQueryRunner, _super);\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function NativescriptQueryRunner(driver) {\n var _this = _super.call(this) || this;\n _this.driver = driver;\n _this.connection = driver.connection;\n _this.broadcaster = new Broadcaster(_this);\n return _this;\n }\n /**\n * Executes a given SQL query.\n */\n NativescriptQueryRunner.prototype.query = function (query, parameters) {\n var _this = this;\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n var connection = this.driver.connection;\n return new Promise(function (ok, fail) {\n var isInsertQuery = query.substr(0, 11) === \"INSERT INTO\";\n var handler = function (err, result) {\n // log slow queries if maxQueryExecution time is set\n var maxQueryExecutionTime = connection.options.maxQueryExecutionTime;\n var queryEndTime = +new Date();\n var queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n if (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n }\n else {\n // when isInsertQuery == true, result is the id\n ok(result);\n }\n };\n _this.driver.connection.logger.logQuery(query, parameters, _this);\n var queryStartTime = +new Date();\n _this.connect().then(function (databaseConnection) {\n if (isInsertQuery) {\n databaseConnection.execSQL(query, parameters, handler);\n }\n else {\n databaseConnection.all(query, parameters, handler);\n }\n });\n });\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n NativescriptQueryRunner.prototype.parametrize = function (objectLiteral, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n return Object.keys(objectLiteral).map(function (key, index) { return \"\\\"\" + key + \"\\\"\" + \"=?\"; });\n };\n return NativescriptQueryRunner;\n}(AbstractSqliteQueryRunner));\nexport { NativescriptQueryRunner };\n\n//# sourceMappingURL=NativescriptQueryRunner.js.map\n","import { __read, __spreadArray } from \"tslib\";\nimport { OrmUtils } from \"../../util/OrmUtils\";\nimport { DriverUtils } from \"../../driver/DriverUtils\";\n/**\n * Transforms raw sql results returned from the database into entity object.\n * Entity is constructed based on its entity metadata.\n */\nvar RawSqlResultsToEntityTransformer = /** @class */ (function () {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n function RawSqlResultsToEntityTransformer(expressionMap, driver, rawRelationIdResults, rawRelationCountResults, queryRunner) {\n this.expressionMap = expressionMap;\n this.driver = driver;\n this.rawRelationIdResults = rawRelationIdResults;\n this.rawRelationCountResults = rawRelationCountResults;\n this.queryRunner = queryRunner;\n }\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Since db returns a duplicated rows of the data where accuracies of the same object can be duplicated\n * we need to group our result and we must have some unique id (primary key in our case)\n */\n RawSqlResultsToEntityTransformer.prototype.transform = function (rawResults, alias) {\n var _this = this;\n var group = this.group(rawResults, alias);\n var entities = [];\n group.forEach(function (results) {\n var entity = _this.transformRawResultsGroup(results, alias);\n if (entity !== undefined && !Object.values(entity).every(function (value) { return value === null; }))\n entities.push(entity);\n });\n return entities;\n };\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n /**\n * Groups given raw results by ids of given alias.\n */\n RawSqlResultsToEntityTransformer.prototype.group = function (rawResults, alias) {\n var _this = this;\n var map = new Map();\n var keys = [];\n if (alias.metadata.tableType === \"view\") {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.columns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n else {\n keys.push.apply(keys, __spreadArray([], __read(alias.metadata.primaryColumns.map(function (column) { return DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName); }))));\n }\n rawResults.forEach(function (rawResult) {\n var id = keys.map(function (key) {\n var keyValue = rawResult[key];\n if (Buffer.isBuffer(keyValue)) {\n return keyValue.toString(\"hex\");\n }\n if (typeof keyValue === \"object\") {\n return JSON.stringify(keyValue);\n }\n return keyValue;\n }).join(\"_\"); // todo: check partial\n var items = map.get(id);\n if (!items) {\n map.set(id, [rawResult]);\n }\n else {\n items.push(rawResult);\n }\n });\n return map;\n };\n /**\n * Transforms set of data results into single entity.\n */\n RawSqlResultsToEntityTransformer.prototype.transformRawResultsGroup = function (rawResults, alias) {\n var _this = this;\n // let hasColumns = false; // , hasEmbeddedColumns = false, hasParentColumns = false, hasParentEmbeddedColumns = false;\n var metadata = alias.metadata;\n if (metadata.discriminatorColumn) {\n var discriminatorValues_1 = rawResults.map(function (result) { return result[DriverUtils.buildColumnAlias(_this.driver, alias.name, alias.metadata.discriminatorColumn.databaseName)]; });\n var discriminatorMetadata = metadata.childEntityMetadatas.find(function (childEntityMetadata) {\n return typeof discriminatorValues_1.find(function (value) { return value === childEntityMetadata.discriminatorValue; }) !== 'undefined';\n });\n if (discriminatorMetadata)\n metadata = discriminatorMetadata;\n }\n var entity = this.expressionMap.options.indexOf(\"create-pojo\") !== -1 ? {} : metadata.create(this.queryRunner);\n // get value from columns selections and put them into newly created entity\n var hasColumns = this.transformColumns(rawResults, alias, entity, metadata);\n var hasRelations = this.transformJoins(rawResults, entity, alias, metadata);\n var hasRelationIds = this.transformRelationIds(rawResults, alias, entity, metadata);\n var hasRelationCounts = this.transformRelationCounts(rawResults, alias, entity);\n // if we have at least one selected column then return this entity\n // since entity must have at least primary columns to be really selected and transformed into entity\n if (hasColumns)\n return entity;\n // if we don't have any selected column we should not return entity,\n // except for the case when entity only contain a primary column as a relation to another entity\n // in this case its absolutely possible our entity to not have any columns except a single relation\n var hasOnlyVirtualPrimaryColumns = metadata.primaryColumns.filter(function (column) { return column.isVirtual === false; }).length === 0; // todo: create metadata.hasOnlyVirtualPrimaryColumns\n if (hasOnlyVirtualPrimaryColumns && (hasRelations || hasRelationIds || hasRelationCounts))\n return entity;\n return undefined;\n };\n // get value from columns selections and put them into object\n RawSqlResultsToEntityTransformer.prototype.transformColumns = function (rawResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n metadata.columns.forEach(function (column) {\n // if table inheritance is used make sure this column is not child's column\n if (metadata.childEntityMetadatas.length > 0 && metadata.childEntityMetadatas.map(function (metadata) { return metadata.target; }).indexOf(column.target) !== -1)\n return;\n var value = rawResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, column.databaseName)];\n if (value === undefined || column.isVirtual)\n return;\n // if user does not selected the whole entity or he used partial selection and does not select this particular column\n // then we don't add this column and its value into the entity\n if (!_this.expressionMap.selects.find(function (select) { return select.selection === alias.name || select.selection === alias.name + \".\" + column.propertyPath; }))\n return;\n column.setEntityValue(entity, _this.driver.prepareHydratedValue(value, column));\n if (value !== null) // we don't mark it as has data because if we will have all nulls in our object - we don't need such object\n hasData = true;\n });\n return hasData;\n };\n /**\n * Transforms joined entities in the given raw results by a given alias and stores to the given (parent) entity\n */\n RawSqlResultsToEntityTransformer.prototype.transformJoins = function (rawResults, entity, alias, metadata) {\n var _this = this;\n var hasData = false;\n // let discriminatorValue: string = \"\";\n // if (metadata.discriminatorColumn)\n // discriminatorValue = rawResults[0][DriverUtils.buildColumnAlias(this.connection.driver, alias.name, alias.metadata.discriminatorColumn!.databaseName)];\n this.expressionMap.joinAttributes.forEach(function (join) {\n // skip joins without metadata\n if (!join.metadata)\n return;\n // if simple left or inner join was performed without selection then we don't need to do anything\n if (!join.isSelected)\n return;\n // this check need to avoid setting properties than not belong to entity when single table inheritance used. (todo: check if we still need it)\n // const metadata = metadata.childEntityMetadatas.find(childEntityMetadata => discriminatorValue === childEntityMetadata.discriminatorValue);\n if (join.relation && !metadata.relations.find(function (relation) { return relation === join.relation; }))\n return;\n // some checks to make sure this join is for current alias\n if (join.mapToProperty) {\n if (join.mapToPropertyParentAlias !== alias.name)\n return;\n }\n else {\n if (!join.relation || join.parentAlias !== alias.name || join.relationPropertyPath !== join.relation.propertyPath)\n return;\n }\n // transform joined data into entities\n var result = _this.transform(rawResults, join.alias);\n result = !join.isMany ? result[0] : result;\n result = !join.isMany && result === undefined ? null : result; // this is needed to make relations to return null when its joined but nothing was found in the database\n if (result === undefined) // if nothing was joined then simply return\n return;\n // if join was mapped to some property then save result to that property\n if (join.mapToPropertyPropertyName) {\n entity[join.mapToPropertyPropertyName] = result; // todo: fix embeds\n }\n else { // otherwise set to relation\n join.relation.setEntityValue(entity, result);\n }\n hasData = true;\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationIds = function (rawSqlResults, alias, entity, metadata) {\n var _this = this;\n var hasData = false;\n this.rawRelationIdResults.forEach(function (rawRelationIdResult) {\n if (rawRelationIdResult.relationIdAttribute.parentAlias !== alias.name)\n return;\n var relation = rawRelationIdResult.relationIdAttribute.relation;\n var valueMap = _this.createValueMapFromJoinColumns(relation, rawRelationIdResult.relationIdAttribute.parentAlias, rawSqlResults);\n if (valueMap === undefined || valueMap === null)\n return;\n var idMaps = rawRelationIdResult.results.map(function (result) {\n var entityPrimaryIds = _this.extractEntityPrimaryIds(relation, result);\n if (OrmUtils.compareIds(entityPrimaryIds, valueMap) === false)\n return;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseEntityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n // columns = relation.inverseRelation!.joinColumns.map(joinColumn => joinColumn.referencedColumn!); //.inverseEntityMetadata.primaryColumns.map(joinColumn => joinColumn);\n }\n else { // ManyToMany\n if (relation.isOwning) {\n columns = relation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n var idMap = columns.reduce(function (idMap, column) {\n var value = result[column.databaseName];\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n if (column.isVirtual && column.referencedColumn && column.referencedColumn.propertyName !== column.propertyName) // if column is a relation\n value = column.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.createValueMap(value));\n }\n else {\n if (column.referencedColumn.referencedColumn) // if column is a relation\n value = column.referencedColumn.referencedColumn.createValueMap(value);\n return OrmUtils.mergeDeep(idMap, column.referencedColumn.createValueMap(value));\n }\n }, {});\n if (columns.length === 1 && rawRelationIdResult.relationIdAttribute.disableMixedMap === false) {\n if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return columns[0].getEntityValue(idMap);\n }\n else {\n return columns[0].referencedColumn.getEntityValue(idMap);\n }\n }\n return idMap;\n }).filter(function (result) { return result !== undefined; });\n var properties = rawRelationIdResult.relationIdAttribute.mapToPropertyPropertyPath.split(\".\");\n var mapToProperty = function (properties, map, value) {\n var property = properties.shift();\n if (property && properties.length === 0) {\n map[property] = value;\n return map;\n }\n else if (property && properties.length > 0) {\n mapToProperty(properties, map[property], value);\n }\n else {\n return map;\n }\n };\n if (relation.isOneToOne || relation.isManyToOne) {\n if (idMaps[0] !== undefined) {\n mapToProperty(properties, entity, idMaps[0]);\n hasData = true;\n }\n }\n else {\n mapToProperty(properties, entity, idMaps);\n if (idMaps.length > 0) {\n hasData = true;\n }\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.transformRelationCounts = function (rawSqlResults, alias, entity) {\n var _this = this;\n var hasData = false;\n this.rawRelationCountResults\n .filter(function (rawRelationCountResult) { return rawRelationCountResult.relationCountAttribute.parentAlias === alias.name; })\n .forEach(function (rawRelationCountResult) {\n var relation = rawRelationCountResult.relationCountAttribute.relation;\n var referenceColumnName;\n if (relation.isOneToMany) {\n referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn.databaseName; // todo: fix joinColumns[0]\n }\n else {\n referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn.databaseName : relation.inverseRelation.joinColumns[0].referencedColumn.databaseName;\n }\n var referenceColumnValue = rawSqlResults[0][DriverUtils.buildColumnAlias(_this.driver, alias.name, referenceColumnName)]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work\n if (referenceColumnValue !== undefined && referenceColumnValue !== null) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = 0;\n rawRelationCountResult.results\n .filter(function (result) { return result[\"parentId\"] === referenceColumnValue; })\n .forEach(function (result) {\n entity[rawRelationCountResult.relationCountAttribute.mapToPropertyPropertyName] = parseInt(result[\"cnt\"]);\n hasData = true;\n });\n }\n });\n return hasData;\n };\n RawSqlResultsToEntityTransformer.prototype.createValueMapFromJoinColumns = function (relation, parentAlias, rawSqlResults) {\n var _this = this;\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (valueMap, column) {\n rawSqlResults.forEach(function (rawSqlResult) {\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.databaseName)], column);\n }\n else {\n valueMap[column.databaseName] = _this.driver.prepareHydratedValue(rawSqlResult[DriverUtils.buildColumnAlias(_this.driver, parentAlias, column.referencedColumn.databaseName)], column);\n }\n });\n return valueMap;\n }, {});\n };\n RawSqlResultsToEntityTransformer.prototype.extractEntityPrimaryIds = function (relation, relationIdRawResult) {\n var columns;\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n columns = relation.entityMetadata.primaryColumns.map(function (joinColumn) { return joinColumn; });\n }\n else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n columns = relation.inverseRelation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n if (relation.isOwning) {\n columns = relation.joinColumns.map(function (joinColumn) { return joinColumn; });\n }\n else {\n columns = relation.inverseRelation.inverseJoinColumns.map(function (joinColumn) { return joinColumn; });\n }\n }\n return columns.reduce(function (data, column) {\n data[column.databaseName] = relationIdRawResult[column.databaseName];\n return data;\n }, {});\n };\n return RawSqlResultsToEntityTransformer;\n}());\nexport { RawSqlResultsToEntityTransformer };\n\n//# sourceMappingURL=RawSqlResultsToEntityTransformer.js.map\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Counter = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Counter {\n constructor(value) {\n this._value = 0;\n if (value instanceof Counter) {\n value = value.current;\n }\n this._value = Helper_1.Helper.nonNull(value, 0);\n }\n next() {\n this._value++;\n return this._value;\n }\n current() {\n return this._value;\n }\n}\nexports.Counter = Counter;\n//# sourceMappingURL=Counter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DateHelper = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet DateHelper = /** @class */ (() => {\n class DateHelper {\n /**\n * Formatiert ein Date-Object nach der Vorlage von der C-Funktion strftime\n *\n * @param sFormat\n * @param date\n * @param useUTC\n * @returns {*|void|string}\n */\n static strftime(sFormat, date, useUTC) {\n useUTC = Helper_1.Helper.nonNull(useUTC, false);\n date = Helper_1.Helper.nonNull(date, new Date());\n if (!(date instanceof Date))\n date = new Date(date);\n let nDay = (useUTC) ? date.getUTCDay() : date.getDay(), nDate = (useUTC) ? date.getUTCDate() : date.getDate(), nMonth = (useUTC) ? date.getUTCMonth() : date.getMonth(), nYear = (useUTC) ? date.getUTCFullYear() : date.getFullYear(), nHour = (useUTC) ? date.getUTCHours() : date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aDaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function () {\n if ((nYear & 3) !== 0)\n return false;\n return nYear % 100 !== 0 || nYear % 400 === 0;\n }, getThursday = function () {\n let target = new Date(date);\n target.setDate(nDate - ((nDay + 6) % 7) + 3);\n return target;\n }, zeroPad = function (nNum, nPad) {\n return ('' + (Math.pow(10, nPad) + nNum)).slice(1);\n };\n return sFormat.replace(/%[a-z]/gi, (sMatch) => {\n return {\n '%a': this.translate(aDaysShort[nDay]),\n '%A': this.translate(aDays[nDay]),\n '%b': this.translate(aMonths[nMonth].slice(0, 3)),\n '%B': this.translate(aMonths[nMonth]),\n '%c': date.toUTCString(),\n '%C': Math.floor(nYear / 100),\n '%d': zeroPad(nDate, 2),\n '%e': nDate,\n '%f': zeroPad(date.getTime() % 1000, 4),\n '%F': date.toISOString().slice(0, 10),\n '%G': getThursday().getFullYear(),\n '%g': ('' + getThursday().getFullYear()).slice(2),\n '%H': zeroPad(nHour, 2),\n '%I': zeroPad((nHour + 11) % 12 + 1, 2),\n '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth > 1 && isLeapYear()) ? 1 : 0), 3),\n '%k': '' + nHour,\n '%l': (nHour + 11) % 12 + 1,\n '%m': zeroPad(nMonth + 1, 2),\n '%M': zeroPad(date.getMinutes(), 2),\n '%p': (nHour < 12) ? 'AM' : 'PM',\n '%P': (nHour < 12) ? 'am' : 'pm',\n '%s': Math.round(date.getTime() / 1000),\n '%S': zeroPad(date.getSeconds(), 2),\n '%u': nDay || 7,\n '%w': '' + nDay,\n '%x': date.toLocaleDateString(),\n '%X': date.toLocaleTimeString(),\n '%y': ('' + nYear).slice(2),\n '%Y': nYear,\n '%z': date.toTimeString().replace(/.+GMT([+-]\\d+).+/, '$1'),\n '%Z': date.toTimeString().replace(/.+\\((.+?)\\)$/, '$1')\n }[sMatch] || sMatch;\n });\n }\n static translate(key) {\n if (this.translationCallback) {\n return this.translationCallback(key);\n }\n return key;\n }\n static setTranslationCallback(callback) {\n this.translationCallback = callback;\n }\n }\n DateHelper.FORMAT = {\n ISO_TIME: \"%Y-%m-%dT%H:%M%S\"\n };\n return DateHelper;\n})();\nexports.DateHelper = DateHelper;\n//# sourceMappingURL=DateHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MigrationHelper = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst Helper_1 = require(\"./Helper\");\nclass MigrationHelper {\n static isServer() {\n return (typeof document !== \"object\");\n }\n static addTableFromModelClass(modelClass, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createTableFromModelClass(modelClass));\n });\n }\n static addManyToManyTable(tableOne, tableTwo, queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield queryRunner.createTable(this.createManyToManyTable(tableOne, tableTwo));\n });\n }\n static createManyToManyTable(tableOne, tableTwo) {\n let fieldOne = tableOne + \"Id\";\n let fieldTwo = tableTwo + \"Id\";\n let name = tableOne + tableTwo.substr(0, 1).toUpperCase() + tableTwo.substr(1);\n let manyToManyTable = new typeorm_1.Table({\n name: name,\n columns: [\n {\n name: fieldOne,\n isPrimary: true,\n type: \"integer\"\n },\n {\n name: fieldTwo,\n isPrimary: true,\n type: \"integer\"\n }\n ],\n indices: [\n {\n name: \"IDX_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne]\n },\n {\n name: \"IDX_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo]\n }\n ],\n foreignKeys: [\n {\n name: \"FK_\" + name + \"_\" + fieldOne,\n columnNames: [fieldOne],\n referencedTableName: tableOne.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n {\n name: \"FK_\" + name + \"_\" + fieldTwo,\n columnNames: [fieldTwo],\n referencedTableName: tableTwo.replace(/([A-Z])/, (match, p1) => \"_\" + p1.toLowerCase()),\n referencedColumnNames: [\"id\"],\n onDelete: \"cascade\",\n },\n ]\n });\n return manyToManyTable;\n }\n static createTableFromModelClass(modelClass, prefix) {\n prefix = Helper_1.Helper.nonNull(prefix, \"\");\n let columns = [];\n let indices = [];\n let foreignKeys = [];\n let schemaDefinition = modelClass.getSchemaDefinition();\n let tableName = prefix + Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n Object.keys(schemaDefinition.columns).forEach(column => {\n let columnConfig = {};\n Object.keys(schemaDefinition.columns[column]).forEach(key => {\n columnConfig[key] = schemaDefinition.columns[column][key];\n });\n columnConfig[\"name\"] = column;\n if (schemaDefinition.columns[column].primary) {\n columnConfig[\"isPrimary\"] = true;\n }\n if (schemaDefinition.columns[column].nullable) {\n columnConfig[\"isNullable\"] = true;\n }\n if (schemaDefinition.columns[column].generated) {\n //If it is not EasySyncBaseModel or server\n if (Helper_1.Helper.isNull(modelClass.CAN_BE_SYNCED) || this.isServer() || column === \"clientId\") {\n columnConfig[\"isGenerated\"] = true;\n columnConfig[\"generationStrategy\"] = \"increment\";\n if (!this.isServer()) {\n columnConfig[\"type\"] = \"INTEGER\";\n }\n }\n }\n if (typeof columnConfig[\"default\"] === \"string\") {\n columnConfig[\"default\"] = \"'\" + columnConfig[\"default\"] + \"'\";\n }\n else if (columnConfig[\"default\"] === true) {\n columnConfig[\"default\"] = 1;\n }\n else if (columnConfig[\"default\"] === false) {\n columnConfig[\"default\"] = 0;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.MEDIUMTEXT && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n if (columnConfig[\"type\"] === MigrationHelper.TYPES.SIMPLE_JSON && !this.isServer()) {\n columnConfig[\"type\"] = MigrationHelper.TYPES.TEXT;\n }\n columns.push(columnConfig);\n });\n Object.keys(schemaDefinition.relations).forEach(relation => {\n if (schemaDefinition.relations[relation].type === \"many-to-one\" || schemaDefinition.relations[relation].joinColumn) {\n // let columnName = Helper.toSnakeCase(relation) + \"Id\";\n let columnName = relation.substr(0, 1).toLowerCase() + relation.substr(1) + \"Id\";\n let columnConfig = {\n name: columnName,\n type: MigrationHelper.TYPES.INTEGER,\n isNullable: true\n };\n columns.push(columnConfig);\n let indexConfig = {\n name: \"IDX_\" + tableName + \"_\" + columnName,\n columnNames: [columnName]\n };\n indices.push(indexConfig);\n let foreignKeyConfig = {\n name: \"FK_\" + tableName + \"_\" + columnName,\n columnNames: [columnName],\n referencedTableName: Helper_1.Helper.toSnakeCase(schemaDefinition.relations[relation].target),\n referencedColumnNames: [\"id\"]\n };\n foreignKeys.push(foreignKeyConfig);\n }\n });\n return new typeorm_1.Table({\n name: tableName,\n columns: columns,\n indices: indices,\n foreignKeys: foreignKeys\n });\n }\n static updateModel(queryRunner, newModel) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = newModel.getSchemaDefinition();\n let tableName = Helper_1.Helper.toSnakeCase(schemaDefinition.name);\n let newTable = this.createTableFromModelClass(newModel);\n let table = yield queryRunner.getTable(tableName);\n table.name = \"__temp__\" + table.name;\n table.indices.forEach(index => {\n index.name = \"__temp__\" + index.name;\n });\n table.foreignKeys.forEach(key => {\n key.name = \"__temp__\" + key.name;\n key.columnNames = [key.columnNames[0]];\n key.referencedColumnNames = [key.referencedColumnNames[0]];\n });\n if (MigrationHelper.isServer()) {\n table.columns.forEach(column => {\n if (column.default !== null && typeof column.default === \"string\" && column.default.startsWith(\"'\") && column.default.endsWith(\"'\") && (column.type !== \"varchar\" || column.default.startsWith(\"''\"))) {\n column.default = column.default.substring(1, column.default.length - 1);\n }\n });\n }\n yield queryRunner.createTable(table);\n let names = [];\n table.columns.forEach(column => {\n names.push(column.name);\n });\n yield queryRunner.query(\"INSERT INTO \" + table.name + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + tableName + \";\");\n yield queryRunner.query(\"DROP TABLE \" + tableName + \";\");\n yield queryRunner.createTable(newTable);\n let newColumnNames = [];\n newTable.columns.forEach(column => newColumnNames.push(column.name));\n names = [];\n table.columns.forEach(column => {\n if (newColumnNames.indexOf(column.name) !== -1) {\n names.push(column.name);\n }\n });\n yield queryRunner.query(\"INSERT INTO \" + tableName + \"(`\" + names.join(\"`,`\") + \"`) SELECT `\" + names.join(\"`,`\") + \"` FROM \" + table.name + \";\");\n yield queryRunner.query(\"DROP TABLE \" + table.name + \";\");\n });\n }\n}\nexports.MigrationHelper = MigrationHelper;\nMigrationHelper.TYPES = {\n INTEGER: \"int\",\n FLOAT: \"float\",\n DATE: \"datetime\",\n STRING: \"varchar\",\n TEXT: \"text\",\n MEDIUMTEXT: \"mediumtext\",\n BOOLEAN: \"boolean\",\n JSON: \"json\",\n SIMPLE_JSON: \"simple-json\",\n MY_JSON: \"my-json\"\n};\n//# sourceMappingURL=MigrationHelper.js.map","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n Function(\"return this;\")();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n else {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter);\n function makeExporter(target, previous) {\n return function (key, value) {\n if (typeof target[key] !== \"function\") {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n }\n if (previous)\n previous(key, value);\n };\n }\n })(function (exporter) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var usePolyfill = typeof process === \"object\" && process.env && process.env[\"REFLECT_METADATA_USE_MAP_POLYFILL\"] === \"true\";\n var _Map = !usePolyfill && typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = !usePolyfill && typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = !usePolyfill && typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var Metadata = new _WeakMap();\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(metadataKey))\n return false;\n if (metadataMap.size > 0)\n return true;\n var targetMetadata = Metadata.get(target);\n targetMetadata.delete(propertyKey);\n if (targetMetadata.size > 0)\n return true;\n Metadata.delete(target);\n return true;\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = Metadata.get(O);\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n Metadata.set(O, targetMetadata);\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n }\n return metadataMap;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n // 6 ECMAScript Data Typ0es and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n return /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (key === this._cacheKey) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (this._cacheKey !== key) {\n this._cacheIndex = this._keys.indexOf(this._cacheKey = key);\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n return /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.values(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n if (typeof crypto !== \"undefined\")\n return crypto.getRandomValues(new Uint8Array(size));\n if (typeof msCrypto !== \"undefined\")\n return msCrypto.getRandomValues(new Uint8Array(size));\n return FillRandomBytes(new Uint8Array(size), size);\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Prioritized = void 0;\nconst Helper_1 = require(\"./Helper\");\nclass Prioritized {\n constructor(promises) {\n this._lastPriority = 0;\n this._status = 0;\n this._lastResult = null;\n this._success = {};\n this._highestPromise = null;\n promises = Helper_1.Helper.nonNull(promises, {});\n this._callbacks = [];\n if (Array.isArray(promises)) {\n let tmpPromises = {};\n promises.forEach((promise, i) => {\n tmpPromises[(i + 1) * 10] = promise;\n });\n promises = tmpPromises;\n }\n let highestPromiseResolver = null;\n this._highestPromise = new Promise(resolve => {\n highestPromiseResolver = resolve;\n });\n Object.keys(promises).forEach(priority => {\n this._success[priority] = null;\n promises[priority].then(res => {\n this._success[priority] = true;\n if (parseInt(priority) > this._lastPriority) {\n this._lastResult = res;\n this._lastPriority = parseInt(priority);\n this._callCallbacks();\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n else {\n this._status = 1;\n }\n }\n }).catch(e => {\n this._success[priority] = e;\n if (this._checkHighest()) {\n this._status = 2;\n highestPromiseResolver();\n }\n });\n });\n this._promises = promises;\n }\n _callCallbacks() {\n this._callbacks.forEach(callback => {\n callback(this._lastResult, this._lastPriority);\n });\n }\n _checkHighest() {\n let isHighestResult = false;\n Object.keys(this._success).reverse().some(priority => {\n if (Helper_1.Helper.isNull(this._success[priority])) {\n //return true beendet some-schleife\n return true;\n }\n else if (this._success[priority] === true) {\n isHighestResult = true;\n return true;\n }\n });\n return isHighestResult;\n }\n do(callback) {\n if (this._status < 2) {\n this._callbacks.push(callback);\n }\n if (this._status > 0) {\n callback(this._lastResult, this._lastPriority);\n }\n }\n highest(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._highestPromise;\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.resolve(this._lastResult).then(funcOrPromise);\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n first(funcOrPromise) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._status === 0) {\n if (Helper_1.Helper.isNotNull(funcOrPromise)) {\n return Promise.race(Object[\"values\"](this._promises)).then(funcOrPromise);\n }\n else {\n return Promise.race(Object[\"values\"](this._promises));\n }\n }\n else {\n return Promise.resolve(this._lastResult);\n }\n });\n }\n}\nexports.Prioritized = Prioritized;\n//# sourceMappingURL=Prioritized.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseWithHandlers = void 0;\nclass PromiseWithHandlers extends Promise {\n constructor(executor) {\n let resolver = null;\n let rejecter = null;\n super((res, rej) => {\n resolver = res;\n rejecter = rej;\n if (executor) {\n executor(resolver, rejecter);\n }\n });\n this.resolver = resolver;\n this.rejecter = rejecter;\n }\n resolve(value) {\n if (this.resolver) {\n this.resolver(value);\n }\n }\n reject(value) {\n if (this.rejecter) {\n this.rejecter(value);\n }\n }\n}\nexports.PromiseWithHandlers = PromiseWithHandlers;\n//# sourceMappingURL=PromiseWithHandlers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Random = void 0;\nconst Helper_1 = require(\"./Helper\");\nlet Random = /** @class */ (() => {\n class Random {\n static seedRandom(seed) {\n this._seed = seed;\n }\n static getRandom() {\n let t = this._seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n }\n static getIntRandom(maxValue) {\n return Math.floor(Random.getRandom() * (maxValue + 1));\n }\n static getStringRandom(numSigns, alphabet) {\n alphabet = Helper_1.Helper.nonNull(alphabet, \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\");\n let random = \"\";\n const numAlphabet = alphabet.length - 1;\n for (let i = 0; i < numSigns; i++) {\n random += alphabet[Random.getIntRandom(numAlphabet)];\n }\n return random;\n }\n }\n Random._seed = new Date().getTime();\n return Random;\n})();\nexports.Random = Random;\n//# sourceMappingURL=Random.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DragHelper = void 0;\nconst DraggedElement_1 = require(\"./DraggedElement\");\nclass DragHelper {\n constructor() {\n this.startPosition = null;\n this.currentDraggedElement = null;\n window.addEventListener(\"mousemove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchmove\", e => {\n if (this.currentDraggedElement) {\n this.dragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n }\n });\n window.addEventListener(\"mouseup\", e => {\n if (e.button === 0) {\n this.dragStop({ x: e.clientX, y: e.clientY });\n }\n });\n window.addEventListener(\"touchend\", e => {\n if (e.touches.length === 0) {\n this.dragStop({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY });\n }\n });\n }\n static getInstance() {\n if (!this.instance) {\n this.instance = new DragHelper();\n }\n return this.instance;\n }\n draggable(element) {\n const dragElement = new DraggedElement_1.DraggedElement(element);\n element.addEventListener(\"mousedown\", e => {\n e.preventDefault();\n console.log(\"mousedown\", e.button);\n if (e.button === 0) {\n this.dragStart({ x: e.clientX, y: e.clientY }, dragElement);\n }\n });\n element.addEventListener(\"touchstart\", e => {\n e.preventDefault();\n if (e.touches.length === 1) {\n this.dragStart({ x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY }, dragElement);\n }\n });\n return dragElement;\n }\n dragStart(position, draggedElement) {\n this.currentDraggedElement = draggedElement;\n this.startPosition = position;\n this.currentDraggedElement.start();\n }\n dragMove(toPosition) {\n if (this.currentDraggedElement) {\n const diff = { x: toPosition.x - this.startPosition.x, y: toPosition.y - this.startPosition.y };\n this.currentDraggedElement.moveRelativeTo(diff);\n }\n }\n dragStop(mousePos) {\n if (this.currentDraggedElement) {\n this.currentDraggedElement.stop(mousePos);\n this.currentDraggedElement = null;\n this.startPosition = null;\n }\n }\n}\nexports.DragHelper = DragHelper;\n//# sourceMappingURL=DragHelper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HotkeyManager = void 0;\nclass HotkeyManager {\n constructor() {\n this._keys = {};\n this._callbacks = {};\n this._lastCallbackId = 0;\n this._active = false;\n this.mousePosition = null;\n this._addListeners();\n this.ignoreFormElements = false;\n }\n static isFormElement(element) {\n return element instanceof HTMLInputElement\n || element instanceof HTMLSelectElement\n || element instanceof HTMLTextAreaElement;\n }\n getMousePosition() {\n return this.mousePosition;\n }\n _addListeners() {\n window.addEventListener(\"keydown\", e => {\n if (this.ignoreFormElements || !HotkeyManager.isFormElement(e.target)) {\n this._keys[e.key.toLowerCase()] = true;\n if (this._active) {\n this._checkCallbacks(e);\n }\n }\n });\n window.addEventListener(\"keyup\", e => {\n if (e.key) {\n this._keys[e.key.toLowerCase()] = false;\n }\n });\n document.addEventListener(\"mousemove\", e => {\n this.mousePosition = { x: e.clientX, y: e.clientY };\n });\n }\n activate() {\n this._active = true;\n }\n deactivate() {\n this._active = false;\n }\n addCallback(keys, callback) {\n this._lastCallbackId++;\n this._callbacks[this._lastCallbackId] = {\n keys: keys,\n callback: callback\n };\n }\n isKeyPressed(key) {\n return this._active && this._keys[key] && this._keys[key] === true;\n }\n _checkCallbacks(e) {\n //TODO async forEach?\n Object.values(this._callbacks).forEach(callback => {\n // @ts-ignore\n if (callback.keys.every(key => this._keys[key] === true)) {\n // @ts-ignore\n callback.callback(e);\n }\n });\n }\n removeCallback(callbackId) {\n delete this._callbacks[callbackId];\n }\n}\nexports.HotkeyManager = HotkeyManager;\n//# sourceMappingURL=HotkeyManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InputSelect = void 0;\nconst Helper_1 = require(\"../shared/Helper\");\nconst ViewHelper_1 = require(\"./ViewHelper\");\nclass InputSelect {\n constructor(element, options) {\n this.onChangeListeners = [];\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n this.options = new Map();\n this.inputElement = element;\n options.forEach(o => {\n if (typeof o === \"string\") {\n o = { value: o, label: o };\n }\n o.selected = Helper_1.Helper.nonNull(o.selected, false);\n this.options.set(o.value, o);\n return o;\n });\n this.buildElement();\n }\n onChange(listener) {\n this.onChangeListeners.push(listener);\n }\n buildElement() {\n const parent = this.inputElement.parentElement;\n this.container = document.createElement(\"div\");\n this.container.classList.add(\"input-select-container\");\n const flexContainer = document.createElement(\"div\");\n flexContainer.classList.add(\"input-select-flex\");\n this.selectedOptionsContainer = document.createElement(\"span\");\n this.selectedOptionsContainer.classList.add(\"input-select-selected-options\");\n const classes = [];\n this.inputElement.classList.forEach(c => {\n this.container.classList.add(c);\n classes.push(c);\n });\n this.inputElement.classList.remove(...classes);\n this.inputElement.classList.add(\"input-select-input\");\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.classList.add(\"input-select-options\");\n parent.insertBefore(this.container, this.inputElement);\n this.inputElement.remove();\n this.container.appendChild(flexContainer);\n this.container.appendChild(this.optionsContainer);\n flexContainer.appendChild(this.selectedOptionsContainer);\n flexContainer.appendChild(this.inputElement);\n this.inputElement.addEventListener(\"input\", () => this.updateOptions());\n if (\"ResizeObserver\" in window) {\n // @ts-ignore\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n this.optionsContainer.style.width = entry.borderBoxSize[0].inlineSize + \"px\";\n });\n });\n resizeObserver.observe(this.container);\n }\n // if (\"IntersectionObserver\" in window) {\n // const intersectionOptions = {\n // root: this.optionsContainer,\n // rootMargin: \"20px\",\n // threshold: 0.01\n // }\n // const intersectionObserver = new IntersectionObserver((entries) => {\n // entries.forEach(entry => console.log(\"is intersecting\", entry.isIntersecting));\n // // console.log(\"entries\", entries);\n // }, intersectionOptions);\n // intersectionObserver.observe(flexContainer);\n // }\n window.addEventListener(\"scroll\", () => console.log(\"scrolling\"));\n this.container.addEventListener(\"click\", () => {\n const rect = this.container.getBoundingClientRect();\n this.optionsContainer.style.top = (rect.top + rect.height) + \"px\";\n });\n this.updateOptions();\n }\n updateOptions() {\n ViewHelper_1.ViewHelper.removeAllChildren(this.selectedOptionsContainer);\n ViewHelper_1.ViewHelper.removeAllChildren(this.optionsContainer);\n const inputValue = this.inputElement.value;\n this.options.forEach(o => {\n const optionElement = document.createElement(\"span\");\n optionElement.classList.add(\"input-select-option\");\n optionElement.dataset[\"value\"] = o.value;\n optionElement.innerText = o.label;\n if (o.selected) {\n this.selectedOptionsContainer.appendChild(optionElement);\n }\n else if (o.label.indexOf(inputValue) !== -1) {\n this.optionsContainer.appendChild(optionElement);\n }\n optionElement.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n e.preventDefault();\n e.cancelBubble = true;\n this.toggle(o.value);\n this.inputElement.focus();\n });\n });\n }\n toggle(value) {\n const option = this.options.get(value);\n if (option) {\n option.selected = !option.selected;\n this.updateOptions();\n this.onChangeListeners.forEach(listener => {\n listener(option, this);\n });\n }\n }\n getOptions() {\n return Array.from(this.options.values());\n }\n getSelectedOptions() {\n return this.getOptions().filter(o => o.selected);\n }\n getSelectedValues() {\n return this.getSelectedOptions().map(o => o.value);\n }\n updateSelection(selection) {\n Object.keys(selection).forEach(value => {\n const option = this.options.get(value);\n if (option) {\n option.selected = selection[value];\n }\n });\n this.updateOptions();\n }\n}\nexports.InputSelect = InputSelect;\n//# sourceMappingURL=InputSelect.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./shared/EventManager\"));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst js_helper_1 = require(\"js-helper\");\nclass EventManager {\n constructor() {\n this._listeners = {};\n this._lastListenerId = 0;\n }\n /**\n * @return {EventManager}\n */\n static getInstance() {\n if (!this._instance) {\n this._instance = new EventManager();\n }\n return this._instance;\n }\n addListener(event, listener) {\n if (typeof listener !== \"function\") {\n throw new Error(\"can only add functions as listeners!\");\n }\n this._lastListenerId++;\n if (!this._listeners[event]) {\n this._listeners[event] = {};\n this._listeners[event][this._lastListenerId] = listener;\n }\n return this._lastListenerId;\n }\n removeListener(event, listenerId) {\n if (this._listeners[event] && this._listeners[event][listenerId]) {\n delete this._listeners[event][listenerId];\n }\n }\n trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._listeners[event]) {\n yield js_helper_1.Helper.asyncForEach(Object.keys(this._listeners[event]), (listenerId) => __awaiter(this, void 0, void 0, function* () {\n yield this._listeners[event][listenerId](data);\n }), true);\n }\n });\n }\n static trigger(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.getInstance().trigger(event, data);\n });\n }\n}\nexports.EventManager = EventManager;\nEventManager._instance = null;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ContainerSite = void 0;\nconst TemplateSite_1 = require(\"./TemplateSite\");\nconst containerTemplate = require(\"../../html/siteTemplates/container.html\");\n/**\n * Seite, welche das Container-Template benutzt\n */\nclass ContainerSite extends TemplateSite_1.TemplateSite {\n /**\n * Constructor für die ContainerSite\n *\n * @param siteManager\n * @param view\n */\n constructor(siteManager, view) {\n super(siteManager, view, containerTemplate, \"#site-content\");\n }\n}\nexports.ContainerSite = ContainerSite;\n//# sourceMappingURL=ContainerSite.js.map","module.exports = __webpack_public_path__ + \"html/container.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DelegateSite = void 0;\nconst AbstractSite_1 = require(\"../AbstractSite\");\nclass DelegateSite extends AbstractSite_1.AbstractSite {\n constructor(site) {\n super(undefined, document.createElement(\"span\"));\n /** @var {AbstractSite} */\n this._site = site;\n }\n setTitle(titleElement, title) {\n return this._site.setTitle(titleElement, title);\n }\n setParameter(name, value) {\n //Todo changing\n // return this._site.setParameter(name, value);\n }\n setParameters(parameters) {\n //TODO changing\n // return this._site.setParameters(parameters)\n }\n getParameters() {\n return this._site.getParameters();\n }\n showLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.showLoadingSymbol();\n });\n }\n removeLoadingSymbol() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._site.removeLoadingSymbol();\n });\n }\n _updateTitle() {\n return this._site._updateTitle();\n }\n updateUrl(args) {\n //todo\n // return this._site.updateUrl(args);\n }\n startSite(site, args) {\n return this._site.startSite(site, args);\n }\n finishAndStartSite(site, args, result) {\n return this._site.finishAndStartSite(site, args, result);\n }\n finish(result) {\n return this._site.finish(result);\n }\n goBack() {\n return this._site.goBack();\n }\n getFinishPromise() {\n return this._site.getFinishPromise();\n }\n setResult(result) {\n return this._site.setResult(result);\n }\n getFinishResolver() {\n return this._site.getFinishResolver();\n }\n addFragment(viewQuery, fragment) {\n return this._site.addFragment(viewQuery, fragment);\n }\n findBy(query, all, asPromise) {\n return this._site.findBy(query, all, asPromise);\n }\n setPauseParameters(pauseParameters) {\n return this._site.setPauseParameters(pauseParameters);\n }\n getViewPromise() {\n return this._site.getViewPromise();\n }\n getState() {\n return this._site.getState();\n }\n getTitle() {\n return this._site.getTitle();\n }\n isShowing() {\n return this._site.isShowing();\n }\n isDestroying() {\n return this._site.isDestroying();\n }\n}\nexports.DelegateSite = DelegateSite;\n//# sourceMappingURL=DelegateSite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbstractWindowFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst ViewInflater_1 = require(\"../../ViewInflater\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst Translator_1 = require(\"../../Translator\");\nconst NativeStoragePromise_1 = require(\"../../NativeStoragePromise\");\nconst Toast_1 = require(\"../../Toast/Toast\");\nconst template = require(\"../../../html/Framework/Fragment/abstractWindowTemplate.html\");\nclass AbstractWindowFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view, position, title, id) {\n super(site, template);\n this.position = {\n x: 0,\n y: 0,\n anchorY: \"top\",\n anchorX: \"left\"\n };\n this.title = \"\";\n this._margin = { x: 0, y: 0 };\n this.saveData = {};\n this.state = \"normal\";\n this.popupWindow = null;\n this.translateTitle = true;\n this.position = Object.assign({ anchorY: \"top\", anchorX: \"left\" }, position);\n this.title = Helper_1.Helper.nonNull(title, \" \");\n if (id) {\n this.id = \"window-\" + id;\n }\n this._viewPromise = Promise.all([this._viewPromise, ViewInflater_1.ViewInflater.getInstance().load(view)]).then(res => {\n res[0].querySelector(\"#child-view\").replaceWith(res[1]);\n ViewInflater_1.ViewInflater.replaceWithChildren(res[1]);\n this._view = res[0];\n return res[0];\n }).catch(e => console.error(e));\n }\n setTitle(title) {\n if (this._titleElement) {\n ViewHelper_1.ViewHelper.removeAllChildren(this._titleElement);\n this._titleElement.appendChild(this.translateTitle ? Translator_1.Translator.makePersistentTranslation(title) : document.createTextNode(title));\n }\n this.title = title;\n }\n getDimension() {\n let computedStyle = window.getComputedStyle(this._container);\n let width = parseFloat(computedStyle.getPropertyValue(\"width\"));\n let height = parseFloat(computedStyle.getPropertyValue(\"height\"));\n if (isNaN(width)) {\n width = parseFloat(this._container.style.width);\n }\n if (isNaN(height)) {\n height = parseFloat(this._container.style.height);\n }\n return { x: Math.ceil(width) - this._margin.x, y: Math.ceil(height) - this._margin.y };\n }\n setDimension(x, y) {\n x += this._margin.x;\n y += this._margin.y;\n this._container.style.width = x + \"px\";\n this._container.style.height = y + \"px\";\n this.saveData.dimension = {\n x: x,\n y: y,\n };\n this.save();\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._container = this.findBy(\".window-container\");\n if (this.position.width || this.position.height) {\n this._container.style.width = this.position.width + \"px\";\n this._container.style.height = this.position.height + \"px\";\n }\n this._window = this.findBy(\".window\");\n this._titleElement = this.findBy(\"#title\");\n this._resizeElements = {\n x: [\n this._window,\n this.findBy(\".window-resize.left\"),\n this.findBy(\".window-resize.right\")\n ],\n y: [\n this._window,\n this._titleElement,\n this.findBy(\".window-resize.top\"),\n this.findBy(\".window-resize.bottom\")\n ],\n };\n yield this.load();\n this._checkPositionAndDimension();\n // this.moveTo(this.position.x, this.position.y);\n this.setTitle(this.title);\n this.addListeners();\n const buttonContainer = this.findBy(\"#title-buttons\");\n if (buttonContainer) {\n buttonContainer.remove();\n this._titleElement.parentNode.appendChild(buttonContainer);\n buttonContainer.querySelectorAll(\".title-button\").forEach(button => {\n button.addEventListener(\"click\", e => {\n this.onButtonClick(button.id, button, e);\n });\n });\n }\n return res;\n });\n }\n addListeners() {\n return __awaiter(this, void 0, void 0, function* () {\n let resizeStart = null;\n let multiplier;\n let dimension;\n let resizeStartListener = (x, y, e) => {\n if (e.target.classList.contains(\"window-resize\")) {\n e.stopPropagation();\n resizeStart = { x: x, y: y };\n let direction = e.target.dataset[\"direction\"].split(\",\");\n multiplier = { x: parseInt(direction[0]), y: parseInt(direction[1]) };\n dimension = this.getDimension();\n }\n };\n this.findBy(\".window-resize\", true).forEach(element => {\n element.addEventListener(\"mousedown\", (e) => {\n resizeStartListener(e.clientX, e.clientY, e);\n });\n });\n let mouseDownPos = null;\n let pos = null;\n let moveStartListener = (x, y, e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n mouseDownPos = { x: x, y: y };\n pos = Object.assign({}, this.getPosition()); //Make copy\n this._container.classList.add(\"moving\");\n }\n this.makeActiveWindow();\n };\n this._container.addEventListener(\"mousedown\", (e) => {\n moveStartListener(e.clientX, e.clientY, e);\n });\n this._container.addEventListener(\"touchstart\", (e) => {\n if (e.touches.length === 1) {\n moveStartListener(e.touches[0].clientX, e.touches[0].clientY, e);\n }\n });\n let moveListener = (x, y) => {\n if (resizeStart !== null) {\n let localMultiplier = {\n x: multiplier.x,\n y: multiplier.y,\n };\n let diff = {\n x: (x - resizeStart.x) * (localMultiplier.x),\n y: (y - resizeStart.y) * (localMultiplier.y)\n };\n dimension = { x: dimension.x + diff.x, y: dimension.y + diff.y };\n this.setDimension(dimension.x, dimension.y);\n const realDimension = this.getDimension();\n if (dimension.x !== realDimension.x) {\n localMultiplier.x = 0;\n }\n if (dimension.y !== realDimension.y) {\n localMultiplier.y = 0;\n }\n this._checkPositionAndDimension();\n //TODO diff für Center berechnen...\n let moveDiff = { x: 0, y: 0 };\n if (localMultiplier.x !== 0) {\n if (this.position.anchorX === \"center\") {\n moveDiff.x = diff.x * localMultiplier.x / 2;\n }\n else if (localMultiplier.x * (this.position.anchorX === \"left\" ? 1 : -1) < 0) {\n moveDiff.x = diff.x * localMultiplier.x;\n }\n }\n if (localMultiplier.y !== 0) {\n if (this.position.anchorY === \"center\") {\n moveDiff.y = diff.y * localMultiplier.y / 2;\n }\n else if (localMultiplier.y * (this.position.anchorY === \"top\" ? 1 : -1) < 0) {\n moveDiff.y = diff.y * localMultiplier.y;\n }\n }\n this.moveAt(moveDiff.x, moveDiff.y);\n resizeStart = { x: x, y: y };\n }\n else if (mouseDownPos !== null) {\n let diff = {\n x: x - mouseDownPos.x,\n y: y - mouseDownPos.y,\n };\n mouseDownPos = { x, y };\n // const newPos = {x: pos.x + diff.x, y: pos.y + diff.y};\n this.moveAt(diff.x, diff.y);\n }\n };\n window.addEventListener(\"mousemove\", (e) => {\n moveListener(e.clientX, e.clientY);\n });\n window.addEventListener(\"touchmove\", (e) => {\n if (e.touches.length === 1) {\n moveListener(e.touches[0].clientX, e.touches[0].clientY);\n }\n });\n let endListener = (x, y, e) => {\n mouseDownPos = null;\n resizeStart = null;\n this._container.classList.remove(\"moving\");\n };\n window.addEventListener(\"mouseup\", (e) => {\n endListener(e.clientX, e.clientY, e);\n });\n window.addEventListener(\"touchend\", (e) => {\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n endListener(e.changedTouches[0].clientX, e.changedTouches[0].clientY, e);\n }\n });\n this._container.addEventListener(\"dblclick\", (e) => {\n if (e.target === this._container || e.target.closest(\"#title\") === this._titleElement) {\n this.toggleMinimize();\n }\n });\n window.addEventListener(\"resize\", () => {\n this._checkPositionAndDimension();\n });\n window.addEventListener(\"beforeunload\", () => {\n if (this.popupWindow) {\n this.id = null; //disable saving, since it should\n this.popupWindow.close();\n }\n });\n });\n }\n makeActiveWindow() {\n let activeWindow = document.querySelector(\".window-container.active-window\");\n if (activeWindow && activeWindow !== this._container) {\n activeWindow.classList.remove(\"active-window\");\n }\n this._container.classList.add(\"active-window\");\n }\n load() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n const saveData = yield NativeStoragePromise_1.NativeStoragePromise.getItem(this.id);\n if (saveData) {\n if (saveData.dimension) {\n this.setDimension(saveData.dimension.x, saveData.dimension.y);\n }\n if (saveData.position) {\n this.position = saveData.position;\n this._checkPositionAndDimension();\n }\n if (saveData.state) {\n switch (saveData.state) {\n case \"minimized\": {\n this.toggleMinimize();\n break;\n }\n case \"maximized\": {\n this.toggleMaximize();\n break;\n }\n case \"popup\": {\n this._viewLoadedPromise.then(() => {\n this.openInNewWindow();\n });\n break;\n }\n }\n }\n this.saveData = saveData;\n this.save();\n }\n }\n });\n }\n save() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.id) {\n // console.log(\"save\", this.id, this.saveData);\n yield NativeStoragePromise_1.NativeStoragePromise.setItem(this.id, this.saveData);\n }\n });\n }\n toggleMinimize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"minimized\");\n this._container.classList.remove(\"maximized\");\n if (!this._container.classList.contains(\"minimized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"minimized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n toggleMaximize() {\n if (this.state !== \"popup\") {\n this._container.classList.toggle(\"maximized\");\n this._container.classList.remove(\"minimized\");\n if (!this._container.classList.contains(\"maximized\")) {\n this.resizeToContent();\n this.state = \"normal\";\n }\n else {\n this.state = \"maximized\";\n }\n this.saveData.state = this.state;\n this.save();\n }\n }\n resizeToContent() {\n if (this._window) {\n let diff = {\n x: this._window.scrollWidth - this._window.clientWidth,\n y: this._window.scrollHeight - this._window.clientHeight,\n };\n let dimension = this.getDimension();\n if (diff.x === 0) {\n let sum = 0;\n this._resizeElements.x.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"width\")));\n diff.x = Math.ceil(sum) - dimension.x;\n }\n if (diff.y === 0) {\n let sum = 0;\n this._resizeElements.y.forEach(e => sum += parseFloat(window.getComputedStyle(e).getPropertyValue(\"height\")));\n diff.y = Math.ceil(sum) - dimension.y;\n }\n dimension.x += diff.x;\n dimension.y += diff.y;\n if (this.state === \"normal\") {\n this.setDimension(dimension.x, dimension.y);\n }\n this._checkPositionAndDimension();\n }\n }\n getTopLeftCornerPosition() {\n const dimension = this.getDimension();\n let x = this.position.x;\n if (this.position.anchorX === \"center\") {\n x += window.innerWidth / 2 - dimension.x / 2;\n }\n else if (this.position.anchorX === \"right\") {\n x += window.innerWidth - dimension.x;\n }\n let y = this.position.y;\n if (this.position.anchorY === \"center\") {\n y += window.innerHeight / 2 - dimension.y / 2;\n }\n else if (this.position.anchorY === \"bottom\") {\n y += window.innerHeight - dimension.y;\n }\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n return { x, y };\n }\n getCenterCenterPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: (topLeft.x + dimension.x / 2) - window.innerWidth / 2,\n y: (topLeft.y + dimension.y / 2) - window.innerHeight / 2\n };\n }\n getBottomRightPosition() {\n const dimension = this.getDimension();\n const topLeft = this.getTopLeftCornerPosition();\n return {\n x: Math.min((topLeft.x + dimension.x) - window.innerWidth, 0),\n y: Math.min((topLeft.y + dimension.y) - window.innerHeight, 0),\n };\n }\n _checkPositionAndDimension() {\n let dimension = this.getDimension();\n let setDimension = true;\n let dimensionChanged = false;\n if (isNaN(dimension.x)) {\n dimension.x = 0;\n setDimension = false;\n }\n if (isNaN(dimension.y)) {\n dimension.y = 0;\n setDimension = false;\n }\n let posTopLeft = this.getTopLeftCornerPosition();\n let posCenterCenter = this.getCenterCenterPosition();\n let posBottomRight = this.getBottomRightPosition();\n if (dimension.x > window.innerWidth) {\n dimensionChanged = true;\n dimension.x = window.innerWidth;\n this.position.x = 0;\n this.position.anchorX = \"left\";\n }\n else {\n if (posTopLeft.x <= Math.abs(posCenterCenter.x) && posTopLeft.x <= -1 * posBottomRight.x) {\n this.position.x = posTopLeft.x;\n this.position.anchorX = \"left\";\n }\n else if (-1 * posBottomRight.x <= Math.abs(posCenterCenter.x)) {\n this.position.x = posBottomRight.x;\n this.position.anchorX = \"right\";\n }\n else {\n this.position.x = posCenterCenter.x;\n this.position.anchorX = \"center\";\n }\n }\n if (dimension.y > window.innerHeight) {\n dimensionChanged = true;\n dimension.y = window.innerHeight;\n this.position.y = 0;\n this.position.anchorY = \"top\";\n }\n else {\n if (posTopLeft.y <= Math.abs(posCenterCenter.y) && posTopLeft.y <= -1 * posBottomRight.y) {\n this.position.y = posTopLeft.y;\n this.position.anchorY = \"top\";\n }\n else if (-1 * posBottomRight.y <= Math.abs(posCenterCenter.y)) {\n this.position.y = posBottomRight.y;\n this.position.anchorY = \"bottom\";\n }\n else {\n this.position.y = posCenterCenter.y;\n this.position.anchorY = \"center\";\n }\n }\n if (this.position.anchorY === \"top\") {\n this._container.style.top = this.position.y + \"px\";\n this._container.style.removeProperty(\"bottom\");\n }\n else if (this.position.anchorY === \"bottom\") {\n this._container.style.bottom = (-1 * this.position.y) + \"px\";\n this._container.style.removeProperty(\"top\");\n }\n else {\n this._container.style.top = \"calc(50% + \" + this.position.y.toString() + \"px - \" + (dimension.y / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"bottom\");\n }\n if (this.position.anchorX === \"left\") {\n this._container.style.left = this.position.x + \"px\";\n this._container.style.removeProperty(\"right\");\n }\n else if (this.position.anchorX === \"right\") {\n this._container.style.right = (-1 * this.position.x) + \"px\";\n this._container.style.removeProperty(\"left\");\n }\n else {\n this._container.style.left = \"calc(50% + \" + this.position.x.toString() + \"px - \" + (dimension.x / 2).toString() + \"px)\";\n this._container.style.removeProperty(\"right\");\n }\n this.saveData.position = this.position;\n if (!this._container.classList.contains(\"minimized\") && setDimension && dimensionChanged) {\n this.setDimension(dimension.x, dimension.y);\n }\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onStart.call(this, pauseArguments);\n this._checkPositionAndDimension();\n return res;\n });\n }\n moveAt(x, y) {\n const posTopLeft = this.getTopLeftCornerPosition();\n return this.moveTo(x + posTopLeft.x, y + posTopLeft.y);\n }\n moveTo(x, y) {\n this.position = { x: x, y: y, anchorX: \"left\", anchorY: \"top\" };\n this._checkPositionAndDimension();\n this.save();\n }\n onButtonClick(id, button, e) {\n switch (id) {\n case \"minimize-button\": {\n this.toggleMinimize();\n break;\n }\n case \"maximize-button\": {\n this.toggleMaximize();\n break;\n }\n case \"new-window-button\": {\n this.openInNewWindow();\n break;\n }\n }\n }\n openInNewWindow() {\n if (this.state === \"popup\") {\n return;\n }\n const windowProxy = window.open(\"\", \"\", \"modal=yes\");\n if (windowProxy === null) {\n new Toast_1.Toast(\"cannot open popups\").show();\n return;\n }\n this.state = \"popup\";\n this.saveData.state = this.state;\n this.save();\n const baseElement = document.createElement(\"base\");\n baseElement.href = window.location.href;\n windowProxy.document.head.appendChild(baseElement);\n const titleElement = document.createElement(\"title\");\n titleElement.innerText = this.title;\n windowProxy.document.head.appendChild(titleElement);\n document.querySelectorAll(\"link[rel='stylesheet']\").forEach(styleElem => {\n windowProxy.document.head.appendChild(styleElem.cloneNode());\n });\n const parent = this._view.parentNode;\n this._view.remove();\n this._container.classList.add(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n const translationCallback = Translator_1.Translator.getInstance().addTranslationCallback((baseElement) => {\n if (baseElement !== this._container) {\n Translator_1.Translator.getInstance().updateTranslations(this._container);\n }\n }, false);\n windowProxy.document.body.appendChild(this._view);\n windowProxy.addEventListener(\"beforeunload\", () => {\n this.state = \"normal\";\n this.saveData.state = this.state;\n this.save();\n this._view.remove();\n this._container.classList.remove(\"popup\");\n this._container.classList.remove(\"minimized\");\n this._container.classList.remove(\"maximized\");\n parent.appendChild(this._view);\n this.popupWindow = null;\n Translator_1.Translator.getInstance().removeTranslationCallback(translationCallback);\n });\n this.popupWindow = windowProxy;\n document.body.classList.forEach(className => {\n console.log(\"adding class\", className);\n windowProxy.document.body.classList.add(className);\n });\n }\n getPosition() {\n return this.position;\n }\n}\nexports.AbstractWindowFragment = AbstractWindowFragment;\n//# sourceMappingURL=AbstractWindowFragment.js.map","module.exports = __webpack_public_path__ + \"html/abstractWindowTemplate.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AlphabeticListFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst client_1 = require(\"js-helper/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst defaultView = require(\"../../../html/Framework/Fragment/alphabeticListFragment.html\");\nclass AlphabeticListFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, shared_1.Helper.nonNull(view, defaultView));\n this.elements = {};\n this.sideScrolling = false;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n //TODO font-size changing\n let sideAlphabet = this.findBy(\".alphabetic-list-sidealphabet\");\n sideAlphabet.addEventListener(\"mousedown\", () => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n });\n window.addEventListener(\"mouseup\", () => {\n this.sideScrolling = false;\n });\n window.addEventListener(\"touchend\", () => {\n this.sideScrolling = false;\n });\n this.findBy(\".alphabet-scroll-to\", true).forEach(elem => {\n let listener = (e) => {\n if (this.sideScrolling) {\n this.findBy(\".alphabet-section.\" + elem.dataset.letter).scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n }\n };\n elem.addEventListener(\"mousedown\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"mousemove\", listener);\n elem.addEventListener(\"touchstart\", (e) => {\n this.sideScrolling = true;\n listener(e);\n });\n elem.addEventListener(\"touchmove\", listener);\n });\n this.headingElement = this.findBy(\"#alphabetic-list-heading\");\n this.renderList();\n return res;\n });\n }\n setElements(elements) {\n this.elements = {};\n Object.keys(elements).sort(function (a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n }).forEach(key => {\n this.elements[key] = elements[key];\n });\n }\n setHeading(headingElement) {\n this.heading = headingElement;\n if (this.headingElement && this.heading) {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n this.headingElement.appendChild(this.heading);\n }\n }\n renderElement(element) {\n console.warn(\"should be overloaded?\");\n let elem = document.createElement(\"div\");\n elem.innerText = element;\n return elem;\n }\n renderList() {\n client_1.ViewHelper.removeAllChildren(this.headingElement);\n if (this.heading) {\n this.headingElement.appendChild(this.heading);\n }\n this.findBy(\".alphabet-section\", true).forEach(section => {\n client_1.ViewHelper.removeAllChildren(section);\n });\n let currentLetter = 'A';\n let currentSegment = this.findBy(\".alphabet-section.A\");\n Object.keys(this.elements).forEach(key => {\n let newLetter = key.trim().substring(0, 1).toUpperCase();\n if (newLetter !== currentLetter) {\n currentLetter = newLetter;\n let newSegment = this.findBy(\".alphabet-section.\" + newLetter);\n if (newSegment !== null) {\n currentSegment = newSegment;\n }\n }\n let element = this.renderElement(this.elements[key]);\n currentSegment.appendChild(element);\n });\n }\n}\nexports.AlphabeticListFragment = AlphabeticListFragment;\n//# sourceMappingURL=AlphabeticListFragment.js.map","module.exports = __webpack_public_path__ + \"html/alphabeticListFragment.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TabFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst defaultTabView = require(\"../../../html/Framework/Fragment/tabFragment.html\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst Translator_1 = require(\"../../Translator\");\nconst client_1 = require(\"js-helper/dist/client\");\nclass TabFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site, view) {\n super(site, Helper_1.Helper.nonNull(view, defaultTabView));\n this.lastTabId = 0;\n this.activeTab = null;\n this.onTabChangeListener = null;\n this.tabs = new Map();\n this.tabViewPromise = this._viewLoadedPromise;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.nameContainer = this.findBy(\".tab-names\");\n this.nameButton = this.findBy(\".tab-button-template\");\n this.nameButton.classList.remove(\"tab-button-template\");\n this.nameButton.remove();\n this.tabContent = this.findBy(\".tab-content\");\n this.tabSite = this.findBy(\".tab-site-template\");\n this.tabSite.classList.remove(\"tab-site-template\");\n this.tabSite.remove();\n return res;\n });\n }\n addFragment(name, fragment, nameIsTranslatable) {\n super.addFragment(\".tab-content\", fragment);\n fragment._viewLoadedPromise.then(() => {\n const view = this.tabSite.cloneNode(true);\n view.appendChild(fragment._view);\n this.lastTabId++;\n const tab = {\n name: name,\n fragment: fragment,\n view: view,\n nameIsTranslatable: Helper_1.Helper.nonNull(nameIsTranslatable, true),\n button: null,\n id: this.lastTabId,\n };\n this.tabs.set(this.lastTabId, tab);\n this._viewLoadedPromise.then(() => {\n const nameElement = this.nameButton.cloneNode(true);\n nameElement.appendChild(tab.nameIsTranslatable ? Translator_1.Translator.makePersistentTranslation(name) : document.createTextNode(name));\n this.nameContainer.appendChild(nameElement);\n nameElement.addEventListener(\"click\", () => {\n this.showTab(tab.id);\n });\n tab.button = nameElement;\n if (Helper_1.Helper.isNull(this.activeTab)) {\n this.showTab(tab.id);\n }\n });\n });\n }\n showTab(tabId) {\n const tab = this.tabs.get(tabId);\n if (tab && tabId !== this.activeTab) {\n let previousActiveButton = this.findBy(\".tab-button.active\");\n if (Helper_1.Helper.isNotNull(previousActiveButton)) {\n previousActiveButton.classList.remove(\"active\");\n }\n tab.button.classList.add(\"active\");\n client_1.ViewHelper.removeAllChildren(this.tabContent);\n this.tabContent.appendChild(tab.view);\n this.activeTab = tabId;\n if (this.onTabChangeListener) {\n this.onTabChangeListener(tab);\n }\n }\n }\n setOnTabChangeListener(listener) {\n this.onTabChangeListener = listener;\n }\n}\nexports.TabFragment = TabFragment;\n//# sourceMappingURL=TabFragment.js.map","module.exports = __webpack_public_path__ + \"html/tabFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst Dialog_1 = require(\"../../../Dialog/Dialog\");\nconst Translator_1 = require(\"../../../Translator\");\nconst errorIcon = require(\"../../../../img/errorIcon.png\");\nclass ErrorAction extends MenuAction_1.MenuAction {\n constructor() {\n super(\"\", () => {\n let d = new Dialog_1.Dialog(ErrorAction._errors.join(\"
\"), Translator_1.Translator.translate(\"error\"));\n d.setTranslatable(false);\n d.show();\n }, MenuAction_1.MenuAction.SHOW_ALWAYS, -1000, ErrorAction.ERROR_ICON);\n this._visible = (ErrorAction._errors.length > 0);\n this._shouldTranslate = false;\n console.log(\"icon: \", ErrorAction.ERROR_ICON);\n }\n static addError(errorMessage) {\n if (this._errors.indexOf(errorMessage) === -1) {\n this._errors.push(errorMessage);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n static removeError(errorMessage) {\n let index = this._errors.indexOf(errorMessage);\n if (index >= 0) {\n this._errors.splice(index, 1);\n this.getInstance().setVisibility((this._errors.length > 0));\n }\n }\n /**\n * @return ErrorAction;\n */\n static getInstance() {\n if (this._instance === null) {\n this._instance = new ErrorAction();\n }\n return this._instance;\n }\n}\nexports.ErrorAction = ErrorAction;\nErrorAction.ERROR_ICON = errorIcon;\nErrorAction._instance = null;\nErrorAction._errors = [];\n//# sourceMappingURL=ErrorAction.js.map","export default \"img/errorIcon.png\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartSiteMenuAction = void 0;\nconst MenuAction_1 = require(\"./MenuAction\");\nconst App_1 = require(\"../../../App\");\nclass StartSiteMenuAction extends MenuAction_1.MenuAction {\n constructor(name, site, showFor, order, icon) {\n super(name, () => {\n if (StartSiteMenuAction._app) {\n if (Array.isArray(site) && site.length >= 2) {\n StartSiteMenuAction._app.startSite(site[0], site[1]);\n }\n else {\n StartSiteMenuAction._app.startSite(site);\n }\n }\n }, showFor, order, icon);\n }\n}\nexports.StartSiteMenuAction = StartSiteMenuAction;\nStartSiteMenuAction._app = null;\nApp_1.App.addInitialization(app => {\n StartSiteMenuAction._app = app;\n});\n//# sourceMappingURL=StartSiteMenuAction.js.map","module.exports = __webpack_public_path__ + \"html/navbar.html\";","module.exports = __webpack_public_path__ + \"html/menuSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SwipeFragment = void 0;\nconst AbstractFragment_1 = require(\"../AbstractFragment\");\nconst SwipeChildFragment_1 = require(\"./SwipeChildFragment\");\nconst Helper_1 = require(\"../../Legacy/Helper\");\nconst view = require(\"../../../html/Framework/Fragment/swipeFragment.html\");\nclass SwipeFragment extends AbstractFragment_1.AbstractFragment {\n constructor(site) {\n super(site, view);\n this._activeIndex = 0;\n this._touchStart = null;\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this._view.addEventListener(\"touchstart\", e => {\n this._touchStart = e.touches[0];\n }, false);\n this._view.addEventListener(\"touchend\", e => {\n this._handleSwipe(e.changedTouches[0].clientX, e.changedTouches[0].clientY);\n this._touchStart = null;\n });\n this._view.addEventListener(\"mousedown\", e => {\n this._touchStart = e;\n }, false);\n this._view.addEventListener(\"mouseup\", e => {\n this._handleSwipe(e.clientX, e.clientY);\n this._touchStart = null;\n });\n return _super.onViewLoaded.call(this);\n });\n }\n _handleSwipe(endX, endY) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(this._touchStart)) {\n return;\n }\n let touchStart = this._touchStart;\n this._touchStart = null;\n let diffX = touchStart.clientX - endX;\n if (Math.abs(touchStart.clientY - endY) <= SwipeFragment.MAX_Y\n && Math.abs(diffX) >= SwipeFragment.MIN_X) {\n if (diffX > 0) {\n yield this._fragments[this._activeIndex].onSwipeLeft();\n }\n else {\n yield this._fragments[this._activeIndex].onSwipeRight();\n }\n }\n });\n }\n onStart(pauseArguments) {\n const _super = Object.create(null, {\n onStart: { get: () => super.onStart }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (this._activeIndex >= 0 && this._activeIndex < this._fragments.length) {\n this.setActiveFragment(this._activeIndex);\n }\n return _super.onStart.call(this, pauseArguments);\n });\n }\n setActiveFragment(index) {\n if (index instanceof SwipeChildFragment_1.SwipeChildFragment) {\n index = this._fragments.indexOf(index);\n }\n if (index >= 0 && index < this._fragments.length) {\n this._activeIndex = index;\n this._fragments.forEach((frag, i) => {\n frag.setActive(i === this._activeIndex);\n });\n }\n }\n nextFragment() {\n this.setActiveFragment((this._activeIndex + 1) % this._fragments.length);\n }\n previousFragment() {\n this.setActiveFragment((this._activeIndex + this._fragments.length - 1) % this._fragments.length);\n }\n addFragment(fragment) {\n if (fragment instanceof SwipeChildFragment_1.SwipeChildFragment) {\n fragment.setParent(this);\n return super.addFragment(\".swipe-container\", fragment);\n }\n }\n}\nexports.SwipeFragment = SwipeFragment;\nSwipeFragment.MAX_Y = 80;\nSwipeFragment.MIN_X = 150;\n//# sourceMappingURL=SwipeFragment.js.map","module.exports = __webpack_public_path__ + \"html/swipeFragment.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ButtonChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nclass ButtonChooseDialog extends Dialog_1.Dialog {\n constructor(content, title, values) {\n super(content, title);\n Object.keys(values).forEach(key => {\n this.addButton(values[key], key);\n });\n }\n}\nexports.ButtonChooseDialog = ButtonChooseDialog;\n//# sourceMappingURL=ButtonChooseDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChooseDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst ViewInflater_1 = require(\"../ViewInflater\");\nconst view = require(\"../../html/Framework/Dialog/chooseDialog.html\");\nconst Translator_1 = require(\"../Translator\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass ChooseDialog extends Dialog_1.Dialog {\n constructor(valueNames, title, translateable) {\n let viewPromise = ViewInflater_1.ViewInflater.getInstance().load(view).then(view => {\n translateable = Helper_1.Helper.nonNull(translateable, true);\n let template = view.querySelector(\"#choose-value-template\");\n template.remove();\n template.removeAttribute(\"id\");\n let templateContainer = view.querySelector(\"#choose-container\");\n for (let k in valueNames) {\n let valueElem = template.cloneNode(true);\n let textElem = null;\n if (translateable) {\n textElem = Translator_1.Translator.makePersistentTranslation(valueNames[k]);\n }\n else {\n textElem = document.createElement(\"span\");\n textElem.innerText = valueNames[k];\n }\n valueElem.querySelector(\".choose-dialog-value\").appendChild(textElem);\n valueElem[\"dataset\"][\"value\"] = k;\n valueElem.addEventListener(\"click\", () => {\n this._result = k;\n this.close();\n });\n templateContainer.appendChild(valueElem);\n }\n return view;\n });\n super(viewPromise, title);\n }\n}\nexports.ChooseDialog = ChooseDialog;\n//# sourceMappingURL=ChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfirmDialog = void 0;\nconst Dialog_1 = require(\"./Dialog\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nclass ConfirmDialog extends Dialog_1.Dialog {\n constructor(content, title, confirmButtonText, cancelButtonText) {\n super(content, title);\n this.confirmButtonText = Helper_1.Helper.nonNull(confirmButtonText, \"confirm-button\");\n this.cancelButtonText = Helper_1.Helper.nonNull(cancelButtonText, \"cancel-button\");\n }\n show() {\n const _super = Object.create(null, {\n show: { get: () => super.show }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.addButton(this.confirmButtonText, true);\n this.addButton(this.cancelButtonText, false);\n return _super.show.call(this);\n });\n }\n close() {\n if (Helper_1.Helper.isNull(this._result)) {\n this._result = false;\n }\n return super.close();\n }\n}\nexports.ConfirmDialog = ConfirmDialog;\n//# sourceMappingURL=ConfirmDialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImgChooseDialog = void 0;\nconst ElemChooseDialog_1 = require(\"./ElemChooseDialog\");\nclass ImgChooseDialog extends ElemChooseDialog_1.ElemChooseDialog {\n constructor(valueNames, title) {\n let newValueNames = {};\n Object.keys(valueNames).forEach(k => {\n let elem = document.createElement(\"img\");\n elem.src = valueNames[k];\n newValueNames[k] = elem;\n });\n super(newValueNames, title);\n }\n}\nexports.ImgChooseDialog = ImgChooseDialog;\n//# sourceMappingURL=ImgChooseDialog.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Form = void 0;\nconst DataManager_1 = require(\"../DataManager\");\nconst Helper_1 = require(\"../Legacy/Helper\");\nconst Translator_1 = require(\"../Translator\");\nconst Toast_1 = require(\"../Toast/Toast\");\nconst ImageSelectionElement_1 = require(\"./ImageSelectionElement\");\nconst js_helper_1 = require(\"js-helper\");\nclass Form {\n constructor(formElem, urlOrCallback, method, imageSelectionSelector) {\n this.imageSelectionElementReady = new js_helper_1.PromiseWithHandlers();\n this.imageSelectionElements = {};\n this.formElem = formElem;\n this._method = Helper_1.Helper.nonNull(method, formElem[\"method\"], \"POST\");\n this._elementChangeListener = null;\n this._validators = [];\n this._isBusy = false;\n if (imageSelectionSelector === undefined) {\n imageSelectionSelector = \"input.image-selection\";\n }\n if (typeof urlOrCallback === \"string\") {\n this._submitHandler = (values) => {\n if (this._method.toLowerCase() === \"get\") {\n return (DataManager_1.DataManager.load(urlOrCallback + DataManager_1.DataManager.buildQuery(values)));\n }\n else {\n //TODO, wenn Serververbindung kommt\n // return (DataManager.send(urlOrCallback, values));\n }\n };\n }\n else {\n this._submitHandler = urlOrCallback;\n }\n this._editors = [];\n this._submitCallback = null;\n this.errorCallback = (errors) => __awaiter(this, void 0, void 0, function* () {\n yield this.setErrors(errors);\n });\n formElem.addEventListener(\"submit\", function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n e.preventDefault();\n yield self.doSubmit(e);\n });\n });\n this.prepareForImageSelection(imageSelectionSelector).then(r => this.imageSelectionElementReady.resolve(r));\n let self = this;\n [...formElem.elements].forEach(element => {\n element.addEventListener(\"change\", function () {\n if (this.value.trim() !== \"\") {\n this.classList.add(\"notEmpty\");\n }\n else {\n this.classList.remove(\"notEmpty\");\n }\n this.setCustomValidity(\"\");\n if (Helper_1.Helper.isNotNull(self._elementChangeListener)) {\n self._elementChangeListener(element, this);\n }\n this.setCustomValidity(\"\");\n if (element.accept && element.accept.indexOf(\"image\") !== -1) {\n if (element.files && element.files[0]) {\n let reader = new FileReader();\n reader.onload = e => {\n const previewElem = formElem.querySelector(\".\" + element.name + \"-preview\");\n if (previewElem) {\n previewElem.src = e.target[\"result\"];\n }\n };\n reader.readAsDataURL(element.files[0]);\n }\n else {\n formElem.querySelector(\".\" + element.name + \"-preview\").src = \"\";\n }\n }\n });\n element.addEventListener(\"keydown\", function () {\n this.setCustomValidity(\"\");\n });\n });\n }\n prepareForImageSelection(imageSelectionSelector) {\n return __awaiter(this, void 0, void 0, function* () {\n yield Helper_1.Helper.asyncForEach(this.formElem.querySelectorAll(imageSelectionSelector), (imgElement) => __awaiter(this, void 0, void 0, function* () {\n let name = \"\";\n let value = \"\";\n if (imgElement instanceof HTMLInputElement) {\n name = imgElement.name;\n value = imgElement.value;\n }\n if (Helper_1.Helper.isNull(name) || name === \"\") {\n name = imgElement.dataset[\"name\"];\n }\n if (Helper_1.Helper.isNull(value) || value === \"\") {\n value = imgElement.dataset[\"value\"];\n }\n const imgSelectionElement = new ImageSelectionElement_1.ImageSelectionElement(name);\n if (value && value.trim() !== \"\") {\n try {\n yield imgSelectionElement.setValue(JSON.parse(value));\n }\n catch (e) {\n console.warn(e);\n }\n }\n this.imageSelectionElements[name] = imgSelectionElement;\n imgElement.replaceWith(yield imgSelectionElement.getView());\n }), true);\n });\n }\n setImagesForImageSelectionElement(name, images) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.imageSelectionElementReady;\n if (this.imageSelectionElements[name]) {\n this.imageSelectionElements[name].setImages(images);\n }\n });\n }\n addValidator(validatorCallback) {\n this._validators.push(validatorCallback);\n }\n onError(errorHandler) {\n this.errorCallback = errorHandler;\n }\n addEditor(e) {\n this._editors.push(e);\n }\n doSubmit(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._isBusy) {\n let res = yield this.submit();\n //TODO einbauen, wenn server dazu kommt\n // if (res[\"success\"]) {\n // if (self._submitCallback !== null) {\n // return self._submitCallback(res[\"result\"]);\n // }\n // } else if (Helper.isNotNull(self.errorCallback)) {\n // return self.errorCallback(res[\"errors\"]);\n // }\n return res;\n }\n return false;\n });\n }\n setValues(valuePromise) {\n return __awaiter(this, void 0, void 0, function* () {\n this.setIsBusy(true);\n let values = yield Promise.resolve(valuePromise);\n this.setIsBusy(false);\n for (let k in values) {\n if (Helper_1.Helper.isNotNull(this.formElem.elements[k])) {\n if (Helper_1.Helper.isNotNull(this.formElem.elements[k].options) && Helper_1.Helper.isNotNull(values[k + \"Options\"])) {\n let options = this.formElem.elements[k].options;\n for (let val in values[k + \"Options\"]) {\n let option = document.createElement(\"option\");\n option.value = val;\n option.innerText = values[k + \"Options\"][val];\n options.add(option);\n }\n }\n if (this.formElem.elements[k].type && (this.formElem.elements[k].type === \"checkbox\" || this.formElem.elements[k].type === \"radio\")) {\n this.formElem.elements[k].checked = this.formElem.elements[k].value == values[k];\n }\n else if (this.formElem.elements[k].type && this.formElem.elements[k].type === \"file\") {\n if (this.formElem.elements[k + \"-hidden\"]) {\n this.formElem.elements[k + \"-hidden\"].value = values[k];\n }\n if (this.formElem.elements[k].accept && this.formElem.elements[k].accept.indexOf(\"image\") !== -1) {\n let previewImage = this.formElem.querySelector(\".\" + k + \"-preview\");\n if (previewImage) {\n previewImage.src = values[k];\n }\n }\n }\n else {\n this.formElem.elements[k].value = Helper_1.Helper.htmlspecialcharsDecode(values[k]);\n if (this.formElem.elements[k].classList) {\n if (Helper_1.Helper.isNotNull(values[k]) && (\"\" + values[k]).trim() !== \"\") {\n this.formElem.elements[k].classList.add(\"notEmpty\");\n }\n else {\n this.formElem.elements[k].classList.remove(\"notEmpty\");\n }\n }\n }\n }\n if (Helper_1.Helper.isNotNull(this.imageSelectionElements[k])) {\n console.log(\"setImg\", k, values[k]);\n this.imageSelectionElements[k].setValue(values[k]);\n }\n }\n return this;\n });\n }\n getValues(filesToBase64) {\n return __awaiter(this, void 0, void 0, function* () {\n let valuesFormData = new FormData(this.formElem);\n let values = Array.from(valuesFormData[\"entries\"]()).reduce((memo, pair) => (Object.assign(Object.assign({}, memo), { [pair[0]]: pair[1] })), {});\n if (Helper_1.Helper.nonNull(filesToBase64, true)) {\n values = yield Form.filesToBase64(values);\n }\n return values;\n });\n }\n static filesToBase64(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let filePromises = [];\n Object.keys(values).forEach(key => {\n if (values[key] instanceof Blob) {\n filePromises.push(new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n reader.readAsDataURL(values[key]);\n }).then(base64 => values[key] = base64));\n }\n });\n yield Promise.all(filePromises);\n return values;\n });\n }\n setElementChangeListener(listener) {\n this._elementChangeListener = listener;\n }\n clearErrors() {\n Object.keys(this.formElem.elements).forEach(elemKey => {\n this.formElem.elements[elemKey].setCustomValidity(\"\");\n });\n }\n setErrors(errors) {\n let hasElem = false;\n let firstError = null;\n // let notCatchedErrors = [];\n for (let k in errors) {\n if (Helper_1.Helper.isNotNull(this.formElem.elements[k]) && this.formElem.elements[k].type !== \"hidden\"\n && Helper_1.Helper.isNull(this.formElem.elements[k].readonly) && (Helper_1.Helper.isNull(this.formElem.elements[k].disabled) || !this.formElem.elements[k].disabled)) {\n this.formElem.elements[k].setCustomValidity(Translator_1.Translator.translate(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")));\n hasElem = true;\n }\n else {\n new Toast_1.Toast(Helper_1.Helper.nonNull(errors[k], \"form-default-error\")).show();\n }\n // if (Helper.isNull(firstError)) {\n // firstError = ;\n // }\n }\n // if (!hasElem && Helper.isNotNull(firstError)) {\n // for (let k in this._formElem.elements) {\n // if (this._formElem.elements[k].type !== \"hidden\") {\n // this._formElem.elements[k].setCustomValidity(Translator.translate(firstError));\n // hasElem = true;\n // break;\n // }\n // }\n // }\n if (hasElem) {\n \"reportValidity\" in this.formElem && this.formElem.reportValidity();\n }\n }\n setIsBusy(isBusy) {\n this._isBusy = isBusy;\n if (this._isBusy) {\n this.formElem.classList.add(\"sending\");\n }\n else {\n this.formElem.classList.remove(\"sending\");\n }\n }\n submit() {\n return __awaiter(this, void 0, void 0, function* () {\n this._editors.forEach(e => e.updateSourceElement());\n this.setIsBusy(true);\n if (yield this.validate()) {\n let res = false;\n try {\n res = yield (this._submitHandler(yield this.getValues(), this));\n }\n catch (e) {\n console.error(e);\n }\n finally {\n this.setIsBusy(false);\n }\n return res;\n }\n this.setIsBusy(false);\n return false;\n });\n }\n validate() {\n return __awaiter(this, void 0, void 0, function* () {\n if (\"reportValidity\" in this.formElem && !this.formElem.reportValidity()) {\n return false;\n }\n let values = yield this.getValues();\n let res = yield Helper_1.Helper.asyncForEach(this._validators, (validator) => __awaiter(this, void 0, void 0, function* () {\n return validator(values, this);\n }), true);\n let hasErrors = false;\n let errors = {};\n res.forEach(value => {\n if (value !== true) {\n hasErrors = true;\n if (typeof value === \"object\") {\n for (let k in value) {\n errors[k] = value[k];\n }\n }\n }\n });\n if (hasErrors) {\n yield this.setErrors(errors);\n return false;\n }\n return true;\n });\n }\n onSubmit(callback) {\n this._submitCallback = callback;\n }\n getFormElement() {\n return this.formElem;\n }\n}\nexports.Form = Form;\n//# sourceMappingURL=Form.js.map","module.exports = __webpack_public_path__ + \"html/imageSelectionElement.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScaleHelper = void 0;\nconst js_helper_1 = require(\"js-helper\");\nclass ScaleHelper {\n scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n addListener = js_helper_1.Helper.nonNull(addListener, true);\n animationDelay = js_helper_1.Helper.nonNull(animationDelay, 0);\n let newFontSize = yield this._getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay === 0);\n if (animationDelay > 0) {\n yield new Promise(r => {\n setTimeout(r, animationDelay);\n fontElement.style.fontSize = newFontSize + \"px\";\n });\n }\n let self = this;\n let listener = function () {\n return new Promise(resolve => {\n let timeout = (typeof addListener === 'number') ? addListener : 255;\n setTimeout(() => {\n resolve(self.scaleTo(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animationDelay, false));\n }, timeout);\n });\n };\n if (addListener !== false) {\n window.addEventListener(\"resize\", listener);\n }\n return listener;\n });\n }\n scaleToFull(fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.scaleTo(1, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, animDelay, addListener);\n });\n }\n _getNewFontSize(scale, fontElement, container, ignoreHeight, ignoreWidth, margin, fontWeight, setFontSize) {\n return __awaiter(this, void 0, void 0, function* () {\n margin = js_helper_1.Helper.nonNull(margin, 10);\n ignoreHeight = js_helper_1.Helper.nonNull(ignoreHeight, false);\n ignoreWidth = js_helper_1.Helper.nonNull(ignoreWidth, false);\n fontWeight = js_helper_1.Helper.nonNull(fontWeight, fontElement.innerHTML.length);\n setFontSize = js_helper_1.Helper.nonNull(setFontSize, true);\n let hasNoTransitionClass = container.classList.contains(\"no-transition\");\n if (!hasNoTransitionClass) {\n container.classList.add(\"no-transition\");\n }\n const numChanged = 5;\n let oldDiffIndex = 0;\n let oldDiff = [];\n for (let i = 0; i < numChanged; i++) {\n oldDiff.push(0);\n }\n let beforeFontSize = fontElement.style.fontSize;\n let currentFontSize = 1;\n let widthDiff = 0;\n let heightDiff = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n do {\n currentFontSize += oldDiff[oldDiffIndex] / (fontWeight + 1);\n fontElement.style.fontSize = currentFontSize + 'px';\n let containerStyle = window.getComputedStyle(container);\n containerWidth = parseFloat(containerStyle.getPropertyValue(\"width\").replace('px', ''));\n containerHeight = parseFloat(containerStyle.getPropertyValue(\"height\").replace('px', ''));\n widthDiff = containerWidth - fontElement.offsetWidth;\n heightDiff = containerHeight - fontElement.offsetHeight;\n oldDiffIndex = (oldDiffIndex + 1) % numChanged;\n let newDiff = (ignoreWidth ? heightDiff : (ignoreHeight ? widthDiff : Math.min(widthDiff, heightDiff)));\n if (newDiff === oldDiff[(oldDiffIndex + 1) % numChanged]) {\n break;\n }\n oldDiff[oldDiffIndex] = newDiff;\n } while ((widthDiff > (1 - scale) * containerWidth || ignoreWidth) && (heightDiff > (1 - scale) * containerHeight || ignoreHeight));\n currentFontSize -= margin;\n fontElement.style.fontSize = ((setFontSize) ? currentFontSize + \"px\" : beforeFontSize);\n if (!hasNoTransitionClass) {\n yield new Promise((r) => {\n setTimeout(r, 50);\n });\n container.classList.remove(\"no-transition\");\n }\n return currentFontSize;\n });\n }\n}\nexports.ScaleHelper = ScaleHelper;\n//# sourceMappingURL=ScaleHelper.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseHelper = void 0;\nconst Helper_1 = require(\"./Legacy/Helper\");\nclass PromiseHelper {\n static delay(milliseconds) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(r => {\n setTimeout(r, milliseconds);\n });\n });\n }\n static tryMultipleTimes(func, times, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n times = Helper_1.Helper.nonNull(times, 5);\n delay = Helper_1.Helper.nonNull(delay, 50);\n for (let i = 0; i < times; i++) {\n let res = yield func();\n if (res !== undefined) {\n return res;\n }\n else {\n yield PromiseHelper.delay(delay);\n }\n }\n return undefined;\n });\n }\n static tryUntilTimeout(func, timeout, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n timeout = Helper_1.Helper.nonNull(timeout, 500);\n delay = Helper_1.Helper.nonNull(delay, 50);\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n let shouldRun = true;\n PromiseHelper.delay(timeout).then(() => {\n reject(new Error(\"timeout\"));\n shouldRun = false;\n });\n while (shouldRun) {\n let res = yield func();\n if (res !== undefined) {\n resolve(res);\n break;\n }\n yield PromiseHelper.delay(delay);\n }\n }));\n });\n }\n}\nexports.PromiseHelper = PromiseHelper;\n//# sourceMappingURL=PromiseHelper.js.map","module.exports = __webpack_public_path__ + \"html/shareDialog.html\";","module.exports = __webpack_public_path__ + \"html/loginSite.html\";","module.exports = __webpack_public_path__ + \"html/forgotPasswordSite.html\";","module.exports = __webpack_public_path__ + \"html/notAllowedSite.html\";","module.exports = __webpack_public_path__ + \"html/selectUserDialog.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OfflineUserManager = void 0;\nconst client_1 = require(\"cordova-sites-easy-sync/dist/client\");\nconst client_2 = require(\"cordova-sites/dist/client\");\nconst UserManager_1 = require(\"./UserManager\");\nconst Role_1 = require(\"../../shared/v1/model/Role\");\nconst User_1 = require(\"../../shared/v1/model/User\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nclass OfflineUserManager extends UserManager_1.UserManager {\n constructor() {\n super();\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n }\n _doGetMe() {\n return __awaiter(this, void 0, void 0, function* () {\n let userId = yield client_2.NativeStoragePromise.getItem(\"user-manager-user-id\");\n if (Helper_1.Helper.isNotNull(userId)) {\n let user = yield User_1.User.findById(userId, User_1.User.getRelations());\n if (Helper_1.Helper.isNotNull(user) && user.activated && !user.blocked) {\n yield this._handleLoginFromUser(user);\n }\n }\n return this._userData;\n });\n }\n _handleLoginFromUser(user) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = [];\n let roles = user.roles;\n let roleIds = [];\n roles.forEach(role => {\n roleIds.push(role.id);\n });\n roles = yield Role_1.Role.findByIds(roleIds, [\"accesses\"]);\n yield Helper_1.Helper.asyncForEach(roles, (role) => __awaiter(this, void 0, void 0, function* () {\n accesses.push(...yield this._getAccessesFromRole(role));\n }));\n let accessNames = [];\n accesses.forEach(access => {\n accessNames.push(access.name);\n });\n this._userData = {\n id: user.id,\n loggedIn: true,\n online: true,\n username: user.username,\n email: user.email,\n accesses: accessNames,\n };\n });\n }\n _doLogin(email, password, saveLogin) {\n return __awaiter(this, void 0, void 0, function* () {\n let user = yield User_1.User.findOne({\n \"email\": email,\n \"password\": this._hashPassword(password),\n \"activated\": true,\n \"blocked\": false,\n }, undefined, undefined, User_1.User.getRelations());\n if (user) {\n yield this._handleLoginFromUser(user);\n if (saveLogin) {\n yield client_2.NativeStoragePromise.setItem(\"user-manager-user-id\", user.id);\n }\n return true;\n }\n return false;\n });\n }\n _doLogout() {\n return __awaiter(this, void 0, void 0, function* () {\n this._userData = {\n id: null,\n loggedIn: false,\n online: true,\n username: null,\n email: null,\n accesses: OfflineUserManager.LOGGED_OUT_ACCESSES,\n };\n yield client_2.NativeStoragePromise.remove(\"user-manager-user-id\");\n return false;\n });\n }\n _getAccessesFromRole(role) {\n return __awaiter(this, void 0, void 0, function* () {\n let accesses = role.accesses;\n let repo = yield client_1.EasySyncClientDb.getInstance()._getRepository(Role_1.Role.getSchemaName());\n let parents = yield repo.createQueryBuilder(Role_1.Role.getSchemaName())\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.accesses', \"access\")\n .leftJoinAndSelect(Role_1.Role.getSchemaName() + '.children', \"child\")\n .where('child.id = :id', { id: role.id })\n .getMany();\n yield Helper_1.Helper.asyncForEach(parents, (role) => __awaiter(this, void 0, void 0, function* () {\n let otherAccesses = yield this._getAccessesFromRole(role);\n accesses.push(...otherAccesses);\n }));\n return accesses;\n });\n }\n _doRegister(email, username, password) {\n return __awaiter(this, void 0, void 0, function* () {\n let errors = {};\n let users = yield Promise.all([\n User_1.User.findOne({ \"email\": email }),\n User_1.User.findOne({ \"username\": username }),\n ]);\n if (Helper_1.Helper.isNotNull(users[0])) {\n errors[\"email\"] = \"email is already in use.\";\n }\n if (Helper_1.Helper.isNotNull(users[1])) {\n errors[\"username\"] = \"username is already in use.\";\n }\n if (Object.keys(errors).length > 0) {\n return errors;\n }\n let user = new User_1.User();\n user.id = yield OfflineUserManager._getNewId();\n user.email = email;\n user.password = this._hashPassword(password);\n user.username = username;\n user.roles = OfflineUserManager.DEFAULT_ROLES;\n user.activated = true;\n yield user.save();\n // user.roles\n yield this.login(email, password);\n return user;\n });\n }\n static _getNewId() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Helper_1.Helper.isNull(OfflineUserManager._lastId)) {\n let user = yield User_1.User.findOne(undefined, { \"id\": \"DESC\" });\n OfflineUserManager._lastId = user.id;\n }\n OfflineUserManager._lastId++;\n return OfflineUserManager._lastId;\n });\n }\n _hashPassword(pw) {\n return pw;\n }\n}\nexports.OfflineUserManager = OfflineUserManager;\nOfflineUserManager.LOGGED_OUT_ACCESSES = UserManager_1.UserManager.OFFLINE_ACCESSES;\nOfflineUserManager.DEFAULT_ROLES = [];\nOfflineUserManager._lastId = null;\n//# sourceMappingURL=OfflineUserManager.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SyncJob_old = void 0;\nconst LastSyncDates_1 = require(\"./LastSyncDates\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst shared_1 = require(\"js-helper/dist/shared\");\nconst EasySyncClientDb_1 = require(\"./EasySyncClientDb\");\nconst typeorm = require(\"typeorm\");\nconst EasySyncPartialModel_1 = require(\"../shared/EasySyncPartialModel\");\nconst EasySyncBaseModel_1 = require(\"../shared/EasySyncBaseModel\");\nconst ClientFileMedium_1 = require(\"./ClientFileMedium\");\nclass SyncJob_old {\n constructor() {\n this._syncedModels = {};\n this._modelNames = [];\n this._relationshipModels = {};\n this._lastSyncDates = {};\n this._keyedModelClasses = {};\n this._savePromises = [];\n }\n syncInBackgroundIfDataExists(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let copiedQuery = shared_1.JsonHelper.deepCopy(queries);\n let requestQueries = this._buildRequestQuery(copiedQuery);\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n this._syncPromise = this.sync(queries);\n if (Object[\"values\"](this._lastSyncDates).some(lastSync => {\n return lastSync[\"getLastSynced\"]() === 0;\n })) {\n yield this._syncPromise;\n }\n });\n }\n getSyncPromise() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._syncPromise;\n });\n }\n sync(queries) {\n return __awaiter(this, void 0, void 0, function* () {\n this._keyedModelClasses = EasySyncClientDb_1.EasySyncClientDb.getModel();\n let requestQueries = this._buildRequestQuery(queries);\n if (shared_1.Helper.isNull(this._lastSyncDates)) {\n this._lastSyncDates = yield this._getLastSyncModels(this._modelNames, requestQueries);\n }\n let saveResults = yield this._doRuns(requestQueries);\n yield this._handleRelations();\n //Save new lastSync models\n let lastSyncPromises = [];\n Object.keys(this._lastSyncDates).forEach(model => {\n lastSyncPromises.push(this._lastSyncDates[model].save());\n });\n yield Promise.all(lastSyncPromises);\n //Calculate final result and give it back\n let finalRes = {};\n saveResults.forEach(res => {\n if (res) {\n if (!finalRes[res.model]) {\n finalRes[res.model] = {\n \"deleted\": [],\n \"changed\": []\n };\n }\n if (res.deleted) {\n finalRes[res.model][\"deleted\"] = finalRes[res.model][\"deleted\"].concat(res.entities);\n }\n else {\n finalRes[res.model][\"changed\"] = finalRes[res.model][\"changed\"].concat(res.entities);\n }\n }\n });\n if (finalRes[\"FileMedium\"] && finalRes[\"FileMedium\"][\"changed\"]) {\n yield ClientFileMedium_1.ClientFileMedium._handleImages(finalRes[\"FileMedium\"][\"changed\"]);\n }\n return finalRes;\n });\n }\n _doRuns(requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Initialize some variables\n let newLastSynced = null;\n let response = null;\n let offset = 0;\n let shouldAskAgain = false;\n //Ask for next run until no more runs needed\n do {\n shouldAskAgain = false;\n response = yield SyncJob_old._fetchModel(requestQueries, offset);\n offset = response[\"nextOffset\"];\n //Update newLastSynced\n if (shared_1.Helper.isNull(newLastSynced)) {\n newLastSynced = parseInt(response[\"newLastSynced\"]);\n Object.keys(this._lastSyncDates).forEach(key => {\n this._lastSyncDates[key].setLastSynced(newLastSynced);\n });\n }\n //create new request query\n let newRequestQueries = [];\n response.results.forEach((res, i) => {\n if (this._extractEntities(res)) {\n shouldAskAgain = true;\n newRequestQueries.push(requestQueries[i]);\n }\n });\n requestQueries = newRequestQueries;\n } while (shouldAskAgain);\n return Promise.all(this._savePromises);\n });\n }\n _handleRelations() {\n return __awaiter(this, void 0, void 0, function* () {\n let mergedRelations = {};\n let relationPromises = [];\n Object.keys(this._relationshipModels).forEach(modelClassName => {\n let relationDefinitions = this._keyedModelClasses[modelClassName].getRelationDefinitions();\n Object.keys(this._relationshipModels[modelClassName]).forEach(id => {\n let entity = this._relationshipModels[modelClassName][id][\"entity\"];\n let relations = this._relationshipModels[modelClassName][id][\"relations\"];\n let entityRelationPromises = [];\n Object.keys(relations).forEach(relation => {\n //foreach relation load other models and save them here\n let valuePromise = this._handleSingleRelation(relationDefinitions, relation, relations, mergedRelations, entity);\n entityRelationPromises.push(valuePromise.then(value => {\n entity[relation] = value;\n }));\n });\n //Save after all relationships has been set\n relationPromises.push(Promise.all(entityRelationPromises).then(() => {\n return entity.save(true);\n }));\n });\n });\n //Wait for relation-promises\n yield Promise.all(relationPromises);\n yield shared_1.Helper.asyncForEach(Object.keys(mergedRelations), (model) => __awaiter(this, void 0, void 0, function* () {\n let entities = shared_1.Helper.arrayToObject(yield this._keyedModelClasses[model].findByIds(Object.keys(mergedRelations[model]), this._keyedModelClasses[model].getRelations()), e => e.id);\n Object.keys(mergedRelations[model]).forEach(id => {\n if (entities[id]) {\n Object.keys(mergedRelations[model][id]).forEach(relation => {\n if (Array.isArray(mergedRelations[model][id][relation])) {\n entities[id][relation] = shared_1.Helper.nonNull(entities[id][relation], []);\n entities[id][relation].push.apply(entities[id][relation], mergedRelations[model][id][relation]);\n }\n else {\n entities[id][relation] = mergedRelations[model][id][relation];\n }\n });\n }\n });\n yield EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(Object.values(entities));\n }), true);\n });\n }\n _handleSingleRelation(relationDefinitions, relationName, relations, mergedRelations, entity) {\n let valuePromise = Promise.resolve(undefined);\n let target = relationDefinitions[relationName][\"target\"];\n let shouldSync = (relationDefinitions[relationName].sync !== false);\n //is relation a *-to-many relation?\n if (Array.isArray(relations[relationName])) {\n if (shouldSync || relations[relationName].every(id => !shared_1.Helper.isSet(this._syncedModels, target, id))) {\n valuePromise = this._keyedModelClasses[target].findByIds(relations[relationName]);\n }\n else {\n let targetRelationDefinition = this._keyedModelClasses[target].getRelationDefinitions()[relationDefinitions[relationName][\"inverseSide\"]];\n relations[relationName].filter(id => !shared_1.Helper.isSet(this._relationshipModels, target, id)).forEach(id => {\n mergedRelations[target] = shared_1.Helper.nonNull(mergedRelations[target], {});\n mergedRelations[target][id] = shared_1.Helper.nonNull(mergedRelations[target][id], {});\n let otherRelationValue = null;\n if (targetRelationDefinition.type === \"many-to-many\" || targetRelationDefinition.type === \"one-to-many\") {\n otherRelationValue = shared_1.Helper.nonNull(mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]], []);\n otherRelationValue.push(entity);\n }\n else {\n otherRelationValue = entity;\n }\n mergedRelations[target][id][relationDefinitions[relationName][\"inverseSide\"]] = otherRelationValue;\n });\n }\n }\n else if (shouldSync || !shared_1.Helper.isSet(this._syncedModels, target, relations[relationName])) {\n valuePromise = this._keyedModelClasses[target].findById(relations[relationName]);\n }\n return valuePromise;\n }\n /**\n * Extract the Entities and saves them(?) for one model\n *\n * @param modelRes\n * @private\n */\n _extractEntities(modelRes) {\n if (!modelRes) {\n return false;\n }\n let shouldAskAgain = false;\n let modelClass = this._keyedModelClasses[modelRes[\"model\"]];\n let modelName = modelClass.getSchemaName();\n let deletedModelsIds = [];\n let changedModels = [];\n //split result into deleted and changed/new entities\n modelRes[\"entities\"].forEach(entity => {\n if (entity.deleted) {\n deletedModelsIds.push(entity.id);\n }\n else {\n changedModels.push(entity);\n }\n });\n this._syncedModels[modelName] = shared_1.Helper.nonNull(this._syncedModels[modelName], {});\n //convert json to entity and save it\n this._savePromises.push(modelClass._fromJson(changedModels).then((changedEntities) => __awaiter(this, void 0, void 0, function* () {\n let relations = modelClass.getRelationDefinitions();\n let newIds = [];\n changedEntities.forEach(entity => {\n this._syncedModels[modelName][entity.id] = entity;\n newIds.push(entity.id);\n Object.keys(relations).forEach(relation => {\n if (entity[relation]) {\n this._addRelation(modelName, entity, relation);\n //clear relation\n entity[relation] = null;\n }\n });\n });\n //Handle partial Models (different ids on client than server)\n if (modelClass.prototype instanceof EasySyncPartialModel_1.EasySyncPartialModel) {\n let oldObjects = yield modelClass.findByIds(newIds);\n let keyedEntities = shared_1.Helper.arrayToObject(changedEntities, changedEntities => changedEntities.id);\n oldObjects.forEach(old => {\n keyedEntities[old.id].clientId = old.clientId;\n });\n }\n return EasySyncClientDb_1.EasySyncClientDb.getInstance().saveEntity(changedEntities).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": false\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n });\n })));\n //Deletion of the entities\n this._savePromises.push(EasySyncClientDb_1.EasySyncClientDb.getInstance().deleteEntity(deletedModelsIds, modelClass).then(res => {\n return {\n \"model\": modelName,\n \"entities\": res,\n \"deleted\": true\n };\n }).catch(e => {\n console.error(e);\n return Promise.reject(e);\n }));\n if (modelRes.shouldAskAgain) {\n shouldAskAgain = true;\n }\n return shouldAskAgain;\n }\n _buildRequestQuery(queries) {\n let requestQueries = [];\n //initializing query\n queries.forEach(query => {\n if (query.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel) {\n query = {\n model: query,\n where: {}\n };\n }\n query.model = query.model.getSchemaName();\n this._modelNames.push(query.model);\n requestQueries.push(query);\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNotNull(this._lastSyncDates[key])) {\n query[\"lastSynced\"] = this._lastSyncDates[key].getLastSynced();\n }\n });\n return requestQueries;\n }\n _getLastSyncModels(modelNames, requestQueries) {\n return __awaiter(this, void 0, void 0, function* () {\n //Load syncModels\n let lastSyncModelsArray = yield LastSyncDates_1.LastSyncDates.find({\n \"model\": typeorm.In(modelNames)\n });\n let lastSyncDates = shared_1.Helper.arrayToObject(lastSyncModelsArray, model => \"\" + model.getModel() + JSON.stringify(model.where));\n requestQueries.forEach(query => {\n let key = \"\" + query.model + JSON.stringify(query.where);\n if (shared_1.Helper.isNull(lastSyncDates[key])) {\n let lastSyncDate = new LastSyncDates_1.LastSyncDates();\n lastSyncDate.setModel(query.model);\n lastSyncDate.where = query.where;\n lastSyncDate.setLastSynced(0);\n lastSyncDates[key] = lastSyncDate;\n }\n query[\"lastSynced\"] = lastSyncDates[key].getLastSynced();\n });\n return lastSyncDates;\n });\n }\n _addRelation(modelName, entity, relation) {\n this._relationshipModels[modelName] = shared_1.Helper.nonNull(this._relationshipModels[modelName], {});\n this._relationshipModels[modelName][entity.id] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id], {});\n this._relationshipModels[modelName][entity.id][\"entity\"] = entity;\n this._relationshipModels[modelName][entity.id][\"relations\"] = shared_1.Helper.nonNull(this._relationshipModels[modelName][entity.id][\"relations\"], {});\n this._relationshipModels[modelName][entity.id][\"relations\"][relation] = entity[relation];\n return this._relationshipModels;\n }\n static _fetchModel(query, offset) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield client_1.DataManager.load(SyncJob_old.SYNC_PATH_PREFIX +\n client_1.DataManager.buildQuery({\n \"queries\": JSON.stringify(query),\n \"offset\": offset\n }));\n });\n }\n}\nexports.SyncJob_old = SyncJob_old;\nSyncJob_old.SYNC_PATH_PREFIX = \"sync\";\n//# sourceMappingURL=SyncJob_old.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ModifyEntitySite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst Form_1 = require(\"cordova-sites/dist/client/js/Form\");\nconst js_helper_1 = require(\"js-helper\");\nconst EasySyncBaseModel_1 = require(\"../../shared/EasySyncBaseModel\");\nclass ModifyEntitySite extends MenuSite_1.MenuSite {\n constructor(siteManager, view, model, menuTemplate) {\n super(siteManager, view, menuTemplate);\n this._formSelector = \".entity-form\";\n this._ckEditorConfig = {\n \".editor\": {\n toolbar: ['bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote'],\n removePlugins: [\"Heading\", \"Image\", \"ImageCaption\", \"ImageStyle\", \"ImageToolbar\", \"ImageUpload\", \"Table\", \"TableToolbar\", \"MediaEmbed\", \"CKFinderUploadAdapter\"],\n language: \"de\"\n }\n };\n this._entity = null;\n this._model = model;\n }\n getEntityFromParameters(constructParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(this._model.prototype instanceof EasySyncBaseModel_1.EasySyncBaseModel)) {\n throw {\n \"error\": \"wrong class given! Expected EasySyncBaseModel, given \" + this._model.name\n };\n }\n let entity = null;\n if (js_helper_1.Helper.isSet(constructParameters, \"id\")) {\n entity = this._model.findById(constructParameters[\"id\"], this._model.getRelations());\n }\n if (js_helper_1.Helper.isNull(entity)) {\n entity = new this._model();\n }\n return entity;\n });\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let entity = yield this.getEntityFromParameters(constructParameters);\n if (entity !== null) {\n this.setEntity(entity);\n }\n return res;\n });\n }\n setEntity(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n this._entity = entity;\n yield this._viewLoadedPromise;\n let values = yield this.dehydrate(this._entity);\n if (js_helper_1.Helper.isNotNull(values)) {\n yield this._form.setValues(values);\n }\n });\n }\n hydrate(values, entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(values, column)) {\n entity[column] = values[column];\n }\n });\n return entity;\n });\n }\n dehydrate(entity) {\n return __awaiter(this, void 0, void 0, function* () {\n let values = {};\n let schemaDefinition = entity.constructor.getSchemaDefinition();\n Object.keys(schemaDefinition.columns).forEach(column => {\n if (js_helper_1.Helper.isSet(entity, column)) {\n values[column] = entity[column];\n }\n });\n return values;\n });\n }\n validate(values, form) {\n return __awaiter(this, void 0, void 0, function* () {\n return true;\n });\n }\n saveListener() {\n this.finish();\n }\n save(values) {\n return __awaiter(this, void 0, void 0, function* () {\n let entity = yield this.hydrate(values, this._entity);\n yield entity.save();\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this._form = new Form_1.Form(this.findBy(this._formSelector), (values) => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n try {\n yield this.save(values);\n this.saveListener();\n }\n catch (e) {\n console.error(e);\n this._form.setErrors({ \"error\": e.message });\n }\n finally {\n this.removeLoadingSymbol();\n }\n }));\n if (js_helper_1.Helper.isNotNull(window[\"CKEditor\"])) {\n Object.keys(this._ckEditorConfig).forEach(selector => {\n this.findBy(selector, true).forEach((e) => __awaiter(this, void 0, void 0, function* () {\n this._form.addEditor(yield CKEditor.create(e, this._ckEditorConfig[selector]));\n }));\n });\n }\n this._form.addValidator((values) => __awaiter(this, void 0, void 0, function* () {\n return yield this.validate(values, this._form);\n }));\n return res;\n });\n }\n}\nexports.ModifyEntitySite = ModifyEntitySite;\n//# sourceMappingURL=ModifyEntitySite.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetupEasySync1000000000500 = void 0;\nconst typeorm_1 = require(\"typeorm\");\nconst cordova_sites_database_1 = require(\"cordova-sites-database/dist/cordova-sites-database\");\nclass SetupEasySync1000000000500 {\n up(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n yield queryRunner.dropTable(\"last_sync_dates\", true);\n yield this._addLastSyncDates(queryRunner);\n });\n }\n _addLastSyncDates(queryRunner) {\n return __awaiter(this, void 0, void 0, function* () {\n let lastSyncDatesTable = new typeorm_1.Table({\n name: \"last_sync_dates\",\n columns: [\n {\n name: \"id\",\n type: \"Integer\",\n isPrimary: true,\n isGenerated: true,\n generationStrategy: \"increment\",\n },\n {\n name: \"model\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.STRING,\n isNullable: true\n },\n {\n name: \"lastSynced\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.DATE,\n isNullable: true\n },\n {\n name: \"where\",\n type: cordova_sites_database_1.BaseDatabase.TYPES.TEXT,\n }\n ]\n });\n return yield queryRunner.createTable(lastSyncDatesTable, true);\n });\n }\n down(queryRunner) {\n return undefined;\n }\n}\nexports.SetupEasySync1000000000500 = SetupEasySync1000000000500;\n//# sourceMappingURL=SetupEasySync.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChangeUserSite = void 0;\nconst MenuSite_1 = require(\"cordova-sites/dist/client/js/Context/MenuSite\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst Helper_1 = require(\"js-helper/dist/shared/Helper\");\nconst DataManager_1 = require(\"cordova-sites/dist/client/js/DataManager\");\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst ViewHelper_1 = require(\"js-helper/dist/client/ViewHelper\");\nconst UserMenuAction_1 = require(\"../MenuAction/UserMenuAction\");\nconst LoginSite_1 = require(\"./LoginSite\");\nconst SelectUserDialog_1 = require(\"../Dialog/SelectUserDialog\");\nconst view = require(\"./../../html/sites/changeUserSite.html\");\nclass ChangeUserSite extends MenuSite_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, ChangeUserSite.ACCESS));\n }\n onConstruct(constructParameters) {\n const _super = Object.create(null, {\n onConstruct: { get: () => super.onConstruct }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onConstruct.call(this, constructParameters);\n let data;\n if (Helper_1.Helper.isSet(constructParameters, \"id\")) {\n data = yield DataManager_1.DataManager.load(ChangeUserSite.LOAD_USER_INFOS_URL + DataManager_1.DataManager.buildQuery({ id: constructParameters[\"id\"] }));\n }\n if (!data || data.success !== true) {\n new client_1.Toast(data.message).show();\n this.finish();\n }\n this._roles = data.roles;\n this._userData = data.userData;\n return res;\n });\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n this.findBy(\"#username\").innerText = this._userData.username;\n this._hasRoleContainer = this.findBy(\"#has-role-container\");\n this._availableRoleContainer = this.findBy(\"#available-role-container\");\n this._hasRoleTemplate = this.findBy(\"#has-role-template\");\n this._availableRoleTemplate = this.findBy(\"#available-role-template\");\n this._hasRoleTemplate.removeAttribute(\"id\");\n this._availableRoleTemplate.removeAttribute(\"id\");\n this._hasRoleTemplate.remove();\n this._availableRoleTemplate.remove();\n this.updateRoles();\n return res;\n });\n }\n updateRoles() {\n let userRoles = [];\n let availableRoles = [];\n this._roles.forEach(role => {\n if (this._userData.roleIds.indexOf(role.id) !== -1) {\n userRoles.push(role);\n }\n else {\n availableRoles.push(role);\n }\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._hasRoleContainer);\n userRoles.forEach((role, i) => {\n let elem = this._hasRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".remove-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: false\n });\n if (res.success) {\n this._userData.roleIds.splice(this._userData.roleIds.indexOf(role.id), 1);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._hasRoleContainer.appendChild(elem);\n });\n ViewHelper_1.ViewHelper.removeAllChildren(this._availableRoleContainer);\n availableRoles.forEach(role => {\n let elem = this._availableRoleTemplate.cloneNode(true);\n elem.querySelector(\".role-name\").innerText = role.name;\n elem.querySelector(\".add-role\").addEventListener(\"click\", () => __awaiter(this, void 0, void 0, function* () {\n this.showLoadingSymbol();\n let res = yield DataManager_1.DataManager.send(ChangeUserSite.CHANGE_USER_ROLE_URL, {\n id: this._userData.id,\n roleId: role.id,\n addRole: true\n });\n if (res.success) {\n this._userData.roleIds.push(role.id);\n this.updateRoles();\n }\n this.removeLoadingSymbol();\n }));\n this._availableRoleContainer.appendChild(elem);\n });\n }\n}\nexports.ChangeUserSite = ChangeUserSite;\nChangeUserSite.ACCESS = \"admin\";\nChangeUserSite.LOAD_USER_INFOS_URL = \"/user/userRoles\";\nChangeUserSite.CHANGE_USER_ROLE_URL = \"/user/changeUserRole\";\nChangeUserSite.ADD_CHANGE_USER_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (ChangeUserSite.ADD_CHANGE_USER_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new UserMenuAction_1.UserMenuAction(\"change user\", ChangeUserSite.ACCESS, () => __awaiter(void 0, void 0, void 0, function* () {\n let user = yield new SelectUserDialog_1.SelectUserDialog().show();\n yield app.startSite(ChangeUserSite, { \"id\": user[\"id\"] });\n })));\n }\n app.addDeepLink(\"login\", LoginSite_1.LoginSite);\n});\n//# sourceMappingURL=ChangeUserSite.js.map","module.exports = __webpack_public_path__ + \"html/changeUserSite.html\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RegistrationSite = void 0;\nconst client_1 = require(\"cordova-sites/dist/client\");\nconst view = require(\"./../../html/sites/registrationSite.html\");\nconst UserSite_1 = require(\"../Context/UserSite\");\nconst StartUserSiteMenuAction_1 = require(\"../MenuAction/StartUserSiteMenuAction\");\nconst UserManager_1 = require(\"../UserManager\");\nconst User_1 = require(\"../../../shared/v1/model/User\");\nclass RegistrationSite extends client_1.MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n this.addDelegate(new UserSite_1.UserSite(this, RegistrationSite.ACCESS));\n }\n onViewLoaded() {\n const _super = Object.create(null, {\n onViewLoaded: { get: () => super.onViewLoaded }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let res = _super.onViewLoaded.call(this);\n let form = new client_1.Form(this.findBy(\"#registration-form\"), (data) => __awaiter(this, void 0, void 0, function* () {\n let result = yield UserManager_1.UserManager.getInstance().register(data[\"email\"], data[\"username\"], data[\"password\"]);\n if ((result instanceof User_1.User) || result === true) {\n yield new client_1.Toast(\"registration successful\").show();\n yield this.finish();\n }\n else {\n yield form.setErrors(result);\n }\n }));\n form.addValidator(data => {\n if (data[\"password\"] !== data[\"password2\"]) {\n return {\n \"password2\": \"the passwords do not match.\"\n };\n }\n return true;\n });\n // let listener = () => form.clearErrors();\n // this.findBy(\"#login-form [name=email]\").addEventListener(\"keydown\", listener);\n // this.findBy(\"#login-form [name=password]\").addEventListener(\"keydown\", listener);\n return res;\n });\n }\n}\nexports.RegistrationSite = RegistrationSite;\nRegistrationSite.ACCESS = \"loggedOut\";\nRegistrationSite.ADD_REGISTRATION_ACTION = true;\nclient_1.App.addInitialization(app => {\n if (RegistrationSite.ADD_REGISTRATION_ACTION) {\n client_1.NavbarFragment.defaultActions.push(new StartUserSiteMenuAction_1.StartUserSiteMenuAction(\"registration\", RegistrationSite.ACCESS, RegistrationSite));\n }\n app.addDeepLink(\"registration\", RegistrationSite);\n});\n//# sourceMappingURL=RegistrationSite.js.map","module.exports = __webpack_public_path__ + \"html/registrationSite.html\";","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncModel = void 0;\nconst AccessEasySyncModel_1 = require(\"./AccessEasySyncModel\");\nconst User_1 = require(\"./User\");\nclass UserSyncModel extends AccessEasySyncModel_1.AccessEasySyncModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncModel = UserSyncModel;\nUserSyncModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncModel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserSyncPartialModel = void 0;\nconst shared_1 = require(\"cordova-sites-easy-sync/dist/shared\");\nconst User_1 = require(\"./User\");\nclass UserSyncPartialModel extends shared_1.EasySyncPartialModel {\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"user\"] = {\n target: User_1.User.getSchemaName(),\n type: \"many-to-one\",\n // joinColumn: {\n // name: \"userId\"\n // },\n cascade: false,\n nullable: !this.NEED_USER\n };\n return relations;\n }\n}\nexports.UserSyncPartialModel = UserSyncPartialModel;\nUserSyncPartialModel.NEED_USER = false;\n//# sourceMappingURL=UserSyncPartialModel.js.map","export default \"img/settings.png\";","module.exports = __webpack_public_path__ + \"html/menu.html\";","module.exports = __webpack_public_path__ + \"html/level.html\";","export default \"img/single_coin_fall_on_concrete_.mp3\";","module.exports = __webpack_public_path__ + \"html/end.html\";","module.exports = __webpack_public_path__ + \"html/settingsSite.html\";","module.exports = __webpack_public_path__ + \"html/tutorialSite.html\";","module.exports = __webpack_public_path__ + \"html/settings.html\";","module.exports = __webpack_public_path__ + \"html/credits.html\";","module.exports = __webpack_public_path__ + \"html/privacyPolicy.html\";","module.exports = __webpack_public_path__ + \"html/impressum.html\";","module.exports = __webpack_public_path__ + \"html/contactSite.html\";","export default __webpack_public_path__ + \"index.css\";","import {AccessEasySyncModel} from \"cordova-sites-user-management/dist/shared\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\n\nexport class LevelData extends AccessEasySyncModel{\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"words\"] = BaseDatabase.TYPES.STRING;\n columns[\"positions\"] = BaseDatabase.TYPES.STRING;\n columns[\"renderer\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"lang\"] = BaseDatabase.TYPES.INTEGER;\n columns[\"difficulty\"] = BaseDatabase.TYPES.INTEGER;\n return columns;\n }\n\n static async getNextLevelData(renderer){\n debugger;\n }\n}\nBaseDatabase.addModel(LevelData);","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelData} from \"../../LevelData\";\n\nexport class Setup1000000002000 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelData, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","import {Helper} from \"js-helper/dist/shared/Helper\";\n\nexport class TemplateContainer{\n constructor(leafTemplate, parentTemplate, rowTemplate, triangleTemplate, columnTemplate){\n this.leafTemplate = leafTemplate;\n this.parentTemplate = parentTemplate;\n this.rowTemplate = rowTemplate;\n this.triangleTemplate = triangleTemplate;\n this.columnTemplate = columnTemplate;\n }\n\n copyLeafTemplate()\n {\n return this.leafTemplate.cloneNode(true);\n }\n\n copyParentTemplate()\n {\n return this.parentTemplate.cloneNode(true);\n }\n\n copyRowTemplate()\n {\n return this.rowTemplate.cloneNode(true);\n }\n\n copyTriangleTemplate()\n {\n return this.triangleTemplate.cloneNode(true);\n }\n\n copyColumnTemplate(){\n return this.columnTemplate.cloneNode(true);\n }\n}","\nexport class Segment{\n constructor(element){\n this.rotation = 0;\n this.element = element;\n this.parent = null;\n }\n\n getCurrentRotations(rotations){\n return rotations;\n }\n\n sameAs(otherSegment){\n return false;\n }\n\n setParent(parent)\n {\n this.parent = parent;\n }\n \n getLevel()\n {\n if (this.parent!==null)\n {\n return this.parent.getLevel();\n }\n }\n\n canRotate(){\n return false;\n }\n\n isSolved(){\n return (this.rotation === 0);\n }\n \n async rotate(){\n return Promise.resolve();\n };\n\n _updateElement(){};\n\n applyRotations(rotations){\n return rotations;\n }\n\n applyLocks(locks)\n {\n return locks;\n }\n\n getCurrentLocked(lockedArray){\n return lockedArray;\n }\n\n getElement()\n {\n return this.element;\n }\n}\n","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class LeafSegment extends Segment {\n\n constructor(element, leaf) {\n super(element);\n this.leaf = 'A';\n if (Helper.isNotNull(leaf)) {\n this.setLeaf(leaf);\n }\n }\n\n sameAs(otherSegment) {\n // debugger;\n return (otherSegment instanceof LeafSegment && otherSegment.leaf === this.leaf);\n }\n\n setLeaf(leaf) {\n this.leaf = leaf;\n }\n\n _updateElement() {\n ViewHelper.removeAllChildren(this.element.querySelector(\".leaf-element\")).appendChild(document.createTextNode(this.leaf));\n }\n}","import {Segment} from \"./Segment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ParentSegment extends Segment {\n static initListener() {\n window.addEventListener(\"mousedown\", (e) => {\n // console.log(\"mousedown\");\n ParentSegment.mouseDownTarget = e.target;\n ParentSegment.clickPosition = {x: e.pageX, y: e.pageY};\n });\n window.addEventListener(\"mouseup\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n\n window.addEventListener(\"touchstart\", (e) => {\n if (e.targetTouches.length === 1) {\n ParentSegment.mouseDownTarget = e.targetTouches[0].target;\n ParentSegment.clickPosition = {x: e.targetTouches[0].pageX, y: e.targetTouches[0].pageY};\n }\n });\n window.addEventListener(\"touchend\", (e) => {\n ParentSegment.mouseDownTarget = null;\n ParentSegment.clickPosition = {};\n });\n }\n\n setIsRotatable(rotatable) {\n this.rotatable = rotatable;\n this._updateElement();\n }\n\n constructor(element) {\n super(element);\n this.children = [];\n this.class = \"rotate-0\";\n this.rotatable = true;\n\n this.userRotationDelta = 100;\n this.lastUserRotation = 0;\n\n this.touchendListener = (e) => {\n let now = new Date().getTime();\n\n let target = null;\n let position = null;\n\n if (e.changedTouches.length >= 1) {\n target = document.elementFromPoint(e.changedTouches[0].pageX, e.changedTouches[0].pageY);\n position = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY};\n }\n if (target != null && e.targetTouches.length === 0 && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(target)) {\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, target, ParentSegment.clickPosition, position);\n // console.log(\"touchendListener stopped event\", e);\n\n this.lastUserRotation = new Date().getTime();\n }\n };\n this.mouseupListener = (e) => {\n let now = new Date().getTime();\n\n // console.log(\"mouseup\", ParentSegment.mouseDownTarget);\n if (ParentSegment.mouseDownTarget !== null && this.element.contains(ParentSegment.mouseDownTarget) && this.element.contains(e.target)) {\n let position = {x: e.pageX, y: e.pageY};\n e.stopPropagation();\n e.preventDefault();\n if (this.lastUserRotation + this.userRotationDelta > now) {\n return;\n }\n this.getLevel().segmentClicked(this);\n this.rotate(ParentSegment.mouseDownTarget, e.target, ParentSegment.clickPosition, position);\n // console.log(\"mouseupListener stopped event\", e);\n this.lastUserRotation = new Date().getTime();\n }\n };\n }\n\n canRotate() {\n return (this.rotatable && !this.getLevel().getHasWon());\n }\n\n async rotate(firstElem, secondElem, firstPosition, secondPosition) {\n const timeout = 250;\n const clickTolerance = 5;\n\n let rotationDirection = 1;\n if (Helper.isNotNull(secondElem) && Helper.isNotNull(firstElem) &&\n (Helper.isNull(firstPosition) || Helper.isNull(secondPosition) ||\n Math.abs(firstPosition.x - secondPosition.x) > clickTolerance ||\n Math.abs(firstPosition.y - secondPosition.y) > clickTolerance)) {\n\n let firstIndex = -1;\n let secondIndex = -1;\n let rotationIndexes = [0, 1, 3, 2];\n for (let i = 0; i < this.children.length; i++) {\n if (this.children[rotationIndexes[i]].element === firstElem || this.children[rotationIndexes[i]].element.contains(firstElem)) {\n firstIndex = (i + this.rotation / 90) % 4;\n }\n if (this.children[rotationIndexes[i]].element === secondElem || this.children[rotationIndexes[i]].element.contains(secondElem)) {\n secondIndex = (i + this.rotation / 90) % 4;\n }\n }\n\n if (firstIndex >= 0 && secondIndex >= 0) {\n if (firstIndex === 2 && (secondIndex === 0 || secondIndex === 1)\n || firstIndex === 1 && (secondIndex === 0 || secondIndex === 3)\n || (firstIndex === 0 && secondIndex === 3)\n || (firstIndex === 3 && secondIndex === 2)) {\n rotationDirection = -1;\n }\n }\n }\n\n if (this.canRotate()) {\n this.rotation += 360 + 90 * rotationDirection;\n this.rotation %= 360;\n\n let currentRotation = this.rotation;\n\n this._updateRotationClass();\n this.element.classList.add(\"rotating\");\n if (rotationDirection === -1) {\n this.element.classList.add(\"reverse\");\n }\n\n let delayPromise = new Promise(function (resolve) {\n setTimeout(resolve, timeout);\n }).then(() => {\n if (this.rotation === currentRotation) {\n this.element.classList.remove(\"rotating\");\n this.element.classList.remove(\"reverse\");\n }\n });\n this.getLevel().checkHasWon(delayPromise);\n return delayPromise;\n }\n }\n\n sameAs(otherSegment) {\n if (!(otherSegment instanceof ParentSegment) || otherSegment.children.length !== this.children.length) {\n return false;\n }\n for (let i = 0; i < this.children.length; i++) {\n if (!this.children[i].sameAs(otherSegment.children[i])) {\n return false;\n }\n }\n return true;\n }\n\n applyRotations(rotations) {\n this.rotation = rotations[0];\n\n if (isNaN(this.rotation)) {\n this.rotation = 0;\n }\n\n rotations.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n applyLocks(locks) {\n this.rotatable = (locks[0] !== false);\n locks.splice(0, 1);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n getCurrentRotations(rotations) {\n rotations.push(this.rotation);\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n locked.push(this.rotatable);\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n isSolved(checkChildren) {\n checkChildren = Helper.nonNull(checkChildren, true);\n if (checkChildren) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n if (!this.children[i].isSolved()) {\n return false;\n }\n }\n }\n return (this.rotation === 0 || (\n this.children[0].sameAs(this.children[3]) && this.children[1].sameAs(this.children[2]) && (\n this.rotation === 180 || this.children[0].sameAs(this.children[1]))))\n }\n\n setChildren(children) {\n this.children = [];\n for (let i = 0, n = children.length; i < n; i++) {\n this.addChild(children[i]);\n }\n }\n\n addChild(child) {\n this.children.push(child);\n child.setParent(this);\n this._updateElement();\n }\n\n _updateRotationClass() {\n // this.style.transform = \"rotate(\"+this.rotation+\"deg)\";\n this.element.classList.remove(this.class);\n this.class = \"rotate-\" + this.rotation;\n if (this.class === \"rotate-0\") {\n this.class = \"rotate-360\";\n }\n this.element.classList.add(this.class);\n }\n\n _updateElement() {\n let layer = this._getLayer();\n if (layer >= 2) {\n this.element.classList.add(\"layer-\" + layer);\n }\n\n if (!this.rotatable) {\n this.element.classList.add(\"locked\");\n }\n\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n this.element.removeEventListener(\"mouseup\", this.mouseupListener);\n this.element.removeEventListener(\"touchend\", this.touchendListener);\n\n this.element.addEventListener(\"mouseup\", this.mouseupListener);\n this.element.addEventListener(\"touchend\", this.touchendListener);\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n if (i % 2 === 1 && this.children.length - 1 !== i) {\n childContainer.appendChild(document.createElement(\"br\"));\n }\n }\n }\n\n _getLayer() {\n if (this.children.length >= 1 && this.children[0] && this.children[0] instanceof ParentSegment) {\n return this.children[0]._getLayer() + 1;\n }\n return 1;\n }\n}\n\nParentSegment.initListener();\n","import {LeafSegment} from \"../Segment/LeafSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {Random} from \"js-helper\";\n\nexport class Level {\n constructor(templateContainer) {\n this.rootSegment = null;\n this.words = [];\n this.startRotations = [];\n this.templateContainer = templateContainer;\n\n this.levelData = null;\n\n this.hasWon = false;\n this.id = null;\n\n this.saveAsCurrentAfterCheckWon = true;\n\n this.wonResolver = null;\n this.giveUpResolver = null;\n\n this._shakeLeafs = true;\n this._shakeLeafsTimeout = null;\n this._lastRotation = 0;\n\n this.wonPromise = new Promise((resolve, reject) => {\n this.wonResolver = resolve;\n this.giveUpResolver = reject;\n });\n\n this.segmentClickedListener = () => {\n // console.log(\"clicked\")\n };\n }\n\n getLevelData() {\n return this.levelData;\n }\n\n setLevelData(levelData) {\n this.levelData = levelData;\n }\n\n async saveAsCurrentLevel() {\n let rotations = this.getCurrentRotations();\n let locked = this.getCurrentLocked();\n await NativeStoragePromise.setItem(\"currentLevel\", JSON.stringify({\n \"id\": this.id,\n \"rotations\": rotations,\n \"locks\": locked\n }));\n }\n\n getCurrentLocked() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentLocked([]);\n }\n return [];\n }\n\n getCurrentRotations() {\n if (this.rootSegment !== null) {\n return this.rootSegment.getCurrentRotations([]);\n }\n return [];\n }\n\n setLocks(locks) {\n if (this.rootSegment !== null) {\n this.rootSegment.applyLocks(locks);\n }\n }\n\n setId(id) {\n this.id = id;\n }\n\n getId() {\n return this.id;\n }\n\n getLevel() {\n return this;\n }\n\n setRootSegment(rootSegment) {\n this.rootSegment = rootSegment;\n this.rootSegment.setParent(this);\n if (this.startRotations) {\n this.applyRotations();\n }\n }\n\n setWords(words) {\n this.words = [];\n for (let i = 0, n = words.length; i < n; i++) {\n this.words.push(words[i].replace(/ß/g, \"ẞ\").toUpperCase());\n }\n }\n\n setStartRotations(rotations) {\n this.startRotations = rotations;\n }\n\n applyRotations(rotations) {\n if (this.rootSegment) {\n rotations = Helper.nonNull(rotations, this.startRotations);\n this.rootSegment.applyRotations(rotations);\n }\n }\n\n getHasWon() {\n return this.hasWon;\n }\n\n checkHasWon(delayPromise) {\n if (this.rootSegment.isSolved()) {\n this.hasWon = true;\n const self = this;\n Promise.resolve(delayPromise).then(() => {\n self.wonResolver(true);\n });\n return true;\n }\n if (this.saveAsCurrentAfterCheckWon) {\n this.saveAsCurrentLevel();\n }\n return false;\n }\n\n setSaveAsCurrentAfterCheckWon(shouldSave){\n this.saveAsCurrentAfterCheckWon = (shouldSave === true);\n }\n\n getWonPromise() {\n return this.wonPromise;\n }\n\n getRootSegment() {\n return this.rootSegment;\n }\n\n createSegments() {\n };\n\n getRotatableSegments() {\n return Level._getRotatableSegmentsFrom(this.rootSegment);\n }\n\n segmentClicked(segment) {\n if (this.segmentClickedListener) {\n this.segmentClickedListener(segment);\n }\n\n this._lastRotation = new Date().getTime();\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs) {\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(5000) + 25000);\n }\n }\n\n setSegmentClickedListener(listener) {\n this.segmentClickedListener = listener;\n }\n\n getLeafSegments() {\n return Level._getLeafSegmentsFrom(this.rootSegment);\n }\n\n static _getRotatableSegmentsFrom(segment) {\n let rotatable = [];\n if (segment.canRotate()) {\n rotatable.push(segment);\n }\n if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n rotatable.push.apply(rotatable, Level._getRotatableSegmentsFrom(segment.children[i]));\n }\n }\n return rotatable;\n }\n\n shakeLeafs() {\n clearTimeout(this._shakeLeafsTimeout);\n if (this._shakeLeafs && !this.hasWon) {\n\n const leafs = this.getLeafSegments();\n if (leafs.length > 0) {\n const index = Random.getIntRandom(leafs.length - 1);\n const leaf = leafs[index];\n\n leaf.getElement().classList.add(\"shake\");\n setTimeout(() => {\n leaf.getElement().classList.remove(\"shake\");\n }, Random.getIntRandom(350) + 650);\n }\n this._shakeLeafsTimeout = setTimeout(() => {\n this.shakeLeafs();\n }, Random.getIntRandom(2000) + 5000);\n }\n }\n\n static _createLeafsForWord(word, leafSegmentTemplate) {\n let leafSegments = [];\n for (let i = 0, n = word.length; i < n; i++) {\n leafSegments.push(new LeafSegment(leafSegmentTemplate.cloneNode(true), word.charAt(i)));\n }\n return leafSegments;\n }\n\n static _getLeafSegmentsFrom(segment) {\n let leafs = [];\n if (segment instanceof LeafSegment) {\n leafs.push(segment);\n } else if (segment instanceof ParentSegment) {\n for (let i = 0; i < segment.children.length; i++) {\n leafs.push(...Level._getLeafSegmentsFrom(segment.children[i]));\n }\n }\n return leafs;\n }\n}\n","import {ParentSegment} from \"./ParentSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class RowSegment extends ParentSegment{\n constructor(element) {\n super(element);\n this.rotatable = false;\n }\n\n applyRotations(rotations)\n {\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].applyRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentRotations(rotations){\n for (let i = 0, n = this.children.length; i < n; i++) {\n rotations = this.children[i].getCurrentRotations(rotations);\n }\n return rotations;\n }\n\n getCurrentLocked(locked) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locked = this.children[i].getCurrentLocked(locked);\n }\n return locked;\n }\n\n applyLocks(locks) {\n for (let i = 0, n = this.children.length; i < n; i++) {\n locks = this.children[i].applyLocks(locks);\n }\n return locks;\n }\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class RowLevel extends Level {\n constructor(container, wordLength) {\n super(container);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 2 && this.words[0].length >= this.wordLength && this.words[1].length >= this.wordLength) {\n let leafsWordOne = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n let leafsWordTwo = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0, n = this.wordLength / 2; i < n; i++) {\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(leafsWordOne[2 * i]);\n parent.addChild(leafsWordOne[2 * i + 1]);\n parent.addChild(leafsWordTwo[2 * i]);\n parent.addChild(leafsWordTwo[2 * i + 1]);\n rootSegment.addChild(parent);\n }\n // rootSegment.applyRotations(this.startRotations);\n this.setRootSegment(rootSegment)\n }\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class SimpleLevel extends RowLevel{\n constructor(container) {\n super(container, 6);\n }\n}","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel8 extends RowLevel{\n constructor(container) {\n super(container, 8);\n }\n}\n","import {RowLevel} from \"./RowLevel\";\n\nexport class RowLevel10 extends RowLevel{\n constructor(container) {\n super(container, 10);\n }\n}\n","import {RowSegment} from \"./RowSegment\";\n\nexport class TriangleSegment extends RowSegment{\n\n}","import {RowSegment} from \"../Segment/RowSegment\";\nimport {Level} from \"./Level\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {TriangleSegment} from \"../Segment/TriangleSegment\";\n\nexport class SixWordsRowLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 6 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.words[4].length >= this.wordLength &&\n this.words[5].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n leafsWords[4] = Level._createLeafsForWord(this.words[4], this.templateContainer.copyLeafTemplate());\n leafsWords[5] = Level._createLeafsForWord(this.words[5], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[4] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[5] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4*i]);\n parents[0].addChild(leafsWords[0][4*i+1]);\n parents[0].addChild(leafsWords[1][4*i]);\n parents[0].addChild(leafsWords[1][4*i+1]);\n\n parents[1].addChild(leafsWords[0][4*i+2]);\n parents[1].addChild(leafsWords[0][4*i+3]);\n parents[1].addChild(leafsWords[1][4*i+2]);\n parents[1].addChild(leafsWords[1][4*i+3]);\n\n parents[2].addChild(leafsWords[2][4*i]);\n parents[2].addChild(leafsWords[2][4*i+1]);\n parents[2].addChild(leafsWords[3][4*i]);\n parents[2].addChild(leafsWords[3][4*i+1]);\n\n parents[3].addChild(leafsWords[2][4*i+2]);\n parents[3].addChild(leafsWords[2][4*i+3]);\n parents[3].addChild(leafsWords[3][4*i+2]);\n parents[3].addChild(leafsWords[3][4*i+3]);\n\n parents[4].addChild(leafsWords[4][4*i]);\n parents[4].addChild(leafsWords[4][4*i+1]);\n parents[4].addChild(leafsWords[5][4*i]);\n parents[4].addChild(leafsWords[5][4*i+1]);\n\n parents[5].addChild(leafsWords[4][4*i+2]);\n parents[5].addChild(leafsWords[4][4*i+3]);\n parents[5].addChild(leafsWords[5][4*i+2]);\n parents[5].addChild(leafsWords[5][4*i+3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n let triangle = new TriangleSegment(this.templateContainer.copyTriangleTemplate());\n if (i % 2 === 0) {\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[4]);\n rowSegment.addChild(parents[5]);\n\n triangle.addChild(parent);\n triangle.addChild(rowSegment);\n\n triangle.getElement().classList.add(\"type-1\");\n }\n else {\n\n let rowSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n\n rowSegment.addChild(parents[0]);\n rowSegment.addChild(parents[1]);\n\n triangle.addChild(rowSegment);\n triangle.addChild(parent);\n\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n parent.addChild(parents[4]);\n parent.addChild(parents[5]);\n\n triangle.getElement().classList.add(\"type-2\");\n }\n rootSegment.addChild(triangle);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel8 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {SixWordsRowLevel} from \"./SixWordsRowLevel\";\n\nexport class SixWordsRowLevel12 extends SixWordsRowLevel {\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\n\nexport class FourWordsLevel extends Level {\n\n constructor(templateContainer, wordLength) {\n super(templateContainer);\n this.wordLength = wordLength;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 4; i++) {\n\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][4 * i]);\n parents[0].addChild(leafsWords[0][4 * i + 1]);\n parents[0].addChild(leafsWords[1][4 * i]);\n parents[0].addChild(leafsWords[1][4 * i + 1]);\n\n parents[1].addChild(leafsWords[0][4 * i + 2]);\n parents[1].addChild(leafsWords[0][4 * i + 3]);\n parents[1].addChild(leafsWords[1][4 * i + 2]);\n parents[1].addChild(leafsWords[1][4 * i + 3]);\n\n parents[2].addChild(leafsWords[2][4 * i]);\n parents[2].addChild(leafsWords[2][4 * i + 1]);\n parents[2].addChild(leafsWords[3][4 * i]);\n parents[2].addChild(leafsWords[3][4 * i + 1]);\n\n parents[3].addChild(leafsWords[2][4 * i + 2]);\n parents[3].addChild(leafsWords[2][4 * i + 3]);\n parents[3].addChild(leafsWords[3][4 * i + 2]);\n parents[3].addChild(leafsWords[3][4 * i + 3]);\n\n let parent = new ParentSegment(this.templateContainer.copyParentTemplate());\n parent.addChild(parents[0]);\n parent.addChild(parents[1]);\n parent.addChild(parents[2]);\n parent.addChild(parents[3]);\n\n rootSegment.addChild(parent);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel8 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 8);\n }\n}","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class FourWordsLevel12 extends FourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 12);\n }\n}","import {RowSegment} from \"./RowSegment\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nexport class ColumnSegment extends RowSegment{\n\n _updateElement() {\n const childContainer = this.element.querySelector(\".child-container\");\n ViewHelper.removeAllChildren(childContainer);\n\n this._updateRotationClass();\n\n const self = this;\n this.element.onclick = function (e) {\n self.rotate();\n e.stopPropagation();\n };\n\n for (let i = 0, n = this.children.length; i < n; i++) {\n this.children[i]._updateElement();\n childContainer.appendChild(this.children[i].getElement());\n }\n }\n\n // constructor(element) {\n // super(element);\n // this.rotatable = false;\n // }\n //\n // applyRotations(rotations)\n // {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].applyRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentRotations(rotations){\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // rotations = this.children[i].getCurrentRotations(rotations);\n // }\n // return rotations;\n // }\n //\n // getCurrentLocked(locked) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locked = this.children[i].getCurrentLocked(locked);\n // }\n // return locked;\n // }\n //\n // applyLocks(locks) {\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // locks = this.children[i].applyLocks(locks);\n // }\n // return locks;\n // }\n //\n // _updateElement() {\n // const childContainer = this.element.querySelector(\".child-container\");\n // ViewHelper.removeAllChildren(childContainer);\n //\n // this._updateRotationClass();\n //\n // const self = this;\n // this.element.onclick = function (e) {\n // self.rotate();\n // e.stopPropagation();\n // };\n //\n // for (let i = 0, n = this.children.length; i < n; i++) {\n // this.children[i]._updateElement();\n // childContainer.appendChild(this.children[i].getElement());\n // }\n // }\n}","import {Level} from \"./Level\";\nimport {RowSegment} from \"../Segment/RowSegment\";\nimport {ParentSegment} from \"../Segment/ParentSegment\";\nimport {ColumnSegment} from \"../Segment/ColumnSegment\";\n\nexport class BigSegmentsLevels extends Level{\n constructor(templateContainer, wordLength, bigSegmentPositions) {\n super(templateContainer);\n this.wordLength = wordLength;\n this.bigSegmentPositions = bigSegmentPositions;\n }\n\n createSegments() {\n if (this.words.length >= 4 &&\n this.words[0].length >= this.wordLength &&\n this.words[1].length >= this.wordLength &&\n this.words[2].length >= this.wordLength &&\n this.words[3].length >= this.wordLength &&\n this.wordLength >= 4\n ) {\n let leafsWords = [];\n leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());\n leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());\n leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());\n leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());\n\n let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());\n for (let i = 0; i < this.wordLength / 2; i++) {\n let parents = [];\n parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[0].addChild(leafsWords[0][2 * i]);\n parents[0].addChild(leafsWords[0][2 * i + 1]);\n parents[0].addChild(leafsWords[1][2 * i]);\n parents[0].addChild(leafsWords[1][2 * i + 1]);\n\n parents[1].addChild(leafsWords[2][2 * i]);\n parents[1].addChild(leafsWords[2][2 * i + 1]);\n parents[1].addChild(leafsWords[3][2 * i]);\n parents[1].addChild(leafsWords[3][2 * i + 1]);\n\n let parentSegment =null;\n if (this.bigSegmentPositions.indexOf(i) !== -1){\n parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());\n parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());\n\n parents[2].addChild(leafsWords[0][2 * i + 2]);\n parents[2].addChild(leafsWords[0][2 * i + 3]);\n parents[2].addChild(leafsWords[1][2 * i + 2]);\n parents[2].addChild(leafsWords[1][2 * i + 3]);\n\n parents[3].addChild(leafsWords[2][2 * i + 2]);\n parents[3].addChild(leafsWords[2][2 * i + 3]);\n parents[3].addChild(leafsWords[3][2 * i + 2]);\n parents[3].addChild(leafsWords[3][2 * i + 3]);\n\n parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[2]);\n parentSegment.addChild(parents[1]);\n parentSegment.addChild(parents[3]);\n i++;\n }\n else{\n parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());\n parentSegment.addChild(parents[0]);\n parentSegment.addChild(parents[1]);\n }\n\n rootSegment.addChild(parentSegment);\n }\n this.setRootSegment(rootSegment)\n }\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class SimpleFourWordsLevel extends BigSegmentsLevels{\n constructor(templateContainer, wordLength, bigSegmentPosition) {\n super(templateContainer, wordLength, [bigSegmentPosition]);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_0 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 0);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_1 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 1);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_2 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 2);\n }\n}","import {SimpleFourWordsLevel} from \"./SimpleFourWordsLevel\";\n\nexport class SimpleFourWordsLevel10_3 extends SimpleFourWordsLevel{\n constructor(templateContainer) {\n super(templateContainer, 10, 3);\n }\n}","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_1_3 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [1,3]);\n }\n}\n\n","import {BigSegmentsLevels} from \"./BigSegmentsLevels\";\n\nexport class TwoSegmentFourWordsLevel10_0_2 extends BigSegmentsLevels{\n constructor(templateContainer) {\n super(templateContainer, 10, [0,2]);\n }\n}\n\n","import {SimpleLevel} from \"./SimpleLevel\";\nimport {RowLevel8} from \"./RowLevel8\";\nimport {RowLevel10} from \"./RowLevel10\";\nimport {SixWordsRowLevel8} from \"./SixWordsRowLevel8\";\nimport {SixWordsRowLevel12} from \"./SixWordsRowLevel12\";\nimport {FourWordsLevel8} from \"./FourWordsLevel8\";\nimport {FourWordsLevel12} from \"./FourWordsLevel12\";\nimport {SimpleFourWordsLevel10_0} from \"./SimpleFourWordsLevel10_0\";\nimport {SimpleFourWordsLevel10_1} from \"./SimpleFourWordsLevel10_1\";\nimport {SimpleFourWordsLevel10_2} from \"./SimpleFourWordsLevel10_2\";\nimport {SimpleFourWordsLevel10_3} from \"./SimpleFourWordsLevel10_3\";\nimport {TwoSegmentFourWordsLevel10_0_3} from \"./TwoSegmentFourWordsLevel10_0_3\";\nimport {TwoSegmentFourWordsLevel10_1_3} from \"./TwoSegmentFourWordsLevel10_1_3\";\nimport {TwoSegmentFourWordsLevel10_0_2} from \"./TwoSegmentFourWordsLevel10_0_2\";\nimport {Level} from \"./Level\";\n\nexport class LevelHelper {\n public static readonly types = {\n 20: SimpleLevel,\n 40: RowLevel8,\n 60: RowLevel10,\n 80: SimpleFourWordsLevel10_0,\n 81: SimpleFourWordsLevel10_1,\n 82: SimpleFourWordsLevel10_2,\n 83: SimpleFourWordsLevel10_3,\n 100: SixWordsRowLevel8,\n 110: TwoSegmentFourWordsLevel10_0_3,\n 111: TwoSegmentFourWordsLevel10_1_3,\n 112: TwoSegmentFourWordsLevel10_0_2,\n 120: FourWordsLevel8,\n 140: SixWordsRowLevel12,\n 160: FourWordsLevel12,\n };\n static setLevelType(typeId, level) {\n LevelHelper.types[typeId] = level;\n }\n\n static getLevelClass(type) {\n return LevelHelper.types[type];\n }\n\n static inflateLevel(levelData, templateContainer): Level {\n let level = new (LevelHelper.types[levelData[\"renderer\"]])(templateContainer);\n level.setWords(JSON.parse(levelData[\"words\"].replace(/"/g, '\"')));\n level.setId(levelData[\"id\"]);\n level.setLevelData(levelData);\n\n levelData[\"positions\"] = JSON.parse(levelData[\"positions\"]);\n for (let i = 0, n = levelData[\"positions\"].length; i < n; i++) {\n if (levelData[\"positions\"][i] <= 4) {\n levelData[\"positions\"][i] = 90 * levelData[\"positions\"][i];\n }\n }\n\n level.setStartRotations(levelData[\"positions\"]);\n return level;\n }\n}\n","const view = require(\"../../html/sites/end.html\");\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class EndSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n","import {BaseModel} from \"cordova-sites-database/dist/BaseModel\";\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {SelectQueryBuilder} from \"typeorm\";\n\nexport class LevelPlayed extends BaseModel {\n\n levelData: LevelData;\n played: boolean;\n\n static getColumnDefinitions() {\n let columns = super.getColumnDefinitions();\n columns[\"played\"] = {type: BaseDatabase.TYPES.BOOLEAN, default: true};\n return columns;\n }\n\n static getRelationDefinitions() {\n let relations = super.getRelationDefinitions();\n relations[\"levelData\"] = {\n target: LevelData.getSchemaName(),\n type: \"one-to-one\",\n joinColumn: true,\n // cascade: true,\n };\n return relations;\n }\n\n static async setPlayed(levelData, played?){\n played = Helper.nonNull(played, true);\n let levelPlayed = new LevelPlayed();\n levelPlayed.levelData = levelData;\n levelPlayed.played = played;\n\n return await levelPlayed.save();\n }\n\n static async getNextLevelData(renderer){\n let qb = >await this._database.createQueryBuilder(LevelData);\n\n qb = qb.select(\"COUNT(*) as count, difficulty\")\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .groupBy(\"difficulty\")\n .orderBy(\"difficulty, LevelData.id\");\n\n let countRes = await qb.getRawMany();\n\n let difficulty = null;\n let offset = null;\n\n if (!countRes.some(res => {\n if (res[\"count\"] > 0){\n difficulty = res[\"difficulty\"];\n offset = Math.floor(Math.random() * Math.floor(res[\"count\"]));\n return true;\n }\n return false;\n })){\n return null;\n }\n\n qb = >await this._database.createQueryBuilder(LevelData);\n qb = qb\n .leftJoin(LevelPlayed, \"levelPlayed\", \"levelPlayed.levelData = LevelData.id\")\n .where(\"(deleted = 0 OR deleted = 'false')\")\n .andWhere(\"difficulty = \"+difficulty)\n .andWhere(\"renderer IN (\"+renderer.join(\",\")+\")\")\n .andWhere(\"(levelPlayed.id IS NULL OR levelPlayed.played = 0)\")\n .orderBy(\"LevelData.id\")\n .limit(1)\n .offset(offset);\n\n return await qb.getOne();\n }\n}\nBaseDatabase.addModel(LevelPlayed);\n","import {Level} from \"../wordrotator/Level/Level\";\n\nconst helpIcon = require(\"../../img/help.png\").default;\nconst view = require(\"../../html/sites/level.html\");\nconst coinSound = require(\"../../sound/single_coin_fall_on_concrete_.mp3\").default;\n\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {EndSite} from \"./EndSite\";\n\nimport {\n MenuAction,\n Toast,\n ScaleHelper,\n Matomo,\n NativeStoragePromise,\n} from \"cordova-sites/dist/client\";\n\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\n\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class LevelSite extends MenuSite {\n\n public static readonly RENDERER_TYPES = [20, 40, 60, 80, 81, 82, 83, 100, 110, 111, 112, 120, 140, 160];\n public static readonly TUTORIAL = {\n FIRST_LEVEL: 67,\n SECOND_LEVEL: 15,\n BIG_SEGMENT_LEVEL: 1921\n };\n\n private coinAction: MenuAction;\n private levelCounterAction: MenuAction;\n private levelCounter: number;\n private levelScaler: () => void;\n private wonParams: { aborted: boolean; coinCounterTimer: any };\n private coinPromise: Promise;\n private continueButtonScaler: () => Promise;\n private wonTextScaler: () => Promise;\n private wonText: HTMLElement;\n private templateContainer: TemplateContainer;\n private coinTemplate: HTMLElement;\n private coinContainer: HTMLElement;\n private level: Level;\n\n constructor(siteManager) {\n super(siteManager, view);\n // this.getNavbarFragment().setBackgroundImage(null);\n }\n\n async onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n\n let coinAction = new MenuAction(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n coinAction._shouldTranslate = false;\n coinAction.setLiClass(\"coin-counter img\");\n navbar.addAction(coinAction);\n this.coinAction = coinAction;\n\n let levelCounterAction = new MenuAction(Helper.nonNull(this.levelCounter, \"1\"), () => {\n }, MenuAction.SHOW_ALWAYS, 900);\n levelCounterAction._shouldTranslate = false;\n levelCounterAction.setLiClass(\"level-counter\");\n navbar.addAction(levelCounterAction);\n this.levelCounterAction = levelCounterAction;\n\n let helpAction = new MenuAction(\"\", () => {\n this.help();\n }, MenuAction.SHOW_ALWAYS, 900);\n helpAction._shouldTranslate = false;\n helpAction._icon = helpIcon;\n helpAction.setLiClass(\"help-action show-while-playing\");\n navbar.addAction(helpAction);\n\n return navbar;\n }\n\n async onConstruct(args) {\n this.levelCounter = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n // this.levelCounter = 9999;\n this.levelScaler = () => {\n };\n this.wonParams = {\n aborted: false,\n coinCounterTimer: null,\n };\n this.coinPromise = Promise.resolve();\n\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: ((await NativeStoragePromise.getItem(\"play-sound\", \"1\")) !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n soundManager.resume(SoundManager.CHANNELS.MUSIC);\n\n return super.onConstruct(args);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.addEventListener(\"click\", () => {\n continueButton.style.opacity = 0;\n this.nextLevel();\n });\n\n let wonText = this.findBy(\"#won-text\");\n\n let scaleHelper = new ScaleHelper();\n this.continueButtonScaler = await scaleHelper.scaleToFull(continueButton, continueButton.parentElement, false, true, 2);\n this.wonTextScaler = await scaleHelper.scaleTo(0.9, wonText, wonText.parentElement, false, false, 2, null, 5);\n this.wonText = wonText;\n this.wonText.style.fontSize = \"0\";\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n this.coinTemplate = this.findBy(\"#coin-template\");\n this.coinContainer = this.findBy(\"#coin-container\");\n\n this.coinTemplate.id = null;\n ViewHelper.removeAllChildren(this.coinContainer);\n\n // this.findBy(\"#help-button\").addEventListener(\"click\", () => {\n // this.help();\n // });\n await this.loadLastLevel();\n\n return res;\n }\n\n async loadLastLevel() {\n try {\n let currentLevelInfo = await NativeStoragePromise.getItem(\"currentLevel\");\n if (Helper.isNotNull(currentLevelInfo)) {\n currentLevelInfo = JSON.parse(currentLevelInfo);\n\n let levelData = await LevelData.findById(currentLevelInfo[\"id\"]);\n\n if (Helper.isNull(levelData)) {\n return this.nextLevel();\n }\n\n let level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n level.setStartRotations(currentLevelInfo[\"rotations\"]);\n\n level.getWonPromise().then(() => {\n this.levelWon(level);\n });\n\n level.createSegments();\n level.setLocks(currentLevelInfo[\"locks\"]);\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleTo(1, levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LoadLastLevel\"]);\n this.level.checkHasWon();\n return;\n }\n } catch (e) {\n console.error(e);\n }\n return this.nextLevel();\n }\n\n startEndSite() {\n this.startSite(EndSite);\n this.finish();\n }\n\n updateLevelCounter() {\n this.levelCounterAction.setName(this.levelCounter);\n if (this.levelCounter >= 10 && this.levelCounter <= 99) {\n this.levelCounterAction.setLiClass(\"num-10 level-counter\");\n } else if (this.levelCounter >= 100 && this.levelCounter <= 999) {\n this.levelCounterAction.setLiClass(\"num-100 level-counter\");\n } else if (this.levelCounter >= 1000) {\n this.levelCounterAction.setLiClass(\"num-1000 level-counter\");\n } else {\n this.levelCounterAction.setLiClass(\"level-counter\");\n }\n }\n\n async nextLevel() {\n this.showLoadingSymbol();\n try {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n // let levelData = await LevelData.findById(34);\n // this.level = null;\n\n if (Helper.isNull(levelData)) {\n this.startEndSite();\n return;\n }\n\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n //Waiting for Level to be done\n if (this.level && level.id === this.level.id) {\n console.log(\"Level is the same as before! reload!\");\n await new Promise((resolve) => setTimeout(resolve, 50));\n // return;\n debugger;\n return this.nextLevel();\n }\n\n level.getWonPromise().then(async () => {\n await this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n level.saveAsCurrentLevel();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(level.getRootSegment().getElement());\n\n this._view.classList.remove('won');\n this.wonText.style.fontSize = \"0\";\n this.removeLoadingSymbol();\n\n let scaleHelper = new ScaleHelper();\n this.levelScaler = await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 1, level.words[0].length * 1.5, null, 0);\n\n this.level = level;\n this.updateLevelCounter();\n\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n\n this.wonParams.aborted = true;\n clearTimeout(this.wonParams.coinCounterTimer);\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"NextLevel\", \"Level Number Normal\", this.levelCounter]);\n\n this.level.checkHasWon();\n\n return this.tutorial();\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n this.startEndSite();\n }\n }\n\n async onStart(args) {\n this.setTitle(\"WR\");\n\n Matomo.update(\"Level Sites\");\n let res = super.onStart(args);\n\n if (this.levelCounterAction) {\n this.updateLevelCounter();\n }\n this.levelScaler();\n\n //TODO Sound\n let soundManager = SoundManager.getInstance();\n soundManager.set({\n audio: coinSound,\n muted: (await NativeStoragePromise.getItem(\"play-sound\", \"1\") !== \"1\"),\n volume: 0.7\n }, SoundManager.CHANNELS.SOUND);\n\n await this.tutorial();\n\n return res;\n }\n\n async levelWon(level) {\n try {\n const savePromise = LevelPlayed.setPlayed(level.getLevelData());\n\n // savePromise.then((r) => console.log(\"levelSaved!\", r));\n\n this.levelCounter++;\n await NativeStoragePromise.setItem(\"levelCounter\", this.levelCounter);\n await NativeStoragePromise.remove(\"currentLevel\");\n\n let continueButton = this.findBy(\"#continue-button\");\n continueButton.style.transition = \"none\";\n continueButton.style.opacity = 0;\n\n //Todo richtiges Element aufrufen?\n this._view.classList.add('won');\n ViewHelper.removeAllChildren(this.coinContainer);\n let coinsPerLevel = await NativeStoragePromise.getItem(\"coinsPerLevel\", 5);\n\n let coinsBefore = 0;\n\n let soundManager = SoundManager.getInstance();\n let audioOptions = soundManager.get(SoundManager.CHANNELS.SOUND);\n\n this.coinPromise = this.coinPromise.then(async () => {\n coinsBefore = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n await NativeStoragePromise.setItem(\"coins\", coinsBefore + parseInt(coinsPerLevel));\n }).then(async () => {\n return Promise.all([new Promise((r) => {\n setTimeout(() => {\n //TODO animationen einbauen\n continueButton.style.opacity = 1;\n r();\n }, 500)\n }),\n audioOptions.loadedPromise.catch(e => {\n console.error(e)\n })\n ]);\n });\n\n this.wonParams.aborted = false;\n\n for (let i = 0; i < coinsPerLevel; i++) {\n let coinElem = this.coinTemplate.cloneNode(true);\n this.coinContainer.appendChild(coinElem);\n this.coinPromise = this.coinPromise.then(() => {\n return new Promise(r => {\n let timeout = 350;\n if (!this.wonParams.aborted) {\n //TODO animationen einbauen\n\n coinElem.style.opacity = \"1\";\n soundManager.play(SoundManager.CHANNELS.SOUND);\n\n this.wonParams.coinCounterTimer = setTimeout(() => {\n if (!this.wonParams.aborted) {\n this.coinAction.setName(++coinsBefore);\n }\n }, timeout / 2);\n } else {\n r();\n }\n\n //Always do the next promise for garbage collection\n setTimeout(r, timeout);\n })\n });\n }\n\n this.coinPromise = this.coinPromise.catch((e) => {\n console.error(e)\n });\n\n this.wonTextScaler();\n this.continueButtonScaler();\n this.levelScaler();\n\n // Promise.all([this.wonTextScaler(), this.continueButtonScaler()]).then(() => {\n // this.levelScaler();\n // });\n\n Matomo.push([\"trackEvent\", \"LevelSite\", \"LevelWon\", \"Coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"))]);\n\n let leafs = level.getLeafSegments();\n leafs.forEach((leaf, i) => {\n let elem = leaf.getElement();\n elem.style.animationDelay = i * 50 + \"ms\";\n elem.classList.add(\"jump-animation\");\n })\n\n await savePromise;\n } catch (e) {\n console.error(e);\n }\n }\n\n async help() {\n let cost = await NativeStoragePromise.getItem(\"costForHelp\", 25);\n let currentCoins = parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), 0));\n\n if (currentCoins >= cost) {\n currentCoins -= cost;\n await NativeStoragePromise.setItem(\"coins\", currentCoins);\n this.coinAction.setName(currentCoins);\n\n let rotatables = this.level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n this.level.saveAsCurrentLevel();\n\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n } else {\n new Toast(\"not-enough-coins\").show();\n // Matomo.push([\"trackEvent\", \"LevelSite\", \"Help\", \"Not enough Coins\", parseInt(Helper.nonNull(localStorage.getItem(\"coins\"), \"0\"))]);\n }\n }\n\n async tutorial() {\n const tutorialScale = 0.01;\n\n if (this.level.id === LevelSite.TUTORIAL.FIRST_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"1\");\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n switch (currentStep) {\n case \"1\": {\n this.level.setSegmentClickedListener(async () => {\n this._view.classList.remove(\"step-1\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"2\");\n this.tutorial();\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-1\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 2, 2);\n\n break;\n }\n case \"2\": {\n this.level.setSegmentClickedListener(() => {\n });\n this.level.getWonPromise().then(async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-2\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n this.coinPromise = this.coinPromise.then(async () => {\n new Toast(\"extra-coins-after-first-level\").show();\n await NativeStoragePromise.setItem(\"coins\", parseInt(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\")) + 50);\n this.coinAction.setName(Helper.nonNull(await NativeStoragePromise.getItem(\"coins\"), \"0\"));\n // this.coinAction.redraw();\n });\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-2\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.SECOND_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"3\");\n\n switch (currentStep) {\n case \"3\": {\n let scaleHelper = new ScaleHelper();\n\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let eventListener = async () => {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-3\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"4\");\n // this.findBy(\"#help-button\").removeEventListener(\"click\", eventListener);\n this.levelScaler();\n };\n this.findBy(\".help-action\").addEventListener(\"click\", eventListener);\n\n // let textElem = this.findBy(\".tutorial-text .step-3\");\n\n await this.levelScaler();\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n } else if (this.level.id === LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL) {\n let currentStep = Helper.nonNull(await NativeStoragePromise.getItem(\"tutorial-step\"), \"4\");\n\n switch (currentStep) {\n case \"4\": {\n\n let scaleHelper = new ScaleHelper();\n this._view.classList.add(\"tutorial\");\n this._view.classList.add(\"step-\" + currentStep);\n\n let rotatableSegments = this.level.getRotatableSegments();\n let firstSegment = rotatableSegments[2];\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n firstSegment.element.appendChild(pointer);\n\n this.level.setSegmentClickedListener(async (segment) => {\n if (firstSegment === segment) {\n this._view.classList.remove(\"tutorial\");\n this._view.classList.remove(\"step-4\");\n await NativeStoragePromise.setItem(\"tutorial-step\", \"5\");\n this.levelScaler();\n }\n });\n\n // let textElem = this.findBy(\".tutorial-text .step-4\");\n\n await this.levelScaler();\n // debugger;\n // scaleHelper.scaleTo(tutorialScale, textElem, textElem.parentElement, null, true, 1, 2);\n\n break;\n }\n default: {\n this._view.classList.remove(\"tutorial\");\n }\n }\n }\n }\n}\n","import {FourWordsLevel} from \"./FourWordsLevel\";\n\nexport class MainMenuLevel extends FourWordsLevel{\n\n constructor(templateContainer) {\n super(templateContainer, 4);\n }\n\n saveAsCurrentLevel() {\n }\n\n // checkHasWon(delayPromise) {\n // }\n}","import {Matomo, MenuSite, NativeStoragePromise, ScaleHelper, Toast} from \"cordova-sites/dist/client\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {Helper} from \"js-helper/dist/shared/Helper\";\nimport {LevelHelper} from \"../wordrotator/Level/LevelHelper\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {LevelSite} from \"./LevelSite\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client\";\nimport {Level} from \"../wordrotator/Level/Level\";\n\nconst view = require(\"../../html/sites/tutorialSite.html\");\n\nexport class TutorialSite extends MenuSite {\n private templateContainer: TemplateContainer;\n\n constructor(siteManager: any) {\n super(siteManager, view);\n }\n\n async onConstruct(constructParameters: any): Promise {\n const res = super.onConstruct(constructParameters);\n await Promise.race([new SyncJob().sync([LevelData]).catch(e => console.error(e)), new Promise(async resolve => {\n let levelData = await LevelData.findById(LevelSite.TUTORIAL.FIRST_LEVEL);\n if (levelData !== null) {\n resolve();\n }\n })]);\n return res;\n }\n\n async onViewLoaded(): Promise {\n const res = super.onViewLoaded();\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n let columnTemplate = this.findBy(\"#segment-column-template\");\n\n leafSegmentTemplate.removeAttribute(\"id\");\n parentSegmentTemplate.removeAttribute(\"id\");\n rowSegmentTemplate.removeAttribute(\"id\");\n triangleTemplate.removeAttribute(\"id\");\n columnTemplate.removeAttribute(\"id\");\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n columnTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate, columnTemplate);\n\n const tutorial1Container = this.findBy(\"#tutorial-1 .level-container\");\n const tutorial2Container = this.findBy(\"#tutorial-2 .level-container\");\n const tutorial3Container = this.findBy(\"#tutorial-3 .level-container\");\n\n const level1 = await this.loadLevel(LevelSite.TUTORIAL.FIRST_LEVEL);\n const level2 = await this.loadLevel(LevelSite.TUTORIAL.SECOND_LEVEL);\n const level3 = await this.loadLevel(LevelSite.TUTORIAL.BIG_SEGMENT_LEVEL);\n\n level1.setSaveAsCurrentAfterCheckWon(false);\n level2.setSaveAsCurrentAfterCheckWon(false);\n level3.setSaveAsCurrentAfterCheckWon(false);\n\n tutorial1Container.appendChild(level1.getRootSegment().getElement());\n tutorial2Container.appendChild(level2.getRootSegment().getElement());\n tutorial3Container.appendChild(level3.getRootSegment().getElement());\n\n let pointer = this.findBy(\"#tutorial-pointer\");\n pointer.remove();\n\n let rotatableSegments = level3.getRotatableSegments();\n let pointerSegment = rotatableSegments[2];\n pointerSegment.element.appendChild(pointer);\n\n this.find(\".help-action\").addEventListener(\"click\", () => {\n TutorialSite.help(level2);\n })\n\n return res;\n }\n\n static async help(level: Level) {\n let rotatables = level.getRotatableSegments();\n rotatables = rotatables.filter((segment) => {\n return (!segment.isSolved(false));\n });\n\n if (rotatables.length === 0){\n return;\n }\n\n let index = Math.floor(Math.random() * rotatables.length);\n\n let segmentToHelp = rotatables[index];\n while (segmentToHelp.rotation !== 0) {\n segmentToHelp.rotate();\n }\n segmentToHelp.setIsRotatable(false);\n }\n\n async loadLevel(id) {\n try {\n let levelData = await LevelData.findById(id);\n const level = LevelHelper.inflateLevel(levelData, this.templateContainer);\n\n level.getWonPromise().then(() => {\n console.log(\"level won!\");\n new Toast(\"you solved the tutorial level!\").show();\n //TODO\n // this.levelWon(level);\n });\n\n level.createSegments();\n level.getRootSegment()._updateElement();\n\n return level;\n } catch (e) {\n console.log(\"Fehler!\");\n console.error(e);\n // this.startEndSite();\n return null;\n }\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"tutorial\", TutorialSite);\n})\n","const view = require(\"../../html/sites/credits.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class CreditsSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"credits\", CreditsSite);\n});\n","const view = require(\"../../html/sites/privacyPolicy.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class PrivacyPolicySite extends MenuSite {\n constructor(siteManager) {\n super(siteManager,view);\n }\n\n async onViewLoaded() {\n let trackSwitch =this.findBy(\"#track-switch\");\n\n trackSwitch.addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n return super.onViewLoaded();\n }\n\n async onStart(args) {\n let trackSwitch =this.findBy(\"#track-switch\");\n trackSwitch.checked = ((await Matomo.getTrackingPromise()) === \"1\");\n\n // Matomo.update(\"Privacy Policy Sites\");\n return super.onStart(args);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"privacyPolicy\", PrivacyPolicySite);\n});\n","const view = require(\"../../html/sites/impressum.html\");\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {MenuSite} from \"cordova-sites/dist/client\";\n\nexport class ImpressumSite extends MenuSite{\n constructor(siteManager) {\n super(siteManager, view);\n }\n}\n\nApp.addInitialization(app => {\n app.addDeepLink(\"impressum\", ImpressumSite);\n});\n","const view = require(\"../../html/sites/contactSite.html\");\n\nimport {App} from \"cordova-sites/dist/client/js/App\";\nimport {Form} from \"cordova-sites/dist/client/js/Form\";\nimport {DataManager} from \"cordova-sites/dist/client/js/DataManager\";\nimport {Toast} from \"cordova-sites/dist/client/js/Toast/Toast\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\n\nexport class ContactSite extends MenuSite {\n constructor(siteManager) {\n super(siteManager, view);\n }\n\n onViewLoaded() {\n let res = super.onViewLoaded();\n\n // @ts-ignore\n this.findBy(\"#contactText\").appendChild(Translator.makePersistentTranslation(\"contact text\", [__CONTACT_EMAIL__]))\n\n new Form(this.findBy(\"#contact-form\"), async values => {\n\n let result = await DataManager.send(\"contact\", values);\n if (result.success) {\n new Toast(\"the message was sent\").show();\n this.finish();\n } else {\n if (result) {\n new Toast(result.message).show();\n } else {\n new Toast(\"Es ist ein Fehler aufgetreten...\").show();\n }\n }\n });\n\n return res;\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"contact\", ContactSite);\n});\n","import {TutorialSite} from \"../Sites/TutorialSite\";\n\nconst view = require(\"../../html/fragment/settings.html\");\n\nimport {CreditsSite} from \"../Sites/CreditsSite\";\nimport {PrivacyPolicySite} from \"../Sites/PrivacyPolicySite\";\nimport {ImpressumSite} from \"../Sites/ImpressumSite\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\nimport {AbstractFragment} from \"cordova-sites/dist/client/js/Context/AbstractFragment\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {LastSyncDates} from \"cordova-sites-easy-sync/dist/client/LastSyncDates\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {ContactSite} from \"../Sites/ContactSite\";\n\nexport class WordRotatorSettingFragment extends AbstractFragment {\n constructor(site) {\n super(site, view);\n }\n\n async onViewLoaded() {\n let res = super.onViewLoaded();\n\n this.findBy(\"#reset-levels\").addEventListener(\"click\", async () => {\n await NativeStoragePromise.remove(\"currentLevel\");\n await NativeStoragePromise.remove(\"levelCounter\");\n await NativeStoragePromise.remove(\"tutorial-step\");\n\n await LevelPlayed.clear();\n await LevelData.clear();\n await LastSyncDates.clear();\n });\n\n if (location.hostname.includes(\"beta\") || location.hostname.includes(\"127.0.0.1\") || location.hostname.includes(\"localhost\")) {\n // this.findBy(\"#reset-levels\").classList.remove(\"hidden\");\n }\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\")\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n let soundManager = SoundManager.getInstance();\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#track-switch\").addEventListener(\"change\", function (e) {\n Matomo.setTrack(this.checked === true);\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.findBy(\"#tutorial-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(TutorialSite);\n });\n this.findBy(\"#credits-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(CreditsSite);\n });\n this.findBy(\"#privacy-policy-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(PrivacyPolicySite);\n });\n this.findBy(\"#contact-button\").addEventListener(\"click\", () => {\n // new Toast(\"contact site\").show();\n this.getSite().startSite(ContactSite);\n });\n this.findBy(\"#impressum-button\").addEventListener(\"click\", () => {\n this.getSite().startSite(ImpressumSite);\n });\n // @ts-ignore\n this.findBy(\"#version-info\").innerText = __VERSION__;\n\n return res;\n }\n\n onStart(args) {\n Matomo.update(\"Settings Sites\");\n return super.onStart(args);\n }\n}\n","const view = require(\"../../html/sites/settingsSite.html\");\nimport {MenuSite} from \"cordova-sites/dist/client/js/Context/MenuSite\";\nimport {WordRotatorSettingFragment} from \"../Fragment/WordRotatorSettingFragment\";\nimport {App} from \"cordova-sites/dist/client/js/App\";\n\nexport class SettingsSite extends MenuSite {\n\n constructor(siteManager) {\n super(siteManager, view);\n this.addFragment(\"#wordRotatorSettings\", new WordRotatorSettingFragment(this));\n }\n}\n\nApp.addInitialization((app) => {\n app.addDeepLink(\"settings\", SettingsSite);\n});\n","const settingsIcon = require(\"../../img/settings.png\").default;\nconst view = require(\"../../html/sites/menu.html\");\n\nimport {App, Toast, DataManager, ScaleHelper, MenuSite} from \"cordova-sites/dist/client\";\nimport {Helper} from \"js-helper/dist/shared\";\nimport {LevelSite} from \"./LevelSite\";\nimport {TemplateContainer} from \"../wordrotator/Segment/TemplateContainer\";\nimport {MainMenuLevel} from \"../wordrotator/Level/MainMenuLevel\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client\";\nimport {ViewHelper} from \"js-helper/dist/client/ViewHelper\";\nimport {LevelPlayed} from \"../model/LevelPlayed\";\nimport {SyncJob} from \"cordova-sites-easy-sync/dist/client/SyncJob\";\nimport {LevelData} from \"../../../shared/model/LevelData\";\nimport {ShareManager} from \"cordova-sites/dist/client/js/ShareManager/ShareManager\";\nimport {Translator} from \"cordova-sites/dist/client/js/Translator\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\nimport {Matomo} from \"cordova-sites/dist/client/js/Legacy/Matomo\";\nimport {MenuAction} from \"cordova-sites/dist/client/js/Context/Menu/MenuAction/MenuAction\";\nimport {SettingsSite} from \"./SettingsSite\";\n\nexport class MainMenuSite extends MenuSite {\n static app: App;\n\n private loadLevelPromise: Promise;\n private listener: () => void;\n private templateContainer: TemplateContainer;\n private randomRotateTimeout;\n\n constructor(siteManager) {\n super(siteManager, view);\n this.loadLevelPromise = new SyncJob().sync([LevelData]).catch(e => console.error(e));\n this.listener = null;\n this.getNavbarFragment().setCanGoBack(false);\n }\n\n onCreateMenu(navbar) {\n super.onCreateMenu(navbar);\n let settingsAction = new MenuAction(\"\", () => {\n this.startSite(SettingsSite);\n }, MenuAction.SHOW_ALWAYS, null, settingsIcon);\n navbar.addAction(settingsAction);\n return navbar;\n }\n\n async onViewLoaded() {\n const res = super.onViewLoaded();\n\n let playButton = this.findBy(\"#play-button\");\n playButton.addEventListener(\"click\", () => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"startButton\"]);\n this.startLevelSite();\n });\n\n let leafSegmentTemplate = this.findBy(\"#segment-leaf-template\");\n let parentSegmentTemplate = this.findBy(\"#segment-parent-template\");\n let rowSegmentTemplate = this.findBy(\"#segment-row-template\");\n let triangleTemplate = this.findBy(\"#segment-triangle-template\");\n\n leafSegmentTemplate.id = null;\n parentSegmentTemplate.id = null;\n rowSegmentTemplate.id = null;\n triangleTemplate.id = null;\n\n leafSegmentTemplate.remove();\n parentSegmentTemplate.remove();\n rowSegmentTemplate.remove();\n triangleTemplate.remove();\n\n this.templateContainer = new TemplateContainer(leafSegmentTemplate, parentSegmentTemplate, rowSegmentTemplate, triangleTemplate);\n\n //TODO?\n // if (Helper.nonNull(MainMenuSite.app._cookieClosePromise)) {\n // MainMenuSite.app._cookieClosePromise.then(() => {\n // if (this.listener) {\n // this.listener();\n // }\n // });\n // }\n\n let soundManager = SoundManager.getInstance();\n\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n playMusicButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-music\", (playMusicButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playMusicButton.checked}, SoundManager.CHANNELS.MUSIC);\n if (playMusicButton.checked) {\n await soundManager.play(SoundManager.CHANNELS.MUSIC);\n }\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlayMusic\", \"Play Music\", (playMusicButton.checked) ? 1 : 0]);\n });\n\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n playSoundButton.addEventListener(\"change\", async () => {\n await NativeStoragePromise.setItem(\"play-sound\", (playSoundButton.checked) ? \"1\" : \"0\");\n soundManager.set({muted: !playSoundButton.checked}, SoundManager.CHANNELS.SOUND);\n\n //TODO [MIG] Matomo\n Matomo.push([\"trackEvent\", \"MainMenu\", \"PlaySound\", \"Play Sound\", (playSoundButton.checked) ? 1 : 0]);\n });\n\n this.findBy(\"#share-button\").addEventListener(\"click\", () => {\n new ShareManager().share(Translator.getInstance().translate(\"share-text\", [window.location]));\n });\n return res;\n // this.findBy(\"#share-buttons\").appendChild(ShareManager.generateDefaultShareElement(\"https://wordrotator.silas.link\"));\n }\n\n async onStart(args) {\n // Matomo.update(\"Menu Sites\");\n let res = super.onStart(args);\n\n let level = new MainMenuLevel(this.templateContainer);\n level.setWords([\"WORD\", \"ROTA\", \"TORW\", \"ORDR\"]);\n level.createSegments();\n\n level.getWonPromise().then(() => {\n // Matomo.push([\"trackEvent\", \"MainMenu\", \"levelSolved\"]);\n this.startLevelSite();\n });\n\n let segment = level.getRootSegment();\n segment._updateElement();\n\n let levelSegment = this.findBy(\"#level\");\n ViewHelper.removeAllChildren(levelSegment).appendChild(segment.getElement());\n\n let rotationsSegments = level.getRotatableSegments();\n\n let randomRotationFunction = () => {\n let timeout = Math.random() * 4500 + 1500;\n this.randomRotateTimeout = setTimeout(() => {\n let indexBlocked = -1;\n let indexesNotRight = [];\n for (let i = 0; i < rotationsSegments.length; i++) {\n if (rotationsSegments[i].rotation !== 0) {\n indexesNotRight.push(i);\n if (indexesNotRight.length >= 2) {\n break;\n }\n }\n }\n if (indexesNotRight.length === 1) {\n indexBlocked = indexesNotRight[0];\n }\n\n let index = Math.floor(Math.random() * rotationsSegments.length);\n if (index === indexBlocked) {\n index = (index + 1) % rotationsSegments.length;\n }\n\n rotationsSegments[index].rotate();\n randomRotationFunction();\n }, timeout);\n };\n randomRotationFunction();\n\n this.listener = async () => {\n let playButton = this.findBy(\"#play-button\");\n let levelNumber = this.findBy(\"#level-number\");\n levelNumber.innerText = Helper.nonNull(await NativeStoragePromise.getItem(\"levelCounter\"), 1);\n\n let levelSegment = this.findBy(\"#level\");\n\n let scaleHelper = new ScaleHelper();\n await scaleHelper.scaleToFull(levelSegment, levelSegment.parentElement, false, false, 2, 8, null, false);\n\n let levelStyle = getComputedStyle(levelSegment);\n playButton.style.width = levelStyle.getPropertyValue(\"width\");\n scaleHelper.scaleTo(0.65, playButton.children[0], playButton, null, null, null, 4, null, false);\n\n await scaleHelper.scaleTo(0.1, levelNumber.parentElement, levelNumber.parentElement.parentElement, null, null, null, 10, null, false);\n scaleHelper.scaleTo(1, levelNumber, levelNumber.parentElement, false, false, 5, null, null, false);\n };\n\n // this.listener();\n window.addEventListener(\"resize\", this.listener);\n setTimeout(this.listener, 50);\n\n //Musikbuttons update, falls in den Einstellungen umgestellt\n // let settingsManager = SettingsManager.getInstance();\n let playSoundButton = this.findBy(\"#play-sound\");\n playSoundButton.checked = (await NativeStoragePromise.getItem(\"play-sound\", \"1\") === \"1\");\n let playMusicButton = this.findBy(\"#play-music\");\n playMusicButton.checked = (await NativeStoragePromise.getItem(\"play-music\", \"1\") === \"1\");\n\n return res;\n }\n\n async startLevelSite() {\n SoundManager.getInstance().resumeContext();\n\n this.startSite(LevelSite, Promise.race([this.loadLevelPromise, new Promise(async resolve => {\n let levelData = await LevelPlayed.getNextLevelData(LevelSite.RENDERER_TYPES);\n if (levelData !== null) {\n resolve();\n }\n })]));\n }\n\n onPause() {\n clearTimeout(this.randomRotateTimeout);\n window.removeEventListener(\"resize\", this.listener);\n return super.onPause();\n }\n\n // async loadLevels() {\n // try {\n // const db = await WordRotatorDb.getInstance();\n // const dateLastSync = Helper.nonNull(await db.loadDateLastSync(), 0);\n // // const dateLastSync = Helper.nonNull(localStorage.getItem(\"date-last-sync\"), 0);\n //\n // // let numberLevels = db.countLevels();\n // let newLastSync = null;\n // let maxRuns = 1;\n // let levelPromises = [];\n // for (let run = 0; run < maxRuns; run++) {\n // let res = await DataManager.load(\"wordRotator/levels\" + DataManager.buildQuery({\n // \"currentRun\": run,\n // \"dateLastSync\": dateLastSync\n // }));\n // if (!res[\"success\"]) {\n // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000).show();\n // }\n // newLastSync = null;\n // break;\n // }\n // res = res[\"result\"];\n // newLastSync = Helper.nonNull(newLastSync, res[\"currentSyncDate\"]);\n // maxRuns = res[\"maxRuns\"];\n //\n // let levels = res[\"levels\"];\n // for (let i = 0; i < levels.length; i++) {\n // let currentLevel = levels[i];\n // levelPromises.push(db.loadLevel(levels[i][\"id\"]).then(level => {\n // currentLevel[\"played\"] = (Helper.nonNull(Helper.nonNull(level, {}).played, false));\n // return currentLevel;\n // }));\n // }\n // }\n // let levels = await Promise.all(levelPromises);\n // await db.saveManyLevels(levels);\n //\n // if (newLastSync != null && newLastSync !== \"null\") {\n // await NativeStoragePromise.setItem(\"date-last-sync\", newLastSync);\n // db.saveDateLastSync(newLastSync);\n // }\n // }\n // catch(e){\n // // if (await db.loadNextLevel(LevelSite.RENDERER_TYPES) === null) {\n // new Toast(\"sync-error\", 6000);\n // // }\n // console.error(e);\n // }\n // }\n}\n\nApp.addInitialization(app => {\n MainMenuSite.app = app;\n});\n","import {MigrationInterface, QueryRunner, Table} from \"typeorm\";\nimport {MigrationHelper} from \"js-helper/dist/shared\";\nimport {LevelPlayed} from \"../LevelPlayed\";\n\nexport class ClientSetup1000000002001 implements MigrationInterface {\n\n async up(queryRunner: QueryRunner): Promise {\n await MigrationHelper.addTableFromModelClass(LevelPlayed, queryRunner);\n }\n\n down(queryRunner: QueryRunner): Promise {\n return undefined;\n }\n}","export default \"img/brightAndBeautifull__.mp3\";","import translationGerman from '../translations/de.json';\nimport translationEn from '../translations/en.json';\nimport {App, Translator, DataManager, Toast} from \"cordova-sites/dist/client\";\n\nimport \"cordova-sites-user-management/dist/client/js/translationInit\"\nimport \"cordova-sites/dist/client/js/translationInit\"\n\nimport {LoginSite, RegistrationSite, UserManager} from \"cordova-sites-user-management/dist/client\";\n\nimport {BaseDatabase} from \"cordova-sites-database/dist/cordova-sites-database\";\nimport {DeleteUserManagement1000000000000} from \"cordova-sites-user-management/dist/shared//migrations/DeleteUserManagement\";\nimport {SetupUserManagement1000000001000} from \"cordova-sites-user-management/dist/shared/migrations/SetupUserManagement\";\nimport {Setup1000000002000} from \"../../shared/model/migration/shared/Setup\";\nimport {SetupEasySync1000000000500} from \"cordova-sites-easy-sync/dist/client\";\nimport {MainMenuSite} from \"./Sites/MainMenuSite\";\nimport {ClientSetup1000000002001} from \"./model/migration/ClientSetup\";\nimport {EasySyncClientDb} from \"cordova-sites-easy-sync/dist/client/EasySyncClientDb\";\nimport {NavbarFragment} from \"cordova-sites/dist/client/js/Context/Menu/NavbarFragment\";\nimport {NativeStoragePromise} from \"cordova-sites/dist/client/js/NativeStoragePromise\";\n\nimport music from \"../sound/brightAndBeautifull__.mp3\";\nimport {SoundManager} from \"cordova-sites/dist/client/js/Sound/SoundManager\";\n\nwindow[\"JSObject\"] = Object;\n\n//Disable Google Analytics for VideoJS\nwindow[\"HELP_IMPROVE_VIDEOJS\"] = false;\n\nLoginSite.ADD_LOGIN_ACTION = false;\nRegistrationSite.ADD_REGISTRATION_ACTION = false;\n\nApp.addInitialization(async () => {\n Translator.init({\n translations: {\n \"de\": translationGerman,\n \"en\": translationEn\n },\n fallbackLanguage: \"de\",\n // markTranslations: true,\n markUntranslatedTranslations: true,\n });\n\n //Setting Title\n NavbarFragment.title = \"WordRotator\";\n\n let soundManager = SoundManager.getInstance();\n soundManager.play(SoundManager.CHANNELS.MUSIC, {\n audio: music,\n loop: true,\n volume: 0.6,\n muted: (await NativeStoragePromise.getItem(\"play-music\", \"1\") !== \"1\")\n }).catch(e => console.error(e));\n\n await UserManager.getInstance().getMe().catch(e => console.error(e));\n\n UserManager.getInstance().addLoginChangeCallback(async (isLoggedIn) => {\n if (isLoggedIn) {\n // await new SyncJob().sync([UserManager.syncParamFor(Definition), UserManager.syncParamFor(ExerciseProgress), UserManager.syncParamFor(WrongAnswer)]).catch(e => console.error(e));\n }\n });\n});\n\nDataManager._basePath = __HOST_ADDRESS__;\nDataManager.onlineCallback = isOnline => {\n if (!isOnline){\n new Toast(\"not online!\").show();\n }\n};\n\nObject.assign(BaseDatabase.CONNECTION_OPTIONS, {\n logging: [\"error\",],\n synchronize: false,\n migrationsRun: true,\n migrations: [\n DeleteUserManagement1000000000000,\n SetupEasySync1000000000500,\n SetupUserManagement1000000001000,\n Setup1000000002000,\n ClientSetup1000000002001,\n ]\n});\n\nlet app = new App();\napp.start(MainMenuSite).catch(e => console.error(e)).then(async () => {\n window[\"queryDb\"] = async (sql) => {\n // SELECT name FROM my_db.sqlite_master WHERE type='table';\n\n\n // console.log(\"DB\", EasySyncClientDb.getInstance());\n let res = await EasySyncClientDb.getInstance().rawQuery(sql);\n console.log(res);\n return res;\n }\n});\napp.ready(() => {\n console.log(\"initialisation over\", new Date());\n\n if (device.platform === \"browser\"){\n // Check that service workers are supported\n if ('serviceWorker' in navigator) {\n // Use the window load event to keep the page load performant\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('service-worker.js');\n });\n }\n }\n\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/server/public/config.xml b/src/server/public/config.xml index 2d0962b..53e90d3 100644 --- a/src/server/public/config.xml +++ b/src/server/public/config.xml @@ -1,6 +1,6 @@ - - WordRotator + + WordRotator - Test A word-game diff --git a/src/server/public/html/imageSelectionElement.html b/src/server/public/html/imageSelectionElement.html new file mode 100644 index 0000000..a8ddbb4 --- /dev/null +++ b/src/server/public/html/imageSelectionElement.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/server/public/html/level.html b/src/server/public/html/level.html index 470bac9..01050a4 100644 --- a/src/server/public/html/level.html +++ b/src/server/public/html/level.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/src/server/public/index.css b/src/server/public/index.css index 6e10def..4243c5b 100644 --- a/src/server/public/index.css +++ b/src/server/public/index.css @@ -1,4 +1,4 @@ -@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.foundation-mq{font-family:"small=0em&smedium=25em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:100%}*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;border-radius:0}.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;background:transparent;line-height:1;cursor:auto}[data-whatinput='mouse'] button{outline:0}pre{overflow:auto}button,input,optgroup,select,textarea{font-family:inherit}.is-visible{display:block !important}.is-hidden{display:none !important}[type='text'],[type='password'],[type='date'],[type='datetime'],[type='datetime-local'],[type='month'],[type='week'],[type='email'],[type='number'],[type='search'],[type='tel'],[type='time'],[type='url'],[type='color'],textarea{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type='text']:focus,[type='password']:focus,[type='date']:focus,[type='datetime']:focus,[type='datetime-local']:focus,[type='month']:focus,[type='week']:focus,[type='email']:focus,[type='number']:focus,[type='search']:focus,[type='tel']:focus,[type='time']:focus,[type='url']:focus,[type='color']:focus,textarea:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}textarea{max-width:100%}textarea[rows]{height:auto}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type='submit'],[type='button']{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}input[type='search']{-webkit-box-sizing:border-box;box-sizing:border-box}::-webkit-input-placeholder{color:#cacaca}::-moz-placeholder{color:#cacaca}:-ms-input-placeholder{color:#cacaca}::-ms-input-placeholder{color:#cacaca}::placeholder{color:#cacaca}[type='file'],[type='checkbox'],[type='radio']{margin:0 0 1rem}[type='checkbox']+label,[type='radio']+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type='checkbox']+label[for],[type='radio']+label[for]{cursor:pointer}label>[type='checkbox'],label>[type='radio']{margin-right:.5rem}[type='file']{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:normal;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:1rem;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.input-group>:first-child,.input-group>:first-child.input-group-button>*{border-radius:0 0 0 0}.input-group>:last-child,.input-group>:last-child.input-group-button>*{border-radius:0 0 0 0}.input-group-label,.input-group-field,.input-group-button,.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{margin:0;white-space:nowrap}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;min-width:0}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;height:auto;padding-top:0;padding-bottom:0;font-size:1rem}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}@media screen and (min-width: 0\0){select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==")}}select:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}select:not([multiple]){padding-top:0;padding-bottom:0}.is-invalid-input:not(:focus){border-color:#cc4b37;background-color:#f9ecea}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-moz-placeholder{color:#cc4b37}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::placeholder{color:#cc4b37}.is-invalid-label{color:#cc4b37}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:bold;color:#cc4b37}.form-error.is-visible{display:block}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:80%;line-height:inherit}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;color:inherit;text-rendering:optimizeLegibility}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small{line-height:0;color:#cacaca}h1,.h1{font-size:1.5rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h2,.h2{font-size:1.25rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h3,.h3{font-size:1.1875rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h4,.h4{font-size:1.125rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h5,.h5{font-size:1.0625rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h6,.h6{font-size:1rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}@media print, screen and (min-width: 40em){h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:1.9375rem}h4,.h4{font-size:1.5625rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}}a{line-height:inherit;color:#1779ba;text-decoration:none;cursor:pointer}a:hover,a:focus{color:#1468a0}a img{border:0}hr{clear:both;max-width:75rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}ul,ol,dl{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{margin-left:1.25rem;list-style-type:disc}ol{margin-left:1.25rem}ul ul,ol ul,ul ol,ol ol{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:bold}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}abbr,abbr[title]{border-bottom:1px dotted #0a0a0a;cursor:help;text-decoration:none}figure{margin:0}kbd{margin:0;padding:.125rem .25rem 0;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;color:#0a0a0a}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:normal;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}ul.no-bullet,ol.no-bullet{margin-left:0;list-style:none}.cite-block,cite{display:block;color:#8a8a8a;font-size:.8125rem}.cite-block:before,cite:before{content:"— "}.code-inline,code{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:inline;max-width:100%;word-wrap:break-word;padding:.125rem .3125rem .0625rem}.code-block{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:block;overflow:auto;white-space:pre;padding:1rem;margin-bottom:1.5rem}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media screen and (min-width: 25em){.smedium-text-left{text-align:left}.smedium-text-right{text-align:right}.smedium-text-center{text-align:center}.smedium-text-justify{text-align:justify}}@media print, screen and (min-width: 40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print, screen and (min-width: 64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none !important}@media print{*{background:transparent !important;color:black !important;-webkit-print-color-adjust:economy;color-adjust:economy;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}.show-for-print{display:block !important}.hide-for-print{display:none !important}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^='javascript:']:after,a[href^='#']:after{content:''}abbr[title]:after{content:" (" attr(title) ")"}pre,blockquote{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.grid-container{padding-right:.625rem;padding-left:.625rem;max-width:75rem;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.fluid{padding-right:.625rem;padding-left:.625rem;max-width:100%;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container.fluid{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.full{padding-right:0;padding-left:0;max-width:100%;margin-left:auto;margin-right:auto}.grid-x{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.cell{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-height:0px;min-width:0px;width:100%}.cell.auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.cell.shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.auto{width:auto}.grid-x>.shrink{width:auto}.grid-x>.small-shrink,.grid-x>.small-full,.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-x>.smedium-shrink,.grid-x>.smedium-full,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-x>.medium-shrink,.grid-x>.medium-full,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-x>.large-shrink,.grid-x>.large-full,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.small-1{width:8.33333%}.grid-x>.small-2{width:16.66667%}.grid-x>.small-3{width:25%}.grid-x>.small-4{width:33.33333%}.grid-x>.small-5{width:41.66667%}.grid-x>.small-6{width:50%}.grid-x>.small-7{width:58.33333%}.grid-x>.small-8{width:66.66667%}.grid-x>.small-9{width:75%}.grid-x>.small-10{width:83.33333%}.grid-x>.small-11{width:91.66667%}.grid-x>.small-12{width:100%}@media screen and (min-width: 25em){.grid-x>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.smedium-shrink,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.smedium-shrink{width:auto}.grid-x>.smedium-1{width:8.33333%}.grid-x>.smedium-2{width:16.66667%}.grid-x>.smedium-3{width:25%}.grid-x>.smedium-4{width:33.33333%}.grid-x>.smedium-5{width:41.66667%}.grid-x>.smedium-6{width:50%}.grid-x>.smedium-7{width:58.33333%}.grid-x>.smedium-8{width:66.66667%}.grid-x>.smedium-9{width:75%}.grid-x>.smedium-10{width:83.33333%}.grid-x>.smedium-11{width:91.66667%}.grid-x>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.grid-x>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.medium-shrink,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.medium-shrink{width:auto}.grid-x>.medium-1{width:8.33333%}.grid-x>.medium-2{width:16.66667%}.grid-x>.medium-3{width:25%}.grid-x>.medium-4{width:33.33333%}.grid-x>.medium-5{width:41.66667%}.grid-x>.medium-6{width:50%}.grid-x>.medium-7{width:58.33333%}.grid-x>.medium-8{width:66.66667%}.grid-x>.medium-9{width:75%}.grid-x>.medium-10{width:83.33333%}.grid-x>.medium-11{width:91.66667%}.grid-x>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.grid-x>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.large-shrink,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.large-shrink{width:auto}.grid-x>.large-1{width:8.33333%}.grid-x>.large-2{width:16.66667%}.grid-x>.large-3{width:25%}.grid-x>.large-4{width:33.33333%}.grid-x>.large-5{width:41.66667%}.grid-x>.large-6{width:50%}.grid-x>.large-7{width:58.33333%}.grid-x>.large-8{width:66.66667%}.grid-x>.large-9{width:75%}.grid-x>.large-10{width:83.33333%}.grid-x>.large-11{width:91.66667%}.grid-x>.large-12{width:100%}}.grid-margin-x:not(.grid-x)>.cell{width:auto}.grid-margin-y:not(.grid-y)>.cell{height:auto}.grid-margin-x{margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-x{margin-left:-.9375rem;margin-right:-.9375rem}}.grid-margin-x>.cell{width:calc(100% - 1.25rem);margin-left:.625rem;margin-right:.625rem}@media print, screen and (min-width: 40em){.grid-margin-x>.cell{width:calc(100% - 1.875rem);margin-left:.9375rem;margin-right:.9375rem}}.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.small-3{width:calc(25% - 1.25rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.small-6{width:calc(50% - 1.25rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.small-9{width:calc(75% - 1.25rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.small-12{width:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x>.smedium-auto{width:auto}.grid-margin-x>.smedium-shrink{width:auto}.grid-margin-x>.smedium-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.smedium-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.smedium-3{width:calc(25% - 1.25rem)}.grid-margin-x>.smedium-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.smedium-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.smedium-6{width:calc(50% - 1.25rem)}.grid-margin-x>.smedium-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.smedium-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.smedium-9{width:calc(75% - 1.25rem)}.grid-margin-x>.smedium-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.smedium-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.smedium-12{width:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.small-3{width:calc(25% - 1.875rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.small-6{width:calc(50% - 1.875rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.small-9{width:calc(75% - 1.875rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.small-12{width:calc(100% - 1.875rem)}.grid-margin-x>.medium-auto{width:auto}.grid-margin-x>.medium-shrink{width:auto}.grid-margin-x>.medium-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.medium-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.medium-3{width:calc(25% - 1.875rem)}.grid-margin-x>.medium-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.medium-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.medium-6{width:calc(50% - 1.875rem)}.grid-margin-x>.medium-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.medium-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.medium-9{width:calc(75% - 1.875rem)}.grid-margin-x>.medium-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.medium-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.medium-12{width:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x>.large-auto{width:auto}.grid-margin-x>.large-shrink{width:auto}.grid-margin-x>.large-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.large-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.large-3{width:calc(25% - 1.875rem)}.grid-margin-x>.large-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.large-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.large-6{width:calc(50% - 1.875rem)}.grid-margin-x>.large-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.large-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.large-9{width:calc(75% - 1.875rem)}.grid-margin-x>.large-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.large-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.large-12{width:calc(100% - 1.875rem)}}.grid-padding-x .grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-x .grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-container:not(.full)>.grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-container:not(.full)>.grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-padding-x>.cell{padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.grid-padding-x>.cell{padding-right:.9375rem;padding-left:.9375rem}}.small-up-1>.cell{width:100%}.small-up-2>.cell{width:50%}.small-up-3>.cell{width:33.33333%}.small-up-4>.cell{width:25%}.small-up-5>.cell{width:20%}.small-up-6>.cell{width:16.66667%}.small-up-7>.cell{width:14.28571%}.small-up-8>.cell{width:12.5%}@media screen and (min-width: 25em){.smedium-up-1>.cell{width:100%}.smedium-up-2>.cell{width:50%}.smedium-up-3>.cell{width:33.33333%}.smedium-up-4>.cell{width:25%}.smedium-up-5>.cell{width:20%}.smedium-up-6>.cell{width:16.66667%}.smedium-up-7>.cell{width:14.28571%}.smedium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 40em){.medium-up-1>.cell{width:100%}.medium-up-2>.cell{width:50%}.medium-up-3>.cell{width:33.33333%}.medium-up-4>.cell{width:25%}.medium-up-5>.cell{width:20%}.medium-up-6>.cell{width:16.66667%}.medium-up-7>.cell{width:14.28571%}.medium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 64em){.large-up-1>.cell{width:100%}.large-up-2>.cell{width:50%}.large-up-3>.cell{width:33.33333%}.large-up-4>.cell{width:25%}.large-up-5>.cell{width:20%}.large-up-6>.cell{width:16.66667%}.large-up-7>.cell{width:14.28571%}.large-up-8>.cell{width:12.5%}}.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x.smedium-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.smedium-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.smedium-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.smedium-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.smedium-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.smedium-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.smedium-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.smedium-up-8>.cell{width:calc(12.5% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.875rem)}.grid-margin-x.medium-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.medium-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.medium-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.medium-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.medium-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.medium-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.medium-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.medium-up-8>.cell{width:calc(12.5% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x.large-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.large-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.large-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.large-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.large-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.large-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.large-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.large-up-8>.cell{width:calc(12.5% - 1.875rem)}}.small-margin-collapse{margin-right:0;margin-left:0}.small-margin-collapse>.cell{margin-right:0;margin-left:0}.small-margin-collapse>.small-1{width:8.33333%}.small-margin-collapse>.small-2{width:16.66667%}.small-margin-collapse>.small-3{width:25%}.small-margin-collapse>.small-4{width:33.33333%}.small-margin-collapse>.small-5{width:41.66667%}.small-margin-collapse>.small-6{width:50%}.small-margin-collapse>.small-7{width:58.33333%}.small-margin-collapse>.small-8{width:66.66667%}.small-margin-collapse>.small-9{width:75%}.small-margin-collapse>.small-10{width:83.33333%}.small-margin-collapse>.small-11{width:91.66667%}.small-margin-collapse>.small-12{width:100%}@media screen and (min-width: 25em){.small-margin-collapse>.smedium-1{width:8.33333%}.small-margin-collapse>.smedium-2{width:16.66667%}.small-margin-collapse>.smedium-3{width:25%}.small-margin-collapse>.smedium-4{width:33.33333%}.small-margin-collapse>.smedium-5{width:41.66667%}.small-margin-collapse>.smedium-6{width:50%}.small-margin-collapse>.smedium-7{width:58.33333%}.small-margin-collapse>.smedium-8{width:66.66667%}.small-margin-collapse>.smedium-9{width:75%}.small-margin-collapse>.smedium-10{width:83.33333%}.small-margin-collapse>.smedium-11{width:91.66667%}.small-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.small-margin-collapse>.medium-1{width:8.33333%}.small-margin-collapse>.medium-2{width:16.66667%}.small-margin-collapse>.medium-3{width:25%}.small-margin-collapse>.medium-4{width:33.33333%}.small-margin-collapse>.medium-5{width:41.66667%}.small-margin-collapse>.medium-6{width:50%}.small-margin-collapse>.medium-7{width:58.33333%}.small-margin-collapse>.medium-8{width:66.66667%}.small-margin-collapse>.medium-9{width:75%}.small-margin-collapse>.medium-10{width:83.33333%}.small-margin-collapse>.medium-11{width:91.66667%}.small-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.small-margin-collapse>.large-1{width:8.33333%}.small-margin-collapse>.large-2{width:16.66667%}.small-margin-collapse>.large-3{width:25%}.small-margin-collapse>.large-4{width:33.33333%}.small-margin-collapse>.large-5{width:41.66667%}.small-margin-collapse>.large-6{width:50%}.small-margin-collapse>.large-7{width:58.33333%}.small-margin-collapse>.large-8{width:66.66667%}.small-margin-collapse>.large-9{width:75%}.small-margin-collapse>.large-10{width:83.33333%}.small-margin-collapse>.large-11{width:91.66667%}.small-margin-collapse>.large-12{width:100%}}.small-padding-collapse{margin-right:0;margin-left:0}.small-padding-collapse>.cell{padding-right:0;padding-left:0}@media screen and (min-width: 25em){.smedium-margin-collapse{margin-right:0;margin-left:0}.smedium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media screen and (min-width: 25em){.smedium-margin-collapse>.small-1{width:8.33333%}.smedium-margin-collapse>.small-2{width:16.66667%}.smedium-margin-collapse>.small-3{width:25%}.smedium-margin-collapse>.small-4{width:33.33333%}.smedium-margin-collapse>.small-5{width:41.66667%}.smedium-margin-collapse>.small-6{width:50%}.smedium-margin-collapse>.small-7{width:58.33333%}.smedium-margin-collapse>.small-8{width:66.66667%}.smedium-margin-collapse>.small-9{width:75%}.smedium-margin-collapse>.small-10{width:83.33333%}.smedium-margin-collapse>.small-11{width:91.66667%}.smedium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.smedium-1{width:8.33333%}.smedium-margin-collapse>.smedium-2{width:16.66667%}.smedium-margin-collapse>.smedium-3{width:25%}.smedium-margin-collapse>.smedium-4{width:33.33333%}.smedium-margin-collapse>.smedium-5{width:41.66667%}.smedium-margin-collapse>.smedium-6{width:50%}.smedium-margin-collapse>.smedium-7{width:58.33333%}.smedium-margin-collapse>.smedium-8{width:66.66667%}.smedium-margin-collapse>.smedium-9{width:75%}.smedium-margin-collapse>.smedium-10{width:83.33333%}.smedium-margin-collapse>.smedium-11{width:91.66667%}.smedium-margin-collapse>.smedium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.medium-1{width:8.33333%}.smedium-margin-collapse>.medium-2{width:16.66667%}.smedium-margin-collapse>.medium-3{width:25%}.smedium-margin-collapse>.medium-4{width:33.33333%}.smedium-margin-collapse>.medium-5{width:41.66667%}.smedium-margin-collapse>.medium-6{width:50%}.smedium-margin-collapse>.medium-7{width:58.33333%}.smedium-margin-collapse>.medium-8{width:66.66667%}.smedium-margin-collapse>.medium-9{width:75%}.smedium-margin-collapse>.medium-10{width:83.33333%}.smedium-margin-collapse>.medium-11{width:91.66667%}.smedium-margin-collapse>.medium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.large-1{width:8.33333%}.smedium-margin-collapse>.large-2{width:16.66667%}.smedium-margin-collapse>.large-3{width:25%}.smedium-margin-collapse>.large-4{width:33.33333%}.smedium-margin-collapse>.large-5{width:41.66667%}.smedium-margin-collapse>.large-6{width:50%}.smedium-margin-collapse>.large-7{width:58.33333%}.smedium-margin-collapse>.large-8{width:66.66667%}.smedium-margin-collapse>.large-9{width:75%}.smedium-margin-collapse>.large-10{width:83.33333%}.smedium-margin-collapse>.large-11{width:91.66667%}.smedium-margin-collapse>.large-12{width:100%}}@media screen and (min-width: 25em){.smedium-padding-collapse{margin-right:0;margin-left:0}.smedium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse{margin-right:0;margin-left:0}.medium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.small-1{width:8.33333%}.medium-margin-collapse>.small-2{width:16.66667%}.medium-margin-collapse>.small-3{width:25%}.medium-margin-collapse>.small-4{width:33.33333%}.medium-margin-collapse>.small-5{width:41.66667%}.medium-margin-collapse>.small-6{width:50%}.medium-margin-collapse>.small-7{width:58.33333%}.medium-margin-collapse>.small-8{width:66.66667%}.medium-margin-collapse>.small-9{width:75%}.medium-margin-collapse>.small-10{width:83.33333%}.medium-margin-collapse>.small-11{width:91.66667%}.medium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.medium-margin-collapse>.smedium-1{width:8.33333%}.medium-margin-collapse>.smedium-2{width:16.66667%}.medium-margin-collapse>.smedium-3{width:25%}.medium-margin-collapse>.smedium-4{width:33.33333%}.medium-margin-collapse>.smedium-5{width:41.66667%}.medium-margin-collapse>.smedium-6{width:50%}.medium-margin-collapse>.smedium-7{width:58.33333%}.medium-margin-collapse>.smedium-8{width:66.66667%}.medium-margin-collapse>.smedium-9{width:75%}.medium-margin-collapse>.smedium-10{width:83.33333%}.medium-margin-collapse>.smedium-11{width:91.66667%}.medium-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.medium-1{width:8.33333%}.medium-margin-collapse>.medium-2{width:16.66667%}.medium-margin-collapse>.medium-3{width:25%}.medium-margin-collapse>.medium-4{width:33.33333%}.medium-margin-collapse>.medium-5{width:41.66667%}.medium-margin-collapse>.medium-6{width:50%}.medium-margin-collapse>.medium-7{width:58.33333%}.medium-margin-collapse>.medium-8{width:66.66667%}.medium-margin-collapse>.medium-9{width:75%}.medium-margin-collapse>.medium-10{width:83.33333%}.medium-margin-collapse>.medium-11{width:91.66667%}.medium-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.medium-margin-collapse>.large-1{width:8.33333%}.medium-margin-collapse>.large-2{width:16.66667%}.medium-margin-collapse>.large-3{width:25%}.medium-margin-collapse>.large-4{width:33.33333%}.medium-margin-collapse>.large-5{width:41.66667%}.medium-margin-collapse>.large-6{width:50%}.medium-margin-collapse>.large-7{width:58.33333%}.medium-margin-collapse>.large-8{width:66.66667%}.medium-margin-collapse>.large-9{width:75%}.medium-margin-collapse>.large-10{width:83.33333%}.medium-margin-collapse>.large-11{width:91.66667%}.medium-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 40em){.medium-padding-collapse{margin-right:0;margin-left:0}.medium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse{margin-right:0;margin-left:0}.large-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse>.small-1{width:8.33333%}.large-margin-collapse>.small-2{width:16.66667%}.large-margin-collapse>.small-3{width:25%}.large-margin-collapse>.small-4{width:33.33333%}.large-margin-collapse>.small-5{width:41.66667%}.large-margin-collapse>.small-6{width:50%}.large-margin-collapse>.small-7{width:58.33333%}.large-margin-collapse>.small-8{width:66.66667%}.large-margin-collapse>.small-9{width:75%}.large-margin-collapse>.small-10{width:83.33333%}.large-margin-collapse>.small-11{width:91.66667%}.large-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.large-margin-collapse>.smedium-1{width:8.33333%}.large-margin-collapse>.smedium-2{width:16.66667%}.large-margin-collapse>.smedium-3{width:25%}.large-margin-collapse>.smedium-4{width:33.33333%}.large-margin-collapse>.smedium-5{width:41.66667%}.large-margin-collapse>.smedium-6{width:50%}.large-margin-collapse>.smedium-7{width:58.33333%}.large-margin-collapse>.smedium-8{width:66.66667%}.large-margin-collapse>.smedium-9{width:75%}.large-margin-collapse>.smedium-10{width:83.33333%}.large-margin-collapse>.smedium-11{width:91.66667%}.large-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.medium-1{width:8.33333%}.large-margin-collapse>.medium-2{width:16.66667%}.large-margin-collapse>.medium-3{width:25%}.large-margin-collapse>.medium-4{width:33.33333%}.large-margin-collapse>.medium-5{width:41.66667%}.large-margin-collapse>.medium-6{width:50%}.large-margin-collapse>.medium-7{width:58.33333%}.large-margin-collapse>.medium-8{width:66.66667%}.large-margin-collapse>.medium-9{width:75%}.large-margin-collapse>.medium-10{width:83.33333%}.large-margin-collapse>.medium-11{width:91.66667%}.large-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.large-1{width:8.33333%}.large-margin-collapse>.large-2{width:16.66667%}.large-margin-collapse>.large-3{width:25%}.large-margin-collapse>.large-4{width:33.33333%}.large-margin-collapse>.large-5{width:41.66667%}.large-margin-collapse>.large-6{width:50%}.large-margin-collapse>.large-7{width:58.33333%}.large-margin-collapse>.large-8{width:66.66667%}.large-margin-collapse>.large-9{width:75%}.large-margin-collapse>.large-10{width:83.33333%}.large-margin-collapse>.large-11{width:91.66667%}.large-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 64em){.large-padding-collapse{margin-right:0;margin-left:0}.large-padding-collapse>.cell{padding-right:0;padding-left:0}}.small-offset-0{margin-left:0%}.grid-margin-x>.small-offset-0{margin-left:calc(0% + .625rem)}.small-offset-1{margin-left:8.33333%}.grid-margin-x>.small-offset-1{margin-left:calc(8.33333% + .625rem)}.small-offset-2{margin-left:16.66667%}.grid-margin-x>.small-offset-2{margin-left:calc(16.66667% + .625rem)}.small-offset-3{margin-left:25%}.grid-margin-x>.small-offset-3{margin-left:calc(25% + .625rem)}.small-offset-4{margin-left:33.33333%}.grid-margin-x>.small-offset-4{margin-left:calc(33.33333% + .625rem)}.small-offset-5{margin-left:41.66667%}.grid-margin-x>.small-offset-5{margin-left:calc(41.66667% + .625rem)}.small-offset-6{margin-left:50%}.grid-margin-x>.small-offset-6{margin-left:calc(50% + .625rem)}.small-offset-7{margin-left:58.33333%}.grid-margin-x>.small-offset-7{margin-left:calc(58.33333% + .625rem)}.small-offset-8{margin-left:66.66667%}.grid-margin-x>.small-offset-8{margin-left:calc(66.66667% + .625rem)}.small-offset-9{margin-left:75%}.grid-margin-x>.small-offset-9{margin-left:calc(75% + .625rem)}.small-offset-10{margin-left:83.33333%}.grid-margin-x>.small-offset-10{margin-left:calc(83.33333% + .625rem)}.small-offset-11{margin-left:91.66667%}.grid-margin-x>.small-offset-11{margin-left:calc(91.66667% + .625rem)}@media screen and (min-width: 25em){.smedium-offset-0{margin-left:0%}.grid-margin-x>.smedium-offset-0{margin-left:calc(0% + .625rem)}.smedium-offset-1{margin-left:8.33333%}.grid-margin-x>.smedium-offset-1{margin-left:calc(8.33333% + .625rem)}.smedium-offset-2{margin-left:16.66667%}.grid-margin-x>.smedium-offset-2{margin-left:calc(16.66667% + .625rem)}.smedium-offset-3{margin-left:25%}.grid-margin-x>.smedium-offset-3{margin-left:calc(25% + .625rem)}.smedium-offset-4{margin-left:33.33333%}.grid-margin-x>.smedium-offset-4{margin-left:calc(33.33333% + .625rem)}.smedium-offset-5{margin-left:41.66667%}.grid-margin-x>.smedium-offset-5{margin-left:calc(41.66667% + .625rem)}.smedium-offset-6{margin-left:50%}.grid-margin-x>.smedium-offset-6{margin-left:calc(50% + .625rem)}.smedium-offset-7{margin-left:58.33333%}.grid-margin-x>.smedium-offset-7{margin-left:calc(58.33333% + .625rem)}.smedium-offset-8{margin-left:66.66667%}.grid-margin-x>.smedium-offset-8{margin-left:calc(66.66667% + .625rem)}.smedium-offset-9{margin-left:75%}.grid-margin-x>.smedium-offset-9{margin-left:calc(75% + .625rem)}.smedium-offset-10{margin-left:83.33333%}.grid-margin-x>.smedium-offset-10{margin-left:calc(83.33333% + .625rem)}.smedium-offset-11{margin-left:91.66667%}.grid-margin-x>.smedium-offset-11{margin-left:calc(91.66667% + .625rem)}}@media print, screen and (min-width: 40em){.medium-offset-0{margin-left:0%}.grid-margin-x>.medium-offset-0{margin-left:calc(0% + .9375rem)}.medium-offset-1{margin-left:8.33333%}.grid-margin-x>.medium-offset-1{margin-left:calc(8.33333% + .9375rem)}.medium-offset-2{margin-left:16.66667%}.grid-margin-x>.medium-offset-2{margin-left:calc(16.66667% + .9375rem)}.medium-offset-3{margin-left:25%}.grid-margin-x>.medium-offset-3{margin-left:calc(25% + .9375rem)}.medium-offset-4{margin-left:33.33333%}.grid-margin-x>.medium-offset-4{margin-left:calc(33.33333% + .9375rem)}.medium-offset-5{margin-left:41.66667%}.grid-margin-x>.medium-offset-5{margin-left:calc(41.66667% + .9375rem)}.medium-offset-6{margin-left:50%}.grid-margin-x>.medium-offset-6{margin-left:calc(50% + .9375rem)}.medium-offset-7{margin-left:58.33333%}.grid-margin-x>.medium-offset-7{margin-left:calc(58.33333% + .9375rem)}.medium-offset-8{margin-left:66.66667%}.grid-margin-x>.medium-offset-8{margin-left:calc(66.66667% + .9375rem)}.medium-offset-9{margin-left:75%}.grid-margin-x>.medium-offset-9{margin-left:calc(75% + .9375rem)}.medium-offset-10{margin-left:83.33333%}.grid-margin-x>.medium-offset-10{margin-left:calc(83.33333% + .9375rem)}.medium-offset-11{margin-left:91.66667%}.grid-margin-x>.medium-offset-11{margin-left:calc(91.66667% + .9375rem)}}@media print, screen and (min-width: 64em){.large-offset-0{margin-left:0%}.grid-margin-x>.large-offset-0{margin-left:calc(0% + .9375rem)}.large-offset-1{margin-left:8.33333%}.grid-margin-x>.large-offset-1{margin-left:calc(8.33333% + .9375rem)}.large-offset-2{margin-left:16.66667%}.grid-margin-x>.large-offset-2{margin-left:calc(16.66667% + .9375rem)}.large-offset-3{margin-left:25%}.grid-margin-x>.large-offset-3{margin-left:calc(25% + .9375rem)}.large-offset-4{margin-left:33.33333%}.grid-margin-x>.large-offset-4{margin-left:calc(33.33333% + .9375rem)}.large-offset-5{margin-left:41.66667%}.grid-margin-x>.large-offset-5{margin-left:calc(41.66667% + .9375rem)}.large-offset-6{margin-left:50%}.grid-margin-x>.large-offset-6{margin-left:calc(50% + .9375rem)}.large-offset-7{margin-left:58.33333%}.grid-margin-x>.large-offset-7{margin-left:calc(58.33333% + .9375rem)}.large-offset-8{margin-left:66.66667%}.grid-margin-x>.large-offset-8{margin-left:calc(66.66667% + .9375rem)}.large-offset-9{margin-left:75%}.grid-margin-x>.large-offset-9{margin-left:calc(75% + .9375rem)}.large-offset-10{margin-left:83.33333%}.grid-margin-x>.large-offset-10{margin-left:calc(83.33333% + .9375rem)}.large-offset-11{margin-left:91.66667%}.grid-margin-x>.large-offset-11{margin-left:calc(91.66667% + .9375rem)}}.grid-y{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.grid-y>.cell{height:auto;max-height:none}.grid-y>.auto{height:auto}.grid-y>.shrink{height:auto}.grid-y>.small-shrink,.grid-y>.small-full,.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-y>.smedium-shrink,.grid-y>.smedium-full,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-y>.medium-shrink,.grid-y>.medium-full,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-y>.large-shrink,.grid-y>.large-full,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.small-1{height:8.33333%}.grid-y>.small-2{height:16.66667%}.grid-y>.small-3{height:25%}.grid-y>.small-4{height:33.33333%}.grid-y>.small-5{height:41.66667%}.grid-y>.small-6{height:50%}.grid-y>.small-7{height:58.33333%}.grid-y>.small-8{height:66.66667%}.grid-y>.small-9{height:75%}.grid-y>.small-10{height:83.33333%}.grid-y>.small-11{height:91.66667%}.grid-y>.small-12{height:100%}@media screen and (min-width: 25em){.grid-y>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.smedium-shrink,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.smedium-shrink{height:auto}.grid-y>.smedium-1{height:8.33333%}.grid-y>.smedium-2{height:16.66667%}.grid-y>.smedium-3{height:25%}.grid-y>.smedium-4{height:33.33333%}.grid-y>.smedium-5{height:41.66667%}.grid-y>.smedium-6{height:50%}.grid-y>.smedium-7{height:58.33333%}.grid-y>.smedium-8{height:66.66667%}.grid-y>.smedium-9{height:75%}.grid-y>.smedium-10{height:83.33333%}.grid-y>.smedium-11{height:91.66667%}.grid-y>.smedium-12{height:100%}}@media print, screen and (min-width: 40em){.grid-y>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.medium-shrink,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.medium-shrink{height:auto}.grid-y>.medium-1{height:8.33333%}.grid-y>.medium-2{height:16.66667%}.grid-y>.medium-3{height:25%}.grid-y>.medium-4{height:33.33333%}.grid-y>.medium-5{height:41.66667%}.grid-y>.medium-6{height:50%}.grid-y>.medium-7{height:58.33333%}.grid-y>.medium-8{height:66.66667%}.grid-y>.medium-9{height:75%}.grid-y>.medium-10{height:83.33333%}.grid-y>.medium-11{height:91.66667%}.grid-y>.medium-12{height:100%}}@media print, screen and (min-width: 64em){.grid-y>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.large-shrink,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.large-shrink{height:auto}.grid-y>.large-1{height:8.33333%}.grid-y>.large-2{height:16.66667%}.grid-y>.large-3{height:25%}.grid-y>.large-4{height:33.33333%}.grid-y>.large-5{height:41.66667%}.grid-y>.large-6{height:50%}.grid-y>.large-7{height:58.33333%}.grid-y>.large-8{height:66.66667%}.grid-y>.large-9{height:75%}.grid-y>.large-10{height:83.33333%}.grid-y>.large-11{height:91.66667%}.grid-y>.large-12{height:100%}}.grid-padding-y .grid-padding-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-y .grid-padding-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-padding-y>.cell{padding-top:.625rem;padding-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-padding-y>.cell{padding-top:.9375rem;padding-bottom:.9375rem}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .grid-frame{width:100%}.cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media screen and (min-width: 25em){.smedium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .smedium-grid-frame{width:100%}.smedium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.smedium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.smedium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.smedium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 40em){.medium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .medium-grid-frame{width:100%}.medium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.medium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.medium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.medium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 64em){.large-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .large-grid-frame{width:100%}.large-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.large-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.large-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.large-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}.grid-y.grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}@media screen and (min-width: 25em){.grid-y.smedium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 40em){.grid-y.medium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 64em){.grid-y.large-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}.cell .grid-y.grid-frame{height:100%}@media screen and (min-width: 25em){.cell .grid-y.smedium-grid-frame{height:100%}}@media print, screen and (min-width: 40em){.cell .grid-y.medium-grid-frame{height:100%}}@media print, screen and (min-width: 64em){.cell .grid-y.large-grid-frame{height:100%}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}@media screen and (min-width: 25em){.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media screen and (min-width: 25em){.grid-margin-y.smedium-grid-frame{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y.medium-grid-frame{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y.large-grid-frame{height:calc(100vh + 1.875rem)}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem 0;padding:0.85em 1em;border:1px solid transparent;border-radius:0;-webkit-transition:background-color 0.25s ease-out,color 0.25s ease-out;transition:background-color 0.25s ease-out,color 0.25s ease-out;font-family:inherit;font-size:0.9rem;-webkit-appearance:none;line-height:1;text-align:center;cursor:pointer}[data-whatinput='mouse'] .button{outline:0}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button,.button.disabled,.button[disabled],.button.disabled:hover,.button[disabled]:hover,.button.disabled:focus,.button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button:hover,.button:focus{background-color:#14679e;color:#fefefe}.button.primary,.button.primary.disabled,.button.primary[disabled],.button.primary.disabled:hover,.button.primary[disabled]:hover,.button.primary.disabled:focus,.button.primary[disabled]:focus{background-color:#1779ba;color:#fefefe}.button.primary:hover,.button.primary:focus{background-color:#126195;color:#fefefe}.button.secondary,.button.secondary.disabled,.button.secondary[disabled],.button.secondary.disabled:hover,.button.secondary[disabled]:hover,.button.secondary.disabled:focus,.button.secondary[disabled]:focus{background-color:#767676;color:#fefefe}.button.secondary:hover,.button.secondary:focus{background-color:#5e5e5e;color:#fefefe}.button.success,.button.success.disabled,.button.success[disabled],.button.success.disabled:hover,.button.success[disabled]:hover,.button.success.disabled:focus,.button.success[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button.success:hover,.button.success:focus{background-color:#22bb5b;color:#0a0a0a}.button.warning,.button.warning.disabled,.button.warning[disabled],.button.warning.disabled:hover,.button.warning[disabled]:hover,.button.warning.disabled:focus,.button.warning[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button.warning:hover,.button.warning:focus{background-color:#cc8b00;color:#0a0a0a}.button.alert,.button.alert.disabled,.button.alert[disabled],.button.alert.disabled:hover,.button.alert[disabled]:hover,.button.alert.disabled:focus,.button.alert[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button.alert:hover,.button.alert:focus{background-color:#a53b2a;color:#fefefe}.button.hollow,.button.hollow:hover,.button.hollow:focus,.button.hollow.disabled,.button.hollow.disabled:hover,.button.hollow.disabled:focus,.button.hollow[disabled],.button.hollow[disabled]:hover,.button.hollow[disabled]:focus{background-color:transparent}.button.hollow,.button.hollow.disabled,.button.hollow[disabled],.button.hollow.disabled:hover,.button.hollow[disabled]:hover,.button.hollow.disabled:focus,.button.hollow[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow:hover,.button.hollow:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.primary,.button.hollow.primary.disabled,.button.hollow.primary[disabled],.button.hollow.primary.disabled:hover,.button.hollow.primary[disabled]:hover,.button.hollow.primary.disabled:focus,.button.hollow.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary:hover,.button.hollow.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.secondary,.button.hollow.secondary.disabled,.button.hollow.secondary[disabled],.button.hollow.secondary.disabled:hover,.button.hollow.secondary[disabled]:hover,.button.hollow.secondary.disabled:focus,.button.hollow.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button.hollow.secondary:hover,.button.hollow.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button.hollow.success,.button.hollow.success.disabled,.button.hollow.success[disabled],.button.hollow.success.disabled:hover,.button.hollow.success[disabled]:hover,.button.hollow.success.disabled:focus,.button.hollow.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button.hollow.success:hover,.button.hollow.success:focus{border-color:#157539;color:#157539}.button.hollow.warning,.button.hollow.warning.disabled,.button.hollow.warning[disabled],.button.hollow.warning.disabled:hover,.button.hollow.warning[disabled]:hover,.button.hollow.warning.disabled:focus,.button.hollow.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:hover,.button.hollow.warning:focus{border-color:#805700;color:#805700}.button.hollow.alert,.button.hollow.alert.disabled,.button.hollow.alert[disabled],.button.hollow.alert.disabled:hover,.button.hollow.alert[disabled]:hover,.button.hollow.alert.disabled:focus,.button.hollow.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button.hollow.alert:hover,.button.hollow.alert:focus{border-color:#67251a;color:#67251a}.button.clear,.button.clear:hover,.button.clear:focus,.button.clear.disabled,.button.clear.disabled:hover,.button.clear.disabled:focus,.button.clear[disabled],.button.clear[disabled]:hover,.button.clear[disabled]:focus{border-color:transparent;background-color:transparent}.button.clear,.button.clear.disabled,.button.clear[disabled],.button.clear.disabled:hover,.button.clear[disabled]:hover,.button.clear.disabled:focus,.button.clear[disabled]:focus{color:#1779ba}.button.clear:hover,.button.clear:focus{color:#0c3d5d}.button.clear.primary,.button.clear.primary.disabled,.button.clear.primary[disabled],.button.clear.primary.disabled:hover,.button.clear.primary[disabled]:hover,.button.clear.primary.disabled:focus,.button.clear.primary[disabled]:focus{color:#1779ba}.button.clear.primary:hover,.button.clear.primary:focus{color:#0c3d5d}.button.clear.secondary,.button.clear.secondary.disabled,.button.clear.secondary[disabled],.button.clear.secondary.disabled:hover,.button.clear.secondary[disabled]:hover,.button.clear.secondary.disabled:focus,.button.clear.secondary[disabled]:focus{color:#767676}.button.clear.secondary:hover,.button.clear.secondary:focus{color:#3b3b3b}.button.clear.success,.button.clear.success.disabled,.button.clear.success[disabled],.button.clear.success.disabled:hover,.button.clear.success[disabled]:hover,.button.clear.success.disabled:focus,.button.clear.success[disabled]:focus{color:#3adb76}.button.clear.success:hover,.button.clear.success:focus{color:#157539}.button.clear.warning,.button.clear.warning.disabled,.button.clear.warning[disabled],.button.clear.warning.disabled:hover,.button.clear.warning[disabled]:hover,.button.clear.warning.disabled:focus,.button.clear.warning[disabled]:focus{color:#ffae00}.button.clear.warning:hover,.button.clear.warning:focus{color:#805700}.button.clear.alert,.button.clear.alert.disabled,.button.clear.alert[disabled],.button.clear.alert.disabled:hover,.button.clear.alert[disabled]:hover,.button.clear.alert.disabled:focus,.button.clear.alert[disabled]:focus{color:#cc4b37}.button.clear.alert:hover,.button.clear.alert:focus{color:#67251a}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.dropdown::after{display:block;width:0;height:0;border:inset .4em;content:'';border-bottom-width:0;border-top-style:solid;border-color:#fefefe transparent transparent;position:relative;top:0.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.hollow::after,.button.dropdown.clear::after{border-top-color:#1779ba}.button.dropdown.hollow.primary::after,.button.dropdown.clear.primary::after{border-top-color:#1779ba}.button.dropdown.hollow.secondary::after,.button.dropdown.clear.secondary::after{border-top-color:#767676}.button.dropdown.hollow.success::after,.button.dropdown.clear.success::after{border-top-color:#3adb76}.button.dropdown.hollow.warning::after,.button.dropdown.clear.warning::after{border-top-color:#ffae00}.button.dropdown.hollow.alert::after,.button.dropdown.clear.alert::after{border-top-color:#cc4b37}.button.arrow-only::after{top:-0.1em;float:none;margin-left:0}a.button:hover,a.button:focus{text-decoration:none}.button-group{margin-bottom:1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.button-group::before,.button-group::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.button-group::after{clear:both}.button-group::before,.button-group::after{display:none}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:0.9rem;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}.button-group.primary .button,.button-group.primary .button.disabled,.button-group.primary .button[disabled],.button-group.primary .button.disabled:hover,.button-group.primary .button[disabled]:hover,.button-group.primary .button.disabled:focus,.button-group.primary .button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button-group.primary .button:hover,.button-group.primary .button:focus{background-color:#126195;color:#fefefe}.button-group.secondary .button,.button-group.secondary .button.disabled,.button-group.secondary .button[disabled],.button-group.secondary .button.disabled:hover,.button-group.secondary .button[disabled]:hover,.button-group.secondary .button.disabled:focus,.button-group.secondary .button[disabled]:focus{background-color:#767676;color:#fefefe}.button-group.secondary .button:hover,.button-group.secondary .button:focus{background-color:#5e5e5e;color:#fefefe}.button-group.success .button,.button-group.success .button.disabled,.button-group.success .button[disabled],.button-group.success .button.disabled:hover,.button-group.success .button[disabled]:hover,.button-group.success .button.disabled:focus,.button-group.success .button[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button-group.success .button:hover,.button-group.success .button:focus{background-color:#22bb5b;color:#0a0a0a}.button-group.warning .button,.button-group.warning .button.disabled,.button-group.warning .button[disabled],.button-group.warning .button.disabled:hover,.button-group.warning .button[disabled]:hover,.button-group.warning .button.disabled:focus,.button-group.warning .button[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:hover,.button-group.warning .button:focus{background-color:#cc8b00;color:#0a0a0a}.button-group.alert .button,.button-group.alert .button.disabled,.button-group.alert .button[disabled],.button-group.alert .button.disabled:hover,.button-group.alert .button[disabled]:hover,.button-group.alert .button.disabled:focus,.button-group.alert .button[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button-group.alert .button:hover,.button-group.alert .button:focus{background-color:#a53b2a;color:#fefefe}.button-group.hollow .button,.button-group.hollow .button:hover,.button-group.hollow .button:focus,.button-group.hollow .button.disabled,.button-group.hollow .button.disabled:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled],.button-group.hollow .button[disabled]:hover,.button-group.hollow .button[disabled]:focus{background-color:transparent}.button-group.hollow .button,.button-group.hollow .button.disabled,.button-group.hollow .button[disabled],.button-group.hollow .button.disabled:hover,.button-group.hollow .button[disabled]:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow .button:hover,.button-group.hollow .button:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.primary .button,.button-group.hollow.primary .button.disabled,.button-group.hollow.primary .button[disabled],.button-group.hollow.primary .button.disabled:hover,.button-group.hollow.primary .button[disabled]:hover,.button-group.hollow.primary .button.disabled:focus,.button-group.hollow.primary .button[disabled]:focus,.button-group.hollow .button.primary,.button-group.hollow .button.primary.disabled,.button-group.hollow .button.primary[disabled],.button-group.hollow .button.primary.disabled:hover,.button-group.hollow .button.primary[disabled]:hover,.button-group.hollow .button.primary.disabled:focus,.button-group.hollow .button.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow.primary .button:hover,.button-group.hollow.primary .button:focus,.button-group.hollow .button.primary:hover,.button-group.hollow .button.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.secondary .button,.button-group.hollow.secondary .button.disabled,.button-group.hollow.secondary .button[disabled],.button-group.hollow.secondary .button.disabled:hover,.button-group.hollow.secondary .button[disabled]:hover,.button-group.hollow.secondary .button.disabled:focus,.button-group.hollow.secondary .button[disabled]:focus,.button-group.hollow .button.secondary,.button-group.hollow .button.secondary.disabled,.button-group.hollow .button.secondary[disabled],.button-group.hollow .button.secondary.disabled:hover,.button-group.hollow .button.secondary[disabled]:hover,.button-group.hollow .button.secondary.disabled:focus,.button-group.hollow .button.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button-group.hollow.secondary .button:hover,.button-group.hollow.secondary .button:focus,.button-group.hollow .button.secondary:hover,.button-group.hollow .button.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button-group.hollow.success .button,.button-group.hollow.success .button.disabled,.button-group.hollow.success .button[disabled],.button-group.hollow.success .button.disabled:hover,.button-group.hollow.success .button[disabled]:hover,.button-group.hollow.success .button.disabled:focus,.button-group.hollow.success .button[disabled]:focus,.button-group.hollow .button.success,.button-group.hollow .button.success.disabled,.button-group.hollow .button.success[disabled],.button-group.hollow .button.success.disabled:hover,.button-group.hollow .button.success[disabled]:hover,.button-group.hollow .button.success.disabled:focus,.button-group.hollow .button.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button-group.hollow.success .button:hover,.button-group.hollow.success .button:focus,.button-group.hollow .button.success:hover,.button-group.hollow .button.success:focus{border-color:#157539;color:#157539}.button-group.hollow.warning .button,.button-group.hollow.warning .button.disabled,.button-group.hollow.warning .button[disabled],.button-group.hollow.warning .button.disabled:hover,.button-group.hollow.warning .button[disabled]:hover,.button-group.hollow.warning .button.disabled:focus,.button-group.hollow.warning .button[disabled]:focus,.button-group.hollow .button.warning,.button-group.hollow .button.warning.disabled,.button-group.hollow .button.warning[disabled],.button-group.hollow .button.warning.disabled:hover,.button-group.hollow .button.warning[disabled]:hover,.button-group.hollow .button.warning.disabled:focus,.button-group.hollow .button.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button-group.hollow.warning .button:hover,.button-group.hollow.warning .button:focus,.button-group.hollow .button.warning:hover,.button-group.hollow .button.warning:focus{border-color:#805700;color:#805700}.button-group.hollow.alert .button,.button-group.hollow.alert .button.disabled,.button-group.hollow.alert .button[disabled],.button-group.hollow.alert .button.disabled:hover,.button-group.hollow.alert .button[disabled]:hover,.button-group.hollow.alert .button.disabled:focus,.button-group.hollow.alert .button[disabled]:focus,.button-group.hollow .button.alert,.button-group.hollow .button.alert.disabled,.button-group.hollow .button.alert[disabled],.button-group.hollow .button.alert.disabled:hover,.button-group.hollow .button.alert[disabled]:hover,.button-group.hollow .button.alert.disabled:focus,.button-group.hollow .button.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button-group.hollow.alert .button:hover,.button-group.hollow.alert .button:focus,.button-group.hollow .button.alert:hover,.button-group.hollow .button.alert:focus{border-color:#67251a;color:#67251a}.button-group.clear .button,.button-group.clear .button:hover,.button-group.clear .button:focus,.button-group.clear .button.disabled,.button-group.clear .button.disabled:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled],.button-group.clear .button[disabled]:hover,.button-group.clear .button[disabled]:focus{border-color:transparent;background-color:transparent}.button-group.clear .button,.button-group.clear .button.disabled,.button-group.clear .button[disabled],.button-group.clear .button.disabled:hover,.button-group.clear .button[disabled]:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled]:focus{color:#1779ba}.button-group.clear .button:hover,.button-group.clear .button:focus{color:#0c3d5d}.button-group.clear.primary .button,.button-group.clear.primary .button.disabled,.button-group.clear.primary .button[disabled],.button-group.clear.primary .button.disabled:hover,.button-group.clear.primary .button[disabled]:hover,.button-group.clear.primary .button.disabled:focus,.button-group.clear.primary .button[disabled]:focus,.button-group.clear .button.primary,.button-group.clear .button.primary.disabled,.button-group.clear .button.primary[disabled],.button-group.clear .button.primary.disabled:hover,.button-group.clear .button.primary[disabled]:hover,.button-group.clear .button.primary.disabled:focus,.button-group.clear .button.primary[disabled]:focus{color:#1779ba}.button-group.clear.primary .button:hover,.button-group.clear.primary .button:focus,.button-group.clear .button.primary:hover,.button-group.clear .button.primary:focus{color:#0c3d5d}.button-group.clear.secondary .button,.button-group.clear.secondary .button.disabled,.button-group.clear.secondary .button[disabled],.button-group.clear.secondary .button.disabled:hover,.button-group.clear.secondary .button[disabled]:hover,.button-group.clear.secondary .button.disabled:focus,.button-group.clear.secondary .button[disabled]:focus,.button-group.clear .button.secondary,.button-group.clear .button.secondary.disabled,.button-group.clear .button.secondary[disabled],.button-group.clear .button.secondary.disabled:hover,.button-group.clear .button.secondary[disabled]:hover,.button-group.clear .button.secondary.disabled:focus,.button-group.clear .button.secondary[disabled]:focus{color:#767676}.button-group.clear.secondary .button:hover,.button-group.clear.secondary .button:focus,.button-group.clear .button.secondary:hover,.button-group.clear .button.secondary:focus{color:#3b3b3b}.button-group.clear.success .button,.button-group.clear.success .button.disabled,.button-group.clear.success .button[disabled],.button-group.clear.success .button.disabled:hover,.button-group.clear.success .button[disabled]:hover,.button-group.clear.success .button.disabled:focus,.button-group.clear.success .button[disabled]:focus,.button-group.clear .button.success,.button-group.clear .button.success.disabled,.button-group.clear .button.success[disabled],.button-group.clear .button.success.disabled:hover,.button-group.clear .button.success[disabled]:hover,.button-group.clear .button.success.disabled:focus,.button-group.clear .button.success[disabled]:focus{color:#3adb76}.button-group.clear.success .button:hover,.button-group.clear.success .button:focus,.button-group.clear .button.success:hover,.button-group.clear .button.success:focus{color:#157539}.button-group.clear.warning .button,.button-group.clear.warning .button.disabled,.button-group.clear.warning .button[disabled],.button-group.clear.warning .button.disabled:hover,.button-group.clear.warning .button[disabled]:hover,.button-group.clear.warning .button.disabled:focus,.button-group.clear.warning .button[disabled]:focus,.button-group.clear .button.warning,.button-group.clear .button.warning.disabled,.button-group.clear .button.warning[disabled],.button-group.clear .button.warning.disabled:hover,.button-group.clear .button.warning[disabled]:hover,.button-group.clear .button.warning.disabled:focus,.button-group.clear .button.warning[disabled]:focus{color:#ffae00}.button-group.clear.warning .button:hover,.button-group.clear.warning .button:focus,.button-group.clear .button.warning:hover,.button-group.clear .button.warning:focus{color:#805700}.button-group.clear.alert .button,.button-group.clear.alert .button.disabled,.button-group.clear.alert .button[disabled],.button-group.clear.alert .button.disabled:hover,.button-group.clear.alert .button[disabled]:hover,.button-group.clear.alert .button.disabled:focus,.button-group.clear.alert .button[disabled]:focus,.button-group.clear .button.alert,.button-group.clear .button.alert.disabled,.button-group.clear .button.alert[disabled],.button-group.clear .button.alert.disabled:hover,.button-group.clear .button.alert[disabled]:hover,.button-group.clear .button.alert.disabled:focus,.button-group.clear .button.alert[disabled]:focus{color:#cc4b37}.button-group.clear.alert .button:hover,.button-group.clear.alert .button:focus,.button-group.clear .button.alert:hover,.button-group.clear .button.alert:focus{color:#67251a}.button-group.no-gaps .button{margin-right:-.0625rem}.button-group.no-gaps .button+.button{border-left-color:transparent}.button-group.stacked,.button-group.stacked-for-small,.button-group.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.button-group.stacked .button,.button-group.stacked-for-small .button,.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.button-group.stacked .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked-for-medium .button:last-child{margin-bottom:0}.button-group.stacked.expanded .button,.button-group.stacked-for-small.expanded .button,.button-group.stacked-for-medium.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}@media print, screen and (min-width: 40em){.button-group.stacked-for-small .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (min-width: 64em){.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (max-width: 24.99875em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}@media print, screen and (max-width: 63.99875em){.button-group.stacked-for-medium.expanded{display:block}.button-group.stacked-for-medium.expanded .button{display:block;margin-right:0}}.close-button{position:absolute;z-index:10;color:#8a8a8a;cursor:pointer}[data-whatinput='mouse'] .close-button{outline:0}.close-button:hover,.close-button:focus{color:#0a0a0a}.close-button.small{right:0.66rem;top:0.33em;font-size:1.5em;line-height:1}.close-button.medium,.close-button{right:1rem;top:0.5rem;font-size:2em;line-height:1}.label{display:inline-block;padding:0.33333rem 0.5rem;border-radius:0;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#1779ba;color:#fefefe}.label.primary{background:#1779ba;color:#fefefe}.label.secondary{background:#767676;color:#fefefe}.label.success{background:#3adb76;color:#0a0a0a}.label.warning{background:#ffae00;color:#0a0a0a}.label.alert{background:#cc4b37;color:#fefefe}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#cacaca}.progress.primary .progress-meter{background-color:#1779ba}.progress.secondary .progress-meter{background-color:#767676}.progress.success .progress-meter{background-color:#3adb76}.progress.warning .progress-meter{background-color:#ffae00}.progress.alert .progress-meter{background-color:#cc4b37}.progress-meter{position:relative;display:block;width:0%;height:100%;background-color:#1779ba}.progress-meter-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);margin:0;font-size:0.75rem;font-weight:bold;color:#fefefe;white-space:nowrap}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#e6e6e6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#cacaca;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.slider-fill.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider-handle{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:0;background-color:#1779ba;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput='mouse'] .slider-handle{outline:0}.slider-handle:hover{background-color:#14679e}.slider-handle.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:bold;color:#fefefe;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#cacaca;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle::after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);border-radius:0;background:#fefefe;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;content:''}input:checked ~ .switch-paddle{background:#1779ba}input:checked ~ .switch-paddle::after{left:2.25rem}input:disabled ~ .switch-paddle{cursor:not-allowed;opacity:.5}[data-whatinput='mouse'] input:focus ~ .switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle::after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked ~ .switch-paddle::after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle::after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked ~ .switch-paddle::after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle::after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked ~ .switch-paddle::after{left:2.75rem}table{border-collapse:collapse;width:100%;margin-bottom:1rem;border-radius:0}thead,tbody,tfoot{border:1px solid #f1f1f1;background-color:#fefefe}caption{padding:.5rem .625rem .625rem;font-weight:bold}thead{background:#f8f8f8;color:#0a0a0a}tfoot{background:#f1f1f1;color:#0a0a0a}thead tr,tfoot tr{background:transparent}thead th,thead td,tfoot th,tfoot td{padding:.5rem .625rem .625rem;font-weight:bold;text-align:left}tbody th,tbody td{padding:.5rem .625rem .625rem}tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}table.unstriped tbody{background-color:#fefefe}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #f1f1f1;background-color:#fefefe}@media print, screen and (max-width: 63.99875em){table.stack thead{display:none}table.stack tfoot{display:none}table.stack tr,table.stack th,table.stack td{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#f3f3f3}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f9f9}table.hover:not(.unstriped) tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#1779ba;color:#fefefe}.badge.primary{background:#1779ba;color:#fefefe}.badge.secondary{background:#767676;color:#fefefe}.badge.success{background:#3adb76;color:#0a0a0a}.badge.warning{background:#ffae00;color:#0a0a0a}.badge.alert{background:#cc4b37;color:#fefefe}.breadcrumbs{margin:0 0 1rem 0;list-style:none}.breadcrumbs::before,.breadcrumbs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.breadcrumbs::after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child)::after{position:relative;margin:0 .75rem;opacity:1;content:"/";color:#cacaca}.breadcrumbs a{color:#1779ba}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#cacaca;cursor:not-allowed}.callout{position:relative;margin:0 0 1rem 0;padding:1rem;border:1px solid rgba(10,10,10,0.25);border-radius:0;background-color:#fff;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#d7ecfa;color:#0a0a0a}.callout.secondary{background-color:#eaeaea;color:#0a0a0a}.callout.success{background-color:#e1faea;color:#0a0a0a}.callout.warning{background-color:#fff3d9;color:#0a0a0a}.callout.alert{background-color:#f7e4e1;color:#0a0a0a}.callout.small{padding-top:.5rem;padding-right:.5rem;padding-bottom:.5rem;padding-left:.5rem}.callout.large{padding-top:3rem;padding-right:3rem;padding-bottom:3rem;padding-left:3rem}.card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-bottom:1rem;border:1px solid #e6e6e6;border-radius:0;background:#fefefe;-webkit-box-shadow:none;box-shadow:none;overflow:hidden;color:#0a0a0a}.card>:last-child{margin-bottom:0}.card-divider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;padding:1rem;background:#e6e6e6}.card-divider>:last-child{margin-bottom:0}.card-section{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;padding:1rem}.card-section>:last-child{margin-bottom:0}.card-image{min-height:1px}.dropdown-pane{position:absolute;z-index:10;display:none;width:300px;padding:1rem;visibility:hidden;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-size:1rem}.dropdown-pane.is-opening{display:block}.dropdown-pane.is-open{display:block;visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.pagination{margin-left:0;margin-bottom:1rem}.pagination::before,.pagination::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.pagination::after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:last-child,.pagination li:first-child{display:inline-block}@media print, screen and (min-width: 40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#1779ba;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis::after{padding:.1875rem .625rem;content:'\2026';color:#0a0a0a}.pagination-previous a::before,.pagination-previous.disabled::before{display:inline-block;margin-right:0.5rem;content:"«"}.pagination-next a::after,.pagination-next.disabled::after{display:inline-block;margin-left:0.5rem;content:"»"}.has-tip{position:relative;display:inline-block;border-bottom:dotted 1px #8a8a8a;font-weight:bold;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:0;background-color:#0a0a0a;font-size:80%;color:#fefefe}.tooltip::before{position:absolute}.tooltip.bottom::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #0a0a0a;bottom:100%}.tooltip.bottom.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.top::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-bottom-width:0;border-top-style:solid;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.top.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.left::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.right::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.tooltip.right.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.align-top::before{bottom:auto;top:10%}.tooltip.align-bottom::before{bottom:10%;top:auto}.tooltip.align-left::before{left:10%;right:auto}.tooltip.align-right::before{left:auto;right:10%}.accordion{margin-left:0;background:#fefefe;list-style-type:none}.accordion[disabled] .accordion-title{cursor:not-allowed}.accordion-item:first-child>:first-child{border-radius:0 0 0 0}.accordion-item:last-child>:last-child{border-radius:0 0 0 0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #e6e6e6;border-bottom:0;font-size:.75rem;line-height:1;color:#1779ba}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #e6e6e6;border-radius:0 0 0 0}.accordion-title:hover,.accordion-title:focus{background-color:#e6e6e6}.accordion-title::before{position:absolute;top:50%;right:1rem;margin-top:-0.5rem;content:"+"}.is-active>.accordion-title::before{content:"–"}.accordion-content{display:none;padding:1rem;border:1px solid #e6e6e6;border-bottom:0;background-color:#fefefe;color:#0a0a0a}:last-child>.accordion-content:last-child{border-bottom:1px solid #e6e6e6}.media-object{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.media-object img{max-width:none}@media print, screen and (max-width: 24.99875em){.media-object.stack-for-small{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.media-object-section{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}@media print, screen and (max-width: 24.99875em){.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.stack-for-small .media-object-section img{width:100%}}.media-object-section.main-section{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.orbit{position:relative}.orbit-container{position:relative;height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%;position:absolute}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{position:absolute;bottom:0;width:100%;margin-bottom:0;padding:1rem;background-color:rgba(10,10,10,0.5);color:#fefefe}.orbit-previous,.orbit-next{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);z-index:10;padding:1rem;color:#fefefe}[data-whatinput='mouse'] .orbit-previous,[data-whatinput='mouse'] .orbit-next{outline:0}.orbit-previous:hover,.orbit-next:hover,.orbit-previous:active,.orbit-next:active,.orbit-previous:focus,.orbit-next:focus{background-color:rgba(10,10,10,0.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput='mouse'] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#cacaca}.orbit-bullets button:hover{background-color:#8a8a8a}.orbit-bullets button.is-active{background-color:#8a8a8a}.responsive-embed,.flex-video{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.responsive-embed iframe,.responsive-embed object,.responsive-embed embed,.responsive-embed video,.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{position:absolute;top:0;left:0;width:100%;height:100%}.responsive-embed.widescreen,.flex-video.widescreen{padding-bottom:56.25%}.tabs{margin:0;border:1px solid #e6e6e6;background:#fefefe;list-style-type:none}.tabs::before,.tabs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.tabs::after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:transparent}.tabs.primary{background:#1779ba}.tabs.primary>li>a{color:#fefefe}.tabs.primary>li>a:hover,.tabs.primary>li>a:focus{background:#1673b1}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#1779ba}[data-whatinput='mouse'] .tabs-title>a{outline:0}.tabs-title>a:hover{background:#fefefe;color:#1468a0}.tabs-title>a:focus,.tabs-title>a[aria-selected='true']{background:#e6e6e6;color:#1779ba}.tabs-content{border:1px solid #e6e6e6;border-top:0;background:#fefefe;color:#0a0a0a;-webkit-transition:all 0.5s ease;transition:all 0.5s ease}.tabs-content.vertical{border:1px solid #e6e6e6;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel.is-active{display:block}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #fefefe;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(10,10,10,0.2);box-shadow:0 0 0 1px rgba(10,10,10,0.2);line-height:0}a.thumbnail{-webkit-transition:-webkit-box-shadow 200ms ease-out;transition:-webkit-box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out}a.thumbnail:hover,a.thumbnail:focus{-webkit-box-shadow:0 0 6px 1px rgba(23,121,186,0.5);box-shadow:0 0 6px 1px rgba(23,121,186,0.5)}a.thumbnail image{-webkit-box-shadow:none;box-shadow:none}.menu{padding:0;margin:0;list-style:none;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}[data-whatinput='mouse'] .menu li{outline:0}.menu a,.menu .button{line-height:1;text-decoration:none;display:block;padding:0.7rem 1rem}.menu input,.menu select,.menu a,.menu button{margin-bottom:0}.menu input{display:inline-block}.menu,.menu.horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.simple{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu.simple li+li{margin-left:1rem}.menu.simple a{padding:0}@media screen and (min-width: 25em){.menu.smedium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.smedium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.smedium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.smedium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 40em){.menu.medium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.medium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.medium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.medium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 64em){.menu.large-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.large-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.large-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.large-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}.menu.nested{margin-right:0;margin-left:1rem}.menu.icons a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-top a,.menu.icon-right a,.menu.icon-bottom a,.menu.icon-left a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-left li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-left li a img,.menu.icon-left li a i,.menu.icon-left li a svg{margin-right:.25rem}.menu.icon-right li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-right li a img,.menu.icon-right li a i,.menu.icon-right li a svg{margin-left:.25rem}.menu.icon-top li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-top li a img,.menu.icon-top li a i,.menu.icon-top li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu.icon-bottom li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-bottom li a img,.menu.icon-bottom li a i,.menu.icon-bottom li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu .is-active>a{background:#1779ba;color:#fefefe}.menu .active>a{background:#1779ba;color:#fefefe}.menu.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu.align-right li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right.vertical li{display:block;text-align:right}.menu.align-right.vertical li .submenu li{text-align:right}.menu.align-right .nested{margin-right:1rem;margin-left:0}.menu.align-center li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu.align-center li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu .menu-text{padding:0.7rem 1rem;font-weight:bold;line-height:1;color:inherit}.menu-centered>.menu{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;-webkit-box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:''}.menu-icon:hover::after{background:#cacaca;-webkit-box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;-webkit-box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:''}.menu-icon.dark:hover::after{background:#8a8a8a;-webkit-box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.accordion-menu li{width:100%}.accordion-menu a{padding:0.7rem 1rem}.accordion-menu .is-accordion-submenu a{padding:0.7rem 1rem}.accordion-menu .nested.is-accordion-submenu{margin-right:0;margin-left:1rem}.accordion-menu.align-right .nested.is-accordion-submenu{margin-right:1rem;margin-left:0}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{position:relative}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.accordion-menu.align-left .is-accordion-submenu-parent>a::after{right:1rem;left:auto}.accordion-menu.align-right .is-accordion-submenu-parent>a::after{right:auto;left:1rem}.accordion-menu .is-accordion-submenu-parent[aria-expanded='true']>a::after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.is-accordion-submenu-parent{position:relative}.has-submenu-toggle>a{margin-right:40px}.submenu-toggle{position:absolute;top:0;right:0;width:40px;height:40px;cursor:pointer}.submenu-toggle::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;top:0;bottom:0;margin:auto}.submenu-toggle[aria-expanded='true']::after{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.submenu-toggle-text{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{-webkit-transition:height 0.5s;transition:height 0.5s}.drilldown a{padding:0.7rem 1rem;background:#fefefe}.drilldown .is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;-webkit-transition:-webkit-transform 0.15s linear;transition:-webkit-transform 0.15s linear;transition:transform 0.15s linear;transition:transform 0.15s linear, -webkit-transform 0.15s linear}.drilldown .is-drilldown-submenu.is-active{z-index:1;display:block;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.drilldown .is-drilldown-submenu.is-closing{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.drilldown .is-drilldown-submenu a{padding:0.7rem 1rem}.drilldown .nested.is-drilldown-submenu{margin-right:0;margin-left:0}.drilldown .drilldown-submenu-cover-previous{min-height:100%}.drilldown .is-drilldown-submenu-parent>a{position:relative}.drilldown .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;position:absolute;top:50%;margin-top:-6px;right:1rem}.drilldown.align-left .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;right:1rem;left:auto}.drilldown.align-right .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:1rem}.drilldown .js-drilldown-back>a::before{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;display:inline-block;vertical-align:middle;margin-right:0.75rem}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}[data-whatinput='mouse'] .dropdown.menu a{outline:0}.dropdown.menu>li>a{padding:0.7rem 1rem}.dropdown.menu>li.is-active>a{background:rgba(0,0,0,0);color:#1779ba}.no-js .dropdown.menu ul{display:none}.dropdown.menu .nested.is-dropdown-submenu{margin-right:0;margin-left:0}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a::after{right:14px}.dropdown.menu.vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}@media screen and (min-width: 25em){.dropdown.menu.smedium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.smedium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.smedium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.smedium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.smedium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.smedium-vertical>li>a::after{right:14px}.dropdown.menu.smedium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.smedium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a::after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.medium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a::after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.large-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a::after{position:absolute;top:50%;right:5px;left:auto;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #cacaca;background:#fefefe}.dropdown .is-dropdown-submenu a{padding:0.7rem 1rem}.is-dropdown-submenu .is-dropdown-submenu-parent>a::after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;-webkit-transition:opacity .5s ease,visibility .5s ease;transition:opacity .5s ease,visibility .5s ease;background:rgba(254,254,254,0.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas{outline:0}.off-canvas.is-transition-push{z-index:12}.off-canvas.is-closed{visibility:hidden}.off-canvas.is-transition-overlap{z-index:13}.off-canvas.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-absolute{position:absolute;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-push{z-index:12}.off-canvas-absolute.is-closed{visibility:hidden}.off-canvas-absolute.is-transition-overlap{z-index:13}.off-canvas-absolute.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas-absolute.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.position-left{top:0;left:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-left.has-transition-push{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.position-left.is-transition-push{-webkit-box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25)}.position-right{top:0;right:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-right.has-transition-push{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.position-right.is-transition-push{-webkit-box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25)}.position-top{top:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-top.has-transition-push{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.position-top.is-transition-push{-webkit-box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25)}.position-bottom{bottom:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-bottom.has-transition-push{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.position-bottom.is-transition-push{-webkit-box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25)}.off-canvas-content{-webkit-transform:none;-ms-transform:none;transform:none;-webkit-backface-visibility:hidden;backface-visibility:hidden}.off-canvas-content.has-transition-overlap,.off-canvas-content.has-transition-push{-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.off-canvas-content.has-transition-push{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content .off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}@media screen and (min-width: 25em){.position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-smedium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-smedium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-smedium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-smedium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 40em){.position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-medium .close-button{display:none}.off-canvas-content .position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-medium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-medium .close-button{display:none}.off-canvas-content .position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-medium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-medium .close-button{display:none}.off-canvas-content .position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-medium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-medium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-medium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 64em){.position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-large .close-button{display:none}.off-canvas-content .position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-large ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-large .close-button{display:none}.off-canvas-content .position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-large ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-large .close-button{display:none}.off-canvas-content .position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-large ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-large .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-large ~ .off-canvas-content{margin-bottom:250px}}@media screen and (min-width: 25em){.off-canvas.in-canvas-for-smedium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-smedium.position-left,.off-canvas.in-canvas-for-smedium.position-right,.off-canvas.in-canvas-for-smedium.position-top,.off-canvas.in-canvas-for-smedium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-smedium .close-button{display:none}}@media print, screen and (min-width: 40em){.off-canvas.in-canvas-for-medium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-medium.position-left,.off-canvas.in-canvas-for-medium.position-right,.off-canvas.in-canvas-for-medium.position-top,.off-canvas.in-canvas-for-medium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-medium .close-button{display:none}}@media print, screen and (min-width: 64em){.off-canvas.in-canvas-for-large{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-large.position-left,.off-canvas.in-canvas-for-large.position-right,.off-canvas.in-canvas-for-large.position-top,.off-canvas.in-canvas-for-large.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-large .close-button{display:none}}html.is-reveal-open{position:fixed;width:100%;overflow-y:hidden}html.is-reveal-open.zf-has-scroll{overflow-y:scroll}html.is-reveal-open body{overflow-y:hidden}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:rgba(10,10,10,0.45);overflow-y:auto}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput='mouse'] .reveal{outline:0}@media print, screen and (min-width: 40em){.reveal{min-height:0}}.reveal .column{min-width:0}.reveal>:last-child{margin-bottom:0}@media print, screen and (min-width: 40em){.reveal{width:600px;max-width:75rem}}.reveal.collapse{padding:0}@media print, screen and (min-width: 40em){.reveal.tiny{width:30%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.small{width:50%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.large{width:90%;max-width:75rem}}.reveal.full{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}@media print, screen and (max-width: 24.99875em){.reveal{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}.sticky-container{position:relative}.sticky{position:relative;z-index:0;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.sticky.is-stuck{position:fixed;z-index:5;width:100%}.sticky.is-stuck.is-at-top{top:0}.sticky.is-stuck.is-at-bottom{bottom:0}.sticky.is-anchored{position:relative;right:auto;left:auto}.sticky.is-anchored.is-at-bottom{bottom:0}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left,.title-bar-right{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.title-bar-right{text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:bold}.top-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media print, screen and (min-width: 40em){.top-bar{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.top-bar .top-bar-left{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:auto}.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;margin-left:auto}}@media screen and (max-width: 39.99875em){.top-bar.stacked-for-smedium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-smedium .top-bar-left,.top-bar.stacked-for-smedium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 63.99875em){.top-bar.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 74.99875em){.top-bar.stacked-for-large{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}.top-bar-title{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:0.5rem 1rem 0.5rem 0}.top-bar-left,.top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.float-left{float:left !important}.float-right{float:right !important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix::before,.clearfix::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.clearfix::after{clear:both}.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.align-left.vertical.menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right.vertical.menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center.vertical.menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.align-self-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.align-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.align-self-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.align-middle{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.align-self-middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.align-self-stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.align-center-middle{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.small-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.small-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.small-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.small-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.small-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.small-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}@media screen and (min-width: 25em){.smedium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.smedium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.smedium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.smedium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.smedium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.smedium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 40em){.medium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.medium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.medium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.medium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.medium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.medium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 64em){.large-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.large-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.large-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.large-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.large-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.large-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}.flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}@media screen and (min-width: 25em){.smedium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.smedium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.smedium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.smedium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.smedium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.smedium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.smedium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.smedium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 40em){.medium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.medium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.medium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.medium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.medium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.medium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.medium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.medium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 64em){.large-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.large-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.large-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.large-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.large-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.large-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.large-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.large-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.hide{display:none !important}.invisible{visibility:hidden}@media print, screen and (max-width: 24.99875em){.hide-for-small-only{display:none !important}}@media screen and (max-width: 0em), screen and (min-width: 25em){.show-for-small-only{display:none !important}}@media screen and (min-width: 25em){.hide-for-smedium{display:none !important}}@media screen and (max-width: 24.99875em){.show-for-smedium{display:none !important}}@media screen and (min-width: 25em) and (max-width: 39.99875em){.hide-for-smedium-only{display:none !important}}@media screen and (max-width: 24.99875em), screen and (min-width: 40em){.show-for-smedium-only{display:none !important}}@media print, screen and (min-width: 40em){.hide-for-medium{display:none !important}}@media screen and (max-width: 39.99875em){.show-for-medium{display:none !important}}@media print, screen and (min-width: 40em) and (max-width: 63.99875em){.hide-for-medium-only{display:none !important}}@media screen and (max-width: 39.99875em), screen and (min-width: 64em){.show-for-medium-only{display:none !important}}@media print, screen and (min-width: 64em){.hide-for-large{display:none !important}}@media screen and (max-width: 63.99875em){.show-for-large{display:none !important}}@media print, screen and (min-width: 64em) and (max-width: 74.99875em){.hide-for-large-only{display:none !important}}@media screen and (max-width: 63.99875em), screen and (min-width: 75em){.show-for-large-only{display:none !important}}.show-for-sr,.show-on-focus{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.show-on-focus:active,.show-on-focus:focus{position:static !important;width:auto !important;height:auto !important;overflow:visible !important;clip:auto !important;white-space:normal !important}.show-for-landscape,.hide-for-portrait{display:block !important}@media screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:block !important}}@media screen and (orientation: portrait){.show-for-landscape,.hide-for-portrait{display:none !important}}.hide-for-landscape,.show-for-portrait{display:none !important}@media screen and (orientation: landscape){.hide-for-landscape,.show-for-portrait{display:none !important}}@media screen and (orientation: portrait){.hide-for-landscape,.show-for-portrait{display:block !important}}#toast-container{z-index:10001;text-align:center;position:absolute;height:100vh !important;width:100%;overflow:visible !important;padding:8.5vh 0 0 0;pointer-events:none}#toast-container div.toast{position:relative;width:100%;pointer-events:none;-webkit-transition:opacity 0.25s;transition:opacity 0.25s}#toast-container div.toast.toast-template{visibility:hidden}#toast-container div.toast span.message{pointer-events:auto;font-size:0.8rem;border-radius:25px;letter-spacing:0;z-index:10001;max-width:100%;display:inline-block;-webkit-box-shadow:2px 2px 10px rgba(0,0,0,0.28);box-shadow:2px 2px 10px rgba(0,0,0,0.28);border:1px solid #626262;background-color:#6b6b6b;padding:.3em .6em;text-align:center;color:white}#toast-container div.toast span.message:hover{opacity:.4;cursor:pointer}#toast-container div.toast span.message:before,#toast-container div.toast span.message:after{display:block;content:""}.background{position:fixed;z-index:1000000;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(55,55,55,0.6)}.background .modal{position:relative;top:50%;margin:auto;width:80%;border-radius:2px;background-color:#fefefe;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);padding:0.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:80%;max-width:1024px}@media print, screen and (max-width: 63.99875em){.background .modal.small-margin{width:90%}}@media print, screen and (max-width: 24.99875em){.background .modal.small-margin{width:95%}}.background .modal.max-small{max-width:0}.background .modal.max-smedium{max-width:400px}.background .modal.max-medium{max-width:640px}.background .modal.max-large{max-width:1024px}.background .modal.max-xlarge{max-width:1200px}.background .modal.max-xxlarge{max-width:1440px}.background .modal .title{font-weight:bold;padding-bottom:0.5rem}.background .modal .content-container{overflow-y:auto;max-height:100%}.background .modal .content-container .loader{position:static;-webkit-transform:none;-ms-transform:none;transform:none}.background .modal .close{text-align:right;float:right;font-size:28px;font-weight:bold;line-height:1}.background .modal .close:hover,.background .modal .close:focus{text-decoration:none;cursor:pointer}.background .modal .modal-button-container{padding-top:0.5rem}.background .modal .modal-button-container .button{margin-left:0.2rem;margin-bottom:0 !important;padding:0.6em 0.8em}@media print, screen and (max-width: 24.99875em){.background .modal .modal-button-container .button{margin-left:0.1rem;padding:0.3em 0.5em}}.background .modal .choose-dialog-value-row{line-height:1;padding-top:0.5em;padding-bottom:0.5em;width:100%;cursor:pointer;background:rgba(150,150,150,0.15);display:inline-block;margin-top:0.3rem;margin-bottom:0.3rem;padding-left:0.5rem}.background .modal.no-title .title{display:none}label{position:relative}label [type='text'],label [type='password'],label [type='date'],label [type='datetime'],label [type='datetime-local'],label [type='month'],label [type='week'],label [type='email'],label [type='number'],label [type='search'],label [type='tel'],label [type='time'],label [type='url'],label [type='color'],label textarea,label input[type='text'],label input:not([type]){display:block;width:100%;height:2.4375rem;padding:0.5rem;-webkit-box-shadow:none;box-shadow:none;font-size:1rem;font-weight:normal;line-height:1.5;border:none;border-bottom:solid 1px #626262;outline:0;margin:0 0 15px}label [type='text']:invalid,label [type='password']:invalid,label [type='date']:invalid,label [type='datetime']:invalid,label [type='datetime-local']:invalid,label [type='month']:invalid,label [type='week']:invalid,label [type='email']:invalid,label [type='number']:invalid,label [type='search']:invalid,label [type='tel']:invalid,label [type='time']:invalid,label [type='url']:invalid,label [type='color']:invalid,label textarea:invalid,label input[type='text']:invalid,label input:not([type]):invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:disabled,label [type='password']:disabled,label [type='date']:disabled,label [type='datetime']:disabled,label [type='datetime-local']:disabled,label [type='month']:disabled,label [type='week']:disabled,label [type='email']:disabled,label [type='number']:disabled,label [type='search']:disabled,label [type='tel']:disabled,label [type='time']:disabled,label [type='url']:disabled,label [type='color']:disabled,label textarea:disabled,label input[type='text']:disabled,label input:not([type]):disabled{background-color:#e6e6e6}label [type='text']:focus,label [type='password']:focus,label [type='date']:focus,label [type='datetime']:focus,label [type='datetime-local']:focus,label [type='month']:focus,label [type='week']:focus,label [type='email']:focus,label [type='number']:focus,label [type='search']:focus,label [type='tel']:focus,label [type='time']:focus,label [type='url']:focus,label [type='color']:focus,label textarea:focus,label input[type='text']:focus,label input:not([type]):focus{border:none;border-bottom:solid 1px #626262;-webkit-box-shadow:none;box-shadow:none}label [type='text']:focus:invalid,label [type='password']:focus:invalid,label [type='date']:focus:invalid,label [type='datetime']:focus:invalid,label [type='datetime-local']:focus:invalid,label [type='month']:focus:invalid,label [type='week']:focus:invalid,label [type='email']:focus:invalid,label [type='number']:focus:invalid,label [type='search']:focus:invalid,label [type='tel']:focus:invalid,label [type='time']:focus:invalid,label [type='url']:focus:invalid,label [type='color']:focus:invalid,label textarea:focus:invalid,label input[type='text']:focus:invalid,label input:not([type]):focus:invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:focus:disabled,label [type='password']:focus:disabled,label [type='date']:focus:disabled,label [type='datetime']:focus:disabled,label [type='datetime-local']:focus:disabled,label [type='month']:focus:disabled,label [type='week']:focus:disabled,label [type='email']:focus:disabled,label [type='number']:focus:disabled,label [type='search']:focus:disabled,label [type='tel']:focus:disabled,label [type='time']:focus:disabled,label [type='url']:focus:disabled,label [type='color']:focus:disabled,label textarea:focus:disabled,label input[type='text']:focus:disabled,label input:not([type]):focus:disabled{background-color:#e6e6e6}label [type='text']:focus ~ span,label [type='text'].notEmpty:not(:focus) ~ span,label [type='text']:not(:empty) ~ span,label [type='password']:focus ~ span,label [type='password'].notEmpty:not(:focus) ~ span,label [type='password']:not(:empty) ~ span,label [type='date']:focus ~ span,label [type='date'].notEmpty:not(:focus) ~ span,label [type='date']:not(:empty) ~ span,label [type='datetime']:focus ~ span,label [type='datetime'].notEmpty:not(:focus) ~ span,label [type='datetime']:not(:empty) ~ span,label [type='datetime-local']:focus ~ span,label [type='datetime-local'].notEmpty:not(:focus) ~ span,label [type='datetime-local']:not(:empty) ~ span,label [type='month']:focus ~ span,label [type='month'].notEmpty:not(:focus) ~ span,label [type='month']:not(:empty) ~ span,label [type='week']:focus ~ span,label [type='week'].notEmpty:not(:focus) ~ span,label [type='week']:not(:empty) ~ span,label [type='email']:focus ~ span,label [type='email'].notEmpty:not(:focus) ~ span,label [type='email']:not(:empty) ~ span,label [type='number']:focus ~ span,label [type='number'].notEmpty:not(:focus) ~ span,label [type='number']:not(:empty) ~ span,label [type='search']:focus ~ span,label [type='search'].notEmpty:not(:focus) ~ span,label [type='search']:not(:empty) ~ span,label [type='tel']:focus ~ span,label [type='tel'].notEmpty:not(:focus) ~ span,label [type='tel']:not(:empty) ~ span,label [type='time']:focus ~ span,label [type='time'].notEmpty:not(:focus) ~ span,label [type='time']:not(:empty) ~ span,label [type='url']:focus ~ span,label [type='url'].notEmpty:not(:focus) ~ span,label [type='url']:not(:empty) ~ span,label [type='color']:focus ~ span,label [type='color'].notEmpty:not(:focus) ~ span,label [type='color']:not(:empty) ~ span,label textarea:focus ~ span,label textarea.notEmpty:not(:focus) ~ span,label textarea:not(:empty) ~ span,label input[type='text']:focus ~ span,label input[type='text'].notEmpty:not(:focus) ~ span,label input[type='text']:not(:empty) ~ span,label input:not([type]):focus ~ span,label input:not([type]).notEmpty:not(:focus) ~ span,label input:not([type]):not(:empty) ~ span{top:-11px;left:0;bottom:0;font-size:11px;opacity:1;color:black}label [type='text'] ~ span,label [type='password'] ~ span,label [type='date'] ~ span,label [type='datetime'] ~ span,label [type='datetime-local'] ~ span,label [type='month'] ~ span,label [type='week'] ~ span,label [type='email'] ~ span,label [type='number'] ~ span,label [type='search'] ~ span,label [type='tel'] ~ span,label [type='time'] ~ span,label [type='url'] ~ span,label [type='color'] ~ span,label textarea ~ span,label input[type='text'] ~ span,label input:not([type]) ~ span{position:absolute;pointer-events:none;left:10px;bottom:10px;top:7px;-webkit-transition:0.2s ease all;transition:0.2s ease all;color:#626262}label textarea{height:10rem;border-top-right-radius:3px;border-top-left-radius:3px}label [type="checkbox"].before-text{margin-bottom:0}input[type=number]{-moz-appearance:textfield}input[type=number] ::-webkit-inner-spin-button,input[type=number] ::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}nav.top-bar{z-index:1;white-space:nowrap;position:relative;background:#000;color:#fff;stroke:#fff;padding:0}nav.top-bar:not(.with-image){margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem)}@media print, screen and (min-width: 40em){nav.top-bar:not(.with-image){margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem)}}nav.top-bar .background-img{display:none}nav.top-bar>span>span>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}nav.top-bar>span .back-button{cursor:pointer;text-align:left}nav.top-bar>span .back-button svg{width:0.5rem;height:100%;vertical-align:bottom}nav.top-bar>span .back-button.hidden{visibility:hidden;display:initial}nav.top-bar>span .top-bar-title{margin-left:0.5rem}nav.top-bar>span #navbar-close-listener-container #navbar-close-listener{position:fixed;top:0;left:0;right:0;bottom:0;background:transparent;z-index:8999}nav.top-bar>span #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar>span #responsive-menu-toggle .menu-icon{vertical-align:-webkit-baseline-middle}nav.top-bar>span #responsive-menu{display:block;-webkit-transition-duration:0.5s;transition-duration:0.5s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}nav.top-bar>span #responsive-menu.visible .hidden-menu{right:0}nav.top-bar>span #responsive-menu .hidden-menu{position:fixed;-webkit-transform:none;-ms-transform:none;transform:none;display:inline-block;z-index:9000;border:1px solid #1e1c1c;padding:4.5rem 1.65rem 0rem 2.75rem;text-align:left;background:#000;margin-top:-1rem;right:-1000%}nav.top-bar>span #responsive-menu .hidden-menu li{font-size:1.15rem}nav.top-bar>span #responsive-menu .hidden-menu li.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu{top:auto}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>li,nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>.close-listener{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#ffffff transparent transparent;right:5px;left:auto;margin-top:-3px}nav.top-bar>span #responsive-menu .hidden-menu li a{white-space:nowrap}nav.top-bar>span #responsive-menu .hidden-menu li a img{display:none}nav.top-bar>span #responsive-menu .hidden-menu li a img+span{display:inherit}@media print, screen and (min-width: 40em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:none}}@media print, screen and (min-width: 25em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:none}}@media print, screen and (min-width: 64em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:none}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.smedium.hidden{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.medium.hidden{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.large.hidden{display:none}}nav.top-bar>span #responsive-menu .hidden-menu li.never{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.never.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.always{display:none}nav.top-bar>span .navbar-menu{background:initial;width:auto;z-index:9000}nav.top-bar>span .navbar-menu a img+span{display:none}nav.top-bar>span .navbar-menu li{position:relative;z-index:9000}nav.top-bar>span .navbar-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span .navbar-menu li.hidden{display:none}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu li.smedium{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu li li{display:table-cell}nav.top-bar>span .navbar-menu li.medium{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span .navbar-menu li.large{display:none}}nav.top-bar>span .navbar-menu li.never{display:none}nav.top-bar>span .navbar-menu .menu li,nav.top-bar>span .navbar-menu.menu li{z-index:100}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{width:100%}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.236rem}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.236rem}}nav.top-bar>span .navbar-menu .menu li.img a,nav.top-bar>span .navbar-menu.menu li.img a{padding-top:0;padding-bottom:0}nav.top-bar>span .navbar-menu .menu li.img a img,nav.top-bar>span .navbar-menu.menu li.img a img{vertical-align:inherit;max-height:1.8rem}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu{min-width:0}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu li,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu li{display:inherit}nav.top-bar>span .navbar-menu .menu>li.opens-right>a,nav.top-bar>span .navbar-menu.menu>li.opens-right>a{margin-right:0.5rem}nav.top-bar>span .navbar-menu .menu>li.opens-right>a:after,nav.top-bar>span .navbar-menu.menu>li.opens-right>a:after{right:0.1rem}nav.top-bar>span .submenu{background:#000}nav.top-bar.with-image{background:rgba(0,0,0,0);-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image *{-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image .background-img{display:initial;margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem);min-width:1.5625rem}@media print, screen and (min-width: 40em){nav.top-bar.with-image .background-img{margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem);min-width:2.34375rem}}nav.top-bar.with-image>span{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar.with-image>span>*{position:relative}nav.top-bar.with-image>span #responsive-menu-toggle{z-index:9100}nav.top-bar.with-image>span .navbar-menu{background:initial}nav.top-bar.with-image>span .submenu{background:#000}nav.top-bar.with-image.color-black{color:#000;stroke:#000}nav.top-bar.with-image.color-black #responsive-menu .hidden-menu{background:#fff;border-color:#7F7F7F}nav.top-bar.with-image.color-black #responsive-menu-toggle .menu-icon::after{background:#000;-webkit-box-shadow:0 7px 0 #000,0 14px 0 #000;box-shadow:0 7px 0 #000,0 14px 0 #000}nav.top-bar.with-image.color-black .submenu{background:#fff}nav.top-bar.with-image.color-white{color:#fff;stroke:#fff}nav.top-bar.with-image.color-white #responsive-menu .hidden-menu{background:#000;border-color:#1e1c1c}nav.top-bar.with-image.color-white #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar.with-image.color-white .submenu{background:#000}nav.top-bar.with-image.solid{background:#000}nav.top-bar.with-image.solid>span #responsive-menu .hidden-menu{border-color:#7F7F7F}nav.top-bar.with-image.solid>span .navbar-menu{background:inherit}nav.top-bar.with-image.solid.color-black{background:#fff}nav.top-bar.with-image.solid.color-white{background:#000}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{margin-right:0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a::after,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{right:0.1rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) ul a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>ul a{width:100%}.menu.is-accordion-submenu{margin-left:0.7rem}.menu{-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top;-webkit-transition:0.25s;transition:0.25s}#responsive-menu-toggle button{vertical-align:initial}.dropdown.menu>li.is-accordion-submenu-parent>ul.is-dropdown-submenu{left:auto;right:0}#navbar-fragment{width:100%}.logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.logo .logo-img{margin-left:1rem;margin-right:0.5rem;max-width:2.35rem}.tab-fragment .tab-names .tab-button{display:inline-block;border:1px solid #E6E6E6;border-top-left-radius:3px;border-top-right-radius:3px;background-color:#E6E6E6;padding:0.3rem}.tab-fragment .tab-names .tab-button.active{border-bottom:0;background-color:initial}.tab-fragment .tab-content{border:1px solid #E6E6E6;border-top:0;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.tab-fragment .tab-content .tab-site{display:none}.tab-fragment .tab-content .tab-site.active{display:initial}.tab-fragment .tab-button-template,.tab-fragment .tab-site-template{display:none}.tab-fragment .border-bottom{border-bottom:1px solid #E6E6E6}.alphabetic-list{height:100%;position:relative}.alphabetic-list .alphabetic-list-container{height:100%;overflow:auto}.alphabetic-list .alphabetic-list-sidealphabet{height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{cursor:pointer;height:3.8%;display:block;text-align:center}@media print, screen and (max-width: 24.99875em){.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{font-size:0.8em}}.window-container{position:fixed;background:white;padding:0;border:1px solid #b1b1b1;border-radius:3px;cursor:-webkit-grab;cursor:grab;-webkit-transition:none;transition:none;min-width:10rem;min-height:3rem;-webkit-box-sizing:content-box;box-sizing:content-box;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.window-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.window-container.active-window{z-index:1100}.window-container .window-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.window-container .window-resize.edge{width:4px;height:4px}.window-container .window-resize.edge.nw{cursor:nw-resize}.window-container .window-resize.edge.ne{cursor:ne-resize}.window-container .window-resize.edge.sw{cursor:sw-resize}.window-container .window-resize.edge.se{cursor:se-resize}.window-container .window-resize.bottom,.window-container .window-resize.top{cursor:ns-resize;height:4px}.window-container .window-resize.left,.window-container .window-resize.right{cursor:ew-resize;width:4px}.window-container #title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0;padding-bottom:0.5rem;font-size:1rem;letter-spacing:0.2rem;font-weight:bold}.window-container #title-buttons .title-button{max-height:1rem;cursor:pointer;outline:none;display:inline-block}.window-container.moving{cursor:-webkit-grabbing;cursor:grabbing}.window-container.minimized{padding:0.2rem;width:0 !important;height:0 !important;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.window-container.minimized .window{display:none}.window-container.minimized .window-resize{display:none}.window-container.minimized #title{border:0;margin:0;height:100%}.window-container.minimized #title-buttons .title-button.hide-minimized{display:none}.window-container.maximized{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.maximized .window-resize{display:none}.window-container.maximized #title-buttons .title-button.hide-maximized{display:none}.window-container.popup{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.popup .window-resize{display:none}.window-container.popup #title-buttons .title-button.hide-popup{display:none}.window-container .window{overflow:auto;cursor:initial;position:relative}.max-height-100{max-height:100%}.overflow-hidden{overflow:hidden}body:not(.access-admin) .access-admin{display:none}body:not(.access-loggedIn) .access-loggedIn{display:none}body:not(.access-loggedOut) .access-loggedOut{display:none}body:not(.access-online) .access-online{display:none}body:not(.access-offline) .access-offline{display:none}body:not(.access-default) .access-default{display:none}.share-icon{width:1.5rem;max-width:1.5rem;margin:0.1rem}.share-icon svg{width:1.5rem;max-width:1.5rem}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{min-height:100%;width:100%;height:100%;letter-spacing:1px}.max-height{height:100%;min-height:100%}body{margin:0;padding:0;height:100%;width:100%;font-family:"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;font-weight:400;line-height:1.5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background:#fefefe;color:#0a0a0a}footer{border-top:#d8d8d8 solid 1px;text-align:center}.top-bar .top-bar-title strong{vertical-align:middle;display:inline-block}nav.top-bar{color:#FFF;font-size:20px;-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);padding:0.6rem;display:block}button.button,a.button{border-radius:2px}.fill-me{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.fill-me.vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.fill-me .grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flex-center{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.flex-center>*{max-height:100%}.menu a,.dropdown.menu a{padding:.4rem .5rem}svg path{fill:currentColor}div.mainContainer{position:relative;max-height:100%;max-width:100%;overflow:auto;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin:0.5rem}div.mainContainer>.row,div.mainContainer #main-content,div.mainContainer #site{position:absolute;width:100%;height:100%;top:0;bottom:0;left:0;right:0}.inline-block{display:inline-block}.right{float:right}#logo-img{max-height:2.2rem}a{text-decoration:none;cursor:pointer;color:inherit}a.hidden-link{text-decoration:none;color:inherit}label{cursor:pointer}.align-right{text-align:right}.view-panel{display:none}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small #spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader #spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#b71c1a;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@-webkit-keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}#print-content{display:none}.action-button{max-height:1.7rem;margin-left:0.4rem;margin-right:0.4rem}.action-button:hover{background:#e8e8e8}.vcenter-container{width:100%;height:100%;display:table}.vcenter-container .vcenter{vertical-align:middle;display:table-cell;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.max-width{width:100%}input,button{letter-spacing:1px !important}.no-padding{padding:0;border:0}.center{text-align:center}@media print{nav,.mainContainer,footer,#styles{display:none !important}#print-content{display:block !important}}.overflow-y-auto{overflow-y:auto !important}.row.no-after:after{content:initial}.margin-bottom{margin-bottom:1rem}@media print, screen and (min-width: 25em){.margin-bottom{margin-bottom:2rem}}@media print, screen and (min-width: 40em){.margin-bottom{margin-bottom:3rem}}@media print, screen and (min-width: 64em){.margin-bottom{margin-bottom:4rem}}@media screen and (min-width: 75em){.margin-bottom{margin-bottom:5rem}}.font-small{font-size:0.7em}.border-bottom{border-bottom:1px solid #cacaca}.border-right{border-right:1px solid #cacaca}.border-left{border-left:1px solid #cacaca}img.logo{vertical-align:inherit;display:inline-block;height:auto;max-width:1.1rem;margin-right:2px}.align-center{text-align:center}hr.separator{margin:1rem 0}.button-line{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.button-line .button{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-left:1px;margin-right:1px;padding:0.5rem 0.77rem}@media print, screen and (max-width: 24.99875em){.small-small{font-size:small}}select{border:0;padding:0.3rem 0.3rem}.hidden{display:none}.no-transition{-webkit-transition:none !important;transition:none !important}img.action-image{max-height:1.4rem;cursor:pointer}img.back-button{max-height:0.6rem;margin-right:0.2rem;cursor:pointer;vertical-align:inherit}.no-margin-bottom{margin-bottom:0}.settings-container{border:1px solid black;border-radius:2px;padding:0.3rem}@media print, screen and (min-width: 40em){.settings-container #settings-fragments-container{border-left:1px solid #cacaca}}.settings-container #settings-fragments-container #settings-fragments>*{display:none}.settings-container #settings-fragments-container #settings-fragments>*.active{display:block}.switch{position:relative;display:inline-block;height:initial}@media print, screen and (max-width: 24.99875em){.switch{font-size:0.6em}}@media print, screen and (max-width: 39.99875em){.switch{font-size:0.7em}}.switch input{display:none}.switch input:checked+.slider:before{-webkit-transform:translateX(1.5em);-ms-transform:translateX(1.5em);transform:translateX(1.5em)}.switch .slider{display:inline-block;position:relative;cursor:pointer;width:3em;height:1.5em;border-radius:1.5em;background-color:#ccc;-webkit-transition:.4s;transition:.4s;margin-bottom:0;margin-top:0}.switch .slider:before{position:absolute;content:"";height:1.1em;width:1.1em;left:0.15em;bottom:0.15em;background-color:white;-webkit-transition:.4s;transition:.4s;border-radius:50%}.switch img,.switch svg{width:1.4em;display:inline;vertical-align:initial}.switch img path,.switch svg path{stroke-color:inherit}label{font-size:1em !important}.setting-row:not(.hidden){line-height:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0.5rem 0.4rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;cursor:pointer;background:rgba(195,195,195,0.13)}.setting-row:not(.hidden)>*{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.setting-row:not(.hidden) input[type=checkbox]{margin:0}.zf-green{color:#68b604}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:left}input[type=checkBox].form-control{height:24px;height:1.5rem;width:100%}[type=submit]{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:39px;height:2.4375rem;padding:8px;padding:.5rem;border:1px solid #cacaca;margin:0 0 16px;margin:0 0 1rem;font-family:inherit;font-size:16px;font-size:1rem;color:#0a0a0a;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);border-radius:0;-webkit-transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:box-shadow .5s, border-color .25s ease-in-out;transition:box-shadow .5s, border-color .25s ease-in-out, -webkit-box-shadow .5s;-webkit-appearance:none;-moz-appearance:none}form ul li{color:red;font-size:12.8px;font-size:.8rem}.button-dropdown:after{border-color:#000 transparent transparent;border-width:.4em;border-style:solid;content:"";position:absolute;top:.4em;display:block;height:0;width:0;right:1em}.button-dropdown{position:relative;display:block;padding-right:2em}.button-dropdown.open:after{border-color:transparent transparent #000;top:0}a.ui-datepicker-next,a.ui-datepicker-prev{height:100% !important}div.container a.navbar-brand>img{display:inline;margin-right:4px}ul.menu.plain li.active a{background-color:#ededed;color:#000}ul.menu.plain li a{color:#000}ul.menu.plain li a:hover{color:#525252}ul.submenu{border-top:1px solid #bcbcbc;border-bottom:1px solid #bcbcbc;margin-left:10px}#cookie-compliance{line-height:1.2;font-size:0.8rem;width:100%;margin:0 0;padding:0.3rem 0}#cookie-compliance #close-cookie-msg{float:right;margin-bottom:0;margin-right:3px;padding:0.4rem 0.8rem}.menu-container .button{text-align:center;width:100%}.height-5{height:5%}.max-height-5{max-height:5%}.width-5{width:5%}.max-width-5{max-width:5%}.height-10{height:10%}.max-height-10{max-height:10%}.width-10{width:10%}.max-width-10{max-width:10%}.height-15{height:15%}.max-height-15{max-height:15%}.width-15{width:15%}.max-width-15{max-width:15%}.height-20{height:20%}.max-height-20{max-height:20%}.width-20{width:20%}.max-width-20{max-width:20%}.height-25{height:25%}.max-height-25{max-height:25%}.width-25{width:25%}.max-width-25{max-width:25%}.height-30{height:30%}.max-height-30{max-height:30%}.width-30{width:30%}.max-width-30{max-width:30%}.height-35{height:35%}.max-height-35{max-height:35%}.width-35{width:35%}.max-width-35{max-width:35%}.height-40{height:40%}.max-height-40{max-height:40%}.width-40{width:40%}.max-width-40{max-width:40%}.height-45{height:45%}.max-height-45{max-height:45%}.width-45{width:45%}.max-width-45{max-width:45%}.height-50{height:50%}.max-height-50{max-height:50%}.width-50{width:50%}.max-width-50{max-width:50%}.height-55{height:55%}.max-height-55{max-height:55%}.width-55{width:55%}.max-width-55{max-width:55%}.height-60{height:60%}.max-height-60{max-height:60%}.width-60{width:60%}.max-width-60{max-width:60%}.height-65{height:65%}.max-height-65{max-height:65%}.width-65{width:65%}.max-width-65{max-width:65%}.height-70{height:70%}.max-height-70{max-height:70%}.width-70{width:70%}.max-width-70{max-width:70%}.height-75{height:75%}.max-height-75{max-height:75%}.width-75{width:75%}.max-width-75{max-width:75%}.height-80{height:80%}.max-height-80{max-height:80%}.width-80{width:80%}.max-width-80{max-width:80%}.height-85{height:85%}.max-height-85{max-height:85%}.width-85{width:85%}.max-width-85{max-width:85%}.height-90{height:90%}.max-height-90{max-height:90%}.width-90{width:90%}.max-width-90{max-width:90%}.height-95{height:95%}.max-height-95{max-height:95%}.width-95{width:95%}.max-width-95{max-width:95%}.height-100{height:100%}.max-height-100{max-height:100%}.width-100{width:100%}.max-width-100{max-width:100%}.text-right{text-align:right}*{-webkit-transition:.25s ease-out, color .25s ease-out;transition:.25s ease-out, color .25s ease-out}body.red{background:#fff;color:#000}body.red #cookie-compliance{background-color:#870015;color:#fff}body.red #cookie-compliance a.link{color:#ff3d00;border-bottom-color:#ff3d00}body.red #cookie-compliance a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red a.link{text-decoration:none;color:#ff3d00;border-bottom:none}body.red a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red .loader #spinner{stroke:#b71c1a}body.red nav.top-bar{color:#fff;background:red}body.red .top-bar ul{background:red !important}body.red .top-bar ul a{color:#fff}body.red button.button,body.red a.button{background-color:red}body.red button.button.disabled,body.red button.button.disabled:hover,body.red button.button.disabled:focus,body.red button.button:hover,body.red a.button.disabled,body.red a.button.disabled:hover,body.red a.button.disabled:focus,body.red a.button:hover{background-color:red}body.red .switch input:checked+.slider{background-color:red}body.red .switch input:focus+.slider{-webkit-box-shadow:0 0 1px red;box-shadow:0 0 1px red}body.red label{color:#000}body.red .background .modal{background-color:#fefefe}body.red svg .fill-color,body.red svg.fill-color{fill:currentColor}body.red svg .fill-background,body.red svg.fill-background{fill:#fefefe}body.red label [type='text'],body.red label [type='password'],body.red label [type='date'],body.red label [type='datetime'],body.red label [type='datetime-local'],body.red label [type='month'],body.red label [type='week'],body.red label [type='email'],body.red label [type='number'],body.red label [type='search'],body.red label [type='tel'],body.red label [type='time'],body.red label [type='url'],body.red label [type='color'],body.red label textarea,body.red label input[type=text],body.red label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.red label [type='text']:focus,body.red label [type='password']:focus,body.red label [type='date']:focus,body.red label [type='datetime']:focus,body.red label [type='datetime-local']:focus,body.red label [type='month']:focus,body.red label [type='week']:focus,body.red label [type='email']:focus,body.red label [type='number']:focus,body.red label [type='search']:focus,body.red label [type='tel']:focus,body.red label [type='time']:focus,body.red label [type='url']:focus,body.red label [type='color']:focus,body.red label textarea:focus,body.red label input[type=text]:focus,body.red label input:not([type]):focus{border-bottom:solid #000}body.red label [type='text']:focus ~ span,body.red label [type='text'].notEmpty:not(:focus) ~ span,body.red label [type='password']:focus ~ span,body.red label [type='password'].notEmpty:not(:focus) ~ span,body.red label [type='date']:focus ~ span,body.red label [type='date'].notEmpty:not(:focus) ~ span,body.red label [type='datetime']:focus ~ span,body.red label [type='datetime'].notEmpty:not(:focus) ~ span,body.red label [type='datetime-local']:focus ~ span,body.red label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.red label [type='month']:focus ~ span,body.red label [type='month'].notEmpty:not(:focus) ~ span,body.red label [type='week']:focus ~ span,body.red label [type='week'].notEmpty:not(:focus) ~ span,body.red label [type='email']:focus ~ span,body.red label [type='email'].notEmpty:not(:focus) ~ span,body.red label [type='number']:focus ~ span,body.red label [type='number'].notEmpty:not(:focus) ~ span,body.red label [type='search']:focus ~ span,body.red label [type='search'].notEmpty:not(:focus) ~ span,body.red label [type='tel']:focus ~ span,body.red label [type='tel'].notEmpty:not(:focus) ~ span,body.red label [type='time']:focus ~ span,body.red label [type='time'].notEmpty:not(:focus) ~ span,body.red label [type='url']:focus ~ span,body.red label [type='url'].notEmpty:not(:focus) ~ span,body.red label [type='color']:focus ~ span,body.red label [type='color'].notEmpty:not(:focus) ~ span,body.red label textarea:focus ~ span,body.red label textarea.notEmpty:not(:focus) ~ span,body.red label input[type=text]:focus ~ span,body.red label input[type=text].notEmpty:not(:focus) ~ span,body.red label input:not([type]):focus ~ span,body.red label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.red label [type='text'] ~ span,body.red label [type='password'] ~ span,body.red label [type='date'] ~ span,body.red label [type='datetime'] ~ span,body.red label [type='datetime-local'] ~ span,body.red label [type='month'] ~ span,body.red label [type='week'] ~ span,body.red label [type='email'] ~ span,body.red label [type='number'] ~ span,body.red label [type='search'] ~ span,body.red label [type='tel'] ~ span,body.red label [type='time'] ~ span,body.red label [type='url'] ~ span,body.red label [type='color'] ~ span,body.red label textarea ~ span,body.red label input[type=text] ~ span,body.red label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.red label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.red input.notEmpty:invalid{background-color:rgba(255,0,0,0.65)}body.blue{background:#fff;color:#000}body.blue #cookie-compliance{background-color:#1a3062;color:#fff}body.blue #cookie-compliance a.link{color:#546cfe;border-bottom-color:#546cfe}body.blue #cookie-compliance a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue a.link{text-decoration:none;color:#546cfe;border-bottom:none}body.blue a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue .loader #spinner{stroke:#673AB7}body.blue nav.top-bar{color:#fff;background:#2c58ae}body.blue .top-bar ul{background:#2c58ae !important}body.blue .top-bar ul a{color:#fff}body.blue button.button,body.blue a.button{background-color:#2c58ae}body.blue button.button.disabled,body.blue button.button.disabled:hover,body.blue button.button.disabled:focus,body.blue button.button:hover,body.blue a.button.disabled,body.blue a.button.disabled:hover,body.blue a.button.disabled:focus,body.blue a.button:hover{background-color:#2c58ae}body.blue .switch input:checked+.slider{background-color:#2c58ae}body.blue .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #2c58ae;box-shadow:0 0 1px #2c58ae}body.blue label{color:#000}body.blue .background .modal{background-color:#fefefe}body.blue svg .fill-color,body.blue svg.fill-color{fill:currentColor}body.blue svg .fill-background,body.blue svg.fill-background{fill:#fefefe}body.blue label [type='text'],body.blue label [type='password'],body.blue label [type='date'],body.blue label [type='datetime'],body.blue label [type='datetime-local'],body.blue label [type='month'],body.blue label [type='week'],body.blue label [type='email'],body.blue label [type='number'],body.blue label [type='search'],body.blue label [type='tel'],body.blue label [type='time'],body.blue label [type='url'],body.blue label [type='color'],body.blue label textarea,body.blue label input[type=text],body.blue label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.blue label [type='text']:focus,body.blue label [type='password']:focus,body.blue label [type='date']:focus,body.blue label [type='datetime']:focus,body.blue label [type='datetime-local']:focus,body.blue label [type='month']:focus,body.blue label [type='week']:focus,body.blue label [type='email']:focus,body.blue label [type='number']:focus,body.blue label [type='search']:focus,body.blue label [type='tel']:focus,body.blue label [type='time']:focus,body.blue label [type='url']:focus,body.blue label [type='color']:focus,body.blue label textarea:focus,body.blue label input[type=text]:focus,body.blue label input:not([type]):focus{border-bottom:solid #000}body.blue label [type='text']:focus ~ span,body.blue label [type='text'].notEmpty:not(:focus) ~ span,body.blue label [type='password']:focus ~ span,body.blue label [type='password'].notEmpty:not(:focus) ~ span,body.blue label [type='date']:focus ~ span,body.blue label [type='date'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime']:focus ~ span,body.blue label [type='datetime'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime-local']:focus ~ span,body.blue label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.blue label [type='month']:focus ~ span,body.blue label [type='month'].notEmpty:not(:focus) ~ span,body.blue label [type='week']:focus ~ span,body.blue label [type='week'].notEmpty:not(:focus) ~ span,body.blue label [type='email']:focus ~ span,body.blue label [type='email'].notEmpty:not(:focus) ~ span,body.blue label [type='number']:focus ~ span,body.blue label [type='number'].notEmpty:not(:focus) ~ span,body.blue label [type='search']:focus ~ span,body.blue label [type='search'].notEmpty:not(:focus) ~ span,body.blue label [type='tel']:focus ~ span,body.blue label [type='tel'].notEmpty:not(:focus) ~ span,body.blue label [type='time']:focus ~ span,body.blue label [type='time'].notEmpty:not(:focus) ~ span,body.blue label [type='url']:focus ~ span,body.blue label [type='url'].notEmpty:not(:focus) ~ span,body.blue label [type='color']:focus ~ span,body.blue label [type='color'].notEmpty:not(:focus) ~ span,body.blue label textarea:focus ~ span,body.blue label textarea.notEmpty:not(:focus) ~ span,body.blue label input[type=text]:focus ~ span,body.blue label input[type=text].notEmpty:not(:focus) ~ span,body.blue label input:not([type]):focus ~ span,body.blue label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.blue label [type='text'] ~ span,body.blue label [type='password'] ~ span,body.blue label [type='date'] ~ span,body.blue label [type='datetime'] ~ span,body.blue label [type='datetime-local'] ~ span,body.blue label [type='month'] ~ span,body.blue label [type='week'] ~ span,body.blue label [type='email'] ~ span,body.blue label [type='number'] ~ span,body.blue label [type='search'] ~ span,body.blue label [type='tel'] ~ span,body.blue label [type='time'] ~ span,body.blue label [type='url'] ~ span,body.blue label [type='color'] ~ span,body.blue label textarea ~ span,body.blue label input[type=text] ~ span,body.blue label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.blue label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.blue input.notEmpty:invalid{background-color:rgba(44,88,174,0.65)}body.green{background:#fff;color:#000}body.green #cookie-compliance{background-color:#003613;color:#fff}body.green #cookie-compliance a.link{color:#009829;border-bottom-color:#009829}body.green #cookie-compliance a.link:hover{color:#009829;border-bottom-color:#009829}body.green a.link{text-decoration:none;color:#009829;border-bottom:none}body.green a.link:hover{color:#009829;border-bottom-color:#009829}body.green .loader #spinner{stroke:green}body.green nav.top-bar{color:#fff;background:green}body.green .top-bar ul{background:green !important}body.green .top-bar ul a{color:#fff}body.green button.button,body.green a.button{background-color:green}body.green button.button.disabled,body.green button.button.disabled:hover,body.green button.button.disabled:focus,body.green button.button:hover,body.green a.button.disabled,body.green a.button.disabled:hover,body.green a.button.disabled:focus,body.green a.button:hover{background-color:green}body.green .switch input:checked+.slider{background-color:green}body.green .switch input:focus+.slider{-webkit-box-shadow:0 0 1px green;box-shadow:0 0 1px green}body.green label{color:#000}body.green .background .modal{background-color:#fefefe}body.green svg .fill-color,body.green svg.fill-color{fill:currentColor}body.green svg .fill-background,body.green svg.fill-background{fill:#fefefe}body.green label [type='text'],body.green label [type='password'],body.green label [type='date'],body.green label [type='datetime'],body.green label [type='datetime-local'],body.green label [type='month'],body.green label [type='week'],body.green label [type='email'],body.green label [type='number'],body.green label [type='search'],body.green label [type='tel'],body.green label [type='time'],body.green label [type='url'],body.green label [type='color'],body.green label textarea,body.green label input[type=text],body.green label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.green label [type='text']:focus,body.green label [type='password']:focus,body.green label [type='date']:focus,body.green label [type='datetime']:focus,body.green label [type='datetime-local']:focus,body.green label [type='month']:focus,body.green label [type='week']:focus,body.green label [type='email']:focus,body.green label [type='number']:focus,body.green label [type='search']:focus,body.green label [type='tel']:focus,body.green label [type='time']:focus,body.green label [type='url']:focus,body.green label [type='color']:focus,body.green label textarea:focus,body.green label input[type=text]:focus,body.green label input:not([type]):focus{border-bottom:solid #000}body.green label [type='text']:focus ~ span,body.green label [type='text'].notEmpty:not(:focus) ~ span,body.green label [type='password']:focus ~ span,body.green label [type='password'].notEmpty:not(:focus) ~ span,body.green label [type='date']:focus ~ span,body.green label [type='date'].notEmpty:not(:focus) ~ span,body.green label [type='datetime']:focus ~ span,body.green label [type='datetime'].notEmpty:not(:focus) ~ span,body.green label [type='datetime-local']:focus ~ span,body.green label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.green label [type='month']:focus ~ span,body.green label [type='month'].notEmpty:not(:focus) ~ span,body.green label [type='week']:focus ~ span,body.green label [type='week'].notEmpty:not(:focus) ~ span,body.green label [type='email']:focus ~ span,body.green label [type='email'].notEmpty:not(:focus) ~ span,body.green label [type='number']:focus ~ span,body.green label [type='number'].notEmpty:not(:focus) ~ span,body.green label [type='search']:focus ~ span,body.green label [type='search'].notEmpty:not(:focus) ~ span,body.green label [type='tel']:focus ~ span,body.green label [type='tel'].notEmpty:not(:focus) ~ span,body.green label [type='time']:focus ~ span,body.green label [type='time'].notEmpty:not(:focus) ~ span,body.green label [type='url']:focus ~ span,body.green label [type='url'].notEmpty:not(:focus) ~ span,body.green label [type='color']:focus ~ span,body.green label [type='color'].notEmpty:not(:focus) ~ span,body.green label textarea:focus ~ span,body.green label textarea.notEmpty:not(:focus) ~ span,body.green label input[type=text]:focus ~ span,body.green label input[type=text].notEmpty:not(:focus) ~ span,body.green label input:not([type]):focus ~ span,body.green label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.green label [type='text'] ~ span,body.green label [type='password'] ~ span,body.green label [type='date'] ~ span,body.green label [type='datetime'] ~ span,body.green label [type='datetime-local'] ~ span,body.green label [type='month'] ~ span,body.green label [type='week'] ~ span,body.green label [type='email'] ~ span,body.green label [type='number'] ~ span,body.green label [type='search'] ~ span,body.green label [type='tel'] ~ span,body.green label [type='time'] ~ span,body.green label [type='url'] ~ span,body.green label [type='color'] ~ span,body.green label textarea ~ span,body.green label input[type=text] ~ span,body.green label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.green label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.green input.notEmpty:invalid{background-color:rgba(0,128,0,0.65)}body.pink{background:#fff;color:#000}body.pink #cookie-compliance{background-color:#70374a;color:#fff}body.pink #cookie-compliance a.link{color:#fe64af;border-bottom-color:#fe64af}body.pink #cookie-compliance a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink a.link{text-decoration:none;color:#fe64af;border-bottom:none}body.pink a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink .loader #spinner{stroke:hotpink}body.pink nav.top-bar{color:#fff;background:hotpink}body.pink .top-bar ul{background:hotpink !important}body.pink .top-bar ul a{color:#fff}body.pink button.button,body.pink a.button{background-color:hotpink}body.pink button.button.disabled,body.pink button.button.disabled:hover,body.pink button.button.disabled:focus,body.pink button.button:hover,body.pink a.button.disabled,body.pink a.button.disabled:hover,body.pink a.button.disabled:focus,body.pink a.button:hover{background-color:hotpink}body.pink .switch input:checked+.slider{background-color:hotpink}body.pink .switch input:focus+.slider{-webkit-box-shadow:0 0 1px hotpink;box-shadow:0 0 1px hotpink}body.pink label{color:#000}body.pink .background .modal{background-color:#fefefe}body.pink svg .fill-color,body.pink svg.fill-color{fill:currentColor}body.pink svg .fill-background,body.pink svg.fill-background{fill:#fefefe}body.pink label [type='text'],body.pink label [type='password'],body.pink label [type='date'],body.pink label [type='datetime'],body.pink label [type='datetime-local'],body.pink label [type='month'],body.pink label [type='week'],body.pink label [type='email'],body.pink label [type='number'],body.pink label [type='search'],body.pink label [type='tel'],body.pink label [type='time'],body.pink label [type='url'],body.pink label [type='color'],body.pink label textarea,body.pink label input[type=text],body.pink label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.pink label [type='text']:focus,body.pink label [type='password']:focus,body.pink label [type='date']:focus,body.pink label [type='datetime']:focus,body.pink label [type='datetime-local']:focus,body.pink label [type='month']:focus,body.pink label [type='week']:focus,body.pink label [type='email']:focus,body.pink label [type='number']:focus,body.pink label [type='search']:focus,body.pink label [type='tel']:focus,body.pink label [type='time']:focus,body.pink label [type='url']:focus,body.pink label [type='color']:focus,body.pink label textarea:focus,body.pink label input[type=text]:focus,body.pink label input:not([type]):focus{border-bottom:solid #000}body.pink label [type='text']:focus ~ span,body.pink label [type='text'].notEmpty:not(:focus) ~ span,body.pink label [type='password']:focus ~ span,body.pink label [type='password'].notEmpty:not(:focus) ~ span,body.pink label [type='date']:focus ~ span,body.pink label [type='date'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime']:focus ~ span,body.pink label [type='datetime'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime-local']:focus ~ span,body.pink label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.pink label [type='month']:focus ~ span,body.pink label [type='month'].notEmpty:not(:focus) ~ span,body.pink label [type='week']:focus ~ span,body.pink label [type='week'].notEmpty:not(:focus) ~ span,body.pink label [type='email']:focus ~ span,body.pink label [type='email'].notEmpty:not(:focus) ~ span,body.pink label [type='number']:focus ~ span,body.pink label [type='number'].notEmpty:not(:focus) ~ span,body.pink label [type='search']:focus ~ span,body.pink label [type='search'].notEmpty:not(:focus) ~ span,body.pink label [type='tel']:focus ~ span,body.pink label [type='tel'].notEmpty:not(:focus) ~ span,body.pink label [type='time']:focus ~ span,body.pink label [type='time'].notEmpty:not(:focus) ~ span,body.pink label [type='url']:focus ~ span,body.pink label [type='url'].notEmpty:not(:focus) ~ span,body.pink label [type='color']:focus ~ span,body.pink label [type='color'].notEmpty:not(:focus) ~ span,body.pink label textarea:focus ~ span,body.pink label textarea.notEmpty:not(:focus) ~ span,body.pink label input[type=text]:focus ~ span,body.pink label input[type=text].notEmpty:not(:focus) ~ span,body.pink label input:not([type]):focus ~ span,body.pink label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.pink label [type='text'] ~ span,body.pink label [type='password'] ~ span,body.pink label [type='date'] ~ span,body.pink label [type='datetime'] ~ span,body.pink label [type='datetime-local'] ~ span,body.pink label [type='month'] ~ span,body.pink label [type='week'] ~ span,body.pink label [type='email'] ~ span,body.pink label [type='number'] ~ span,body.pink label [type='search'] ~ span,body.pink label [type='tel'] ~ span,body.pink label [type='time'] ~ span,body.pink label [type='url'] ~ span,body.pink label [type='color'] ~ span,body.pink label textarea ~ span,body.pink label input[type=text] ~ span,body.pink label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.pink label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.pink input.notEmpty:invalid{background-color:rgba(255,105,180,0.65)}body.black{background:#fff;color:#000}body.black #cookie-compliance{background-color:#353535;color:#fff}body.black #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.black #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.black a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.black a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.black .loader #spinner{stroke:#000}body.black nav.top-bar{color:#fff;background:#000}body.black .top-bar ul{background:#000 !important}body.black .top-bar ul a{color:#fff}body.black button.button,body.black a.button{background-color:#000}body.black button.button.disabled,body.black button.button.disabled:hover,body.black button.button.disabled:focus,body.black button.button:hover,body.black a.button.disabled,body.black a.button.disabled:hover,body.black a.button.disabled:focus,body.black a.button:hover{background-color:#000}body.black .switch input:checked+.slider{background-color:#000}body.black .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.black label{color:#000}body.black .background .modal{background-color:#fefefe}body.black svg .fill-color,body.black svg.fill-color{fill:currentColor}body.black svg .fill-background,body.black svg.fill-background{fill:#fefefe}body.black label [type='text'],body.black label [type='password'],body.black label [type='date'],body.black label [type='datetime'],body.black label [type='datetime-local'],body.black label [type='month'],body.black label [type='week'],body.black label [type='email'],body.black label [type='number'],body.black label [type='search'],body.black label [type='tel'],body.black label [type='time'],body.black label [type='url'],body.black label [type='color'],body.black label textarea,body.black label input[type=text],body.black label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.black label [type='text']:focus,body.black label [type='password']:focus,body.black label [type='date']:focus,body.black label [type='datetime']:focus,body.black label [type='datetime-local']:focus,body.black label [type='month']:focus,body.black label [type='week']:focus,body.black label [type='email']:focus,body.black label [type='number']:focus,body.black label [type='search']:focus,body.black label [type='tel']:focus,body.black label [type='time']:focus,body.black label [type='url']:focus,body.black label [type='color']:focus,body.black label textarea:focus,body.black label input[type=text]:focus,body.black label input:not([type]):focus{border-bottom:solid #000}body.black label [type='text']:focus ~ span,body.black label [type='text'].notEmpty:not(:focus) ~ span,body.black label [type='password']:focus ~ span,body.black label [type='password'].notEmpty:not(:focus) ~ span,body.black label [type='date']:focus ~ span,body.black label [type='date'].notEmpty:not(:focus) ~ span,body.black label [type='datetime']:focus ~ span,body.black label [type='datetime'].notEmpty:not(:focus) ~ span,body.black label [type='datetime-local']:focus ~ span,body.black label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.black label [type='month']:focus ~ span,body.black label [type='month'].notEmpty:not(:focus) ~ span,body.black label [type='week']:focus ~ span,body.black label [type='week'].notEmpty:not(:focus) ~ span,body.black label [type='email']:focus ~ span,body.black label [type='email'].notEmpty:not(:focus) ~ span,body.black label [type='number']:focus ~ span,body.black label [type='number'].notEmpty:not(:focus) ~ span,body.black label [type='search']:focus ~ span,body.black label [type='search'].notEmpty:not(:focus) ~ span,body.black label [type='tel']:focus ~ span,body.black label [type='tel'].notEmpty:not(:focus) ~ span,body.black label [type='time']:focus ~ span,body.black label [type='time'].notEmpty:not(:focus) ~ span,body.black label [type='url']:focus ~ span,body.black label [type='url'].notEmpty:not(:focus) ~ span,body.black label [type='color']:focus ~ span,body.black label [type='color'].notEmpty:not(:focus) ~ span,body.black label textarea:focus ~ span,body.black label textarea.notEmpty:not(:focus) ~ span,body.black label input[type=text]:focus ~ span,body.black label input[type=text].notEmpty:not(:focus) ~ span,body.black label input:not([type]):focus ~ span,body.black label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.black label [type='text'] ~ span,body.black label [type='password'] ~ span,body.black label [type='date'] ~ span,body.black label [type='datetime'] ~ span,body.black label [type='datetime-local'] ~ span,body.black label [type='month'] ~ span,body.black label [type='week'] ~ span,body.black label [type='email'] ~ span,body.black label [type='number'] ~ span,body.black label [type='search'] ~ span,body.black label [type='tel'] ~ span,body.black label [type='time'] ~ span,body.black label [type='url'] ~ span,body.black label [type='color'] ~ span,body.black label textarea ~ span,body.black label input[type=text] ~ span,body.black label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.black label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.black input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.default{background:rgba(0,0,0,0);color:#000}body.default #cookie-compliance{background-color:#353535;color:#fff}body.default #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.default #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.default a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.default a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.default .loader #spinner{stroke:#000}body.default nav.top-bar{color:#fff;background:#000}body.default .top-bar ul{background:#000 !important}body.default .top-bar ul a{color:#fff}body.default button.button,body.default a.button{background-color:#000}body.default button.button.disabled,body.default button.button.disabled:hover,body.default button.button.disabled:focus,body.default button.button:hover,body.default a.button.disabled,body.default a.button.disabled:hover,body.default a.button.disabled:focus,body.default a.button:hover{background-color:#000}body.default .switch input:checked+.slider{background-color:#000}body.default .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.default label{color:#000}body.default .background .modal{background-color:#fefefe}body.default svg .fill-color,body.default svg.fill-color{fill:currentColor}body.default svg .fill-background,body.default svg.fill-background{fill:#fefefe}body.default label [type='text'],body.default label [type='password'],body.default label [type='date'],body.default label [type='datetime'],body.default label [type='datetime-local'],body.default label [type='month'],body.default label [type='week'],body.default label [type='email'],body.default label [type='number'],body.default label [type='search'],body.default label [type='tel'],body.default label [type='time'],body.default label [type='url'],body.default label [type='color'],body.default label textarea,body.default label input[type=text],body.default label input:not([type]){border-bottom:solid #000;background:rgba(0,0,0,0);color:#000}body.default label [type='text']:focus,body.default label [type='password']:focus,body.default label [type='date']:focus,body.default label [type='datetime']:focus,body.default label [type='datetime-local']:focus,body.default label [type='month']:focus,body.default label [type='week']:focus,body.default label [type='email']:focus,body.default label [type='number']:focus,body.default label [type='search']:focus,body.default label [type='tel']:focus,body.default label [type='time']:focus,body.default label [type='url']:focus,body.default label [type='color']:focus,body.default label textarea:focus,body.default label input[type=text]:focus,body.default label input:not([type]):focus{border-bottom:solid #000}body.default label [type='text']:focus ~ span,body.default label [type='text'].notEmpty:not(:focus) ~ span,body.default label [type='password']:focus ~ span,body.default label [type='password'].notEmpty:not(:focus) ~ span,body.default label [type='date']:focus ~ span,body.default label [type='date'].notEmpty:not(:focus) ~ span,body.default label [type='datetime']:focus ~ span,body.default label [type='datetime'].notEmpty:not(:focus) ~ span,body.default label [type='datetime-local']:focus ~ span,body.default label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.default label [type='month']:focus ~ span,body.default label [type='month'].notEmpty:not(:focus) ~ span,body.default label [type='week']:focus ~ span,body.default label [type='week'].notEmpty:not(:focus) ~ span,body.default label [type='email']:focus ~ span,body.default label [type='email'].notEmpty:not(:focus) ~ span,body.default label [type='number']:focus ~ span,body.default label [type='number'].notEmpty:not(:focus) ~ span,body.default label [type='search']:focus ~ span,body.default label [type='search'].notEmpty:not(:focus) ~ span,body.default label [type='tel']:focus ~ span,body.default label [type='tel'].notEmpty:not(:focus) ~ span,body.default label [type='time']:focus ~ span,body.default label [type='time'].notEmpty:not(:focus) ~ span,body.default label [type='url']:focus ~ span,body.default label [type='url'].notEmpty:not(:focus) ~ span,body.default label [type='color']:focus ~ span,body.default label [type='color'].notEmpty:not(:focus) ~ span,body.default label textarea:focus ~ span,body.default label textarea.notEmpty:not(:focus) ~ span,body.default label input[type=text]:focus ~ span,body.default label input[type=text].notEmpty:not(:focus) ~ span,body.default label input:not([type]):focus ~ span,body.default label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.default label [type='text'] ~ span,body.default label [type='password'] ~ span,body.default label [type='date'] ~ span,body.default label [type='datetime'] ~ span,body.default label [type='datetime-local'] ~ span,body.default label [type='month'] ~ span,body.default label [type='week'] ~ span,body.default label [type='email'] ~ span,body.default label [type='number'] ~ span,body.default label [type='search'] ~ span,body.default label [type='tel'] ~ span,body.default label [type='time'] ~ span,body.default label [type='url'] ~ span,body.default label [type='color'] ~ span,body.default label textarea ~ span,body.default label input[type=text] ~ span,body.default label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.default label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.default input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.dark{background:#000;color:#fff}body.dark #cookie-compliance{background-color:#4b4b4b;color:#fff}body.dark #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.dark #cookie-compliance a.link:hover{color:#fff;border-bottom-color:#fff}body.dark a.link{text-decoration:none;color:#fff;border-bottom:1px solid #fff}body.dark a.link:hover{color:#fff;border-bottom-color:#fff}body.dark .loader #spinner{stroke:#fff}body.dark nav.top-bar{color:#fff;background:#373737}body.dark .top-bar ul{background:#373737 !important}body.dark .top-bar ul a{color:#fff}body.dark button.button,body.dark a.button{background-color:#373737}body.dark button.button.disabled,body.dark button.button.disabled:hover,body.dark button.button.disabled:focus,body.dark button.button:hover,body.dark a.button.disabled,body.dark a.button.disabled:hover,body.dark a.button.disabled:focus,body.dark a.button:hover{background-color:#373737}body.dark .switch input:checked+.slider{background-color:#373737}body.dark .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #373737;box-shadow:0 0 1px #373737}body.dark label{color:#fff}body.dark .background .modal{background-color:#fefefe}body.dark svg .fill-color,body.dark svg.fill-color{fill:currentColor}body.dark svg .fill-background,body.dark svg.fill-background{fill:#fefefe}body.dark label [type='text'],body.dark label [type='password'],body.dark label [type='date'],body.dark label [type='datetime'],body.dark label [type='datetime-local'],body.dark label [type='month'],body.dark label [type='week'],body.dark label [type='email'],body.dark label [type='number'],body.dark label [type='search'],body.dark label [type='tel'],body.dark label [type='time'],body.dark label [type='url'],body.dark label [type='color'],body.dark label textarea,body.dark label input[type=text],body.dark label input:not([type]){border-bottom:solid #fff;background:#000;color:#fff}body.dark label [type='text']:focus,body.dark label [type='password']:focus,body.dark label [type='date']:focus,body.dark label [type='datetime']:focus,body.dark label [type='datetime-local']:focus,body.dark label [type='month']:focus,body.dark label [type='week']:focus,body.dark label [type='email']:focus,body.dark label [type='number']:focus,body.dark label [type='search']:focus,body.dark label [type='tel']:focus,body.dark label [type='time']:focus,body.dark label [type='url']:focus,body.dark label [type='color']:focus,body.dark label textarea:focus,body.dark label input[type=text]:focus,body.dark label input:not([type]):focus{border-bottom:solid #fff}body.dark label [type='text']:focus ~ span,body.dark label [type='text'].notEmpty:not(:focus) ~ span,body.dark label [type='password']:focus ~ span,body.dark label [type='password'].notEmpty:not(:focus) ~ span,body.dark label [type='date']:focus ~ span,body.dark label [type='date'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime']:focus ~ span,body.dark label [type='datetime'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime-local']:focus ~ span,body.dark label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.dark label [type='month']:focus ~ span,body.dark label [type='month'].notEmpty:not(:focus) ~ span,body.dark label [type='week']:focus ~ span,body.dark label [type='week'].notEmpty:not(:focus) ~ span,body.dark label [type='email']:focus ~ span,body.dark label [type='email'].notEmpty:not(:focus) ~ span,body.dark label [type='number']:focus ~ span,body.dark label [type='number'].notEmpty:not(:focus) ~ span,body.dark label [type='search']:focus ~ span,body.dark label [type='search'].notEmpty:not(:focus) ~ span,body.dark label [type='tel']:focus ~ span,body.dark label [type='tel'].notEmpty:not(:focus) ~ span,body.dark label [type='time']:focus ~ span,body.dark label [type='time'].notEmpty:not(:focus) ~ span,body.dark label [type='url']:focus ~ span,body.dark label [type='url'].notEmpty:not(:focus) ~ span,body.dark label [type='color']:focus ~ span,body.dark label [type='color'].notEmpty:not(:focus) ~ span,body.dark label textarea:focus ~ span,body.dark label textarea.notEmpty:not(:focus) ~ span,body.dark label input[type=text]:focus ~ span,body.dark label input[type=text].notEmpty:not(:focus) ~ span,body.dark label input:not([type]):focus ~ span,body.dark label input:not([type]).notEmpty:not(:focus) ~ span{color:#fff}body.dark label [type='text'] ~ span,body.dark label [type='password'] ~ span,body.dark label [type='date'] ~ span,body.dark label [type='datetime'] ~ span,body.dark label [type='datetime-local'] ~ span,body.dark label [type='month'] ~ span,body.dark label [type='week'] ~ span,body.dark label [type='email'] ~ span,body.dark label [type='number'] ~ span,body.dark label [type='search'] ~ span,body.dark label [type='tel'] ~ span,body.dark label [type='time'] ~ span,body.dark label [type='url'] ~ span,body.dark label [type='color'] ~ span,body.dark label textarea ~ span,body.dark label input[type=text] ~ span,body.dark label input:not([type]) ~ span{color:rgba(255,255,255,0.65)}body.dark label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.dark input.notEmpty:invalid{background-color:rgba(55,55,55,0.65)}@-webkit-keyframes tutorialPointer{0%{top:25%}100%{top:75%}}@keyframes tutorialPointer{0%{top:25%}100%{top:75%}}.tutorial-blanket{display:none;position:fixed;top:0;bottom:0;left:0;right:0;z-index:9001;background:rgba(55,55,55,0.51)}.tutorial .tutorial-blanket{display:block}.tutorial .tutorial-text{color:white;font-size:1.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:none !important;transition:none !important}.tutorial .tutorial-text *{-webkit-transition:none !important;transition:none !important}.tutorial.step-1 #level .segment-row{position:inherit}.tutorial.step-1 #level .segment-parent:nth-child(3),.tutorial.step-1 #level .segment-parent:nth-child(3).rotating{z-index:9900 !important}.tutorial.step-1 .tutorial-text .step-1{display:initial;z-index:9900 !important;position:relative}.tutorial.step-2 #level{z-index:9900 !important}.tutorial.step-2 .tutorial-text .step-2{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .tutorial-text .step-3{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .top-bar{z-index:9900 !important}.tutorial.step-3 .help-action{margin-top:0;padding-top:10px;position:relative;overflow:visible;margin-right:10px;-webkit-box-shadow:0 0 10px 5px #fff;box-shadow:0 0 10px 5px #fff}.tutorial.step-4 .tutorial-text .step-4{display:initial;z-index:9900 !important;position:relative}.tutorial.step-4 #level .segment-row{position:inherit}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating{z-index:9900 !important}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2 #tutorial-pointer,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}#tutorial-site{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#tutorial-site #tutorial-1,#tutorial-site #tutorial-2,#tutorial-site #tutorial-3{text-align:center;margin-top:0.7rem;margin-bottom:0.5rem}#tutorial-site #tutorial-2 .help-action{width:100%;margin-bottom:0.3rem}#tutorial-site #tutorial-3 .tutorial-wrapper{position:relative}#tutorial-site #tutorial-3 .tutorial-wrapper #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}body.red #tutorial-pointer{background:red}body.red #level-number-container.in-main-menu{background:#fff;border-color:#000}body.red .segment.segment-parent{border-color:#555}body.red .segment.segment-parent.layer-2{border-color:#000}body.red #site>:not(.won) .segment.locked{cursor:default;border-color:#870015;background-color:red !important}body.red #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.blue #tutorial-pointer{background:#2c58ae}body.blue #level-number-container.in-main-menu{background:#fff;border-color:#000}body.blue .segment.segment-parent{border-color:#555}body.blue .segment.segment-parent.layer-2{border-color:#000}body.blue #site>:not(.won) .segment.locked{cursor:default;border-color:#1a3062;background-color:#2c58ae !important}body.blue #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.green #tutorial-pointer{background:green}body.green #level-number-container.in-main-menu{background:#fff;border-color:#000}body.green .segment.segment-parent{border-color:#555}body.green .segment.segment-parent.layer-2{border-color:#000}body.green #site>:not(.won) .segment.locked{cursor:default;border-color:#003613;background-color:green !important}body.green #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.pink #tutorial-pointer{background:hotpink}body.pink #level-number-container.in-main-menu{background:#fff;border-color:#000}body.pink .segment.segment-parent{border-color:#555}body.pink .segment.segment-parent.layer-2{border-color:#000}body.pink #site>:not(.won) .segment.locked{cursor:default;border-color:#70374a;background-color:hotpink !important}body.pink #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.black #tutorial-pointer{background:#000}body.black #level-number-container.in-main-menu{background:#fff;border-color:#000}body.black .segment.segment-parent{border-color:#555}body.black .segment.segment-parent.layer-2{border-color:#000}body.black #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.default #tutorial-pointer{background:#000}body.default #level-number-container.in-main-menu{background:rgba(0,0,0,0);border-color:#000}body.default .segment.segment-parent{border-color:#555}body.default .segment.segment-parent.layer-2{border-color:#000}body.default #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.dark #tutorial-pointer{background:#373737}body.dark #level-number-container.in-main-menu{background:#000;border-color:#fff}body.dark .segment.segment-parent{border-color:#9b9b9b}body.dark .segment.segment-parent.layer-2{border-color:#fff}body.dark #site>:not(.won) .segment.locked{cursor:default;border-color:#4b4b4b;background-color:#373737 !important}body.dark #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#000}body.default{background:#0f0f49;color:white}body.default *{color:white}body.default #level-number-container.in-main-menu{background:#fff !important}body.default .segment.segment-parent:not(.layer-2){border-color:#005d07;background:rgba(109,255,127,0.2) !important}body.default #site>:not(.won) .segment.locked{background-color:transparent !important;border-color:#42ff4a !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.dark .switch input:checked+.slider{border-color:black}body.dark .switch .slider{border:solid 1px white;background-color:inherit;padding:1px;margin-bottom:0;margin-top:0}body.dark #site>:not(.won) .segment.locked.layer-2{border-color:#565656}body.dark .modal{background-color:#fefefe;border:1px solid white;border-radius:2px}body.black #site>:not(.won) .segment.locked{background-color:#9d9d9d !important;border-color:#6e6e6e !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.black #logo{border:1px solid grey;border-radius:50%}.no-transition{-webkit-transition:none !important;transition:none !important}.no-transition *{-webkit-transition:none !important;transition:none !important}nav.top-bar.title-bar{padding:0.3rem 0.6rem 0}#logo{max-width:2rem;-webkit-transition:none;transition:none}#action-bar .top-bar-right .menu .action.img a{padding-bottom:0}#action-bar .top-bar-right .menu .action.img a img{max-height:1.8rem}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.relative-level-number{position:relative}.relative-level-number #level-number-container{top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}#level-number-container,.level-counter{z-index:1;position:absolute;left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);border:3px solid white;border-radius:50%;display:table-cell;height:40px;width:40px;text-align:center;vertical-align:middle}#level-number-container.level-counter,.level-counter.level-counter{position:fixed !important;font-size:1.8rem}#level-number-container.level-counter.num-10,.level-counter.level-counter.num-10{font-size:1.3rem}#level-number-container.level-counter.num-100,.level-counter.level-counter.num-100{font-size:0.9rem}#level-number-container.level-counter.num-1000,.level-counter.level-counter.num-1000{font-size:0.65rem}#level-number-container.in-main-menu,.level-counter.in-main-menu{background:white;border-color:black;height:1em;width:1em;min-height:1em;min-width:1em;max-height:1em;max-width:1em}#level-number-container a,.level-counter a{width:initial !important}#level-number-container #level-number,#level-number-container a,.level-counter #level-number,.level-counter a{-webkit-transition:none;transition:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-weight:bold}.coin-counter{display:inline-block;position:relative;font-size:1.6rem}@media print, screen and (max-width: 24.99875em){.coin-counter{font-size:1rem}}.coin-counter :after{background-image:url(img/coinTower.png);background-size:28px 28px;width:28px;height:28px;display:inline-block;content:""}#coin-container{line-height:1}#coin-container .coin{margin-left:3px;margin-right:3px;max-width:20px;display:inline-block}@media print, screen and (min-width: 25em){#coin-container .coin{max-width:25px}}@media print, screen and (min-width: 40em){#coin-container .coin{max-width:30px}}@-webkit-keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.segment:not(.segment-row):not(.segment-triangle).rotating{z-index:10 !important;overflow:hidden}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}#level{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;-webkit-transition:none;transition:none;max-width:100%;-webkit-tap-highlight-color:rgba(255,255,255,0);overflow-y:visible}#level *{-webkit-transition:none;transition:none}.segment{vertical-align:top;white-space:initial;cursor:pointer;display:inline-block;text-align:center;position:relative;-webkit-transition:none;transition:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1;background-color:inherit;line-height:0}.segment.segment-row{display:block;width:100%;-webkit-animation:none !important;animation:none !important;white-space:nowrap}.segment.segment-column{padding-top:4px}.segment.segment-column>.child-container>.segment{display:block;width:100%}.segment.segment-leaf{background-color:transparent !important;min-width:1em;padding:0.8em}.segment.segment-leaf:before{content:" ";display:block;padding-top:100%}.segment.segment-leaf .leaf-element{position:absolute;width:100%;height:100%;line-height:1.5em;top:0;left:0}.segment.segment-parent{border:solid 1px #a9a9a9;border-radius:3px;padding:1px}.segment.segment-parent.layer-2{border:solid 3px #000000}#site>:not(.won) .show-when-won{display:none}.level-container{-webkit-transition:none;transition:none}.won .show-while-playing{display:none}.won #won-text{text-shadow:0 0.2rem 0.2rem #464646,0.6rem 0.8rem 0.4rem rgba(0,0,0,0.564706)}.text-right{text-align:right}#continue-button{margin-bottom:2px}@media print, screen and (max-width: 24.99875em){#continue-button{margin-bottom:0;padding:0.3em .6em}}@media print, screen and (max-width: 24.99875em){#play-button{margin-bottom:0.5rem}}#help-button{margin:0;padding:0.4em 0.4em;max-width:3em}@media print, screen and (max-width: 39.99875em){#help-button{padding:0.2em 0.2em;max-width:2em}}.line-height-1{line-height:1}body{-ms-scroll-chaining:none;overscroll-behavior:contain;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#site{overflow:visible}div.mainContainer{overflow-x:hidden}.clickable{cursor:pointer}#share-button{overflow:hidden}#share-button svg{cursor:pointer;max-width:1.5rem}svg{color:black}svg .fill-background{fill:white}@-webkit-keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}.jump-animation{-webkit-animation-name:jump-animation;animation-name:jump-animation;-webkit-animation-duration:0.4s;animation-duration:0.4s;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.shake .leaf-element{-webkit-animation:shake 0.15s;animation:shake 0.15s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}nav.top-bar{padding:0;margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){nav.top-bar{margin-left:-.9375rem;margin-right:-.9375rem}}nav.top-bar.with-image .background-img{display:none}nav.top-bar .background-img{display:none}nav.top-bar>.grid-container{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar>.grid-container>.grid-padding-x{display:block;padding:0.5rem;margin:0;padding-right:0}nav.top-bar>.grid-container>.grid-padding-x>.small-12{padding:0}nav.top-bar ul>li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}nav.top-bar ul>li.level-counter{margin-top:0.2rem}body.theme-blue{background:#427081;color:#fff}body.theme-blue label{color:#fff}body.theme-blue .toast .message{background:#4d575a}body.theme-blue nav.top-bar,body.theme-blue nav.top-bar.with-image,body.theme-blue nav.top-bar.with-image.solid{background:#4d575a}body.theme-blue .button{background:#4d575a}body.theme-blue .switch input:checked+.slider{background:#d3e7eb}body.theme-blue #level-number-container{background:#427081}body.theme-blue svg{color:#000}body.theme-blue ul.menu li a{color:#fff}body.theme-blue a{color:#d3e7eb}body.theme-blue a.hidden-link{color:#fff}body.theme-blue #site>:not(.won) .segment.locked{background-color:#00000030}body.theme-blue #tutorial-pointer{background:#d3e7eb}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}html,body{min-height:100%;width:100%;height:100%;letter-spacing:1px;-ms-scroll-chaining:none;overscroll-behavior:none}a,a:hover{color:#ffca00}#site{position:relative;max-height:100%;max-width:100%;height:100%;width:100%}.right{float:right}.grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.overlay{left:0;top:0;right:0;bottom:0;background-color:rgba(192,192,192,0.5);-webkit-transform:none;-ms-transform:none;transform:none;z-index:10000}.loader.overlay svg{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small .spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader .spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#000;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.height-100{height:100%}.hidden{display:none}.vertical-middle{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.vertical-bottom{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:end;-webkit-align-items:end;-ms-flex-align:end;align-items:end}.horizontal-center{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.width-100{width:100%}h1.inline{display:inline-block}h2.inline{display:inline-block}h3.inline{display:inline-block}h4.inline{display:inline-block}h5.inline{display:inline-block}h6.inline{display:inline-block}img.back-button{cursor:pointer;max-height:1.1rem;margin-right:0.2rem;margin-bottom:0.65rem}a.hidden-link{color:inherit}#main-content-container{overflow:auto;width:100%}#main-content-container>.grid-x{overflow:auto;margin-top:0.5rem;margin-bottom:0.5rem}#main-content-container #main-content{padding-top:0;padding-bottom:0} +@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:0.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.foundation-mq{font-family:"small=0em&smedium=25em&medium=40em&large=64em&xlarge=75em&xxlarge=90em"}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:100%}*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;padding:0;background:#fefefe;font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img{display:inline-block;vertical-align:middle;max-width:100%;height:auto;-ms-interpolation-mode:bicubic}textarea{height:auto;min-height:50px;border-radius:0}select{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;border-radius:0}.map_canvas img,.map_canvas embed,.map_canvas object,.mqa-display img,.mqa-display embed,.mqa-display object{max-width:none !important}button{padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-radius:0;background:transparent;line-height:1;cursor:auto}[data-whatinput='mouse'] button{outline:0}pre{overflow:auto}button,input,optgroup,select,textarea{font-family:inherit}.is-visible{display:block !important}.is-hidden{display:none !important}[type='text'],[type='password'],[type='date'],[type='datetime'],[type='datetime-local'],[type='month'],[type='week'],[type='email'],[type='number'],[type='search'],[type='tel'],[type='time'],[type='url'],[type='color'],textarea{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:2.4375rem;margin:0 0 1rem;padding:.5rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;-webkit-appearance:none;-moz-appearance:none;appearance:none}[type='text']:focus,[type='password']:focus,[type='date']:focus,[type='datetime']:focus,[type='datetime-local']:focus,[type='month']:focus,[type='week']:focus,[type='email']:focus,[type='number']:focus,[type='search']:focus,[type='tel']:focus,[type='time']:focus,[type='url']:focus,[type='color']:focus,textarea:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}textarea{max-width:100%}textarea[rows]{height:auto}input:disabled,input[readonly],textarea:disabled,textarea[readonly]{background-color:#e6e6e6;cursor:not-allowed}[type='submit'],[type='button']{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}input[type='search']{-webkit-box-sizing:border-box;box-sizing:border-box}::-webkit-input-placeholder{color:#cacaca}::-moz-placeholder{color:#cacaca}:-ms-input-placeholder{color:#cacaca}::-ms-input-placeholder{color:#cacaca}::placeholder{color:#cacaca}[type='file'],[type='checkbox'],[type='radio']{margin:0 0 1rem}[type='checkbox']+label,[type='radio']+label{display:inline-block;vertical-align:baseline;margin-left:.5rem;margin-right:1rem;margin-bottom:0}[type='checkbox']+label[for],[type='radio']+label[for]{cursor:pointer}label>[type='checkbox'],label>[type='radio']{margin-right:.5rem}[type='file']{width:100%}label{display:block;margin:0;font-size:.875rem;font-weight:normal;line-height:1.8;color:#0a0a0a}label.middle{margin:0 0 1rem;padding:.5625rem 0}.help-text{margin-top:-.5rem;font-size:.8125rem;font-style:italic;color:#0a0a0a}.input-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;margin-bottom:1rem;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.input-group>:first-child,.input-group>:first-child.input-group-button>*{border-radius:0 0 0 0}.input-group>:last-child,.input-group>:last-child.input-group-button>*{border-radius:0 0 0 0}.input-group-label,.input-group-field,.input-group-button,.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{margin:0;white-space:nowrap}.input-group-label{padding:0 1rem;border:1px solid #cacaca;background:#e6e6e6;color:#0a0a0a;text-align:center;white-space:nowrap;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group-label:first-child{border-right:0}.input-group-label:last-child{border-left:0}.input-group-field{border-radius:0;-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;min-width:0}.input-group-button{padding-top:0;padding-bottom:0;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.input-group-button a,.input-group-button input,.input-group-button button,.input-group-button label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;height:auto;padding-top:0;padding-bottom:0;font-size:1rem}fieldset{margin:0;padding:0;border:0}legend{max-width:100%;margin-bottom:.5rem}.fieldset{margin:1.125rem 0;padding:1.25rem;border:1px solid #cacaca}.fieldset legend{margin:0;margin-left:-.1875rem;padding:0 .1875rem}select{height:2.4375rem;margin:0 0 1rem;padding:.5rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-family:inherit;font-size:1rem;font-weight:normal;line-height:1.5;color:#0a0a0a;background-image:url("data:image/svg+xml;utf8,");background-origin:content-box;background-position:right -1rem center;background-repeat:no-repeat;background-size:9px 6px;padding-right:1.5rem;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}@media screen and (min-width: 0\0){select{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==")}}select:focus{outline:none;border:1px solid #8a8a8a;background-color:#fefefe;-webkit-box-shadow:0 0 5px #cacaca;box-shadow:0 0 5px #cacaca;-webkit-transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s;transition:box-shadow 0.5s,border-color 0.25s ease-in-out;transition:box-shadow 0.5s,border-color 0.25s ease-in-out,-webkit-box-shadow 0.5s}select:disabled{background-color:#e6e6e6;cursor:not-allowed}select::-ms-expand{display:none}select[multiple]{height:auto;background-image:none}select:not([multiple]){padding-top:0;padding-bottom:0}.is-invalid-input:not(:focus){border-color:#cc4b37;background-color:#f9ecea}.is-invalid-input:not(:focus)::-webkit-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-moz-placeholder{color:#cc4b37}.is-invalid-input:not(:focus):-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::-ms-input-placeholder{color:#cc4b37}.is-invalid-input:not(:focus)::placeholder{color:#cc4b37}.is-invalid-label{color:#cc4b37}.form-error{display:none;margin-top:-.5rem;margin-bottom:1rem;font-size:.75rem;font-weight:bold;color:#cc4b37}.form-error.is-visible{display:block}div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}p{margin-bottom:1rem;font-size:inherit;line-height:1.6;text-rendering:optimizeLegibility}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:80%;line-height:inherit}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{font-family:"Helvetica Neue",Helvetica,Roboto,Arial,sans-serif;font-style:normal;font-weight:normal;color:inherit;text-rendering:optimizeLegibility}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small{line-height:0;color:#cacaca}h1,.h1{font-size:1.5rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h2,.h2{font-size:1.25rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h3,.h3{font-size:1.1875rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h4,.h4{font-size:1.125rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h5,.h5{font-size:1.0625rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}h6,.h6{font-size:1rem;line-height:1.4;margin-top:0;margin-bottom:.5rem}@media print, screen and (min-width: 40em){h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:1.9375rem}h4,.h4{font-size:1.5625rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}}a{line-height:inherit;color:#1779ba;text-decoration:none;cursor:pointer}a:hover,a:focus{color:#1468a0}a img{border:0}hr{clear:both;max-width:75rem;height:0;margin:1.25rem auto;border-top:0;border-right:0;border-bottom:1px solid #cacaca;border-left:0}ul,ol,dl{margin-bottom:1rem;list-style-position:outside;line-height:1.6}li{font-size:inherit}ul{margin-left:1.25rem;list-style-type:disc}ol{margin-left:1.25rem}ul ul,ol ul,ul ol,ol ol{margin-left:1.25rem;margin-bottom:0}dl{margin-bottom:1rem}dl dt{margin-bottom:.3rem;font-weight:bold}blockquote{margin:0 0 1rem;padding:.5625rem 1.25rem 0 1.1875rem;border-left:1px solid #cacaca}blockquote,blockquote p{line-height:1.6;color:#8a8a8a}abbr,abbr[title]{border-bottom:1px dotted #0a0a0a;cursor:help;text-decoration:none}figure{margin:0}kbd{margin:0;padding:.125rem .25rem 0;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;color:#0a0a0a}.subheader{margin-top:.2rem;margin-bottom:.5rem;font-weight:normal;line-height:1.4;color:#8a8a8a}.lead{font-size:125%;line-height:1.6}.stat{font-size:2.5rem;line-height:1}p+.stat{margin-top:-1rem}ul.no-bullet,ol.no-bullet{margin-left:0;list-style:none}.cite-block,cite{display:block;color:#8a8a8a;font-size:.8125rem}.cite-block:before,cite:before{content:"— "}.code-inline,code{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:inline;max-width:100%;word-wrap:break-word;padding:.125rem .3125rem .0625rem}.code-block{border:1px solid #cacaca;background-color:#e6e6e6;font-family:Consolas,"Liberation Mono",Courier,monospace;font-weight:normal;color:#0a0a0a;display:block;overflow:auto;white-space:pre;padding:1rem;margin-bottom:1.5rem}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}@media screen and (min-width: 25em){.smedium-text-left{text-align:left}.smedium-text-right{text-align:right}.smedium-text-center{text-align:center}.smedium-text-justify{text-align:justify}}@media print, screen and (min-width: 40em){.medium-text-left{text-align:left}.medium-text-right{text-align:right}.medium-text-center{text-align:center}.medium-text-justify{text-align:justify}}@media print, screen and (min-width: 64em){.large-text-left{text-align:left}.large-text-right{text-align:right}.large-text-center{text-align:center}.large-text-justify{text-align:justify}}.show-for-print{display:none !important}@media print{*{background:transparent !important;color:black !important;-webkit-print-color-adjust:economy;color-adjust:economy;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}.show-for-print{display:block !important}.hide-for-print{display:none !important}table.show-for-print{display:table !important}thead.show-for-print{display:table-header-group !important}tbody.show-for-print{display:table-row-group !important}tr.show-for-print{display:table-row !important}td.show-for-print{display:table-cell !important}th.show-for-print{display:table-cell !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}.ir a:after,a[href^='javascript:']:after,a[href^='#']:after{content:''}abbr[title]:after{content:" (" attr(title) ")"}pre,blockquote{border:1px solid #8a8a8a;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.print-break-inside{page-break-inside:auto}}.grid-container{padding-right:.625rem;padding-left:.625rem;max-width:75rem;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.fluid{padding-right:.625rem;padding-left:.625rem;max-width:100%;margin-left:auto;margin-right:auto}@media print, screen and (min-width: 40em){.grid-container.fluid{padding-right:.9375rem;padding-left:.9375rem}}.grid-container.full{padding-right:0;padding-left:0;max-width:100%;margin-left:auto;margin-right:auto}.grid-x{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.cell{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;min-height:0px;min-width:0px;width:100%}.cell.auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.cell.shrink{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.auto{width:auto}.grid-x>.shrink{width:auto}.grid-x>.small-shrink,.grid-x>.small-full,.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-x>.smedium-shrink,.grid-x>.smedium-full,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-x>.medium-shrink,.grid-x>.medium-full,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-x>.large-shrink,.grid-x>.large-full,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-x>.small-1,.grid-x>.small-2,.grid-x>.small-3,.grid-x>.small-4,.grid-x>.small-5,.grid-x>.small-6,.grid-x>.small-7,.grid-x>.small-8,.grid-x>.small-9,.grid-x>.small-10,.grid-x>.small-11,.grid-x>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.small-1{width:8.33333%}.grid-x>.small-2{width:16.66667%}.grid-x>.small-3{width:25%}.grid-x>.small-4{width:33.33333%}.grid-x>.small-5{width:41.66667%}.grid-x>.small-6{width:50%}.grid-x>.small-7{width:58.33333%}.grid-x>.small-8{width:66.66667%}.grid-x>.small-9{width:75%}.grid-x>.small-10{width:83.33333%}.grid-x>.small-11{width:91.66667%}.grid-x>.small-12{width:100%}@media screen and (min-width: 25em){.grid-x>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.smedium-shrink,.grid-x>.smedium-1,.grid-x>.smedium-2,.grid-x>.smedium-3,.grid-x>.smedium-4,.grid-x>.smedium-5,.grid-x>.smedium-6,.grid-x>.smedium-7,.grid-x>.smedium-8,.grid-x>.smedium-9,.grid-x>.smedium-10,.grid-x>.smedium-11,.grid-x>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.smedium-shrink{width:auto}.grid-x>.smedium-1{width:8.33333%}.grid-x>.smedium-2{width:16.66667%}.grid-x>.smedium-3{width:25%}.grid-x>.smedium-4{width:33.33333%}.grid-x>.smedium-5{width:41.66667%}.grid-x>.smedium-6{width:50%}.grid-x>.smedium-7{width:58.33333%}.grid-x>.smedium-8{width:66.66667%}.grid-x>.smedium-9{width:75%}.grid-x>.smedium-10{width:83.33333%}.grid-x>.smedium-11{width:91.66667%}.grid-x>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.grid-x>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.medium-shrink,.grid-x>.medium-1,.grid-x>.medium-2,.grid-x>.medium-3,.grid-x>.medium-4,.grid-x>.medium-5,.grid-x>.medium-6,.grid-x>.medium-7,.grid-x>.medium-8,.grid-x>.medium-9,.grid-x>.medium-10,.grid-x>.medium-11,.grid-x>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.medium-shrink{width:auto}.grid-x>.medium-1{width:8.33333%}.grid-x>.medium-2{width:16.66667%}.grid-x>.medium-3{width:25%}.grid-x>.medium-4{width:33.33333%}.grid-x>.medium-5{width:41.66667%}.grid-x>.medium-6{width:50%}.grid-x>.medium-7{width:58.33333%}.grid-x>.medium-8{width:66.66667%}.grid-x>.medium-9{width:75%}.grid-x>.medium-10{width:83.33333%}.grid-x>.medium-11{width:91.66667%}.grid-x>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.grid-x>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;width:auto}.grid-x>.large-shrink,.grid-x>.large-1,.grid-x>.large-2,.grid-x>.large-3,.grid-x>.large-4,.grid-x>.large-5,.grid-x>.large-6,.grid-x>.large-7,.grid-x>.large-8,.grid-x>.large-9,.grid-x>.large-10,.grid-x>.large-11,.grid-x>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-x>.large-shrink{width:auto}.grid-x>.large-1{width:8.33333%}.grid-x>.large-2{width:16.66667%}.grid-x>.large-3{width:25%}.grid-x>.large-4{width:33.33333%}.grid-x>.large-5{width:41.66667%}.grid-x>.large-6{width:50%}.grid-x>.large-7{width:58.33333%}.grid-x>.large-8{width:66.66667%}.grid-x>.large-9{width:75%}.grid-x>.large-10{width:83.33333%}.grid-x>.large-11{width:91.66667%}.grid-x>.large-12{width:100%}}.grid-margin-x:not(.grid-x)>.cell{width:auto}.grid-margin-y:not(.grid-y)>.cell{height:auto}.grid-margin-x{margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-x{margin-left:-.9375rem;margin-right:-.9375rem}}.grid-margin-x>.cell{width:calc(100% - 1.25rem);margin-left:.625rem;margin-right:.625rem}@media print, screen and (min-width: 40em){.grid-margin-x>.cell{width:calc(100% - 1.875rem);margin-left:.9375rem;margin-right:.9375rem}}.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.small-3{width:calc(25% - 1.25rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.small-6{width:calc(50% - 1.25rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.small-9{width:calc(75% - 1.25rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.small-12{width:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x>.smedium-auto{width:auto}.grid-margin-x>.smedium-shrink{width:auto}.grid-margin-x>.smedium-1{width:calc(8.33333% - 1.25rem)}.grid-margin-x>.smedium-2{width:calc(16.66667% - 1.25rem)}.grid-margin-x>.smedium-3{width:calc(25% - 1.25rem)}.grid-margin-x>.smedium-4{width:calc(33.33333% - 1.25rem)}.grid-margin-x>.smedium-5{width:calc(41.66667% - 1.25rem)}.grid-margin-x>.smedium-6{width:calc(50% - 1.25rem)}.grid-margin-x>.smedium-7{width:calc(58.33333% - 1.25rem)}.grid-margin-x>.smedium-8{width:calc(66.66667% - 1.25rem)}.grid-margin-x>.smedium-9{width:calc(75% - 1.25rem)}.grid-margin-x>.smedium-10{width:calc(83.33333% - 1.25rem)}.grid-margin-x>.smedium-11{width:calc(91.66667% - 1.25rem)}.grid-margin-x>.smedium-12{width:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x>.auto{width:auto}.grid-margin-x>.shrink{width:auto}.grid-margin-x>.small-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.small-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.small-3{width:calc(25% - 1.875rem)}.grid-margin-x>.small-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.small-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.small-6{width:calc(50% - 1.875rem)}.grid-margin-x>.small-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.small-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.small-9{width:calc(75% - 1.875rem)}.grid-margin-x>.small-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.small-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.small-12{width:calc(100% - 1.875rem)}.grid-margin-x>.medium-auto{width:auto}.grid-margin-x>.medium-shrink{width:auto}.grid-margin-x>.medium-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.medium-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.medium-3{width:calc(25% - 1.875rem)}.grid-margin-x>.medium-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.medium-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.medium-6{width:calc(50% - 1.875rem)}.grid-margin-x>.medium-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.medium-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.medium-9{width:calc(75% - 1.875rem)}.grid-margin-x>.medium-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.medium-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.medium-12{width:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x>.large-auto{width:auto}.grid-margin-x>.large-shrink{width:auto}.grid-margin-x>.large-1{width:calc(8.33333% - 1.875rem)}.grid-margin-x>.large-2{width:calc(16.66667% - 1.875rem)}.grid-margin-x>.large-3{width:calc(25% - 1.875rem)}.grid-margin-x>.large-4{width:calc(33.33333% - 1.875rem)}.grid-margin-x>.large-5{width:calc(41.66667% - 1.875rem)}.grid-margin-x>.large-6{width:calc(50% - 1.875rem)}.grid-margin-x>.large-7{width:calc(58.33333% - 1.875rem)}.grid-margin-x>.large-8{width:calc(66.66667% - 1.875rem)}.grid-margin-x>.large-9{width:calc(75% - 1.875rem)}.grid-margin-x>.large-10{width:calc(83.33333% - 1.875rem)}.grid-margin-x>.large-11{width:calc(91.66667% - 1.875rem)}.grid-margin-x>.large-12{width:calc(100% - 1.875rem)}}.grid-padding-x .grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-x .grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-container:not(.full)>.grid-padding-x{margin-right:-.625rem;margin-left:-.625rem}@media print, screen and (min-width: 40em){.grid-container:not(.full)>.grid-padding-x{margin-right:-.9375rem;margin-left:-.9375rem}}.grid-padding-x>.cell{padding-right:.625rem;padding-left:.625rem}@media print, screen and (min-width: 40em){.grid-padding-x>.cell{padding-right:.9375rem;padding-left:.9375rem}}.small-up-1>.cell{width:100%}.small-up-2>.cell{width:50%}.small-up-3>.cell{width:33.33333%}.small-up-4>.cell{width:25%}.small-up-5>.cell{width:20%}.small-up-6>.cell{width:16.66667%}.small-up-7>.cell{width:14.28571%}.small-up-8>.cell{width:12.5%}@media screen and (min-width: 25em){.smedium-up-1>.cell{width:100%}.smedium-up-2>.cell{width:50%}.smedium-up-3>.cell{width:33.33333%}.smedium-up-4>.cell{width:25%}.smedium-up-5>.cell{width:20%}.smedium-up-6>.cell{width:16.66667%}.smedium-up-7>.cell{width:14.28571%}.smedium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 40em){.medium-up-1>.cell{width:100%}.medium-up-2>.cell{width:50%}.medium-up-3>.cell{width:33.33333%}.medium-up-4>.cell{width:25%}.medium-up-5>.cell{width:20%}.medium-up-6>.cell{width:16.66667%}.medium-up-7>.cell{width:14.28571%}.medium-up-8>.cell{width:12.5%}}@media print, screen and (min-width: 64em){.large-up-1>.cell{width:100%}.large-up-2>.cell{width:50%}.large-up-3>.cell{width:33.33333%}.large-up-4>.cell{width:25%}.large-up-5>.cell{width:20%}.large-up-6>.cell{width:16.66667%}.large-up-7>.cell{width:14.28571%}.large-up-8>.cell{width:12.5%}}.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-x.smedium-up-1>.cell{width:calc(100% - 1.25rem)}.grid-margin-x.smedium-up-2>.cell{width:calc(50% - 1.25rem)}.grid-margin-x.smedium-up-3>.cell{width:calc(33.33333% - 1.25rem)}.grid-margin-x.smedium-up-4>.cell{width:calc(25% - 1.25rem)}.grid-margin-x.smedium-up-5>.cell{width:calc(20% - 1.25rem)}.grid-margin-x.smedium-up-6>.cell{width:calc(16.66667% - 1.25rem)}.grid-margin-x.smedium-up-7>.cell{width:calc(14.28571% - 1.25rem)}.grid-margin-x.smedium-up-8>.cell{width:calc(12.5% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-x.small-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.small-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.small-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.small-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.small-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.small-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.small-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.small-up-8>.cell{width:calc(12.5% - 1.875rem)}.grid-margin-x.medium-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.medium-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.medium-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.medium-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.medium-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.medium-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.medium-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.medium-up-8>.cell{width:calc(12.5% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-x.large-up-1>.cell{width:calc(100% - 1.875rem)}.grid-margin-x.large-up-2>.cell{width:calc(50% - 1.875rem)}.grid-margin-x.large-up-3>.cell{width:calc(33.33333% - 1.875rem)}.grid-margin-x.large-up-4>.cell{width:calc(25% - 1.875rem)}.grid-margin-x.large-up-5>.cell{width:calc(20% - 1.875rem)}.grid-margin-x.large-up-6>.cell{width:calc(16.66667% - 1.875rem)}.grid-margin-x.large-up-7>.cell{width:calc(14.28571% - 1.875rem)}.grid-margin-x.large-up-8>.cell{width:calc(12.5% - 1.875rem)}}.small-margin-collapse{margin-right:0;margin-left:0}.small-margin-collapse>.cell{margin-right:0;margin-left:0}.small-margin-collapse>.small-1{width:8.33333%}.small-margin-collapse>.small-2{width:16.66667%}.small-margin-collapse>.small-3{width:25%}.small-margin-collapse>.small-4{width:33.33333%}.small-margin-collapse>.small-5{width:41.66667%}.small-margin-collapse>.small-6{width:50%}.small-margin-collapse>.small-7{width:58.33333%}.small-margin-collapse>.small-8{width:66.66667%}.small-margin-collapse>.small-9{width:75%}.small-margin-collapse>.small-10{width:83.33333%}.small-margin-collapse>.small-11{width:91.66667%}.small-margin-collapse>.small-12{width:100%}@media screen and (min-width: 25em){.small-margin-collapse>.smedium-1{width:8.33333%}.small-margin-collapse>.smedium-2{width:16.66667%}.small-margin-collapse>.smedium-3{width:25%}.small-margin-collapse>.smedium-4{width:33.33333%}.small-margin-collapse>.smedium-5{width:41.66667%}.small-margin-collapse>.smedium-6{width:50%}.small-margin-collapse>.smedium-7{width:58.33333%}.small-margin-collapse>.smedium-8{width:66.66667%}.small-margin-collapse>.smedium-9{width:75%}.small-margin-collapse>.smedium-10{width:83.33333%}.small-margin-collapse>.smedium-11{width:91.66667%}.small-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.small-margin-collapse>.medium-1{width:8.33333%}.small-margin-collapse>.medium-2{width:16.66667%}.small-margin-collapse>.medium-3{width:25%}.small-margin-collapse>.medium-4{width:33.33333%}.small-margin-collapse>.medium-5{width:41.66667%}.small-margin-collapse>.medium-6{width:50%}.small-margin-collapse>.medium-7{width:58.33333%}.small-margin-collapse>.medium-8{width:66.66667%}.small-margin-collapse>.medium-9{width:75%}.small-margin-collapse>.medium-10{width:83.33333%}.small-margin-collapse>.medium-11{width:91.66667%}.small-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.small-margin-collapse>.large-1{width:8.33333%}.small-margin-collapse>.large-2{width:16.66667%}.small-margin-collapse>.large-3{width:25%}.small-margin-collapse>.large-4{width:33.33333%}.small-margin-collapse>.large-5{width:41.66667%}.small-margin-collapse>.large-6{width:50%}.small-margin-collapse>.large-7{width:58.33333%}.small-margin-collapse>.large-8{width:66.66667%}.small-margin-collapse>.large-9{width:75%}.small-margin-collapse>.large-10{width:83.33333%}.small-margin-collapse>.large-11{width:91.66667%}.small-margin-collapse>.large-12{width:100%}}.small-padding-collapse{margin-right:0;margin-left:0}.small-padding-collapse>.cell{padding-right:0;padding-left:0}@media screen and (min-width: 25em){.smedium-margin-collapse{margin-right:0;margin-left:0}.smedium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media screen and (min-width: 25em){.smedium-margin-collapse>.small-1{width:8.33333%}.smedium-margin-collapse>.small-2{width:16.66667%}.smedium-margin-collapse>.small-3{width:25%}.smedium-margin-collapse>.small-4{width:33.33333%}.smedium-margin-collapse>.small-5{width:41.66667%}.smedium-margin-collapse>.small-6{width:50%}.smedium-margin-collapse>.small-7{width:58.33333%}.smedium-margin-collapse>.small-8{width:66.66667%}.smedium-margin-collapse>.small-9{width:75%}.smedium-margin-collapse>.small-10{width:83.33333%}.smedium-margin-collapse>.small-11{width:91.66667%}.smedium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.smedium-1{width:8.33333%}.smedium-margin-collapse>.smedium-2{width:16.66667%}.smedium-margin-collapse>.smedium-3{width:25%}.smedium-margin-collapse>.smedium-4{width:33.33333%}.smedium-margin-collapse>.smedium-5{width:41.66667%}.smedium-margin-collapse>.smedium-6{width:50%}.smedium-margin-collapse>.smedium-7{width:58.33333%}.smedium-margin-collapse>.smedium-8{width:66.66667%}.smedium-margin-collapse>.smedium-9{width:75%}.smedium-margin-collapse>.smedium-10{width:83.33333%}.smedium-margin-collapse>.smedium-11{width:91.66667%}.smedium-margin-collapse>.smedium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.medium-1{width:8.33333%}.smedium-margin-collapse>.medium-2{width:16.66667%}.smedium-margin-collapse>.medium-3{width:25%}.smedium-margin-collapse>.medium-4{width:33.33333%}.smedium-margin-collapse>.medium-5{width:41.66667%}.smedium-margin-collapse>.medium-6{width:50%}.smedium-margin-collapse>.medium-7{width:58.33333%}.smedium-margin-collapse>.medium-8{width:66.66667%}.smedium-margin-collapse>.medium-9{width:75%}.smedium-margin-collapse>.medium-10{width:83.33333%}.smedium-margin-collapse>.medium-11{width:91.66667%}.smedium-margin-collapse>.medium-12{width:100%}}@media screen and (min-width: 25em){.smedium-margin-collapse>.large-1{width:8.33333%}.smedium-margin-collapse>.large-2{width:16.66667%}.smedium-margin-collapse>.large-3{width:25%}.smedium-margin-collapse>.large-4{width:33.33333%}.smedium-margin-collapse>.large-5{width:41.66667%}.smedium-margin-collapse>.large-6{width:50%}.smedium-margin-collapse>.large-7{width:58.33333%}.smedium-margin-collapse>.large-8{width:66.66667%}.smedium-margin-collapse>.large-9{width:75%}.smedium-margin-collapse>.large-10{width:83.33333%}.smedium-margin-collapse>.large-11{width:91.66667%}.smedium-margin-collapse>.large-12{width:100%}}@media screen and (min-width: 25em){.smedium-padding-collapse{margin-right:0;margin-left:0}.smedium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse{margin-right:0;margin-left:0}.medium-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.small-1{width:8.33333%}.medium-margin-collapse>.small-2{width:16.66667%}.medium-margin-collapse>.small-3{width:25%}.medium-margin-collapse>.small-4{width:33.33333%}.medium-margin-collapse>.small-5{width:41.66667%}.medium-margin-collapse>.small-6{width:50%}.medium-margin-collapse>.small-7{width:58.33333%}.medium-margin-collapse>.small-8{width:66.66667%}.medium-margin-collapse>.small-9{width:75%}.medium-margin-collapse>.small-10{width:83.33333%}.medium-margin-collapse>.small-11{width:91.66667%}.medium-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.medium-margin-collapse>.smedium-1{width:8.33333%}.medium-margin-collapse>.smedium-2{width:16.66667%}.medium-margin-collapse>.smedium-3{width:25%}.medium-margin-collapse>.smedium-4{width:33.33333%}.medium-margin-collapse>.smedium-5{width:41.66667%}.medium-margin-collapse>.smedium-6{width:50%}.medium-margin-collapse>.smedium-7{width:58.33333%}.medium-margin-collapse>.smedium-8{width:66.66667%}.medium-margin-collapse>.smedium-9{width:75%}.medium-margin-collapse>.smedium-10{width:83.33333%}.medium-margin-collapse>.smedium-11{width:91.66667%}.medium-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 40em){.medium-margin-collapse>.medium-1{width:8.33333%}.medium-margin-collapse>.medium-2{width:16.66667%}.medium-margin-collapse>.medium-3{width:25%}.medium-margin-collapse>.medium-4{width:33.33333%}.medium-margin-collapse>.medium-5{width:41.66667%}.medium-margin-collapse>.medium-6{width:50%}.medium-margin-collapse>.medium-7{width:58.33333%}.medium-margin-collapse>.medium-8{width:66.66667%}.medium-margin-collapse>.medium-9{width:75%}.medium-margin-collapse>.medium-10{width:83.33333%}.medium-margin-collapse>.medium-11{width:91.66667%}.medium-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.medium-margin-collapse>.large-1{width:8.33333%}.medium-margin-collapse>.large-2{width:16.66667%}.medium-margin-collapse>.large-3{width:25%}.medium-margin-collapse>.large-4{width:33.33333%}.medium-margin-collapse>.large-5{width:41.66667%}.medium-margin-collapse>.large-6{width:50%}.medium-margin-collapse>.large-7{width:58.33333%}.medium-margin-collapse>.large-8{width:66.66667%}.medium-margin-collapse>.large-9{width:75%}.medium-margin-collapse>.large-10{width:83.33333%}.medium-margin-collapse>.large-11{width:91.66667%}.medium-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 40em){.medium-padding-collapse{margin-right:0;margin-left:0}.medium-padding-collapse>.cell{padding-right:0;padding-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse{margin-right:0;margin-left:0}.large-margin-collapse>.cell{margin-right:0;margin-left:0}}@media print, screen and (min-width: 64em){.large-margin-collapse>.small-1{width:8.33333%}.large-margin-collapse>.small-2{width:16.66667%}.large-margin-collapse>.small-3{width:25%}.large-margin-collapse>.small-4{width:33.33333%}.large-margin-collapse>.small-5{width:41.66667%}.large-margin-collapse>.small-6{width:50%}.large-margin-collapse>.small-7{width:58.33333%}.large-margin-collapse>.small-8{width:66.66667%}.large-margin-collapse>.small-9{width:75%}.large-margin-collapse>.small-10{width:83.33333%}.large-margin-collapse>.small-11{width:91.66667%}.large-margin-collapse>.small-12{width:100%}}@media screen and (min-width: 25em){.large-margin-collapse>.smedium-1{width:8.33333%}.large-margin-collapse>.smedium-2{width:16.66667%}.large-margin-collapse>.smedium-3{width:25%}.large-margin-collapse>.smedium-4{width:33.33333%}.large-margin-collapse>.smedium-5{width:41.66667%}.large-margin-collapse>.smedium-6{width:50%}.large-margin-collapse>.smedium-7{width:58.33333%}.large-margin-collapse>.smedium-8{width:66.66667%}.large-margin-collapse>.smedium-9{width:75%}.large-margin-collapse>.smedium-10{width:83.33333%}.large-margin-collapse>.smedium-11{width:91.66667%}.large-margin-collapse>.smedium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.medium-1{width:8.33333%}.large-margin-collapse>.medium-2{width:16.66667%}.large-margin-collapse>.medium-3{width:25%}.large-margin-collapse>.medium-4{width:33.33333%}.large-margin-collapse>.medium-5{width:41.66667%}.large-margin-collapse>.medium-6{width:50%}.large-margin-collapse>.medium-7{width:58.33333%}.large-margin-collapse>.medium-8{width:66.66667%}.large-margin-collapse>.medium-9{width:75%}.large-margin-collapse>.medium-10{width:83.33333%}.large-margin-collapse>.medium-11{width:91.66667%}.large-margin-collapse>.medium-12{width:100%}}@media print, screen and (min-width: 64em){.large-margin-collapse>.large-1{width:8.33333%}.large-margin-collapse>.large-2{width:16.66667%}.large-margin-collapse>.large-3{width:25%}.large-margin-collapse>.large-4{width:33.33333%}.large-margin-collapse>.large-5{width:41.66667%}.large-margin-collapse>.large-6{width:50%}.large-margin-collapse>.large-7{width:58.33333%}.large-margin-collapse>.large-8{width:66.66667%}.large-margin-collapse>.large-9{width:75%}.large-margin-collapse>.large-10{width:83.33333%}.large-margin-collapse>.large-11{width:91.66667%}.large-margin-collapse>.large-12{width:100%}}@media print, screen and (min-width: 64em){.large-padding-collapse{margin-right:0;margin-left:0}.large-padding-collapse>.cell{padding-right:0;padding-left:0}}.small-offset-0{margin-left:0%}.grid-margin-x>.small-offset-0{margin-left:calc(0% + .625rem)}.small-offset-1{margin-left:8.33333%}.grid-margin-x>.small-offset-1{margin-left:calc(8.33333% + .625rem)}.small-offset-2{margin-left:16.66667%}.grid-margin-x>.small-offset-2{margin-left:calc(16.66667% + .625rem)}.small-offset-3{margin-left:25%}.grid-margin-x>.small-offset-3{margin-left:calc(25% + .625rem)}.small-offset-4{margin-left:33.33333%}.grid-margin-x>.small-offset-4{margin-left:calc(33.33333% + .625rem)}.small-offset-5{margin-left:41.66667%}.grid-margin-x>.small-offset-5{margin-left:calc(41.66667% + .625rem)}.small-offset-6{margin-left:50%}.grid-margin-x>.small-offset-6{margin-left:calc(50% + .625rem)}.small-offset-7{margin-left:58.33333%}.grid-margin-x>.small-offset-7{margin-left:calc(58.33333% + .625rem)}.small-offset-8{margin-left:66.66667%}.grid-margin-x>.small-offset-8{margin-left:calc(66.66667% + .625rem)}.small-offset-9{margin-left:75%}.grid-margin-x>.small-offset-9{margin-left:calc(75% + .625rem)}.small-offset-10{margin-left:83.33333%}.grid-margin-x>.small-offset-10{margin-left:calc(83.33333% + .625rem)}.small-offset-11{margin-left:91.66667%}.grid-margin-x>.small-offset-11{margin-left:calc(91.66667% + .625rem)}@media screen and (min-width: 25em){.smedium-offset-0{margin-left:0%}.grid-margin-x>.smedium-offset-0{margin-left:calc(0% + .625rem)}.smedium-offset-1{margin-left:8.33333%}.grid-margin-x>.smedium-offset-1{margin-left:calc(8.33333% + .625rem)}.smedium-offset-2{margin-left:16.66667%}.grid-margin-x>.smedium-offset-2{margin-left:calc(16.66667% + .625rem)}.smedium-offset-3{margin-left:25%}.grid-margin-x>.smedium-offset-3{margin-left:calc(25% + .625rem)}.smedium-offset-4{margin-left:33.33333%}.grid-margin-x>.smedium-offset-4{margin-left:calc(33.33333% + .625rem)}.smedium-offset-5{margin-left:41.66667%}.grid-margin-x>.smedium-offset-5{margin-left:calc(41.66667% + .625rem)}.smedium-offset-6{margin-left:50%}.grid-margin-x>.smedium-offset-6{margin-left:calc(50% + .625rem)}.smedium-offset-7{margin-left:58.33333%}.grid-margin-x>.smedium-offset-7{margin-left:calc(58.33333% + .625rem)}.smedium-offset-8{margin-left:66.66667%}.grid-margin-x>.smedium-offset-8{margin-left:calc(66.66667% + .625rem)}.smedium-offset-9{margin-left:75%}.grid-margin-x>.smedium-offset-9{margin-left:calc(75% + .625rem)}.smedium-offset-10{margin-left:83.33333%}.grid-margin-x>.smedium-offset-10{margin-left:calc(83.33333% + .625rem)}.smedium-offset-11{margin-left:91.66667%}.grid-margin-x>.smedium-offset-11{margin-left:calc(91.66667% + .625rem)}}@media print, screen and (min-width: 40em){.medium-offset-0{margin-left:0%}.grid-margin-x>.medium-offset-0{margin-left:calc(0% + .9375rem)}.medium-offset-1{margin-left:8.33333%}.grid-margin-x>.medium-offset-1{margin-left:calc(8.33333% + .9375rem)}.medium-offset-2{margin-left:16.66667%}.grid-margin-x>.medium-offset-2{margin-left:calc(16.66667% + .9375rem)}.medium-offset-3{margin-left:25%}.grid-margin-x>.medium-offset-3{margin-left:calc(25% + .9375rem)}.medium-offset-4{margin-left:33.33333%}.grid-margin-x>.medium-offset-4{margin-left:calc(33.33333% + .9375rem)}.medium-offset-5{margin-left:41.66667%}.grid-margin-x>.medium-offset-5{margin-left:calc(41.66667% + .9375rem)}.medium-offset-6{margin-left:50%}.grid-margin-x>.medium-offset-6{margin-left:calc(50% + .9375rem)}.medium-offset-7{margin-left:58.33333%}.grid-margin-x>.medium-offset-7{margin-left:calc(58.33333% + .9375rem)}.medium-offset-8{margin-left:66.66667%}.grid-margin-x>.medium-offset-8{margin-left:calc(66.66667% + .9375rem)}.medium-offset-9{margin-left:75%}.grid-margin-x>.medium-offset-9{margin-left:calc(75% + .9375rem)}.medium-offset-10{margin-left:83.33333%}.grid-margin-x>.medium-offset-10{margin-left:calc(83.33333% + .9375rem)}.medium-offset-11{margin-left:91.66667%}.grid-margin-x>.medium-offset-11{margin-left:calc(91.66667% + .9375rem)}}@media print, screen and (min-width: 64em){.large-offset-0{margin-left:0%}.grid-margin-x>.large-offset-0{margin-left:calc(0% + .9375rem)}.large-offset-1{margin-left:8.33333%}.grid-margin-x>.large-offset-1{margin-left:calc(8.33333% + .9375rem)}.large-offset-2{margin-left:16.66667%}.grid-margin-x>.large-offset-2{margin-left:calc(16.66667% + .9375rem)}.large-offset-3{margin-left:25%}.grid-margin-x>.large-offset-3{margin-left:calc(25% + .9375rem)}.large-offset-4{margin-left:33.33333%}.grid-margin-x>.large-offset-4{margin-left:calc(33.33333% + .9375rem)}.large-offset-5{margin-left:41.66667%}.grid-margin-x>.large-offset-5{margin-left:calc(41.66667% + .9375rem)}.large-offset-6{margin-left:50%}.grid-margin-x>.large-offset-6{margin-left:calc(50% + .9375rem)}.large-offset-7{margin-left:58.33333%}.grid-margin-x>.large-offset-7{margin-left:calc(58.33333% + .9375rem)}.large-offset-8{margin-left:66.66667%}.grid-margin-x>.large-offset-8{margin-left:calc(66.66667% + .9375rem)}.large-offset-9{margin-left:75%}.grid-margin-x>.large-offset-9{margin-left:calc(75% + .9375rem)}.large-offset-10{margin-left:83.33333%}.grid-margin-x>.large-offset-10{margin-left:calc(83.33333% + .9375rem)}.large-offset-11{margin-left:91.66667%}.grid-margin-x>.large-offset-11{margin-left:calc(91.66667% + .9375rem)}}.grid-y{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.grid-y>.cell{height:auto;max-height:none}.grid-y>.auto{height:auto}.grid-y>.shrink{height:auto}.grid-y>.small-shrink,.grid-y>.small-full,.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}@media screen and (min-width: 25em){.grid-y>.smedium-shrink,.grid-y>.smedium-full,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 40em){.grid-y>.medium-shrink,.grid-y>.medium-full,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}@media print, screen and (min-width: 64em){.grid-y>.large-shrink,.grid-y>.large-full,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}}.grid-y>.small-1,.grid-y>.small-2,.grid-y>.small-3,.grid-y>.small-4,.grid-y>.small-5,.grid-y>.small-6,.grid-y>.small-7,.grid-y>.small-8,.grid-y>.small-9,.grid-y>.small-10,.grid-y>.small-11,.grid-y>.small-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.small-1{height:8.33333%}.grid-y>.small-2{height:16.66667%}.grid-y>.small-3{height:25%}.grid-y>.small-4{height:33.33333%}.grid-y>.small-5{height:41.66667%}.grid-y>.small-6{height:50%}.grid-y>.small-7{height:58.33333%}.grid-y>.small-8{height:66.66667%}.grid-y>.small-9{height:75%}.grid-y>.small-10{height:83.33333%}.grid-y>.small-11{height:91.66667%}.grid-y>.small-12{height:100%}@media screen and (min-width: 25em){.grid-y>.smedium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.smedium-shrink,.grid-y>.smedium-1,.grid-y>.smedium-2,.grid-y>.smedium-3,.grid-y>.smedium-4,.grid-y>.smedium-5,.grid-y>.smedium-6,.grid-y>.smedium-7,.grid-y>.smedium-8,.grid-y>.smedium-9,.grid-y>.smedium-10,.grid-y>.smedium-11,.grid-y>.smedium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.smedium-shrink{height:auto}.grid-y>.smedium-1{height:8.33333%}.grid-y>.smedium-2{height:16.66667%}.grid-y>.smedium-3{height:25%}.grid-y>.smedium-4{height:33.33333%}.grid-y>.smedium-5{height:41.66667%}.grid-y>.smedium-6{height:50%}.grid-y>.smedium-7{height:58.33333%}.grid-y>.smedium-8{height:66.66667%}.grid-y>.smedium-9{height:75%}.grid-y>.smedium-10{height:83.33333%}.grid-y>.smedium-11{height:91.66667%}.grid-y>.smedium-12{height:100%}}@media print, screen and (min-width: 40em){.grid-y>.medium-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.medium-shrink,.grid-y>.medium-1,.grid-y>.medium-2,.grid-y>.medium-3,.grid-y>.medium-4,.grid-y>.medium-5,.grid-y>.medium-6,.grid-y>.medium-7,.grid-y>.medium-8,.grid-y>.medium-9,.grid-y>.medium-10,.grid-y>.medium-11,.grid-y>.medium-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.medium-shrink{height:auto}.grid-y>.medium-1{height:8.33333%}.grid-y>.medium-2{height:16.66667%}.grid-y>.medium-3{height:25%}.grid-y>.medium-4{height:33.33333%}.grid-y>.medium-5{height:41.66667%}.grid-y>.medium-6{height:50%}.grid-y>.medium-7{height:58.33333%}.grid-y>.medium-8{height:66.66667%}.grid-y>.medium-9{height:75%}.grid-y>.medium-10{height:83.33333%}.grid-y>.medium-11{height:91.66667%}.grid-y>.medium-12{height:100%}}@media print, screen and (min-width: 64em){.grid-y>.large-auto{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;height:auto}.grid-y>.large-shrink,.grid-y>.large-1,.grid-y>.large-2,.grid-y>.large-3,.grid-y>.large-4,.grid-y>.large-5,.grid-y>.large-6,.grid-y>.large-7,.grid-y>.large-8,.grid-y>.large-9,.grid-y>.large-10,.grid-y>.large-11,.grid-y>.large-12{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.grid-y>.large-shrink{height:auto}.grid-y>.large-1{height:8.33333%}.grid-y>.large-2{height:16.66667%}.grid-y>.large-3{height:25%}.grid-y>.large-4{height:33.33333%}.grid-y>.large-5{height:41.66667%}.grid-y>.large-6{height:50%}.grid-y>.large-7{height:58.33333%}.grid-y>.large-8{height:66.66667%}.grid-y>.large-9{height:75%}.grid-y>.large-10{height:83.33333%}.grid-y>.large-11{height:91.66667%}.grid-y>.large-12{height:100%}}.grid-padding-y .grid-padding-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-padding-y .grid-padding-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-padding-y>.cell{padding-top:.625rem;padding-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-padding-y>.cell{padding-top:.9375rem;padding-bottom:.9375rem}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .grid-frame{width:100%}.cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}@media screen and (min-width: 25em){.smedium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .smedium-grid-frame{width:100%}.smedium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.smedium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.smedium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.smedium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 40em){.medium-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .medium-grid-frame{width:100%}.medium-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.medium-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.medium-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.medium-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}@media print, screen and (min-width: 64em){.large-grid-frame{overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100vw}.cell .large-grid-frame{width:100%}.large-cell-block{overflow-x:auto;max-width:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.large-cell-block-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:100%}.large-cell-block-container>.grid-x{max-height:100%;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.large-cell-block-y{overflow-y:auto;max-height:100%;min-height:100%;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}}.grid-y.grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}@media screen and (min-width: 25em){.grid-y.smedium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 40em){.grid-y.medium-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}@media print, screen and (min-width: 64em){.grid-y.large-grid-frame{width:auto;overflow:hidden;position:relative;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;height:100vh}}.cell .grid-y.grid-frame{height:100%}@media screen and (min-width: 25em){.cell .grid-y.smedium-grid-frame{height:100%}}@media print, screen and (min-width: 40em){.cell .grid-y.medium-grid-frame{height:100%}}@media print, screen and (min-width: 64em){.cell .grid-y.large-grid-frame{height:100%}}.grid-margin-y{margin-top:-.625rem;margin-bottom:-.625rem}@media print, screen and (min-width: 40em){.grid-margin-y{margin-top:-.9375rem;margin-bottom:-.9375rem}}.grid-margin-y>.cell{height:calc(100% - 1.25rem);margin-top:.625rem;margin-bottom:.625rem}@media print, screen and (min-width: 40em){.grid-margin-y>.cell{height:calc(100% - 1.875rem);margin-top:.9375rem;margin-bottom:.9375rem}}.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.small-3{height:calc(25% - 1.25rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.small-6{height:calc(50% - 1.25rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.small-9{height:calc(75% - 1.25rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.small-12{height:calc(100% - 1.25rem)}@media screen and (min-width: 25em){.grid-margin-y>.smedium-auto{height:auto}.grid-margin-y>.smedium-shrink{height:auto}.grid-margin-y>.smedium-1{height:calc(8.33333% - 1.25rem)}.grid-margin-y>.smedium-2{height:calc(16.66667% - 1.25rem)}.grid-margin-y>.smedium-3{height:calc(25% - 1.25rem)}.grid-margin-y>.smedium-4{height:calc(33.33333% - 1.25rem)}.grid-margin-y>.smedium-5{height:calc(41.66667% - 1.25rem)}.grid-margin-y>.smedium-6{height:calc(50% - 1.25rem)}.grid-margin-y>.smedium-7{height:calc(58.33333% - 1.25rem)}.grid-margin-y>.smedium-8{height:calc(66.66667% - 1.25rem)}.grid-margin-y>.smedium-9{height:calc(75% - 1.25rem)}.grid-margin-y>.smedium-10{height:calc(83.33333% - 1.25rem)}.grid-margin-y>.smedium-11{height:calc(91.66667% - 1.25rem)}.grid-margin-y>.smedium-12{height:calc(100% - 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y>.auto{height:auto}.grid-margin-y>.shrink{height:auto}.grid-margin-y>.small-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.small-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.small-3{height:calc(25% - 1.875rem)}.grid-margin-y>.small-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.small-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.small-6{height:calc(50% - 1.875rem)}.grid-margin-y>.small-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.small-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.small-9{height:calc(75% - 1.875rem)}.grid-margin-y>.small-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.small-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.small-12{height:calc(100% - 1.875rem)}.grid-margin-y>.medium-auto{height:auto}.grid-margin-y>.medium-shrink{height:auto}.grid-margin-y>.medium-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.medium-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.medium-3{height:calc(25% - 1.875rem)}.grid-margin-y>.medium-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.medium-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.medium-6{height:calc(50% - 1.875rem)}.grid-margin-y>.medium-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.medium-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.medium-9{height:calc(75% - 1.875rem)}.grid-margin-y>.medium-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.medium-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.medium-12{height:calc(100% - 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y>.large-auto{height:auto}.grid-margin-y>.large-shrink{height:auto}.grid-margin-y>.large-1{height:calc(8.33333% - 1.875rem)}.grid-margin-y>.large-2{height:calc(16.66667% - 1.875rem)}.grid-margin-y>.large-3{height:calc(25% - 1.875rem)}.grid-margin-y>.large-4{height:calc(33.33333% - 1.875rem)}.grid-margin-y>.large-5{height:calc(41.66667% - 1.875rem)}.grid-margin-y>.large-6{height:calc(50% - 1.875rem)}.grid-margin-y>.large-7{height:calc(58.33333% - 1.875rem)}.grid-margin-y>.large-8{height:calc(66.66667% - 1.875rem)}.grid-margin-y>.large-9{height:calc(75% - 1.875rem)}.grid-margin-y>.large-10{height:calc(83.33333% - 1.875rem)}.grid-margin-y>.large-11{height:calc(91.66667% - 1.875rem)}.grid-margin-y>.large-12{height:calc(100% - 1.875rem)}}.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}@media screen and (min-width: 25em){.grid-frame.grid-margin-y{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-frame.grid-margin-y{height:calc(100vh + 1.875rem)}}@media screen and (min-width: 25em){.grid-margin-y.smedium-grid-frame{height:calc(100vh + 1.25rem)}}@media print, screen and (min-width: 40em){.grid-margin-y.medium-grid-frame{height:calc(100vh + 1.875rem)}}@media print, screen and (min-width: 64em){.grid-margin-y.large-grid-frame{height:calc(100vh + 1.875rem)}}.button{display:inline-block;vertical-align:middle;margin:0 0 1rem 0;padding:0.85em 1em;border:1px solid transparent;border-radius:0;-webkit-transition:background-color 0.25s ease-out,color 0.25s ease-out;transition:background-color 0.25s ease-out,color 0.25s ease-out;font-family:inherit;font-size:0.9rem;-webkit-appearance:none;line-height:1;text-align:center;cursor:pointer}[data-whatinput='mouse'] .button{outline:0}.button.tiny{font-size:.6rem}.button.small{font-size:.75rem}.button.large{font-size:1.25rem}.button.expanded{display:block;width:100%;margin-right:0;margin-left:0}.button,.button.disabled,.button[disabled],.button.disabled:hover,.button[disabled]:hover,.button.disabled:focus,.button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button:hover,.button:focus{background-color:#14679e;color:#fefefe}.button.primary,.button.primary.disabled,.button.primary[disabled],.button.primary.disabled:hover,.button.primary[disabled]:hover,.button.primary.disabled:focus,.button.primary[disabled]:focus{background-color:#1779ba;color:#fefefe}.button.primary:hover,.button.primary:focus{background-color:#126195;color:#fefefe}.button.secondary,.button.secondary.disabled,.button.secondary[disabled],.button.secondary.disabled:hover,.button.secondary[disabled]:hover,.button.secondary.disabled:focus,.button.secondary[disabled]:focus{background-color:#767676;color:#fefefe}.button.secondary:hover,.button.secondary:focus{background-color:#5e5e5e;color:#fefefe}.button.success,.button.success.disabled,.button.success[disabled],.button.success.disabled:hover,.button.success[disabled]:hover,.button.success.disabled:focus,.button.success[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button.success:hover,.button.success:focus{background-color:#22bb5b;color:#0a0a0a}.button.warning,.button.warning.disabled,.button.warning[disabled],.button.warning.disabled:hover,.button.warning[disabled]:hover,.button.warning.disabled:focus,.button.warning[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button.warning:hover,.button.warning:focus{background-color:#cc8b00;color:#0a0a0a}.button.alert,.button.alert.disabled,.button.alert[disabled],.button.alert.disabled:hover,.button.alert[disabled]:hover,.button.alert.disabled:focus,.button.alert[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button.alert:hover,.button.alert:focus{background-color:#a53b2a;color:#fefefe}.button.hollow,.button.hollow:hover,.button.hollow:focus,.button.hollow.disabled,.button.hollow.disabled:hover,.button.hollow.disabled:focus,.button.hollow[disabled],.button.hollow[disabled]:hover,.button.hollow[disabled]:focus{background-color:transparent}.button.hollow,.button.hollow.disabled,.button.hollow[disabled],.button.hollow.disabled:hover,.button.hollow[disabled]:hover,.button.hollow.disabled:focus,.button.hollow[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow:hover,.button.hollow:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.primary,.button.hollow.primary.disabled,.button.hollow.primary[disabled],.button.hollow.primary.disabled:hover,.button.hollow.primary[disabled]:hover,.button.hollow.primary.disabled:focus,.button.hollow.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button.hollow.primary:hover,.button.hollow.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button.hollow.secondary,.button.hollow.secondary.disabled,.button.hollow.secondary[disabled],.button.hollow.secondary.disabled:hover,.button.hollow.secondary[disabled]:hover,.button.hollow.secondary.disabled:focus,.button.hollow.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button.hollow.secondary:hover,.button.hollow.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button.hollow.success,.button.hollow.success.disabled,.button.hollow.success[disabled],.button.hollow.success.disabled:hover,.button.hollow.success[disabled]:hover,.button.hollow.success.disabled:focus,.button.hollow.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button.hollow.success:hover,.button.hollow.success:focus{border-color:#157539;color:#157539}.button.hollow.warning,.button.hollow.warning.disabled,.button.hollow.warning[disabled],.button.hollow.warning.disabled:hover,.button.hollow.warning[disabled]:hover,.button.hollow.warning.disabled:focus,.button.hollow.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button.hollow.warning:hover,.button.hollow.warning:focus{border-color:#805700;color:#805700}.button.hollow.alert,.button.hollow.alert.disabled,.button.hollow.alert[disabled],.button.hollow.alert.disabled:hover,.button.hollow.alert[disabled]:hover,.button.hollow.alert.disabled:focus,.button.hollow.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button.hollow.alert:hover,.button.hollow.alert:focus{border-color:#67251a;color:#67251a}.button.clear,.button.clear:hover,.button.clear:focus,.button.clear.disabled,.button.clear.disabled:hover,.button.clear.disabled:focus,.button.clear[disabled],.button.clear[disabled]:hover,.button.clear[disabled]:focus{border-color:transparent;background-color:transparent}.button.clear,.button.clear.disabled,.button.clear[disabled],.button.clear.disabled:hover,.button.clear[disabled]:hover,.button.clear.disabled:focus,.button.clear[disabled]:focus{color:#1779ba}.button.clear:hover,.button.clear:focus{color:#0c3d5d}.button.clear.primary,.button.clear.primary.disabled,.button.clear.primary[disabled],.button.clear.primary.disabled:hover,.button.clear.primary[disabled]:hover,.button.clear.primary.disabled:focus,.button.clear.primary[disabled]:focus{color:#1779ba}.button.clear.primary:hover,.button.clear.primary:focus{color:#0c3d5d}.button.clear.secondary,.button.clear.secondary.disabled,.button.clear.secondary[disabled],.button.clear.secondary.disabled:hover,.button.clear.secondary[disabled]:hover,.button.clear.secondary.disabled:focus,.button.clear.secondary[disabled]:focus{color:#767676}.button.clear.secondary:hover,.button.clear.secondary:focus{color:#3b3b3b}.button.clear.success,.button.clear.success.disabled,.button.clear.success[disabled],.button.clear.success.disabled:hover,.button.clear.success[disabled]:hover,.button.clear.success.disabled:focus,.button.clear.success[disabled]:focus{color:#3adb76}.button.clear.success:hover,.button.clear.success:focus{color:#157539}.button.clear.warning,.button.clear.warning.disabled,.button.clear.warning[disabled],.button.clear.warning.disabled:hover,.button.clear.warning[disabled]:hover,.button.clear.warning.disabled:focus,.button.clear.warning[disabled]:focus{color:#ffae00}.button.clear.warning:hover,.button.clear.warning:focus{color:#805700}.button.clear.alert,.button.clear.alert.disabled,.button.clear.alert[disabled],.button.clear.alert.disabled:hover,.button.clear.alert[disabled]:hover,.button.clear.alert.disabled:focus,.button.clear.alert[disabled]:focus{color:#cc4b37}.button.clear.alert:hover,.button.clear.alert:focus{color:#67251a}.button.disabled,.button[disabled]{opacity:.25;cursor:not-allowed}.button.dropdown::after{display:block;width:0;height:0;border:inset .4em;content:'';border-bottom-width:0;border-top-style:solid;border-color:#fefefe transparent transparent;position:relative;top:0.4em;display:inline-block;float:right;margin-left:1em}.button.dropdown.hollow::after,.button.dropdown.clear::after{border-top-color:#1779ba}.button.dropdown.hollow.primary::after,.button.dropdown.clear.primary::after{border-top-color:#1779ba}.button.dropdown.hollow.secondary::after,.button.dropdown.clear.secondary::after{border-top-color:#767676}.button.dropdown.hollow.success::after,.button.dropdown.clear.success::after{border-top-color:#3adb76}.button.dropdown.hollow.warning::after,.button.dropdown.clear.warning::after{border-top-color:#ffae00}.button.dropdown.hollow.alert::after,.button.dropdown.clear.alert::after{border-top-color:#cc4b37}.button.arrow-only::after{top:-0.1em;float:none;margin-left:0}a.button:hover,a.button:focus{text-decoration:none}.button-group{margin-bottom:1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.button-group::before,.button-group::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.button-group::after{clear:both}.button-group::before,.button-group::after{display:none}.button-group .button{margin:0;margin-right:1px;margin-bottom:1px;font-size:0.9rem;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.button-group .button:last-child{margin-right:0}.button-group.tiny .button{font-size:.6rem}.button-group.small .button{font-size:.75rem}.button-group.large .button{font-size:1.25rem}.button-group.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}.button-group.primary .button,.button-group.primary .button.disabled,.button-group.primary .button[disabled],.button-group.primary .button.disabled:hover,.button-group.primary .button[disabled]:hover,.button-group.primary .button.disabled:focus,.button-group.primary .button[disabled]:focus{background-color:#1779ba;color:#fefefe}.button-group.primary .button:hover,.button-group.primary .button:focus{background-color:#126195;color:#fefefe}.button-group.secondary .button,.button-group.secondary .button.disabled,.button-group.secondary .button[disabled],.button-group.secondary .button.disabled:hover,.button-group.secondary .button[disabled]:hover,.button-group.secondary .button.disabled:focus,.button-group.secondary .button[disabled]:focus{background-color:#767676;color:#fefefe}.button-group.secondary .button:hover,.button-group.secondary .button:focus{background-color:#5e5e5e;color:#fefefe}.button-group.success .button,.button-group.success .button.disabled,.button-group.success .button[disabled],.button-group.success .button.disabled:hover,.button-group.success .button[disabled]:hover,.button-group.success .button.disabled:focus,.button-group.success .button[disabled]:focus{background-color:#3adb76;color:#0a0a0a}.button-group.success .button:hover,.button-group.success .button:focus{background-color:#22bb5b;color:#0a0a0a}.button-group.warning .button,.button-group.warning .button.disabled,.button-group.warning .button[disabled],.button-group.warning .button.disabled:hover,.button-group.warning .button[disabled]:hover,.button-group.warning .button.disabled:focus,.button-group.warning .button[disabled]:focus{background-color:#ffae00;color:#0a0a0a}.button-group.warning .button:hover,.button-group.warning .button:focus{background-color:#cc8b00;color:#0a0a0a}.button-group.alert .button,.button-group.alert .button.disabled,.button-group.alert .button[disabled],.button-group.alert .button.disabled:hover,.button-group.alert .button[disabled]:hover,.button-group.alert .button.disabled:focus,.button-group.alert .button[disabled]:focus{background-color:#cc4b37;color:#fefefe}.button-group.alert .button:hover,.button-group.alert .button:focus{background-color:#a53b2a;color:#fefefe}.button-group.hollow .button,.button-group.hollow .button:hover,.button-group.hollow .button:focus,.button-group.hollow .button.disabled,.button-group.hollow .button.disabled:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled],.button-group.hollow .button[disabled]:hover,.button-group.hollow .button[disabled]:focus{background-color:transparent}.button-group.hollow .button,.button-group.hollow .button.disabled,.button-group.hollow .button[disabled],.button-group.hollow .button.disabled:hover,.button-group.hollow .button[disabled]:hover,.button-group.hollow .button.disabled:focus,.button-group.hollow .button[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow .button:hover,.button-group.hollow .button:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.primary .button,.button-group.hollow.primary .button.disabled,.button-group.hollow.primary .button[disabled],.button-group.hollow.primary .button.disabled:hover,.button-group.hollow.primary .button[disabled]:hover,.button-group.hollow.primary .button.disabled:focus,.button-group.hollow.primary .button[disabled]:focus,.button-group.hollow .button.primary,.button-group.hollow .button.primary.disabled,.button-group.hollow .button.primary[disabled],.button-group.hollow .button.primary.disabled:hover,.button-group.hollow .button.primary[disabled]:hover,.button-group.hollow .button.primary.disabled:focus,.button-group.hollow .button.primary[disabled]:focus{border:1px solid #1779ba;color:#1779ba}.button-group.hollow.primary .button:hover,.button-group.hollow.primary .button:focus,.button-group.hollow .button.primary:hover,.button-group.hollow .button.primary:focus{border-color:#0c3d5d;color:#0c3d5d}.button-group.hollow.secondary .button,.button-group.hollow.secondary .button.disabled,.button-group.hollow.secondary .button[disabled],.button-group.hollow.secondary .button.disabled:hover,.button-group.hollow.secondary .button[disabled]:hover,.button-group.hollow.secondary .button.disabled:focus,.button-group.hollow.secondary .button[disabled]:focus,.button-group.hollow .button.secondary,.button-group.hollow .button.secondary.disabled,.button-group.hollow .button.secondary[disabled],.button-group.hollow .button.secondary.disabled:hover,.button-group.hollow .button.secondary[disabled]:hover,.button-group.hollow .button.secondary.disabled:focus,.button-group.hollow .button.secondary[disabled]:focus{border:1px solid #767676;color:#767676}.button-group.hollow.secondary .button:hover,.button-group.hollow.secondary .button:focus,.button-group.hollow .button.secondary:hover,.button-group.hollow .button.secondary:focus{border-color:#3b3b3b;color:#3b3b3b}.button-group.hollow.success .button,.button-group.hollow.success .button.disabled,.button-group.hollow.success .button[disabled],.button-group.hollow.success .button.disabled:hover,.button-group.hollow.success .button[disabled]:hover,.button-group.hollow.success .button.disabled:focus,.button-group.hollow.success .button[disabled]:focus,.button-group.hollow .button.success,.button-group.hollow .button.success.disabled,.button-group.hollow .button.success[disabled],.button-group.hollow .button.success.disabled:hover,.button-group.hollow .button.success[disabled]:hover,.button-group.hollow .button.success.disabled:focus,.button-group.hollow .button.success[disabled]:focus{border:1px solid #3adb76;color:#3adb76}.button-group.hollow.success .button:hover,.button-group.hollow.success .button:focus,.button-group.hollow .button.success:hover,.button-group.hollow .button.success:focus{border-color:#157539;color:#157539}.button-group.hollow.warning .button,.button-group.hollow.warning .button.disabled,.button-group.hollow.warning .button[disabled],.button-group.hollow.warning .button.disabled:hover,.button-group.hollow.warning .button[disabled]:hover,.button-group.hollow.warning .button.disabled:focus,.button-group.hollow.warning .button[disabled]:focus,.button-group.hollow .button.warning,.button-group.hollow .button.warning.disabled,.button-group.hollow .button.warning[disabled],.button-group.hollow .button.warning.disabled:hover,.button-group.hollow .button.warning[disabled]:hover,.button-group.hollow .button.warning.disabled:focus,.button-group.hollow .button.warning[disabled]:focus{border:1px solid #ffae00;color:#ffae00}.button-group.hollow.warning .button:hover,.button-group.hollow.warning .button:focus,.button-group.hollow .button.warning:hover,.button-group.hollow .button.warning:focus{border-color:#805700;color:#805700}.button-group.hollow.alert .button,.button-group.hollow.alert .button.disabled,.button-group.hollow.alert .button[disabled],.button-group.hollow.alert .button.disabled:hover,.button-group.hollow.alert .button[disabled]:hover,.button-group.hollow.alert .button.disabled:focus,.button-group.hollow.alert .button[disabled]:focus,.button-group.hollow .button.alert,.button-group.hollow .button.alert.disabled,.button-group.hollow .button.alert[disabled],.button-group.hollow .button.alert.disabled:hover,.button-group.hollow .button.alert[disabled]:hover,.button-group.hollow .button.alert.disabled:focus,.button-group.hollow .button.alert[disabled]:focus{border:1px solid #cc4b37;color:#cc4b37}.button-group.hollow.alert .button:hover,.button-group.hollow.alert .button:focus,.button-group.hollow .button.alert:hover,.button-group.hollow .button.alert:focus{border-color:#67251a;color:#67251a}.button-group.clear .button,.button-group.clear .button:hover,.button-group.clear .button:focus,.button-group.clear .button.disabled,.button-group.clear .button.disabled:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled],.button-group.clear .button[disabled]:hover,.button-group.clear .button[disabled]:focus{border-color:transparent;background-color:transparent}.button-group.clear .button,.button-group.clear .button.disabled,.button-group.clear .button[disabled],.button-group.clear .button.disabled:hover,.button-group.clear .button[disabled]:hover,.button-group.clear .button.disabled:focus,.button-group.clear .button[disabled]:focus{color:#1779ba}.button-group.clear .button:hover,.button-group.clear .button:focus{color:#0c3d5d}.button-group.clear.primary .button,.button-group.clear.primary .button.disabled,.button-group.clear.primary .button[disabled],.button-group.clear.primary .button.disabled:hover,.button-group.clear.primary .button[disabled]:hover,.button-group.clear.primary .button.disabled:focus,.button-group.clear.primary .button[disabled]:focus,.button-group.clear .button.primary,.button-group.clear .button.primary.disabled,.button-group.clear .button.primary[disabled],.button-group.clear .button.primary.disabled:hover,.button-group.clear .button.primary[disabled]:hover,.button-group.clear .button.primary.disabled:focus,.button-group.clear .button.primary[disabled]:focus{color:#1779ba}.button-group.clear.primary .button:hover,.button-group.clear.primary .button:focus,.button-group.clear .button.primary:hover,.button-group.clear .button.primary:focus{color:#0c3d5d}.button-group.clear.secondary .button,.button-group.clear.secondary .button.disabled,.button-group.clear.secondary .button[disabled],.button-group.clear.secondary .button.disabled:hover,.button-group.clear.secondary .button[disabled]:hover,.button-group.clear.secondary .button.disabled:focus,.button-group.clear.secondary .button[disabled]:focus,.button-group.clear .button.secondary,.button-group.clear .button.secondary.disabled,.button-group.clear .button.secondary[disabled],.button-group.clear .button.secondary.disabled:hover,.button-group.clear .button.secondary[disabled]:hover,.button-group.clear .button.secondary.disabled:focus,.button-group.clear .button.secondary[disabled]:focus{color:#767676}.button-group.clear.secondary .button:hover,.button-group.clear.secondary .button:focus,.button-group.clear .button.secondary:hover,.button-group.clear .button.secondary:focus{color:#3b3b3b}.button-group.clear.success .button,.button-group.clear.success .button.disabled,.button-group.clear.success .button[disabled],.button-group.clear.success .button.disabled:hover,.button-group.clear.success .button[disabled]:hover,.button-group.clear.success .button.disabled:focus,.button-group.clear.success .button[disabled]:focus,.button-group.clear .button.success,.button-group.clear .button.success.disabled,.button-group.clear .button.success[disabled],.button-group.clear .button.success.disabled:hover,.button-group.clear .button.success[disabled]:hover,.button-group.clear .button.success.disabled:focus,.button-group.clear .button.success[disabled]:focus{color:#3adb76}.button-group.clear.success .button:hover,.button-group.clear.success .button:focus,.button-group.clear .button.success:hover,.button-group.clear .button.success:focus{color:#157539}.button-group.clear.warning .button,.button-group.clear.warning .button.disabled,.button-group.clear.warning .button[disabled],.button-group.clear.warning .button.disabled:hover,.button-group.clear.warning .button[disabled]:hover,.button-group.clear.warning .button.disabled:focus,.button-group.clear.warning .button[disabled]:focus,.button-group.clear .button.warning,.button-group.clear .button.warning.disabled,.button-group.clear .button.warning[disabled],.button-group.clear .button.warning.disabled:hover,.button-group.clear .button.warning[disabled]:hover,.button-group.clear .button.warning.disabled:focus,.button-group.clear .button.warning[disabled]:focus{color:#ffae00}.button-group.clear.warning .button:hover,.button-group.clear.warning .button:focus,.button-group.clear .button.warning:hover,.button-group.clear .button.warning:focus{color:#805700}.button-group.clear.alert .button,.button-group.clear.alert .button.disabled,.button-group.clear.alert .button[disabled],.button-group.clear.alert .button.disabled:hover,.button-group.clear.alert .button[disabled]:hover,.button-group.clear.alert .button.disabled:focus,.button-group.clear.alert .button[disabled]:focus,.button-group.clear .button.alert,.button-group.clear .button.alert.disabled,.button-group.clear .button.alert[disabled],.button-group.clear .button.alert.disabled:hover,.button-group.clear .button.alert[disabled]:hover,.button-group.clear .button.alert.disabled:focus,.button-group.clear .button.alert[disabled]:focus{color:#cc4b37}.button-group.clear.alert .button:hover,.button-group.clear.alert .button:focus,.button-group.clear .button.alert:hover,.button-group.clear .button.alert:focus{color:#67251a}.button-group.no-gaps .button{margin-right:-.0625rem}.button-group.no-gaps .button+.button{border-left-color:transparent}.button-group.stacked,.button-group.stacked-for-small,.button-group.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.button-group.stacked .button,.button-group.stacked-for-small .button,.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%}.button-group.stacked .button:last-child,.button-group.stacked-for-small .button:last-child,.button-group.stacked-for-medium .button:last-child{margin-bottom:0}.button-group.stacked.expanded .button,.button-group.stacked-for-small.expanded .button,.button-group.stacked-for-medium.expanded .button{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px;margin-right:0}@media print, screen and (min-width: 40em){.button-group.stacked-for-small .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (min-width: 64em){.button-group.stacked-for-medium .button{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:0}}@media print, screen and (max-width: 24.99875em){.button-group.stacked-for-small.expanded{display:block}.button-group.stacked-for-small.expanded .button{display:block;margin-right:0}}@media print, screen and (max-width: 63.99875em){.button-group.stacked-for-medium.expanded{display:block}.button-group.stacked-for-medium.expanded .button{display:block;margin-right:0}}.close-button{position:absolute;z-index:10;color:#8a8a8a;cursor:pointer}[data-whatinput='mouse'] .close-button{outline:0}.close-button:hover,.close-button:focus{color:#0a0a0a}.close-button.small{right:0.66rem;top:0.33em;font-size:1.5em;line-height:1}.close-button.medium,.close-button{right:1rem;top:0.5rem;font-size:2em;line-height:1}.label{display:inline-block;padding:0.33333rem 0.5rem;border-radius:0;font-size:.8rem;line-height:1;white-space:nowrap;cursor:default;background:#1779ba;color:#fefefe}.label.primary{background:#1779ba;color:#fefefe}.label.secondary{background:#767676;color:#fefefe}.label.success{background:#3adb76;color:#0a0a0a}.label.warning{background:#ffae00;color:#0a0a0a}.label.alert{background:#cc4b37;color:#fefefe}.progress{height:1rem;margin-bottom:1rem;border-radius:0;background-color:#cacaca}.progress.primary .progress-meter{background-color:#1779ba}.progress.secondary .progress-meter{background-color:#767676}.progress.success .progress-meter{background-color:#3adb76}.progress.warning .progress-meter{background-color:#ffae00}.progress.alert .progress-meter{background-color:#cc4b37}.progress-meter{position:relative;display:block;width:0%;height:100%;background-color:#1779ba}.progress-meter-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);margin:0;font-size:0.75rem;font-weight:bold;color:#fefefe;white-space:nowrap}.slider{position:relative;height:.5rem;margin-top:1.25rem;margin-bottom:2.25rem;background-color:#e6e6e6;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:none;touch-action:none}.slider-fill{position:absolute;top:0;left:0;display:inline-block;max-width:100%;height:.5rem;background-color:#cacaca;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.slider-fill.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider-handle{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:0;z-index:1;display:inline-block;width:1.4rem;height:1.4rem;border-radius:0;background-color:#1779ba;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-ms-touch-action:manipulation;touch-action:manipulation}[data-whatinput='mouse'] .slider-handle{outline:0}.slider-handle:hover{background-color:#14679e}.slider-handle.is-dragging{-webkit-transition:all 0s linear;transition:all 0s linear}.slider.disabled,.slider[disabled]{opacity:.25;cursor:not-allowed}.slider.vertical{display:inline-block;width:.5rem;height:12.5rem;margin:0 1.25rem;-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}.slider.vertical .slider-fill{top:0;width:.5rem;max-height:100%}.slider.vertical .slider-handle{position:absolute;top:0;left:50%;width:1.4rem;height:1.4rem;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.switch{height:2rem;position:relative;margin-bottom:1rem;outline:0;font-size:.875rem;font-weight:bold;color:#fefefe;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch-input{position:absolute;margin-bottom:0;opacity:0}.switch-paddle{position:relative;display:block;width:4rem;height:2rem;border-radius:0;background:#cacaca;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;font-weight:inherit;color:inherit;cursor:pointer}input+.switch-paddle{margin:0}.switch-paddle::after{position:absolute;top:.25rem;left:.25rem;display:block;width:1.5rem;height:1.5rem;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);border-radius:0;background:#fefefe;-webkit-transition:all 0.25s ease-out;transition:all 0.25s ease-out;content:''}input:checked ~ .switch-paddle{background:#1779ba}input:checked ~ .switch-paddle::after{left:2.25rem}input:disabled ~ .switch-paddle{cursor:not-allowed;opacity:.5}[data-whatinput='mouse'] input:focus ~ .switch-paddle{outline:0}.switch-active,.switch-inactive{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.switch-active{left:8%;display:none}input:checked+label>.switch-active{display:block}.switch-inactive{right:15%}input:checked+label>.switch-inactive{display:none}.switch.tiny{height:1.5rem}.switch.tiny .switch-paddle{width:3rem;height:1.5rem;font-size:.625rem}.switch.tiny .switch-paddle::after{top:.25rem;left:.25rem;width:1rem;height:1rem}.switch.tiny input:checked ~ .switch-paddle::after{left:1.75rem}.switch.small{height:1.75rem}.switch.small .switch-paddle{width:3.5rem;height:1.75rem;font-size:.75rem}.switch.small .switch-paddle::after{top:.25rem;left:.25rem;width:1.25rem;height:1.25rem}.switch.small input:checked ~ .switch-paddle::after{left:2rem}.switch.large{height:2.5rem}.switch.large .switch-paddle{width:5rem;height:2.5rem;font-size:1rem}.switch.large .switch-paddle::after{top:.25rem;left:.25rem;width:2rem;height:2rem}.switch.large input:checked ~ .switch-paddle::after{left:2.75rem}table{border-collapse:collapse;width:100%;margin-bottom:1rem;border-radius:0}thead,tbody,tfoot{border:1px solid #f1f1f1;background-color:#fefefe}caption{padding:.5rem .625rem .625rem;font-weight:bold}thead{background:#f8f8f8;color:#0a0a0a}tfoot{background:#f1f1f1;color:#0a0a0a}thead tr,tfoot tr{background:transparent}thead th,thead td,tfoot th,tfoot td{padding:.5rem .625rem .625rem;font-weight:bold;text-align:left}tbody th,tbody td{padding:.5rem .625rem .625rem}tbody tr:nth-child(even){border-bottom:0;background-color:#f1f1f1}table.unstriped tbody{background-color:#fefefe}table.unstriped tbody tr{border-bottom:0;border-bottom:1px solid #f1f1f1;background-color:#fefefe}@media print, screen and (max-width: 63.99875em){table.stack thead{display:none}table.stack tfoot{display:none}table.stack tr,table.stack th,table.stack td{display:block}table.stack td{border-top:0}}table.scroll{display:block;width:100%;overflow-x:auto}table.hover thead tr:hover{background-color:#f3f3f3}table.hover tfoot tr:hover{background-color:#ececec}table.hover tbody tr:hover{background-color:#f9f9f9}table.hover:not(.unstriped) tr:nth-of-type(even):hover{background-color:#ececec}.table-scroll{overflow-x:auto}.badge{display:inline-block;min-width:2.1em;padding:.3em;border-radius:50%;font-size:.6rem;text-align:center;background:#1779ba;color:#fefefe}.badge.primary{background:#1779ba;color:#fefefe}.badge.secondary{background:#767676;color:#fefefe}.badge.success{background:#3adb76;color:#0a0a0a}.badge.warning{background:#ffae00;color:#0a0a0a}.badge.alert{background:#cc4b37;color:#fefefe}.breadcrumbs{margin:0 0 1rem 0;list-style:none}.breadcrumbs::before,.breadcrumbs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.breadcrumbs::after{clear:both}.breadcrumbs li{float:left;font-size:.6875rem;color:#0a0a0a;cursor:default;text-transform:uppercase}.breadcrumbs li:not(:last-child)::after{position:relative;margin:0 .75rem;opacity:1;content:"/";color:#cacaca}.breadcrumbs a{color:#1779ba}.breadcrumbs a:hover{text-decoration:underline}.breadcrumbs .disabled{color:#cacaca;cursor:not-allowed}.callout{position:relative;margin:0 0 1rem 0;padding:1rem;border:1px solid rgba(10,10,10,0.25);border-radius:0;background-color:#fff;color:#0a0a0a}.callout>:first-child{margin-top:0}.callout>:last-child{margin-bottom:0}.callout.primary{background-color:#d7ecfa;color:#0a0a0a}.callout.secondary{background-color:#eaeaea;color:#0a0a0a}.callout.success{background-color:#e1faea;color:#0a0a0a}.callout.warning{background-color:#fff3d9;color:#0a0a0a}.callout.alert{background-color:#f7e4e1;color:#0a0a0a}.callout.small{padding-top:.5rem;padding-right:.5rem;padding-bottom:.5rem;padding-left:.5rem}.callout.large{padding-top:3rem;padding-right:3rem;padding-bottom:3rem;padding-left:3rem}.card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;margin-bottom:1rem;border:1px solid #e6e6e6;border-radius:0;background:#fefefe;-webkit-box-shadow:none;box-shadow:none;overflow:hidden;color:#0a0a0a}.card>:last-child{margin-bottom:0}.card-divider{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;padding:1rem;background:#e6e6e6}.card-divider>:last-child{margin-bottom:0}.card-section{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;padding:1rem}.card-section>:last-child{margin-bottom:0}.card-image{min-height:1px}.dropdown-pane{position:absolute;z-index:10;display:none;width:300px;padding:1rem;visibility:hidden;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;font-size:1rem}.dropdown-pane.is-opening{display:block}.dropdown-pane.is-open{display:block;visibility:visible}.dropdown-pane.tiny{width:100px}.dropdown-pane.small{width:200px}.dropdown-pane.large{width:400px}.pagination{margin-left:0;margin-bottom:1rem}.pagination::before,.pagination::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.pagination::after{clear:both}.pagination li{margin-right:.0625rem;border-radius:0;font-size:.875rem;display:none}.pagination li:last-child,.pagination li:first-child{display:inline-block}@media print, screen and (min-width: 40em){.pagination li{display:inline-block}}.pagination a,.pagination button{display:block;padding:.1875rem .625rem;border-radius:0;color:#0a0a0a}.pagination a:hover,.pagination button:hover{background:#e6e6e6}.pagination .current{padding:.1875rem .625rem;background:#1779ba;color:#fefefe;cursor:default}.pagination .disabled{padding:.1875rem .625rem;color:#cacaca;cursor:not-allowed}.pagination .disabled:hover{background:transparent}.pagination .ellipsis::after{padding:.1875rem .625rem;content:'\2026';color:#0a0a0a}.pagination-previous a::before,.pagination-previous.disabled::before{display:inline-block;margin-right:0.5rem;content:"«"}.pagination-next a::after,.pagination-next.disabled::after{display:inline-block;margin-left:0.5rem;content:"»"}.has-tip{position:relative;display:inline-block;border-bottom:dotted 1px #8a8a8a;font-weight:bold;cursor:help}.tooltip{position:absolute;top:calc(100% + .6495rem);z-index:1200;max-width:10rem;padding:.75rem;border-radius:0;background-color:#0a0a0a;font-size:80%;color:#fefefe}.tooltip::before{position:absolute}.tooltip.bottom::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-top-width:0;border-bottom-style:solid;border-color:transparent transparent #0a0a0a;bottom:100%}.tooltip.bottom.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.top::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-bottom-width:0;border-top-style:solid;border-color:#0a0a0a transparent transparent;top:100%;bottom:auto}.tooltip.top.align-center::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltip.left::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #0a0a0a;left:100%}.tooltip.left.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.right::before{display:block;width:0;height:0;border:inset .75rem;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #0a0a0a transparent transparent;right:100%;left:auto}.tooltip.right.align-center::before{bottom:auto;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.tooltip.align-top::before{bottom:auto;top:10%}.tooltip.align-bottom::before{bottom:10%;top:auto}.tooltip.align-left::before{left:10%;right:auto}.tooltip.align-right::before{left:auto;right:10%}.accordion{margin-left:0;background:#fefefe;list-style-type:none}.accordion[disabled] .accordion-title{cursor:not-allowed}.accordion-item:first-child>:first-child{border-radius:0 0 0 0}.accordion-item:last-child>:last-child{border-radius:0 0 0 0}.accordion-title{position:relative;display:block;padding:1.25rem 1rem;border:1px solid #e6e6e6;border-bottom:0;font-size:.75rem;line-height:1;color:#1779ba}:last-child:not(.is-active)>.accordion-title{border-bottom:1px solid #e6e6e6;border-radius:0 0 0 0}.accordion-title:hover,.accordion-title:focus{background-color:#e6e6e6}.accordion-title::before{position:absolute;top:50%;right:1rem;margin-top:-0.5rem;content:"+"}.is-active>.accordion-title::before{content:"–"}.accordion-content{display:none;padding:1rem;border:1px solid #e6e6e6;border-bottom:0;background-color:#fefefe;color:#0a0a0a}:last-child>.accordion-content:last-child{border-bottom:1px solid #e6e6e6}.media-object{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:1rem;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.media-object img{max-width:none}@media print, screen and (max-width: 24.99875em){.media-object.stack-for-small{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.media-object-section{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.media-object-section:first-child{padding-right:1rem}.media-object-section:last-child:not(:nth-child(2)){padding-left:1rem}.media-object-section>:last-child{margin-bottom:0}@media print, screen and (max-width: 24.99875em){.stack-for-small .media-object-section{padding:0;padding-bottom:1rem;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.stack-for-small .media-object-section img{width:100%}}.media-object-section.main-section{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.orbit{position:relative}.orbit-container{position:relative;height:0;margin:0;list-style:none;overflow:hidden}.orbit-slide{width:100%;position:absolute}.orbit-slide.no-motionui.is-active{top:0;left:0}.orbit-figure{margin:0}.orbit-image{width:100%;max-width:100%;margin:0}.orbit-caption{position:absolute;bottom:0;width:100%;margin-bottom:0;padding:1rem;background-color:rgba(10,10,10,0.5);color:#fefefe}.orbit-previous,.orbit-next{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);z-index:10;padding:1rem;color:#fefefe}[data-whatinput='mouse'] .orbit-previous,[data-whatinput='mouse'] .orbit-next{outline:0}.orbit-previous:hover,.orbit-next:hover,.orbit-previous:active,.orbit-next:active,.orbit-previous:focus,.orbit-next:focus{background-color:rgba(10,10,10,0.5)}.orbit-previous{left:0}.orbit-next{left:auto;right:0}.orbit-bullets{position:relative;margin-top:.8rem;margin-bottom:.8rem;text-align:center}[data-whatinput='mouse'] .orbit-bullets{outline:0}.orbit-bullets button{width:1.2rem;height:1.2rem;margin:.1rem;border-radius:50%;background-color:#cacaca}.orbit-bullets button:hover{background-color:#8a8a8a}.orbit-bullets button.is-active{background-color:#8a8a8a}.responsive-embed,.flex-video{position:relative;height:0;margin-bottom:1rem;padding-bottom:75%;overflow:hidden}.responsive-embed iframe,.responsive-embed object,.responsive-embed embed,.responsive-embed video,.flex-video iframe,.flex-video object,.flex-video embed,.flex-video video{position:absolute;top:0;left:0;width:100%;height:100%}.responsive-embed.widescreen,.flex-video.widescreen{padding-bottom:56.25%}.tabs{margin:0;border:1px solid #e6e6e6;background:#fefefe;list-style-type:none}.tabs::before,.tabs::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.tabs::after{clear:both}.tabs.vertical>li{display:block;float:none;width:auto}.tabs.simple>li>a{padding:0}.tabs.simple>li>a:hover{background:transparent}.tabs.primary{background:#1779ba}.tabs.primary>li>a{color:#fefefe}.tabs.primary>li>a:hover,.tabs.primary>li>a:focus{background:#1673b1}.tabs-title{float:left}.tabs-title>a{display:block;padding:1.25rem 1.5rem;font-size:.75rem;line-height:1;color:#1779ba}[data-whatinput='mouse'] .tabs-title>a{outline:0}.tabs-title>a:hover{background:#fefefe;color:#1468a0}.tabs-title>a:focus,.tabs-title>a[aria-selected='true']{background:#e6e6e6;color:#1779ba}.tabs-content{border:1px solid #e6e6e6;border-top:0;background:#fefefe;color:#0a0a0a;-webkit-transition:all 0.5s ease;transition:all 0.5s ease}.tabs-content.vertical{border:1px solid #e6e6e6;border-left:0}.tabs-panel{display:none;padding:1rem}.tabs-panel.is-active{display:block}.thumbnail{display:inline-block;max-width:100%;margin-bottom:1rem;border:4px solid #fefefe;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(10,10,10,0.2);box-shadow:0 0 0 1px rgba(10,10,10,0.2);line-height:0}a.thumbnail{-webkit-transition:-webkit-box-shadow 200ms ease-out;transition:-webkit-box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out;transition:box-shadow 200ms ease-out, -webkit-box-shadow 200ms ease-out}a.thumbnail:hover,a.thumbnail:focus{-webkit-box-shadow:0 0 6px 1px rgba(23,121,186,0.5);box-shadow:0 0 6px 1px rgba(23,121,186,0.5)}a.thumbnail image{-webkit-box-shadow:none;box-shadow:none}.menu{padding:0;margin:0;list-style:none;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}[data-whatinput='mouse'] .menu li{outline:0}.menu a,.menu .button{line-height:1;text-decoration:none;display:block;padding:0.7rem 1rem}.menu input,.menu select,.menu a,.menu button{margin-bottom:0}.menu input{display:inline-block}.menu,.menu.horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.simple{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.menu.simple li+li{margin-left:1rem}.menu.simple a{padding:0}@media screen and (min-width: 25em){.menu.smedium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.smedium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.smedium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.smedium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 40em){.menu.medium-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.medium-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.medium-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.medium-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}@media print, screen and (min-width: 64em){.menu.large-horizontal{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.menu.large-vertical{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.menu.large-expanded li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.menu.large-simple li{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}}.menu.nested{margin-right:0;margin-left:1rem}.menu.icons a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-top a,.menu.icon-right a,.menu.icon-bottom a,.menu.icon-left a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.menu.icon-left li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-left li a img,.menu.icon-left li a i,.menu.icon-left li a svg{margin-right:.25rem}.menu.icon-right li a{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.menu.icon-right li a img,.menu.icon-right li a i,.menu.icon-right li a svg{margin-left:.25rem}.menu.icon-top li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-top li a img,.menu.icon-top li a i,.menu.icon-top li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu.icon-bottom li a{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.menu.icon-bottom li a img,.menu.icon-bottom li a i,.menu.icon-bottom li a svg{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;margin-bottom:.25rem;text-align:center}.menu .is-active>a{background:#1779ba;color:#fefefe}.menu .active>a{background:#1779ba;color:#fefefe}.menu.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.menu.align-right li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu.align-right.vertical li{display:block;text-align:right}.menu.align-right.vertical li .submenu li{text-align:right}.menu.align-right .nested{margin-right:1rem;margin-left:0}.menu.align-center li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu.align-center li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.menu .menu-text{padding:0.7rem 1rem;font-weight:bold;line-height:1;color:inherit}.menu-centered>.menu{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.menu-centered>.menu li .submenu li{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.no-js [data-responsive-menu] ul{display:none}.menu-icon{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#fefefe;-webkit-box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;box-shadow:0 7px 0 #fefefe,0 14px 0 #fefefe;content:''}.menu-icon:hover::after{background:#cacaca;-webkit-box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca;box-shadow:0 7px 0 #cacaca,0 14px 0 #cacaca}.menu-icon.dark{position:relative;display:inline-block;vertical-align:middle;width:20px;height:16px;cursor:pointer}.menu-icon.dark::after{position:absolute;top:0;left:0;display:block;width:100%;height:2px;background:#0a0a0a;-webkit-box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;box-shadow:0 7px 0 #0a0a0a,0 14px 0 #0a0a0a;content:''}.menu-icon.dark:hover::after{background:#8a8a8a;-webkit-box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a;box-shadow:0 7px 0 #8a8a8a,0 14px 0 #8a8a8a}.accordion-menu li{width:100%}.accordion-menu a{padding:0.7rem 1rem}.accordion-menu .is-accordion-submenu a{padding:0.7rem 1rem}.accordion-menu .nested.is-accordion-submenu{margin-right:0;margin-left:1rem}.accordion-menu.align-right .nested.is-accordion-submenu{margin-right:1rem;margin-left:0}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{position:relative}.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;position:absolute;top:50%;margin-top:-3px;right:1rem}.accordion-menu.align-left .is-accordion-submenu-parent>a::after{right:1rem;left:auto}.accordion-menu.align-right .is-accordion-submenu-parent>a::after{right:auto;left:1rem}.accordion-menu .is-accordion-submenu-parent[aria-expanded='true']>a::after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.is-accordion-submenu-parent{position:relative}.has-submenu-toggle>a{margin-right:40px}.submenu-toggle{position:absolute;top:0;right:0;width:40px;height:40px;cursor:pointer}.submenu-toggle::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;top:0;bottom:0;margin:auto}.submenu-toggle[aria-expanded='true']::after{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1);-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.submenu-toggle-text{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.is-drilldown{position:relative;overflow:hidden}.is-drilldown li{display:block}.is-drilldown.animate-height{-webkit-transition:height 0.5s;transition:height 0.5s}.drilldown a{padding:0.7rem 1rem;background:#fefefe}.drilldown .is-drilldown-submenu{position:absolute;top:0;left:100%;z-index:-1;width:100%;background:#fefefe;-webkit-transition:-webkit-transform 0.15s linear;transition:-webkit-transform 0.15s linear;transition:transform 0.15s linear;transition:transform 0.15s linear, -webkit-transform 0.15s linear}.drilldown .is-drilldown-submenu.is-active{z-index:1;display:block;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.drilldown .is-drilldown-submenu.is-closing{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.drilldown .is-drilldown-submenu a{padding:0.7rem 1rem}.drilldown .nested.is-drilldown-submenu{margin-right:0;margin-left:0}.drilldown .drilldown-submenu-cover-previous{min-height:100%}.drilldown .is-drilldown-submenu-parent>a{position:relative}.drilldown .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;position:absolute;top:50%;margin-top:-6px;right:1rem}.drilldown.align-left .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba;right:1rem;left:auto}.drilldown.align-right .is-drilldown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:1rem}.drilldown .js-drilldown-back>a::before{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;display:inline-block;vertical-align:middle;margin-right:0.75rem}.dropdown.menu>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}[data-whatinput='mouse'] .dropdown.menu a{outline:0}.dropdown.menu>li>a{padding:0.7rem 1rem}.dropdown.menu>li.is-active>a{background:rgba(0,0,0,0);color:#1779ba}.no-js .dropdown.menu ul{display:none}.dropdown.menu .nested.is-dropdown-submenu{margin-right:0;margin-left:0}.dropdown.menu.vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.vertical>li>a::after{right:14px}.dropdown.menu.vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}@media screen and (min-width: 25em){.dropdown.menu.smedium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.smedium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.smedium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.smedium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.smedium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.smedium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.smedium-vertical>li>a::after{right:14px}.dropdown.menu.smedium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.smedium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 40em){.dropdown.menu.medium-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.medium-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.medium-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.medium-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.medium-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.medium-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.medium-vertical>li>a::after{right:14px}.dropdown.menu.medium-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.medium-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}@media print, screen and (min-width: 64em){.dropdown.menu.large-horizontal>li.opens-left>.is-dropdown-submenu{top:100%;right:0;left:auto}.dropdown.menu.large-horizontal>li.opens-right>.is-dropdown-submenu{top:100%;right:auto;left:0}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a{position:relative;padding-right:1.5rem}.dropdown.menu.large-horizontal>li.is-dropdown-submenu-parent>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-bottom-width:0;border-top-style:solid;border-color:#1779ba transparent transparent;right:5px;left:auto;margin-top:-3px}.dropdown.menu.large-vertical>li .is-dropdown-submenu{top:0}.dropdown.menu.large-vertical>li.opens-left>.is-dropdown-submenu{top:0;right:100%;left:auto}.dropdown.menu.large-vertical>li.opens-right>.is-dropdown-submenu{right:auto;left:100%}.dropdown.menu.large-vertical>li>a::after{right:14px}.dropdown.menu.large-vertical>li.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.dropdown.menu.large-vertical>li.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}}.dropdown.menu.align-right .is-dropdown-submenu.first-sub{top:100%;right:0;left:auto}.is-dropdown-menu.vertical{width:100px}.is-dropdown-menu.vertical.align-right{float:right}.is-dropdown-submenu-parent{position:relative}.is-dropdown-submenu-parent a::after{position:absolute;top:50%;right:5px;left:auto;margin-top:-6px}.is-dropdown-submenu-parent.opens-inner>.is-dropdown-submenu{top:100%;left:auto}.is-dropdown-submenu-parent.opens-left>.is-dropdown-submenu{right:100%;left:auto}.is-dropdown-submenu-parent.opens-right>.is-dropdown-submenu{right:auto;left:100%}.is-dropdown-submenu{position:absolute;top:0;left:100%;z-index:1;display:none;min-width:200px;border:1px solid #cacaca;background:#fefefe}.dropdown .is-dropdown-submenu a{padding:0.7rem 1rem}.is-dropdown-submenu .is-dropdown-submenu-parent>a::after{right:14px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-left>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-left-width:0;border-right-style:solid;border-color:transparent #1779ba transparent transparent;right:auto;left:5px}.is-dropdown-submenu .is-dropdown-submenu-parent.opens-right>a::after{display:block;width:0;height:0;border:inset 6px;content:'';border-right-width:0;border-left-style:solid;border-color:transparent transparent transparent #1779ba}.is-dropdown-submenu .is-dropdown-submenu{margin-top:-1px}.is-dropdown-submenu>li{width:100%}.is-dropdown-submenu.js-dropdown-active{display:block}.is-off-canvas-open{overflow:hidden}.js-off-canvas-overlay{position:absolute;top:0;left:0;z-index:11;width:100%;height:100%;-webkit-transition:opacity .5s ease,visibility .5s ease;transition:opacity .5s ease,visibility .5s ease;background:rgba(254,254,254,0.25);opacity:0;visibility:hidden;overflow:hidden}.js-off-canvas-overlay.is-visible{opacity:1;visibility:visible}.js-off-canvas-overlay.is-closable{cursor:pointer}.js-off-canvas-overlay.is-overlay-absolute{position:absolute}.js-off-canvas-overlay.is-overlay-fixed{position:fixed}.off-canvas-wrapper{position:relative;overflow:hidden}.off-canvas{position:fixed;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas{outline:0}.off-canvas.is-transition-push{z-index:12}.off-canvas.is-closed{visibility:hidden}.off-canvas.is-transition-overlap{z-index:13}.off-canvas.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-absolute{position:absolute;z-index:12;-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;background:#e6e6e6}[data-whatinput='mouse'] .off-canvas-absolute{outline:0}.off-canvas-absolute.is-transition-push{z-index:12}.off-canvas-absolute.is-closed{visibility:hidden}.off-canvas-absolute.is-transition-overlap{z-index:13}.off-canvas-absolute.is-transition-overlap.is-open{-webkit-box-shadow:0 0 10px rgba(10,10,10,0.7);box-shadow:0 0 10px rgba(10,10,10,0.7)}.off-canvas-absolute.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.position-left{top:0;left:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-left.has-transition-push{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.position-left.is-transition-push{-webkit-box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset -13px 0 20px -13px rgba(10,10,10,0.25)}.position-right{top:0;right:0;height:100%;overflow-y:auto;width:250px;-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right{-webkit-transform:translateX(250px);-ms-transform:translateX(250px);transform:translateX(250px)}.off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-right.has-transition-push{-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px)}.position-right.is-transition-push{-webkit-box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25);box-shadow:inset 13px 0 20px -13px rgba(10,10,10,0.25)}.position-top{top:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-top.has-transition-push{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.position-top.is-transition-push{-webkit-box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 -13px 20px -13px rgba(10,10,10,0.25)}.position-bottom{bottom:0;left:0;width:100%;overflow-x:auto;height:250px;-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom{-webkit-transform:translateY(250px);-ms-transform:translateY(250px);transform:translateY(250px)}.off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content.is-open-bottom.has-transition-push{-webkit-transform:translateY(-250px);-ms-transform:translateY(-250px);transform:translateY(-250px)}.position-bottom.is-transition-push{-webkit-box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25);box-shadow:inset 0 13px 20px -13px rgba(10,10,10,0.25)}.off-canvas-content{-webkit-transform:none;-ms-transform:none;transform:none;-webkit-backface-visibility:hidden;backface-visibility:hidden}.off-canvas-content.has-transition-overlap,.off-canvas-content.has-transition-push{-webkit-transition:-webkit-transform .5s ease;transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease, -webkit-transform .5s ease}.off-canvas-content.has-transition-push{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.off-canvas-content .off-canvas.is-open{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}@media screen and (min-width: 25em){.position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-left.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-smedium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-right.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-smedium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-top.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-smedium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-smedium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-smedium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-smedium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 40em){.position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-medium .close-button{display:none}.off-canvas-content .position-left.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-medium ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-medium .close-button{display:none}.off-canvas-content .position-right.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-medium ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-medium .close-button{display:none}.off-canvas-content .position-top.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-medium ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-medium .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-medium{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-medium ~ .off-canvas-content{margin-bottom:250px}}@media print, screen and (min-width: 64em){.position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-left.reveal-for-large .close-button{display:none}.off-canvas-content .position-left.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-left{margin-left:250px}.position-left.reveal-for-large ~ .off-canvas-content{margin-left:250px}.position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-right.reveal-for-large .close-button{display:none}.off-canvas-content .position-right.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-right{margin-right:250px}.position-right.reveal-for-large ~ .off-canvas-content{margin-right:250px}.position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-top.reveal-for-large .close-button{display:none}.off-canvas-content .position-top.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-top{margin-top:250px}.position-top.reveal-for-large ~ .off-canvas-content{margin-top:250px}.position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none;z-index:12;-webkit-transition:none;transition:none;visibility:visible}.position-bottom.reveal-for-large .close-button{display:none}.off-canvas-content .position-bottom.reveal-for-large{-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas-content.has-reveal-bottom{margin-bottom:250px}.position-bottom.reveal-for-large ~ .off-canvas-content{margin-bottom:250px}}@media screen and (min-width: 25em){.off-canvas.in-canvas-for-smedium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-smedium.position-left,.off-canvas.in-canvas-for-smedium.position-right,.off-canvas.in-canvas-for-smedium.position-top,.off-canvas.in-canvas-for-smedium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-smedium .close-button{display:none}}@media print, screen and (min-width: 40em){.off-canvas.in-canvas-for-medium{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-medium.position-left,.off-canvas.in-canvas-for-medium.position-right,.off-canvas.in-canvas-for-medium.position-top,.off-canvas.in-canvas-for-medium.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-medium .close-button{display:none}}@media print, screen and (min-width: 64em){.off-canvas.in-canvas-for-large{visibility:visible;height:auto;position:static;background:none;width:auto;overflow:visible;-webkit-transition:none;transition:none}.off-canvas.in-canvas-for-large.position-left,.off-canvas.in-canvas-for-large.position-right,.off-canvas.in-canvas-for-large.position-top,.off-canvas.in-canvas-for-large.position-bottom{-webkit-box-shadow:none;box-shadow:none;-webkit-transform:none;-ms-transform:none;transform:none}.off-canvas.in-canvas-for-large .close-button{display:none}}html.is-reveal-open{position:fixed;width:100%;overflow-y:hidden}html.is-reveal-open.zf-has-scroll{overflow-y:scroll}html.is-reveal-open body{overflow-y:hidden}.reveal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1005;display:none;background-color:rgba(10,10,10,0.45);overflow-y:auto}.reveal{z-index:1006;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;padding:1rem;border:1px solid #cacaca;border-radius:0;background-color:#fefefe;position:relative;top:100px;margin-right:auto;margin-left:auto;overflow-y:auto}[data-whatinput='mouse'] .reveal{outline:0}@media print, screen and (min-width: 40em){.reveal{min-height:0}}.reveal .column{min-width:0}.reveal>:last-child{margin-bottom:0}@media print, screen and (min-width: 40em){.reveal{width:600px;max-width:75rem}}.reveal.collapse{padding:0}@media print, screen and (min-width: 40em){.reveal.tiny{width:30%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.small{width:50%;max-width:75rem}}@media print, screen and (min-width: 40em){.reveal.large{width:90%;max-width:75rem}}.reveal.full{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}@media print, screen and (max-width: 24.99875em){.reveal{top:0;right:0;bottom:0;left:0;width:100%;max-width:none;height:100%;min-height:100%;margin-left:0;border:0;border-radius:0}}.reveal.without-overlay{position:fixed}.sticky-container{position:relative}.sticky{position:relative;z-index:0;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.sticky.is-stuck{position:fixed;z-index:5;width:100%}.sticky.is-stuck.is-at-top{top:0}.sticky.is-stuck.is-at-bottom{bottom:0}.sticky.is-anchored{position:relative;right:auto;left:auto}.sticky.is-anchored.is-at-bottom{bottom:0}.title-bar{padding:.5rem;background:#0a0a0a;color:#fefefe;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.title-bar .menu-icon{margin-left:.25rem;margin-right:.25rem}.title-bar-left,.title-bar-right{-webkit-box-flex:1;-webkit-flex:1 1 0px;-ms-flex:1 1 0px;flex:1 1 0px}.title-bar-right{text-align:right}.title-bar-title{display:inline-block;vertical-align:middle;font-weight:bold}.top-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.5rem;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar,.top-bar ul{background-color:#e6e6e6}.top-bar input{max-width:200px;margin-right:1rem}.top-bar .input-group-field{width:100%;margin-right:0}.top-bar input.button{width:auto}.top-bar .top-bar-left,.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}@media print, screen and (min-width: 40em){.top-bar{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.top-bar .top-bar-left{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;margin-right:auto}.top-bar .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;margin-left:auto}}@media screen and (max-width: 39.99875em){.top-bar.stacked-for-smedium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-smedium .top-bar-left,.top-bar.stacked-for-smedium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 63.99875em){.top-bar.stacked-for-medium{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-medium .top-bar-left,.top-bar.stacked-for-medium .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}@media print, screen and (max-width: 74.99875em){.top-bar.stacked-for-large{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.top-bar.stacked-for-large .top-bar-left,.top-bar.stacked-for-large .top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}}.top-bar-title{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;margin:0.5rem 1rem 0.5rem 0}.top-bar-left,.top-bar-right{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.float-left{float:left !important}.float-right{float:right !important}.float-center{display:block;margin-right:auto;margin-left:auto}.clearfix::before,.clearfix::after{display:table;content:' ';-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.clearfix::after{clear:both}.align-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.align-spaced{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.align-left.vertical.menu>li>a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.align-right.vertical.menu>li>a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.align-center.vertical.menu>li>a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.align-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.align-self-top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.align-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.align-self-bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.align-middle{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.align-self-middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.align-self-stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.align-center-middle{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.small-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.small-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.small-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.small-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.small-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.small-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}@media screen and (min-width: 25em){.smedium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.smedium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.smedium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.smedium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.smedium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.smedium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 40em){.medium-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.medium-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.medium-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.medium-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.medium-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.medium-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}@media print, screen and (min-width: 64em){.large-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.large-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.large-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.large-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.large-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.large-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}}.flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}@media screen and (min-width: 25em){.smedium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.smedium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.smedium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.smedium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.smedium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.smedium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.smedium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.smedium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 40em){.medium-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.medium-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.medium-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.medium-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.medium-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.medium-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.medium-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.medium-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}@media print, screen and (min-width: 64em){.large-flex-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.large-flex-child-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}.large-flex-child-grow{-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto}.large-flex-child-shrink{-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.large-flex-dir-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.large-flex-dir-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.large-flex-dir-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.large-flex-dir-column-reverse{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.hide{display:none !important}.invisible{visibility:hidden}@media print, screen and (max-width: 24.99875em){.hide-for-small-only{display:none !important}}@media screen and (max-width: 0em), screen and (min-width: 25em){.show-for-small-only{display:none !important}}@media screen and (min-width: 25em){.hide-for-smedium{display:none !important}}@media screen and (max-width: 24.99875em){.show-for-smedium{display:none !important}}@media screen and (min-width: 25em) and (max-width: 39.99875em){.hide-for-smedium-only{display:none !important}}@media screen and (max-width: 24.99875em), screen and (min-width: 40em){.show-for-smedium-only{display:none !important}}@media print, screen and (min-width: 40em){.hide-for-medium{display:none !important}}@media screen and (max-width: 39.99875em){.show-for-medium{display:none !important}}@media print, screen and (min-width: 40em) and (max-width: 63.99875em){.hide-for-medium-only{display:none !important}}@media screen and (max-width: 39.99875em), screen and (min-width: 64em){.show-for-medium-only{display:none !important}}@media print, screen and (min-width: 64em){.hide-for-large{display:none !important}}@media screen and (max-width: 63.99875em){.show-for-large{display:none !important}}@media print, screen and (min-width: 64em) and (max-width: 74.99875em){.hide-for-large-only{display:none !important}}@media screen and (max-width: 63.99875em), screen and (min-width: 75em){.show-for-large-only{display:none !important}}.show-for-sr,.show-on-focus{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.show-on-focus:active,.show-on-focus:focus{position:static !important;width:auto !important;height:auto !important;overflow:visible !important;clip:auto !important;white-space:normal !important}.show-for-landscape,.hide-for-portrait{display:block !important}@media screen and (orientation: landscape){.show-for-landscape,.hide-for-portrait{display:block !important}}@media screen and (orientation: portrait){.show-for-landscape,.hide-for-portrait{display:none !important}}.hide-for-landscape,.show-for-portrait{display:none !important}@media screen and (orientation: landscape){.hide-for-landscape,.show-for-portrait{display:none !important}}@media screen and (orientation: portrait){.hide-for-landscape,.show-for-portrait{display:block !important}}#toast-container{z-index:10001;text-align:center;position:absolute;height:100vh !important;width:100%;overflow:visible !important;padding:8.5vh 0 0 0;pointer-events:none}#toast-container div.toast{position:relative;width:100%;pointer-events:none;-webkit-transition:opacity 0.25s;transition:opacity 0.25s}#toast-container div.toast.toast-template{visibility:hidden}#toast-container div.toast span.message{pointer-events:auto;font-size:0.8rem;border-radius:25px;letter-spacing:0;z-index:10001;max-width:100%;display:inline-block;-webkit-box-shadow:2px 2px 10px rgba(0,0,0,0.28);box-shadow:2px 2px 10px rgba(0,0,0,0.28);border:1px solid #626262;background-color:#6b6b6b;padding:.3em .6em;text-align:center;color:white}#toast-container div.toast span.message:hover{opacity:.4;cursor:pointer}#toast-container div.toast span.message:before,#toast-container div.toast span.message:after{display:block;content:""}.background{position:fixed;z-index:1000000;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(55,55,55,0.6)}.background .modal{position:relative;top:50%;margin:auto;width:80%;border-radius:2px;background-color:#fefefe;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);padding:0.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-height:80%;max-width:1024px}@media print, screen and (max-width: 63.99875em){.background .modal.small-margin{width:90%}}@media print, screen and (max-width: 24.99875em){.background .modal.small-margin{width:95%}}.background .modal.max-small{max-width:0}.background .modal.max-smedium{max-width:400px}.background .modal.max-medium{max-width:640px}.background .modal.max-large{max-width:1024px}.background .modal.max-xlarge{max-width:1200px}.background .modal.max-xxlarge{max-width:1440px}.background .modal .title{font-weight:bold;padding-bottom:0.5rem}.background .modal .content-container{overflow-y:auto;max-height:100%}.background .modal .content-container .loader{position:static;-webkit-transform:none;-ms-transform:none;transform:none}.background .modal .close{text-align:right;float:right;font-size:28px;font-weight:bold;line-height:1}.background .modal .close:hover,.background .modal .close:focus{text-decoration:none;cursor:pointer}.background .modal .modal-button-container{padding-top:0.5rem}.background .modal .modal-button-container .button{margin-left:0.2rem;margin-bottom:0 !important;padding:0.6em 0.8em}@media print, screen and (max-width: 24.99875em){.background .modal .modal-button-container .button{margin-left:0.1rem;padding:0.3em 0.5em}}.background .modal .choose-dialog-value-row{line-height:1;padding-top:0.5em;padding-bottom:0.5em;width:100%;cursor:pointer;background:rgba(150,150,150,0.15);display:inline-block;margin-top:0.3rem;margin-bottom:0.3rem;padding-left:0.5rem}.background .modal.no-title .title{display:none}label{position:relative}label [type='text'],label [type='password'],label [type='date'],label [type='datetime'],label [type='datetime-local'],label [type='month'],label [type='week'],label [type='email'],label [type='number'],label [type='search'],label [type='tel'],label [type='time'],label [type='url'],label [type='color'],label textarea,label input[type='text'],label input:not([type]){display:block;width:100%;height:2.4375rem;padding:0.5rem;-webkit-box-shadow:none;box-shadow:none;font-size:1rem;font-weight:normal;line-height:1.5;border:none;border-bottom:solid 1px #626262;outline:0;margin:0 0 15px}label [type='text']:invalid,label [type='password']:invalid,label [type='date']:invalid,label [type='datetime']:invalid,label [type='datetime-local']:invalid,label [type='month']:invalid,label [type='week']:invalid,label [type='email']:invalid,label [type='number']:invalid,label [type='search']:invalid,label [type='tel']:invalid,label [type='time']:invalid,label [type='url']:invalid,label [type='color']:invalid,label textarea:invalid,label input[type='text']:invalid,label input:not([type]):invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:disabled,label [type='password']:disabled,label [type='date']:disabled,label [type='datetime']:disabled,label [type='datetime-local']:disabled,label [type='month']:disabled,label [type='week']:disabled,label [type='email']:disabled,label [type='number']:disabled,label [type='search']:disabled,label [type='tel']:disabled,label [type='time']:disabled,label [type='url']:disabled,label [type='color']:disabled,label textarea:disabled,label input[type='text']:disabled,label input:not([type]):disabled{background-color:#e6e6e6}label [type='text']:focus,label [type='password']:focus,label [type='date']:focus,label [type='datetime']:focus,label [type='datetime-local']:focus,label [type='month']:focus,label [type='week']:focus,label [type='email']:focus,label [type='number']:focus,label [type='search']:focus,label [type='tel']:focus,label [type='time']:focus,label [type='url']:focus,label [type='color']:focus,label textarea:focus,label input[type='text']:focus,label input:not([type]):focus{border:none;border-bottom:solid 1px #626262;-webkit-box-shadow:none;box-shadow:none}label [type='text']:focus:invalid,label [type='password']:focus:invalid,label [type='date']:focus:invalid,label [type='datetime']:focus:invalid,label [type='datetime-local']:focus:invalid,label [type='month']:focus:invalid,label [type='week']:focus:invalid,label [type='email']:focus:invalid,label [type='number']:focus:invalid,label [type='search']:focus:invalid,label [type='tel']:focus:invalid,label [type='time']:focus:invalid,label [type='url']:focus:invalid,label [type='color']:focus:invalid,label textarea:focus:invalid,label input[type='text']:focus:invalid,label input:not([type]):focus:invalid{-webkit-box-shadow:0 0 2px 2px #ff6776;box-shadow:0 0 2px 2px #ff6776}label [type='text']:focus:disabled,label [type='password']:focus:disabled,label [type='date']:focus:disabled,label [type='datetime']:focus:disabled,label [type='datetime-local']:focus:disabled,label [type='month']:focus:disabled,label [type='week']:focus:disabled,label [type='email']:focus:disabled,label [type='number']:focus:disabled,label [type='search']:focus:disabled,label [type='tel']:focus:disabled,label [type='time']:focus:disabled,label [type='url']:focus:disabled,label [type='color']:focus:disabled,label textarea:focus:disabled,label input[type='text']:focus:disabled,label input:not([type]):focus:disabled{background-color:#e6e6e6}label [type='text']:focus ~ span,label [type='text'].notEmpty:not(:focus) ~ span,label [type='text']:not(:empty) ~ span,label [type='password']:focus ~ span,label [type='password'].notEmpty:not(:focus) ~ span,label [type='password']:not(:empty) ~ span,label [type='date']:focus ~ span,label [type='date'].notEmpty:not(:focus) ~ span,label [type='date']:not(:empty) ~ span,label [type='datetime']:focus ~ span,label [type='datetime'].notEmpty:not(:focus) ~ span,label [type='datetime']:not(:empty) ~ span,label [type='datetime-local']:focus ~ span,label [type='datetime-local'].notEmpty:not(:focus) ~ span,label [type='datetime-local']:not(:empty) ~ span,label [type='month']:focus ~ span,label [type='month'].notEmpty:not(:focus) ~ span,label [type='month']:not(:empty) ~ span,label [type='week']:focus ~ span,label [type='week'].notEmpty:not(:focus) ~ span,label [type='week']:not(:empty) ~ span,label [type='email']:focus ~ span,label [type='email'].notEmpty:not(:focus) ~ span,label [type='email']:not(:empty) ~ span,label [type='number']:focus ~ span,label [type='number'].notEmpty:not(:focus) ~ span,label [type='number']:not(:empty) ~ span,label [type='search']:focus ~ span,label [type='search'].notEmpty:not(:focus) ~ span,label [type='search']:not(:empty) ~ span,label [type='tel']:focus ~ span,label [type='tel'].notEmpty:not(:focus) ~ span,label [type='tel']:not(:empty) ~ span,label [type='time']:focus ~ span,label [type='time'].notEmpty:not(:focus) ~ span,label [type='time']:not(:empty) ~ span,label [type='url']:focus ~ span,label [type='url'].notEmpty:not(:focus) ~ span,label [type='url']:not(:empty) ~ span,label [type='color']:focus ~ span,label [type='color'].notEmpty:not(:focus) ~ span,label [type='color']:not(:empty) ~ span,label textarea:focus ~ span,label textarea.notEmpty:not(:focus) ~ span,label textarea:not(:empty) ~ span,label input[type='text']:focus ~ span,label input[type='text'].notEmpty:not(:focus) ~ span,label input[type='text']:not(:empty) ~ span,label input:not([type]):focus ~ span,label input:not([type]).notEmpty:not(:focus) ~ span,label input:not([type]):not(:empty) ~ span{top:-11px;left:0;bottom:0;font-size:11px;opacity:1;color:black}label [type='text'] ~ span,label [type='password'] ~ span,label [type='date'] ~ span,label [type='datetime'] ~ span,label [type='datetime-local'] ~ span,label [type='month'] ~ span,label [type='week'] ~ span,label [type='email'] ~ span,label [type='number'] ~ span,label [type='search'] ~ span,label [type='tel'] ~ span,label [type='time'] ~ span,label [type='url'] ~ span,label [type='color'] ~ span,label textarea ~ span,label input[type='text'] ~ span,label input:not([type]) ~ span{position:absolute;pointer-events:none;left:10px;bottom:10px;top:7px;-webkit-transition:0.2s ease all;transition:0.2s ease all;color:#626262}label textarea{height:10rem;border-top-right-radius:3px;border-top-left-radius:3px}label [type="checkbox"].before-text{margin-bottom:0}input[type=number]{-moz-appearance:textfield}input[type=number] ::-webkit-inner-spin-button,input[type=number] ::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}@media print, screen and (min-width: 40em){.reveal,.reveal.tiny,.reveal.small,.reveal.large{right:auto;left:auto;margin:0 auto}}nav.top-bar{z-index:1;white-space:nowrap;position:relative;background:#000;color:#fff;stroke:#fff;padding:0}nav.top-bar:not(.with-image){margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem)}@media print, screen and (min-width: 40em){nav.top-bar:not(.with-image){margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem)}}nav.top-bar .background-img{display:none}nav.top-bar>span>span>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}nav.top-bar>span .back-button{cursor:pointer;text-align:left}nav.top-bar>span .back-button svg{width:0.5rem;height:100%;vertical-align:bottom}nav.top-bar>span .back-button.hidden{visibility:hidden;display:initial}nav.top-bar>span .top-bar-title{margin-left:0.5rem}nav.top-bar>span #navbar-close-listener-container #navbar-close-listener{position:fixed;top:0;left:0;right:0;bottom:0;background:transparent;z-index:8999}nav.top-bar>span #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar>span #responsive-menu-toggle .menu-icon{vertical-align:-webkit-baseline-middle}nav.top-bar>span #responsive-menu{display:block;-webkit-transition-duration:0.5s;transition-duration:0.5s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}nav.top-bar>span #responsive-menu.visible .hidden-menu{right:0}nav.top-bar>span #responsive-menu .hidden-menu{position:fixed;-webkit-transform:none;-ms-transform:none;transform:none;display:inline-block;z-index:9000;border:1px solid #1e1c1c;padding:4.5rem 1.65rem 0rem 2.75rem;text-align:left;background:#000;margin-top:-1rem;right:-1000%}nav.top-bar>span #responsive-menu .hidden-menu li{font-size:1.15rem}nav.top-bar>span #responsive-menu .hidden-menu li.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu{top:auto}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>li,nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent ul.is-dropdown-submenu>.close-listener{z-index:9001}nav.top-bar>span #responsive-menu .hidden-menu li.is-dropdown-submenu-parent>a:after{display:block;width:0;height:0;border:6px inset;content:"";border-bottom-width:0;border-top-style:solid;border-color:#ffffff transparent transparent;right:5px;left:auto;margin-top:-3px}nav.top-bar>span #responsive-menu .hidden-menu li a{white-space:nowrap}nav.top-bar>span #responsive-menu .hidden-menu li a img{display:none}nav.top-bar>span #responsive-menu .hidden-menu li a img+span{display:inherit}@media print, screen and (min-width: 40em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:none}}@media print, screen and (min-width: 25em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:none}}@media print, screen and (min-width: 64em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:none}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.smedium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.smedium.hidden{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.medium{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.medium.hidden{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span #responsive-menu .hidden-menu li.large{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.large.hidden{display:none}}nav.top-bar>span #responsive-menu .hidden-menu li.never{display:block}nav.top-bar>span #responsive-menu .hidden-menu li.never.hidden{display:none}nav.top-bar>span #responsive-menu .hidden-menu li.always{display:none}nav.top-bar>span .navbar-menu{background:initial;width:auto;z-index:9000}nav.top-bar>span .navbar-menu a img+span{display:none}nav.top-bar>span .navbar-menu li{position:relative;z-index:9000}nav.top-bar>span .navbar-menu li.is-dropdown-submenu-parent{z-index:9001}nav.top-bar>span .navbar-menu li.hidden{display:none}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu li.smedium{display:none}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu li li{display:table-cell}nav.top-bar>span .navbar-menu li.medium{display:none}}@media print, screen and (max-width: 63.99875em){nav.top-bar>span .navbar-menu li.large{display:none}}nav.top-bar>span .navbar-menu li.never{display:none}nav.top-bar>span .navbar-menu .menu li,nav.top-bar>span .navbar-menu.menu li{z-index:100}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{width:100%}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li a,nav.top-bar>span .navbar-menu.menu li a{padding-left:0.236rem}}@media print, screen and (max-width: 39.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.68rem}}@media print, screen and (max-width: 24.99875em){nav.top-bar>span .navbar-menu .menu li:not(.is-dropdown-submenu-parent) a,nav.top-bar>span .navbar-menu.menu li:not(.is-dropdown-submenu-parent) a{padding-right:0.236rem}}nav.top-bar>span .navbar-menu .menu li.img a,nav.top-bar>span .navbar-menu.menu li.img a{padding-top:0;padding-bottom:0}nav.top-bar>span .navbar-menu .menu li.img a img,nav.top-bar>span .navbar-menu.menu li.img a img{vertical-align:inherit;max-height:1.8rem}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu{min-width:0}nav.top-bar>span .navbar-menu .menu>li>ul.is-dropdown-submenu li,nav.top-bar>span .navbar-menu.menu>li>ul.is-dropdown-submenu li{display:inherit}nav.top-bar>span .navbar-menu .menu>li.opens-right>a,nav.top-bar>span .navbar-menu.menu>li.opens-right>a{margin-right:0.5rem}nav.top-bar>span .navbar-menu .menu>li.opens-right>a:after,nav.top-bar>span .navbar-menu.menu>li.opens-right>a:after{right:0.1rem}nav.top-bar>span .submenu{background:#000}nav.top-bar.with-image{background:rgba(0,0,0,0);-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image *{-webkit-transition:all 0.15s, background 0.0s;transition:all 0.15s, background 0.0s;-webkit-transition-delay:0s;transition-delay:0s}nav.top-bar.with-image .background-img{display:initial;margin-left:-.625rem;margin-right:-.625rem;width:calc(100% + 1.25rem);max-width:calc(100% + 1.25rem);min-width:1.5625rem}@media print, screen and (min-width: 40em){nav.top-bar.with-image .background-img{margin-left:-.9375rem;margin-right:-.9375rem;width:calc(100% + 1.875rem);max-width:calc(100% + 1.875rem);min-width:2.34375rem}}nav.top-bar.with-image>span{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar.with-image>span>*{position:relative}nav.top-bar.with-image>span #responsive-menu-toggle{z-index:9100}nav.top-bar.with-image>span .navbar-menu{background:initial}nav.top-bar.with-image>span .submenu{background:#000}nav.top-bar.with-image.color-black{color:#000;stroke:#000}nav.top-bar.with-image.color-black #responsive-menu .hidden-menu{background:#fff;border-color:#7F7F7F}nav.top-bar.with-image.color-black #responsive-menu-toggle .menu-icon::after{background:#000;-webkit-box-shadow:0 7px 0 #000,0 14px 0 #000;box-shadow:0 7px 0 #000,0 14px 0 #000}nav.top-bar.with-image.color-black .submenu{background:#fff}nav.top-bar.with-image.color-white{color:#fff;stroke:#fff}nav.top-bar.with-image.color-white #responsive-menu .hidden-menu{background:#000;border-color:#1e1c1c}nav.top-bar.with-image.color-white #responsive-menu-toggle .menu-icon::after{background:#fff;-webkit-box-shadow:0 7px 0 #fff,0 14px 0 #fff;box-shadow:0 7px 0 #fff,0 14px 0 #fff}nav.top-bar.with-image.color-white .submenu{background:#000}nav.top-bar.with-image.solid{background:#000}nav.top-bar.with-image.solid>span #responsive-menu .hidden-menu{border-color:#7F7F7F}nav.top-bar.with-image.solid>span .navbar-menu{background:inherit}nav.top-bar.with-image.solid.color-black{background:#fff}nav.top-bar.with-image.solid.color-white{background:#000}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a{margin-right:0.5rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) a::after,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>a::after{right:0.1rem}.dropdown.menu .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) ul a,#navbar-menu-hidden .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle)>ul a{width:100%}.menu.is-accordion-submenu{margin-left:0.7rem}.menu{-webkit-transform-origin:top;-ms-transform-origin:top;transform-origin:top;-webkit-transition:0.25s;transition:0.25s}#responsive-menu-toggle button{vertical-align:initial}.dropdown.menu>li.is-accordion-submenu-parent>ul.is-dropdown-submenu{left:auto;right:0}#navbar-fragment{width:100%}.logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.logo .logo-img{margin-left:1rem;margin-right:0.5rem;max-width:2.35rem}.tab-fragment .tab-names .tab-button{display:inline-block;border:1px solid #E6E6E6;border-top-left-radius:3px;border-top-right-radius:3px;background-color:#E6E6E6;padding:0.3rem}.tab-fragment .tab-names .tab-button.active{border-bottom:0;background-color:initial}.tab-fragment .tab-content{border:1px solid #E6E6E6;border-top:0;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.tab-fragment .tab-content .tab-site{display:none}.tab-fragment .tab-content .tab-site.active{display:initial}.tab-fragment .tab-button-template,.tab-fragment .tab-site-template{display:none}.tab-fragment .border-bottom{border-bottom:1px solid #E6E6E6}.alphabetic-list{height:100%;position:relative}.alphabetic-list .alphabetic-list-container{height:100%;overflow:auto}.alphabetic-list .alphabetic-list-sidealphabet{height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{cursor:pointer;height:3.8%;display:block;text-align:center}@media print, screen and (max-width: 24.99875em){.alphabetic-list .alphabetic-list-sidealphabet .alphabet-scroll-to{font-size:0.8em}}.window-container{position:fixed;background:white;padding:0;border:1px solid #b1b1b1;border-radius:3px;cursor:-webkit-grab;cursor:grab;-webkit-transition:none;transition:none;min-width:10rem;min-height:3rem;-webkit-box-sizing:content-box;box-sizing:content-box;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.window-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.window-container.active-window{z-index:1100}.window-container .window-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.window-container .window-resize.edge{width:4px;height:4px}.window-container .window-resize.edge.nw{cursor:nw-resize}.window-container .window-resize.edge.ne{cursor:ne-resize}.window-container .window-resize.edge.sw{cursor:sw-resize}.window-container .window-resize.edge.se{cursor:se-resize}.window-container .window-resize.bottom,.window-container .window-resize.top{cursor:ns-resize;height:4px}.window-container .window-resize.left,.window-container .window-resize.right{cursor:ew-resize;width:4px}.window-container #title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0;padding-bottom:0.5rem;font-size:1rem;letter-spacing:0.2rem;font-weight:bold}.window-container #title-buttons .title-button{max-height:1rem;cursor:pointer;outline:none;display:inline-block}.window-container.moving{cursor:-webkit-grabbing;cursor:grabbing}.window-container.minimized{padding:0.2rem;width:0 !important;height:0 !important;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.window-container.minimized .window{display:none}.window-container.minimized .window-resize{display:none}.window-container.minimized #title{border:0;margin:0;height:100%}.window-container.minimized #title-buttons .title-button.hide-minimized{display:none}.window-container.maximized{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.maximized .window-resize{display:none}.window-container.maximized #title-buttons .title-button.hide-maximized{display:none}.window-container.popup{padding:.2rem;border:0;margin:0;width:calc(100vw - .4rem) !important;height:calc(100vh - .4rem) !important;left:0 !important;top:0 !important}.window-container.popup .window-resize{display:none}.window-container.popup #title-buttons .title-button.hide-popup{display:none}.window-container .window{overflow:auto;cursor:initial;position:relative}.image-selection{border:1px solid black;border-radius:5px;height:100%}.image-selection.highlight{background:rgba(173,216,230,0.4)}.image-selection>.flex-container{height:100%}.image-selection .image-selection-category-container{overflow-y:auto}.image-selection .image-selection-category-container .image-selection-category .image-selection-category-name{display:block}.image-selection .image-selection-preview{width:20%;min-width:4rem}.image-selection .image-selection-preview .image-selection-image-container{display:inline-block;height:100%;width:100%}.image-selection .image-selection-image-container{display:inline-block;width:4rem;cursor:pointer;padding:0.15rem}.image-selection .image-selection-image-container .image-selection-image{width:100%;height:calc(100% - 1.5rem);display:block;-o-object-fit:contain;object-fit:contain}.image-selection .image-selection-image-container .image-selection-image-name{width:100%;height:1.5rem;display:block;text-align:center;text-overflow:ellipsis;overflow:hidden}.max-height-100{max-height:100%}.overflow-hidden{overflow:hidden}body:not(.access-admin) .access-admin{display:none}body:not(.access-loggedIn) .access-loggedIn{display:none}body:not(.access-loggedOut) .access-loggedOut{display:none}body:not(.access-online) .access-online{display:none}body:not(.access-offline) .access-offline{display:none}body:not(.access-default) .access-default{display:none}.share-icon{width:1.5rem;max-width:1.5rem;margin:0.1rem}.share-icon svg{width:1.5rem;max-width:1.5rem}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}html{min-height:100%;width:100%;height:100%;letter-spacing:1px}.max-height{height:100%;min-height:100%}body{margin:0;padding:0;height:100%;width:100%;font-family:"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;font-weight:400;line-height:1.5;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;background:#fefefe;color:#0a0a0a}footer{border-top:#d8d8d8 solid 1px;text-align:center}.top-bar .top-bar-title strong{vertical-align:middle;display:inline-block}nav.top-bar{color:#FFF;font-size:20px;-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 2px 9px 1px rgba(0,0,0,0.12),0 4px 2px -2px rgba(0,0,0,0.2);padding:0.6rem;display:block}button.button,a.button{border-radius:2px}.fill-me{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.fill-me.vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.fill-me .grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flex-center{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.flex-center>*{max-height:100%}.menu a,.dropdown.menu a{padding:.4rem .5rem}svg path{fill:currentColor}div.mainContainer{position:relative;max-height:100%;max-width:100%;overflow:auto;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin:0.5rem}div.mainContainer>.row,div.mainContainer #main-content,div.mainContainer #site{position:absolute;width:100%;height:100%;top:0;bottom:0;left:0;right:0}.inline-block{display:inline-block}.right{float:right}#logo-img{max-height:2.2rem}a{text-decoration:none;cursor:pointer;color:inherit}a.hidden-link{text-decoration:none;color:inherit}label{cursor:pointer}.align-right{text-align:right}.view-panel{display:none}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small #spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader #spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#b71c1a;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@-webkit-keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}#print-content{display:none}.action-button{max-height:1.7rem;margin-left:0.4rem;margin-right:0.4rem}.action-button:hover{background:#e8e8e8}.vcenter-container{width:100%;height:100%;display:table}.vcenter-container .vcenter{vertical-align:middle;display:table-cell;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.max-width{width:100%}input,button{letter-spacing:1px !important}.no-padding{padding:0;border:0}.center{text-align:center}@media print{nav,.mainContainer,footer,#styles{display:none !important}#print-content{display:block !important}}.overflow-y-auto{overflow-y:auto !important}.row.no-after:after{content:initial}.margin-bottom{margin-bottom:1rem}@media print, screen and (min-width: 25em){.margin-bottom{margin-bottom:2rem}}@media print, screen and (min-width: 40em){.margin-bottom{margin-bottom:3rem}}@media print, screen and (min-width: 64em){.margin-bottom{margin-bottom:4rem}}@media screen and (min-width: 75em){.margin-bottom{margin-bottom:5rem}}.font-small{font-size:0.7em}.border-bottom{border-bottom:1px solid #cacaca}.border-right{border-right:1px solid #cacaca}.border-left{border-left:1px solid #cacaca}img.logo{vertical-align:inherit;display:inline-block;height:auto;max-width:1.1rem;margin-right:2px}.align-center{text-align:center}hr.separator{margin:1rem 0}.button-line{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.button-line .button{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-left:1px;margin-right:1px;padding:0.5rem 0.77rem}@media print, screen and (max-width: 24.99875em){.small-small{font-size:small}}select{border:0;padding:0.3rem 0.3rem}.hidden{display:none}.no-transition{-webkit-transition:none !important;transition:none !important}img.action-image{max-height:1.4rem;cursor:pointer}img.back-button{max-height:0.6rem;margin-right:0.2rem;cursor:pointer;vertical-align:inherit}.no-margin-bottom{margin-bottom:0}.settings-container{border:1px solid black;border-radius:2px;padding:0.3rem}@media print, screen and (min-width: 40em){.settings-container #settings-fragments-container{border-left:1px solid #cacaca}}.settings-container #settings-fragments-container #settings-fragments>*{display:none}.settings-container #settings-fragments-container #settings-fragments>*.active{display:block}.switch{position:relative;display:inline-block;height:initial}@media print, screen and (max-width: 24.99875em){.switch{font-size:0.6em}}@media print, screen and (max-width: 39.99875em){.switch{font-size:0.7em}}.switch input{display:none}.switch input:checked+.slider:before{-webkit-transform:translateX(1.5em);-ms-transform:translateX(1.5em);transform:translateX(1.5em)}.switch .slider{display:inline-block;position:relative;cursor:pointer;width:3em;height:1.5em;border-radius:1.5em;background-color:#ccc;-webkit-transition:.4s;transition:.4s;margin-bottom:0;margin-top:0}.switch .slider:before{position:absolute;content:"";height:1.1em;width:1.1em;left:0.15em;bottom:0.15em;background-color:white;-webkit-transition:.4s;transition:.4s;border-radius:50%}.switch img,.switch svg{width:1.4em;display:inline;vertical-align:initial}.switch img path,.switch svg path{stroke-color:inherit}label{font-size:1em !important}.setting-row:not(.hidden){line-height:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0.5rem 0.4rem;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;cursor:pointer;background:rgba(195,195,195,0.13)}.setting-row:not(.hidden)>*{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.setting-row:not(.hidden) input[type=checkbox]{margin:0}.zf-green{color:#68b604}.column:last-child:not(:first-child),.columns:last-child:not(:first-child){float:left}input[type=checkBox].form-control{height:24px;height:1.5rem;width:100%}[type=submit]{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:39px;height:2.4375rem;padding:8px;padding:.5rem;border:1px solid #cacaca;margin:0 0 16px;margin:0 0 1rem;font-family:inherit;font-size:16px;font-size:1rem;color:#0a0a0a;background-color:#fefefe;-webkit-box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);border-radius:0;-webkit-transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:border-color .25s ease-in-out, -webkit-box-shadow .5s;transition:box-shadow .5s, border-color .25s ease-in-out;transition:box-shadow .5s, border-color .25s ease-in-out, -webkit-box-shadow .5s;-webkit-appearance:none;-moz-appearance:none}form ul li{color:red;font-size:12.8px;font-size:.8rem}.button-dropdown:after{border-color:#000 transparent transparent;border-width:.4em;border-style:solid;content:"";position:absolute;top:.4em;display:block;height:0;width:0;right:1em}.button-dropdown{position:relative;display:block;padding-right:2em}.button-dropdown.open:after{border-color:transparent transparent #000;top:0}a.ui-datepicker-next,a.ui-datepicker-prev{height:100% !important}div.container a.navbar-brand>img{display:inline;margin-right:4px}ul.menu.plain li.active a{background-color:#ededed;color:#000}ul.menu.plain li a{color:#000}ul.menu.plain li a:hover{color:#525252}ul.submenu{border-top:1px solid #bcbcbc;border-bottom:1px solid #bcbcbc;margin-left:10px}#cookie-compliance{line-height:1.2;font-size:0.8rem;width:100%;margin:0 0;padding:0.3rem 0}#cookie-compliance #close-cookie-msg{float:right;margin-bottom:0;margin-right:3px;padding:0.4rem 0.8rem}.menu-container .button{text-align:center;width:100%}.height-5{height:5%}.max-height-5{max-height:5%}.width-5{width:5%}.max-width-5{max-width:5%}.height-10{height:10%}.max-height-10{max-height:10%}.width-10{width:10%}.max-width-10{max-width:10%}.height-15{height:15%}.max-height-15{max-height:15%}.width-15{width:15%}.max-width-15{max-width:15%}.height-20{height:20%}.max-height-20{max-height:20%}.width-20{width:20%}.max-width-20{max-width:20%}.height-25{height:25%}.max-height-25{max-height:25%}.width-25{width:25%}.max-width-25{max-width:25%}.height-30{height:30%}.max-height-30{max-height:30%}.width-30{width:30%}.max-width-30{max-width:30%}.height-35{height:35%}.max-height-35{max-height:35%}.width-35{width:35%}.max-width-35{max-width:35%}.height-40{height:40%}.max-height-40{max-height:40%}.width-40{width:40%}.max-width-40{max-width:40%}.height-45{height:45%}.max-height-45{max-height:45%}.width-45{width:45%}.max-width-45{max-width:45%}.height-50{height:50%}.max-height-50{max-height:50%}.width-50{width:50%}.max-width-50{max-width:50%}.height-55{height:55%}.max-height-55{max-height:55%}.width-55{width:55%}.max-width-55{max-width:55%}.height-60{height:60%}.max-height-60{max-height:60%}.width-60{width:60%}.max-width-60{max-width:60%}.height-65{height:65%}.max-height-65{max-height:65%}.width-65{width:65%}.max-width-65{max-width:65%}.height-70{height:70%}.max-height-70{max-height:70%}.width-70{width:70%}.max-width-70{max-width:70%}.height-75{height:75%}.max-height-75{max-height:75%}.width-75{width:75%}.max-width-75{max-width:75%}.height-80{height:80%}.max-height-80{max-height:80%}.width-80{width:80%}.max-width-80{max-width:80%}.height-85{height:85%}.max-height-85{max-height:85%}.width-85{width:85%}.max-width-85{max-width:85%}.height-90{height:90%}.max-height-90{max-height:90%}.width-90{width:90%}.max-width-90{max-width:90%}.height-95{height:95%}.max-height-95{max-height:95%}.width-95{width:95%}.max-width-95{max-width:95%}.height-100{height:100%}.max-height-100{max-height:100%}.width-100{width:100%}.max-width-100{max-width:100%}.text-right{text-align:right}*{-webkit-transition:.25s ease-out, color .25s ease-out;transition:.25s ease-out, color .25s ease-out}body.red{background:#fff;color:#000}body.red #cookie-compliance{background-color:#870015;color:#fff}body.red #cookie-compliance a.link{color:#ff3d00;border-bottom-color:#ff3d00}body.red #cookie-compliance a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red a.link{text-decoration:none;color:#ff3d00;border-bottom:none}body.red a.link:hover{color:#ff3d00;border-bottom-color:#ff3d00}body.red .loader #spinner{stroke:#b71c1a}body.red nav.top-bar{color:#fff;background:red}body.red .top-bar ul{background:red !important}body.red .top-bar ul a{color:#fff}body.red button.button,body.red a.button{background-color:red}body.red button.button.disabled,body.red button.button.disabled:hover,body.red button.button.disabled:focus,body.red button.button:hover,body.red a.button.disabled,body.red a.button.disabled:hover,body.red a.button.disabled:focus,body.red a.button:hover{background-color:red}body.red .switch input:checked+.slider{background-color:red}body.red .switch input:focus+.slider{-webkit-box-shadow:0 0 1px red;box-shadow:0 0 1px red}body.red label{color:#000}body.red .background .modal{background-color:#fefefe}body.red svg .fill-color,body.red svg.fill-color{fill:currentColor}body.red svg .fill-background,body.red svg.fill-background{fill:#fefefe}body.red label [type='text'],body.red label [type='password'],body.red label [type='date'],body.red label [type='datetime'],body.red label [type='datetime-local'],body.red label [type='month'],body.red label [type='week'],body.red label [type='email'],body.red label [type='number'],body.red label [type='search'],body.red label [type='tel'],body.red label [type='time'],body.red label [type='url'],body.red label [type='color'],body.red label textarea,body.red label input[type=text],body.red label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.red label [type='text']:focus,body.red label [type='password']:focus,body.red label [type='date']:focus,body.red label [type='datetime']:focus,body.red label [type='datetime-local']:focus,body.red label [type='month']:focus,body.red label [type='week']:focus,body.red label [type='email']:focus,body.red label [type='number']:focus,body.red label [type='search']:focus,body.red label [type='tel']:focus,body.red label [type='time']:focus,body.red label [type='url']:focus,body.red label [type='color']:focus,body.red label textarea:focus,body.red label input[type=text]:focus,body.red label input:not([type]):focus{border-bottom:solid #000}body.red label [type='text']:focus ~ span,body.red label [type='text'].notEmpty:not(:focus) ~ span,body.red label [type='password']:focus ~ span,body.red label [type='password'].notEmpty:not(:focus) ~ span,body.red label [type='date']:focus ~ span,body.red label [type='date'].notEmpty:not(:focus) ~ span,body.red label [type='datetime']:focus ~ span,body.red label [type='datetime'].notEmpty:not(:focus) ~ span,body.red label [type='datetime-local']:focus ~ span,body.red label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.red label [type='month']:focus ~ span,body.red label [type='month'].notEmpty:not(:focus) ~ span,body.red label [type='week']:focus ~ span,body.red label [type='week'].notEmpty:not(:focus) ~ span,body.red label [type='email']:focus ~ span,body.red label [type='email'].notEmpty:not(:focus) ~ span,body.red label [type='number']:focus ~ span,body.red label [type='number'].notEmpty:not(:focus) ~ span,body.red label [type='search']:focus ~ span,body.red label [type='search'].notEmpty:not(:focus) ~ span,body.red label [type='tel']:focus ~ span,body.red label [type='tel'].notEmpty:not(:focus) ~ span,body.red label [type='time']:focus ~ span,body.red label [type='time'].notEmpty:not(:focus) ~ span,body.red label [type='url']:focus ~ span,body.red label [type='url'].notEmpty:not(:focus) ~ span,body.red label [type='color']:focus ~ span,body.red label [type='color'].notEmpty:not(:focus) ~ span,body.red label textarea:focus ~ span,body.red label textarea.notEmpty:not(:focus) ~ span,body.red label input[type=text]:focus ~ span,body.red label input[type=text].notEmpty:not(:focus) ~ span,body.red label input:not([type]):focus ~ span,body.red label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.red label [type='text'] ~ span,body.red label [type='password'] ~ span,body.red label [type='date'] ~ span,body.red label [type='datetime'] ~ span,body.red label [type='datetime-local'] ~ span,body.red label [type='month'] ~ span,body.red label [type='week'] ~ span,body.red label [type='email'] ~ span,body.red label [type='number'] ~ span,body.red label [type='search'] ~ span,body.red label [type='tel'] ~ span,body.red label [type='time'] ~ span,body.red label [type='url'] ~ span,body.red label [type='color'] ~ span,body.red label textarea ~ span,body.red label input[type=text] ~ span,body.red label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.red label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.red input.notEmpty:invalid{background-color:rgba(255,0,0,0.65)}body.blue{background:#fff;color:#000}body.blue #cookie-compliance{background-color:#1a3062;color:#fff}body.blue #cookie-compliance a.link{color:#546cfe;border-bottom-color:#546cfe}body.blue #cookie-compliance a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue a.link{text-decoration:none;color:#546cfe;border-bottom:none}body.blue a.link:hover{color:#546cfe;border-bottom-color:#546cfe}body.blue .loader #spinner{stroke:#673AB7}body.blue nav.top-bar{color:#fff;background:#2c58ae}body.blue .top-bar ul{background:#2c58ae !important}body.blue .top-bar ul a{color:#fff}body.blue button.button,body.blue a.button{background-color:#2c58ae}body.blue button.button.disabled,body.blue button.button.disabled:hover,body.blue button.button.disabled:focus,body.blue button.button:hover,body.blue a.button.disabled,body.blue a.button.disabled:hover,body.blue a.button.disabled:focus,body.blue a.button:hover{background-color:#2c58ae}body.blue .switch input:checked+.slider{background-color:#2c58ae}body.blue .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #2c58ae;box-shadow:0 0 1px #2c58ae}body.blue label{color:#000}body.blue .background .modal{background-color:#fefefe}body.blue svg .fill-color,body.blue svg.fill-color{fill:currentColor}body.blue svg .fill-background,body.blue svg.fill-background{fill:#fefefe}body.blue label [type='text'],body.blue label [type='password'],body.blue label [type='date'],body.blue label [type='datetime'],body.blue label [type='datetime-local'],body.blue label [type='month'],body.blue label [type='week'],body.blue label [type='email'],body.blue label [type='number'],body.blue label [type='search'],body.blue label [type='tel'],body.blue label [type='time'],body.blue label [type='url'],body.blue label [type='color'],body.blue label textarea,body.blue label input[type=text],body.blue label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.blue label [type='text']:focus,body.blue label [type='password']:focus,body.blue label [type='date']:focus,body.blue label [type='datetime']:focus,body.blue label [type='datetime-local']:focus,body.blue label [type='month']:focus,body.blue label [type='week']:focus,body.blue label [type='email']:focus,body.blue label [type='number']:focus,body.blue label [type='search']:focus,body.blue label [type='tel']:focus,body.blue label [type='time']:focus,body.blue label [type='url']:focus,body.blue label [type='color']:focus,body.blue label textarea:focus,body.blue label input[type=text]:focus,body.blue label input:not([type]):focus{border-bottom:solid #000}body.blue label [type='text']:focus ~ span,body.blue label [type='text'].notEmpty:not(:focus) ~ span,body.blue label [type='password']:focus ~ span,body.blue label [type='password'].notEmpty:not(:focus) ~ span,body.blue label [type='date']:focus ~ span,body.blue label [type='date'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime']:focus ~ span,body.blue label [type='datetime'].notEmpty:not(:focus) ~ span,body.blue label [type='datetime-local']:focus ~ span,body.blue label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.blue label [type='month']:focus ~ span,body.blue label [type='month'].notEmpty:not(:focus) ~ span,body.blue label [type='week']:focus ~ span,body.blue label [type='week'].notEmpty:not(:focus) ~ span,body.blue label [type='email']:focus ~ span,body.blue label [type='email'].notEmpty:not(:focus) ~ span,body.blue label [type='number']:focus ~ span,body.blue label [type='number'].notEmpty:not(:focus) ~ span,body.blue label [type='search']:focus ~ span,body.blue label [type='search'].notEmpty:not(:focus) ~ span,body.blue label [type='tel']:focus ~ span,body.blue label [type='tel'].notEmpty:not(:focus) ~ span,body.blue label [type='time']:focus ~ span,body.blue label [type='time'].notEmpty:not(:focus) ~ span,body.blue label [type='url']:focus ~ span,body.blue label [type='url'].notEmpty:not(:focus) ~ span,body.blue label [type='color']:focus ~ span,body.blue label [type='color'].notEmpty:not(:focus) ~ span,body.blue label textarea:focus ~ span,body.blue label textarea.notEmpty:not(:focus) ~ span,body.blue label input[type=text]:focus ~ span,body.blue label input[type=text].notEmpty:not(:focus) ~ span,body.blue label input:not([type]):focus ~ span,body.blue label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.blue label [type='text'] ~ span,body.blue label [type='password'] ~ span,body.blue label [type='date'] ~ span,body.blue label [type='datetime'] ~ span,body.blue label [type='datetime-local'] ~ span,body.blue label [type='month'] ~ span,body.blue label [type='week'] ~ span,body.blue label [type='email'] ~ span,body.blue label [type='number'] ~ span,body.blue label [type='search'] ~ span,body.blue label [type='tel'] ~ span,body.blue label [type='time'] ~ span,body.blue label [type='url'] ~ span,body.blue label [type='color'] ~ span,body.blue label textarea ~ span,body.blue label input[type=text] ~ span,body.blue label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.blue label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.blue input.notEmpty:invalid{background-color:rgba(44,88,174,0.65)}body.green{background:#fff;color:#000}body.green #cookie-compliance{background-color:#003613;color:#fff}body.green #cookie-compliance a.link{color:#009829;border-bottom-color:#009829}body.green #cookie-compliance a.link:hover{color:#009829;border-bottom-color:#009829}body.green a.link{text-decoration:none;color:#009829;border-bottom:none}body.green a.link:hover{color:#009829;border-bottom-color:#009829}body.green .loader #spinner{stroke:green}body.green nav.top-bar{color:#fff;background:green}body.green .top-bar ul{background:green !important}body.green .top-bar ul a{color:#fff}body.green button.button,body.green a.button{background-color:green}body.green button.button.disabled,body.green button.button.disabled:hover,body.green button.button.disabled:focus,body.green button.button:hover,body.green a.button.disabled,body.green a.button.disabled:hover,body.green a.button.disabled:focus,body.green a.button:hover{background-color:green}body.green .switch input:checked+.slider{background-color:green}body.green .switch input:focus+.slider{-webkit-box-shadow:0 0 1px green;box-shadow:0 0 1px green}body.green label{color:#000}body.green .background .modal{background-color:#fefefe}body.green svg .fill-color,body.green svg.fill-color{fill:currentColor}body.green svg .fill-background,body.green svg.fill-background{fill:#fefefe}body.green label [type='text'],body.green label [type='password'],body.green label [type='date'],body.green label [type='datetime'],body.green label [type='datetime-local'],body.green label [type='month'],body.green label [type='week'],body.green label [type='email'],body.green label [type='number'],body.green label [type='search'],body.green label [type='tel'],body.green label [type='time'],body.green label [type='url'],body.green label [type='color'],body.green label textarea,body.green label input[type=text],body.green label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.green label [type='text']:focus,body.green label [type='password']:focus,body.green label [type='date']:focus,body.green label [type='datetime']:focus,body.green label [type='datetime-local']:focus,body.green label [type='month']:focus,body.green label [type='week']:focus,body.green label [type='email']:focus,body.green label [type='number']:focus,body.green label [type='search']:focus,body.green label [type='tel']:focus,body.green label [type='time']:focus,body.green label [type='url']:focus,body.green label [type='color']:focus,body.green label textarea:focus,body.green label input[type=text]:focus,body.green label input:not([type]):focus{border-bottom:solid #000}body.green label [type='text']:focus ~ span,body.green label [type='text'].notEmpty:not(:focus) ~ span,body.green label [type='password']:focus ~ span,body.green label [type='password'].notEmpty:not(:focus) ~ span,body.green label [type='date']:focus ~ span,body.green label [type='date'].notEmpty:not(:focus) ~ span,body.green label [type='datetime']:focus ~ span,body.green label [type='datetime'].notEmpty:not(:focus) ~ span,body.green label [type='datetime-local']:focus ~ span,body.green label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.green label [type='month']:focus ~ span,body.green label [type='month'].notEmpty:not(:focus) ~ span,body.green label [type='week']:focus ~ span,body.green label [type='week'].notEmpty:not(:focus) ~ span,body.green label [type='email']:focus ~ span,body.green label [type='email'].notEmpty:not(:focus) ~ span,body.green label [type='number']:focus ~ span,body.green label [type='number'].notEmpty:not(:focus) ~ span,body.green label [type='search']:focus ~ span,body.green label [type='search'].notEmpty:not(:focus) ~ span,body.green label [type='tel']:focus ~ span,body.green label [type='tel'].notEmpty:not(:focus) ~ span,body.green label [type='time']:focus ~ span,body.green label [type='time'].notEmpty:not(:focus) ~ span,body.green label [type='url']:focus ~ span,body.green label [type='url'].notEmpty:not(:focus) ~ span,body.green label [type='color']:focus ~ span,body.green label [type='color'].notEmpty:not(:focus) ~ span,body.green label textarea:focus ~ span,body.green label textarea.notEmpty:not(:focus) ~ span,body.green label input[type=text]:focus ~ span,body.green label input[type=text].notEmpty:not(:focus) ~ span,body.green label input:not([type]):focus ~ span,body.green label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.green label [type='text'] ~ span,body.green label [type='password'] ~ span,body.green label [type='date'] ~ span,body.green label [type='datetime'] ~ span,body.green label [type='datetime-local'] ~ span,body.green label [type='month'] ~ span,body.green label [type='week'] ~ span,body.green label [type='email'] ~ span,body.green label [type='number'] ~ span,body.green label [type='search'] ~ span,body.green label [type='tel'] ~ span,body.green label [type='time'] ~ span,body.green label [type='url'] ~ span,body.green label [type='color'] ~ span,body.green label textarea ~ span,body.green label input[type=text] ~ span,body.green label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.green label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.green input.notEmpty:invalid{background-color:rgba(0,128,0,0.65)}body.pink{background:#fff;color:#000}body.pink #cookie-compliance{background-color:#70374a;color:#fff}body.pink #cookie-compliance a.link{color:#fe64af;border-bottom-color:#fe64af}body.pink #cookie-compliance a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink a.link{text-decoration:none;color:#fe64af;border-bottom:none}body.pink a.link:hover{color:#fe64af;border-bottom-color:#fe64af}body.pink .loader #spinner{stroke:hotpink}body.pink nav.top-bar{color:#fff;background:hotpink}body.pink .top-bar ul{background:hotpink !important}body.pink .top-bar ul a{color:#fff}body.pink button.button,body.pink a.button{background-color:hotpink}body.pink button.button.disabled,body.pink button.button.disabled:hover,body.pink button.button.disabled:focus,body.pink button.button:hover,body.pink a.button.disabled,body.pink a.button.disabled:hover,body.pink a.button.disabled:focus,body.pink a.button:hover{background-color:hotpink}body.pink .switch input:checked+.slider{background-color:hotpink}body.pink .switch input:focus+.slider{-webkit-box-shadow:0 0 1px hotpink;box-shadow:0 0 1px hotpink}body.pink label{color:#000}body.pink .background .modal{background-color:#fefefe}body.pink svg .fill-color,body.pink svg.fill-color{fill:currentColor}body.pink svg .fill-background,body.pink svg.fill-background{fill:#fefefe}body.pink label [type='text'],body.pink label [type='password'],body.pink label [type='date'],body.pink label [type='datetime'],body.pink label [type='datetime-local'],body.pink label [type='month'],body.pink label [type='week'],body.pink label [type='email'],body.pink label [type='number'],body.pink label [type='search'],body.pink label [type='tel'],body.pink label [type='time'],body.pink label [type='url'],body.pink label [type='color'],body.pink label textarea,body.pink label input[type=text],body.pink label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.pink label [type='text']:focus,body.pink label [type='password']:focus,body.pink label [type='date']:focus,body.pink label [type='datetime']:focus,body.pink label [type='datetime-local']:focus,body.pink label [type='month']:focus,body.pink label [type='week']:focus,body.pink label [type='email']:focus,body.pink label [type='number']:focus,body.pink label [type='search']:focus,body.pink label [type='tel']:focus,body.pink label [type='time']:focus,body.pink label [type='url']:focus,body.pink label [type='color']:focus,body.pink label textarea:focus,body.pink label input[type=text]:focus,body.pink label input:not([type]):focus{border-bottom:solid #000}body.pink label [type='text']:focus ~ span,body.pink label [type='text'].notEmpty:not(:focus) ~ span,body.pink label [type='password']:focus ~ span,body.pink label [type='password'].notEmpty:not(:focus) ~ span,body.pink label [type='date']:focus ~ span,body.pink label [type='date'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime']:focus ~ span,body.pink label [type='datetime'].notEmpty:not(:focus) ~ span,body.pink label [type='datetime-local']:focus ~ span,body.pink label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.pink label [type='month']:focus ~ span,body.pink label [type='month'].notEmpty:not(:focus) ~ span,body.pink label [type='week']:focus ~ span,body.pink label [type='week'].notEmpty:not(:focus) ~ span,body.pink label [type='email']:focus ~ span,body.pink label [type='email'].notEmpty:not(:focus) ~ span,body.pink label [type='number']:focus ~ span,body.pink label [type='number'].notEmpty:not(:focus) ~ span,body.pink label [type='search']:focus ~ span,body.pink label [type='search'].notEmpty:not(:focus) ~ span,body.pink label [type='tel']:focus ~ span,body.pink label [type='tel'].notEmpty:not(:focus) ~ span,body.pink label [type='time']:focus ~ span,body.pink label [type='time'].notEmpty:not(:focus) ~ span,body.pink label [type='url']:focus ~ span,body.pink label [type='url'].notEmpty:not(:focus) ~ span,body.pink label [type='color']:focus ~ span,body.pink label [type='color'].notEmpty:not(:focus) ~ span,body.pink label textarea:focus ~ span,body.pink label textarea.notEmpty:not(:focus) ~ span,body.pink label input[type=text]:focus ~ span,body.pink label input[type=text].notEmpty:not(:focus) ~ span,body.pink label input:not([type]):focus ~ span,body.pink label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.pink label [type='text'] ~ span,body.pink label [type='password'] ~ span,body.pink label [type='date'] ~ span,body.pink label [type='datetime'] ~ span,body.pink label [type='datetime-local'] ~ span,body.pink label [type='month'] ~ span,body.pink label [type='week'] ~ span,body.pink label [type='email'] ~ span,body.pink label [type='number'] ~ span,body.pink label [type='search'] ~ span,body.pink label [type='tel'] ~ span,body.pink label [type='time'] ~ span,body.pink label [type='url'] ~ span,body.pink label [type='color'] ~ span,body.pink label textarea ~ span,body.pink label input[type=text] ~ span,body.pink label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.pink label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.pink input.notEmpty:invalid{background-color:rgba(255,105,180,0.65)}body.black{background:#fff;color:#000}body.black #cookie-compliance{background-color:#353535;color:#fff}body.black #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.black #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.black a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.black a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.black .loader #spinner{stroke:#000}body.black nav.top-bar{color:#fff;background:#000}body.black .top-bar ul{background:#000 !important}body.black .top-bar ul a{color:#fff}body.black button.button,body.black a.button{background-color:#000}body.black button.button.disabled,body.black button.button.disabled:hover,body.black button.button.disabled:focus,body.black button.button:hover,body.black a.button.disabled,body.black a.button.disabled:hover,body.black a.button.disabled:focus,body.black a.button:hover{background-color:#000}body.black .switch input:checked+.slider{background-color:#000}body.black .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.black label{color:#000}body.black .background .modal{background-color:#fefefe}body.black svg .fill-color,body.black svg.fill-color{fill:currentColor}body.black svg .fill-background,body.black svg.fill-background{fill:#fefefe}body.black label [type='text'],body.black label [type='password'],body.black label [type='date'],body.black label [type='datetime'],body.black label [type='datetime-local'],body.black label [type='month'],body.black label [type='week'],body.black label [type='email'],body.black label [type='number'],body.black label [type='search'],body.black label [type='tel'],body.black label [type='time'],body.black label [type='url'],body.black label [type='color'],body.black label textarea,body.black label input[type=text],body.black label input:not([type]){border-bottom:solid #000;background:#fff;color:#000}body.black label [type='text']:focus,body.black label [type='password']:focus,body.black label [type='date']:focus,body.black label [type='datetime']:focus,body.black label [type='datetime-local']:focus,body.black label [type='month']:focus,body.black label [type='week']:focus,body.black label [type='email']:focus,body.black label [type='number']:focus,body.black label [type='search']:focus,body.black label [type='tel']:focus,body.black label [type='time']:focus,body.black label [type='url']:focus,body.black label [type='color']:focus,body.black label textarea:focus,body.black label input[type=text]:focus,body.black label input:not([type]):focus{border-bottom:solid #000}body.black label [type='text']:focus ~ span,body.black label [type='text'].notEmpty:not(:focus) ~ span,body.black label [type='password']:focus ~ span,body.black label [type='password'].notEmpty:not(:focus) ~ span,body.black label [type='date']:focus ~ span,body.black label [type='date'].notEmpty:not(:focus) ~ span,body.black label [type='datetime']:focus ~ span,body.black label [type='datetime'].notEmpty:not(:focus) ~ span,body.black label [type='datetime-local']:focus ~ span,body.black label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.black label [type='month']:focus ~ span,body.black label [type='month'].notEmpty:not(:focus) ~ span,body.black label [type='week']:focus ~ span,body.black label [type='week'].notEmpty:not(:focus) ~ span,body.black label [type='email']:focus ~ span,body.black label [type='email'].notEmpty:not(:focus) ~ span,body.black label [type='number']:focus ~ span,body.black label [type='number'].notEmpty:not(:focus) ~ span,body.black label [type='search']:focus ~ span,body.black label [type='search'].notEmpty:not(:focus) ~ span,body.black label [type='tel']:focus ~ span,body.black label [type='tel'].notEmpty:not(:focus) ~ span,body.black label [type='time']:focus ~ span,body.black label [type='time'].notEmpty:not(:focus) ~ span,body.black label [type='url']:focus ~ span,body.black label [type='url'].notEmpty:not(:focus) ~ span,body.black label [type='color']:focus ~ span,body.black label [type='color'].notEmpty:not(:focus) ~ span,body.black label textarea:focus ~ span,body.black label textarea.notEmpty:not(:focus) ~ span,body.black label input[type=text]:focus ~ span,body.black label input[type=text].notEmpty:not(:focus) ~ span,body.black label input:not([type]):focus ~ span,body.black label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.black label [type='text'] ~ span,body.black label [type='password'] ~ span,body.black label [type='date'] ~ span,body.black label [type='datetime'] ~ span,body.black label [type='datetime-local'] ~ span,body.black label [type='month'] ~ span,body.black label [type='week'] ~ span,body.black label [type='email'] ~ span,body.black label [type='number'] ~ span,body.black label [type='search'] ~ span,body.black label [type='tel'] ~ span,body.black label [type='time'] ~ span,body.black label [type='url'] ~ span,body.black label [type='color'] ~ span,body.black label textarea ~ span,body.black label input[type=text] ~ span,body.black label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.black label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.black input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.default{background:rgba(0,0,0,0);color:#000}body.default #cookie-compliance{background-color:#353535;color:#fff}body.default #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.default #cookie-compliance a.link:hover{color:#cacaca;border-bottom-color:#cacaca}body.default a.link{text-decoration:none;color:#000;border-bottom:1px solid #000}body.default a.link:hover{color:#4e4e4e;border-bottom-color:#4e4e4e}body.default .loader #spinner{stroke:#000}body.default nav.top-bar{color:#fff;background:#000}body.default .top-bar ul{background:#000 !important}body.default .top-bar ul a{color:#fff}body.default button.button,body.default a.button{background-color:#000}body.default button.button.disabled,body.default button.button.disabled:hover,body.default button.button.disabled:focus,body.default button.button:hover,body.default a.button.disabled,body.default a.button.disabled:hover,body.default a.button.disabled:focus,body.default a.button:hover{background-color:#000}body.default .switch input:checked+.slider{background-color:#000}body.default .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #000;box-shadow:0 0 1px #000}body.default label{color:#000}body.default .background .modal{background-color:#fefefe}body.default svg .fill-color,body.default svg.fill-color{fill:currentColor}body.default svg .fill-background,body.default svg.fill-background{fill:#fefefe}body.default label [type='text'],body.default label [type='password'],body.default label [type='date'],body.default label [type='datetime'],body.default label [type='datetime-local'],body.default label [type='month'],body.default label [type='week'],body.default label [type='email'],body.default label [type='number'],body.default label [type='search'],body.default label [type='tel'],body.default label [type='time'],body.default label [type='url'],body.default label [type='color'],body.default label textarea,body.default label input[type=text],body.default label input:not([type]){border-bottom:solid #000;background:rgba(0,0,0,0);color:#000}body.default label [type='text']:focus,body.default label [type='password']:focus,body.default label [type='date']:focus,body.default label [type='datetime']:focus,body.default label [type='datetime-local']:focus,body.default label [type='month']:focus,body.default label [type='week']:focus,body.default label [type='email']:focus,body.default label [type='number']:focus,body.default label [type='search']:focus,body.default label [type='tel']:focus,body.default label [type='time']:focus,body.default label [type='url']:focus,body.default label [type='color']:focus,body.default label textarea:focus,body.default label input[type=text]:focus,body.default label input:not([type]):focus{border-bottom:solid #000}body.default label [type='text']:focus ~ span,body.default label [type='text'].notEmpty:not(:focus) ~ span,body.default label [type='password']:focus ~ span,body.default label [type='password'].notEmpty:not(:focus) ~ span,body.default label [type='date']:focus ~ span,body.default label [type='date'].notEmpty:not(:focus) ~ span,body.default label [type='datetime']:focus ~ span,body.default label [type='datetime'].notEmpty:not(:focus) ~ span,body.default label [type='datetime-local']:focus ~ span,body.default label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.default label [type='month']:focus ~ span,body.default label [type='month'].notEmpty:not(:focus) ~ span,body.default label [type='week']:focus ~ span,body.default label [type='week'].notEmpty:not(:focus) ~ span,body.default label [type='email']:focus ~ span,body.default label [type='email'].notEmpty:not(:focus) ~ span,body.default label [type='number']:focus ~ span,body.default label [type='number'].notEmpty:not(:focus) ~ span,body.default label [type='search']:focus ~ span,body.default label [type='search'].notEmpty:not(:focus) ~ span,body.default label [type='tel']:focus ~ span,body.default label [type='tel'].notEmpty:not(:focus) ~ span,body.default label [type='time']:focus ~ span,body.default label [type='time'].notEmpty:not(:focus) ~ span,body.default label [type='url']:focus ~ span,body.default label [type='url'].notEmpty:not(:focus) ~ span,body.default label [type='color']:focus ~ span,body.default label [type='color'].notEmpty:not(:focus) ~ span,body.default label textarea:focus ~ span,body.default label textarea.notEmpty:not(:focus) ~ span,body.default label input[type=text]:focus ~ span,body.default label input[type=text].notEmpty:not(:focus) ~ span,body.default label input:not([type]):focus ~ span,body.default label input:not([type]).notEmpty:not(:focus) ~ span{color:#000}body.default label [type='text'] ~ span,body.default label [type='password'] ~ span,body.default label [type='date'] ~ span,body.default label [type='datetime'] ~ span,body.default label [type='datetime-local'] ~ span,body.default label [type='month'] ~ span,body.default label [type='week'] ~ span,body.default label [type='email'] ~ span,body.default label [type='number'] ~ span,body.default label [type='search'] ~ span,body.default label [type='tel'] ~ span,body.default label [type='time'] ~ span,body.default label [type='url'] ~ span,body.default label [type='color'] ~ span,body.default label textarea ~ span,body.default label input[type=text] ~ span,body.default label input:not([type]) ~ span{color:rgba(0,0,0,0.65)}body.default label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.default input.notEmpty:invalid{background-color:rgba(0,0,0,0.65)}body.dark{background:#000;color:#fff}body.dark #cookie-compliance{background-color:#4b4b4b;color:#fff}body.dark #cookie-compliance a.link{color:#fff;border-bottom-color:#fff}body.dark #cookie-compliance a.link:hover{color:#fff;border-bottom-color:#fff}body.dark a.link{text-decoration:none;color:#fff;border-bottom:1px solid #fff}body.dark a.link:hover{color:#fff;border-bottom-color:#fff}body.dark .loader #spinner{stroke:#fff}body.dark nav.top-bar{color:#fff;background:#373737}body.dark .top-bar ul{background:#373737 !important}body.dark .top-bar ul a{color:#fff}body.dark button.button,body.dark a.button{background-color:#373737}body.dark button.button.disabled,body.dark button.button.disabled:hover,body.dark button.button.disabled:focus,body.dark button.button:hover,body.dark a.button.disabled,body.dark a.button.disabled:hover,body.dark a.button.disabled:focus,body.dark a.button:hover{background-color:#373737}body.dark .switch input:checked+.slider{background-color:#373737}body.dark .switch input:focus+.slider{-webkit-box-shadow:0 0 1px #373737;box-shadow:0 0 1px #373737}body.dark label{color:#fff}body.dark .background .modal{background-color:#fefefe}body.dark svg .fill-color,body.dark svg.fill-color{fill:currentColor}body.dark svg .fill-background,body.dark svg.fill-background{fill:#fefefe}body.dark label [type='text'],body.dark label [type='password'],body.dark label [type='date'],body.dark label [type='datetime'],body.dark label [type='datetime-local'],body.dark label [type='month'],body.dark label [type='week'],body.dark label [type='email'],body.dark label [type='number'],body.dark label [type='search'],body.dark label [type='tel'],body.dark label [type='time'],body.dark label [type='url'],body.dark label [type='color'],body.dark label textarea,body.dark label input[type=text],body.dark label input:not([type]){border-bottom:solid #fff;background:#000;color:#fff}body.dark label [type='text']:focus,body.dark label [type='password']:focus,body.dark label [type='date']:focus,body.dark label [type='datetime']:focus,body.dark label [type='datetime-local']:focus,body.dark label [type='month']:focus,body.dark label [type='week']:focus,body.dark label [type='email']:focus,body.dark label [type='number']:focus,body.dark label [type='search']:focus,body.dark label [type='tel']:focus,body.dark label [type='time']:focus,body.dark label [type='url']:focus,body.dark label [type='color']:focus,body.dark label textarea:focus,body.dark label input[type=text]:focus,body.dark label input:not([type]):focus{border-bottom:solid #fff}body.dark label [type='text']:focus ~ span,body.dark label [type='text'].notEmpty:not(:focus) ~ span,body.dark label [type='password']:focus ~ span,body.dark label [type='password'].notEmpty:not(:focus) ~ span,body.dark label [type='date']:focus ~ span,body.dark label [type='date'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime']:focus ~ span,body.dark label [type='datetime'].notEmpty:not(:focus) ~ span,body.dark label [type='datetime-local']:focus ~ span,body.dark label [type='datetime-local'].notEmpty:not(:focus) ~ span,body.dark label [type='month']:focus ~ span,body.dark label [type='month'].notEmpty:not(:focus) ~ span,body.dark label [type='week']:focus ~ span,body.dark label [type='week'].notEmpty:not(:focus) ~ span,body.dark label [type='email']:focus ~ span,body.dark label [type='email'].notEmpty:not(:focus) ~ span,body.dark label [type='number']:focus ~ span,body.dark label [type='number'].notEmpty:not(:focus) ~ span,body.dark label [type='search']:focus ~ span,body.dark label [type='search'].notEmpty:not(:focus) ~ span,body.dark label [type='tel']:focus ~ span,body.dark label [type='tel'].notEmpty:not(:focus) ~ span,body.dark label [type='time']:focus ~ span,body.dark label [type='time'].notEmpty:not(:focus) ~ span,body.dark label [type='url']:focus ~ span,body.dark label [type='url'].notEmpty:not(:focus) ~ span,body.dark label [type='color']:focus ~ span,body.dark label [type='color'].notEmpty:not(:focus) ~ span,body.dark label textarea:focus ~ span,body.dark label textarea.notEmpty:not(:focus) ~ span,body.dark label input[type=text]:focus ~ span,body.dark label input[type=text].notEmpty:not(:focus) ~ span,body.dark label input:not([type]):focus ~ span,body.dark label input:not([type]).notEmpty:not(:focus) ~ span{color:#fff}body.dark label [type='text'] ~ span,body.dark label [type='password'] ~ span,body.dark label [type='date'] ~ span,body.dark label [type='datetime'] ~ span,body.dark label [type='datetime-local'] ~ span,body.dark label [type='month'] ~ span,body.dark label [type='week'] ~ span,body.dark label [type='email'] ~ span,body.dark label [type='number'] ~ span,body.dark label [type='search'] ~ span,body.dark label [type='tel'] ~ span,body.dark label [type='time'] ~ span,body.dark label [type='url'] ~ span,body.dark label [type='color'] ~ span,body.dark label textarea ~ span,body.dark label input[type=text] ~ span,body.dark label input:not([type]) ~ span{color:rgba(255,255,255,0.65)}body.dark label textarea{-webkit-box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important;box-shadow:0 0 3px 2px rgba(135,135,135,0.31) !important}body.dark input.notEmpty:invalid{background-color:rgba(55,55,55,0.65)}@-webkit-keyframes tutorialPointer{0%{top:25%}100%{top:75%}}@keyframes tutorialPointer{0%{top:25%}100%{top:75%}}.tutorial-blanket{display:none;position:fixed;top:0;bottom:0;left:0;right:0;z-index:9001;background:rgba(55,55,55,0.51)}.tutorial .tutorial-blanket{display:block}.tutorial .tutorial-text{color:white;font-size:1.5rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:none !important;transition:none !important}.tutorial .tutorial-text *{-webkit-transition:none !important;transition:none !important}.tutorial.step-1 #level .segment-row{position:inherit}.tutorial.step-1 #level .segment-parent:nth-child(3),.tutorial.step-1 #level .segment-parent:nth-child(3).rotating{z-index:9900 !important}.tutorial.step-1 .tutorial-text .step-1{display:initial;z-index:9900 !important;position:relative}.tutorial.step-2 #level{z-index:9900 !important}.tutorial.step-2 .tutorial-text .step-2{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .tutorial-text .step-3{display:initial;z-index:9900 !important;position:relative}.tutorial.step-3 .top-bar{z-index:9900 !important}.tutorial.step-3 .help-action{margin-top:0;padding-top:10px;position:relative;overflow:visible;margin-right:10px;-webkit-box-shadow:0 0 10px 5px #fff;box-shadow:0 0 10px 5px #fff}.tutorial.step-4 .tutorial-text .step-4{display:initial;z-index:9900 !important;position:relative}.tutorial.step-4 #level .segment-row{position:inherit}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating{z-index:9900 !important}.tutorial.step-4 #level .segment-row>.child-container .segment-parent.layer-2 #tutorial-pointer,.tutorial.step-4 #level .segment-row>.child-container>.segment-parent.layer-2.rotating #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}#tutorial-site{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-webkit-justify-content:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#tutorial-site #tutorial-1,#tutorial-site #tutorial-2,#tutorial-site #tutorial-3{text-align:center;margin-top:0.7rem;margin-bottom:0.5rem}#tutorial-site #tutorial-2 .help-action{width:100%;margin-bottom:0.3rem}#tutorial-site #tutorial-3 .tutorial-wrapper{position:relative}#tutorial-site #tutorial-3 .tutorial-wrapper #tutorial-pointer{width:0.6em;height:0.6em;border-radius:50%;left:75%;position:absolute;top:75%;z-index:1;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);-webkit-animation:tutorialPointer 2s infinite;animation:tutorialPointer 2s infinite;pointer-events:none}body.red #tutorial-pointer{background:red}body.red #level-number-container.in-main-menu{background:#fff;border-color:#000}body.red .segment.segment-parent{border-color:#555}body.red .segment.segment-parent.layer-2{border-color:#000}body.red #site>:not(.won) .segment.locked{cursor:default;border-color:#870015;background-color:red !important}body.red #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.red .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.blue #tutorial-pointer{background:#2c58ae}body.blue #level-number-container.in-main-menu{background:#fff;border-color:#000}body.blue .segment.segment-parent{border-color:#555}body.blue .segment.segment-parent.layer-2{border-color:#000}body.blue #site>:not(.won) .segment.locked{cursor:default;border-color:#1a3062;background-color:#2c58ae !important}body.blue #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.blue .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.green #tutorial-pointer{background:green}body.green #level-number-container.in-main-menu{background:#fff;border-color:#000}body.green .segment.segment-parent{border-color:#555}body.green .segment.segment-parent.layer-2{border-color:#000}body.green #site>:not(.won) .segment.locked{cursor:default;border-color:#003613;background-color:green !important}body.green #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.green .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.pink #tutorial-pointer{background:hotpink}body.pink #level-number-container.in-main-menu{background:#fff;border-color:#000}body.pink .segment.segment-parent{border-color:#555}body.pink .segment.segment-parent.layer-2{border-color:#000}body.pink #site>:not(.won) .segment.locked{cursor:default;border-color:#70374a;background-color:hotpink !important}body.pink #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.pink .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.black #tutorial-pointer{background:#000}body.black #level-number-container.in-main-menu{background:#fff;border-color:#000}body.black .segment.segment-parent{border-color:#555}body.black .segment.segment-parent.layer-2{border-color:#000}body.black #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#fff}body.black .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#fff}body.default #tutorial-pointer{background:#000}body.default #level-number-container.in-main-menu{background:rgba(0,0,0,0);border-color:#000}body.default .segment.segment-parent{border-color:#555}body.default .segment.segment-parent.layer-2{border-color:#000}body.default #site>:not(.won) .segment.locked{cursor:default;border-color:#353535;background-color:#000 !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:rgba(0,0,0,0)}body.default .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:rgba(0,0,0,0)}body.dark #tutorial-pointer{background:#373737}body.dark #level-number-container.in-main-menu{background:#000;border-color:#fff}body.dark .segment.segment-parent{border-color:#9b9b9b}body.dark .segment.segment-parent.layer-2{border-color:#fff}body.dark #site>:not(.won) .segment.locked{cursor:default;border-color:#4b4b4b;background-color:#373737 !important}body.dark #site>:not(.won) .segment.locked>.child-container>.segment-leaf{cursor:default}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-90>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-180>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-270>.child-container>.segment.rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-90{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-180{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-270{background-color:#000}body.dark .segment:not(.segment-row):not(.segment-triangle).rotate-360>.child-container>.segment.rotate-360{background-color:#000}body.default{background:#0f0f49;color:white}body.default *{color:white}body.default #level-number-container.in-main-menu{background:#fff !important}body.default .segment.segment-parent:not(.layer-2){border-color:#005d07;background:rgba(109,255,127,0.2) !important}body.default #site>:not(.won) .segment.locked{background-color:transparent !important;border-color:#42ff4a !important}body.default #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.dark .switch input:checked+.slider{border-color:black}body.dark .switch .slider{border:solid 1px white;background-color:inherit;padding:1px;margin-bottom:0;margin-top:0}body.dark #site>:not(.won) .segment.locked.layer-2{border-color:#565656}body.dark .modal{background-color:#fefefe;border:1px solid white;border-radius:2px}body.black #site>:not(.won) .segment.locked{background-color:#9d9d9d !important;border-color:#6e6e6e !important}body.black #site>:not(.won) .segment.locked>.child-container>.segment-leaf{background-color:transparent !important}body.black #logo{border:1px solid grey;border-radius:50%}.no-transition{-webkit-transition:none !important;transition:none !important}.no-transition *{-webkit-transition:none !important;transition:none !important}nav.top-bar.title-bar{padding:0.3rem 0.6rem 0}#logo{max-width:2rem;-webkit-transition:none;transition:none}#action-bar .top-bar-right .menu .action.img a{padding-bottom:0}#action-bar .top-bar-right .menu .action.img a img{max-height:1.8rem}.menu a,.dropdown.menu a{padding:0.2rem 0.5rem}.relative-level-number{position:relative}.relative-level-number #level-number-container{top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}#level-number-container,.level-counter{z-index:1;position:absolute;left:50%;-webkit-transform:translate(-50%);-ms-transform:translate(-50%);transform:translate(-50%);border:3px solid white;border-radius:50%;display:table-cell;height:40px;width:40px;text-align:center;vertical-align:middle}#level-number-container.level-counter,.level-counter.level-counter{position:fixed !important;font-size:1.8rem}#level-number-container.level-counter.num-10,.level-counter.level-counter.num-10{font-size:1.3rem}#level-number-container.level-counter.num-100,.level-counter.level-counter.num-100{font-size:0.9rem}#level-number-container.level-counter.num-1000,.level-counter.level-counter.num-1000{font-size:0.65rem}#level-number-container.in-main-menu,.level-counter.in-main-menu{background:white;border-color:black;height:1em;width:1em;min-height:1em;min-width:1em;max-height:1em;max-width:1em}#level-number-container a,.level-counter a{width:initial !important}#level-number-container #level-number,#level-number-container a,.level-counter #level-number,.level-counter a{-webkit-transition:none;transition:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);font-weight:bold}.coin-counter{display:inline-block;position:relative;font-size:1.6rem}@media print, screen and (max-width: 24.99875em){.coin-counter{font-size:1rem}}.coin-counter :after{background-image:url(img/coinTower.png);background-size:28px 28px;width:28px;height:28px;display:inline-block;content:""}#coin-container{line-height:1}#coin-container .coin{margin-left:3px;margin-right:3px;max-width:20px;display:inline-block}@media print, screen and (min-width: 25em){#coin-container .coin{max-width:25px}}@media print, screen and (min-width: 40em){#coin-container .coin{max-width:30px}}@-webkit-keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-90{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@keyframes rotate-reverse-90{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}}@-webkit-keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-180{0%{-webkit-transform:rotate(90deg);transform:rotate(90deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes rotate-reverse-180{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@-webkit-keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-270{0%{-webkit-transform:rotate(180deg);transform:rotate(180deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@keyframes rotate-reverse-270{0%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}100%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}}@-webkit-keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-360{0%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate-reverse-360{0%{-webkit-transform:rotate(450deg);transform:rotate(450deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.segment:not(.segment-row):not(.segment-triangle).rotating{z-index:10 !important;overflow:hidden}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-90.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-180.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-270.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;animation-direction:reverse;-webkit-animation-direction:reverse;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-180;animation-name:rotate-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-270;animation-name:rotate-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-360;animation-name:rotate-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-90;animation-name:rotate-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-90{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-180{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-270{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle).rotating.rotate-360.reverse>.child-container>.segment.rotate-360{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating{-webkit-animation-name:rotate-90;animation-name:rotate-90;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90.rotating.reverse{-webkit-animation-name:rotate-reverse-90;animation-name:rotate-reverse-90}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating{-webkit-animation-name:rotate-180;animation-name:rotate-180;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180.rotating.reverse{-webkit-animation-name:rotate-reverse-180;animation-name:rotate-reverse-180}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating{-webkit-animation-name:rotate-270;animation-name:rotate-270;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270.rotating.reverse{-webkit-animation-name:rotate-reverse-270;animation-name:rotate-reverse-270}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);background-color:inherit;z-index:1}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating{-webkit-animation-name:rotate-360;animation-name:rotate-360;-webkit-animation-duration:.25s;animation-duration:.25s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:linear;animation-timing-function:linear}.segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360.rotating.reverse{-webkit-animation-name:rotate-reverse-360;animation-name:rotate-reverse-360}#level{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;-webkit-transition:none;transition:none;max-width:100%;-webkit-tap-highlight-color:rgba(255,255,255,0);overflow-y:visible}#level *{-webkit-transition:none;transition:none}.segment{vertical-align:top;white-space:initial;cursor:pointer;display:inline-block;text-align:center;position:relative;-webkit-transition:none;transition:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1;background-color:inherit;line-height:0}.segment.segment-row{display:block;width:100%;-webkit-animation:none !important;animation:none !important;white-space:nowrap}.segment.segment-column{padding-top:4px}.segment.segment-column>.child-container>.segment{display:block;width:100%}.segment.segment-leaf{background-color:transparent !important;min-width:1em;padding:0.8em}.segment.segment-leaf:before{content:" ";display:block;padding-top:100%}.segment.segment-leaf .leaf-element{position:absolute;width:100%;height:100%;line-height:1.5em;top:0;left:0}.segment.segment-parent{border:solid 1px #a9a9a9;border-radius:3px;padding:1px}.segment.segment-parent.layer-2{border:solid 3px #000000}#site>:not(.won) .show-when-won{display:none}.level-container{-webkit-transition:none;transition:none}.won .show-while-playing{display:none}.won #won-text{text-shadow:0 0.2rem 0.2rem #464646,0.6rem 0.8rem 0.4rem rgba(0,0,0,0.564706)}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-90>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-180>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-270>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-90{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-180{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-270{-webkit-transform:none;-ms-transform:none;transform:none}.won .segment:not(.segment-row):not(.segment-triangle):not(.rotating).rotate-360>.child-container>.segment.rotate-360{-webkit-transform:none;-ms-transform:none;transform:none}.text-right{text-align:right}#continue-button{margin-bottom:2px}@media print, screen and (max-width: 24.99875em){#continue-button{margin-bottom:0;padding:0.3em .6em}}@media print, screen and (max-width: 24.99875em){#play-button{margin-bottom:0.5rem}}#help-button{margin:0;padding:0.4em 0.4em;max-width:3em}@media print, screen and (max-width: 39.99875em){#help-button{padding:0.2em 0.2em;max-width:2em}}.line-height-1{line-height:1}body{-ms-scroll-chaining:none;overscroll-behavior:contain;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#site{overflow:visible}div.mainContainer{overflow-x:hidden}.clickable{cursor:pointer}#share-button{overflow:hidden}#share-button svg{cursor:pointer;max-width:1.5rem}svg{color:black}svg .fill-background{fill:white}@-webkit-keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes jump-animation{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(2);transform:scale(2)}100%{-webkit-transform:scale(1);transform:scale(1)}}.jump-animation{-webkit-animation-name:jump-animation;animation-name:jump-animation;-webkit-animation-duration:0.4s;animation-duration:0.4s;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-delay:inherit;animation-delay:inherit}@-webkit-keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes shake{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}33%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}66%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.shake .leaf-element{-webkit-animation:shake 0.15s;animation:shake 0.15s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}nav.top-bar{padding:0;margin-left:-.625rem;margin-right:-.625rem}@media print, screen and (min-width: 40em){nav.top-bar{margin-left:-.9375rem;margin-right:-.9375rem}}nav.top-bar.with-image .background-img{display:none}nav.top-bar .background-img{display:none}nav.top-bar>.grid-container{background:inherit;position:fixed;top:0;left:0;right:0}nav.top-bar>.grid-container>.grid-padding-x{display:block;padding:0.5rem;margin:0;padding-right:0}nav.top-bar>.grid-container>.grid-padding-x>.small-12{padding:0}nav.top-bar ul>li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}nav.top-bar ul>li.level-counter{margin-top:0.2rem}body.theme-blue{background:repeating-linear-gradient(300deg, #427081, #427081 9%, rgba(66,112,129,0.95) 13.5%, rgba(66,112,129,0.95) 21.5%, #427081 26%);color:#fff}body.theme-blue label{color:#fff}body.theme-blue .toast .message{background:#4d575a}body.theme-blue nav.top-bar,body.theme-blue nav.top-bar.with-image,body.theme-blue nav.top-bar.with-image.solid{background:#4d575a}body.theme-blue .button{background:#4d575a}body.theme-blue .switch input:checked+.slider{background:#d3e7eb}body.theme-blue #level-number-container{background:#427081}body.theme-blue svg{color:#000}body.theme-blue ul.menu li a{color:#fff}body.theme-blue a{color:#d3e7eb}body.theme-blue a.hidden-link{color:#fff}body.theme-blue #site>:not(.won) .segment.locked{background-color:#00000030}body.theme-blue #tutorial-pointer{background:#d3e7eb}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(450deg);transform:rotate(450deg)}}@keyframes line{0%{stroke-dasharray:2, 85.964;-webkit-transform:rotate(0);transform:rotate(0)}50%{stroke-dasharray:65.973, 21.9911;stroke-dashoffset:0}100%{stroke-dasharray:2, 85.964;stroke-dashoffset:-65.973;-webkit-transform:rotate(90deg);transform:rotate(90deg)}}html,body{min-height:100%;width:100%;height:100%;letter-spacing:1px;-ms-scroll-chaining:none;overscroll-behavior:none}a,a:hover{color:#ffca00}#site{position:relative;max-height:100%;max-width:100%;height:100%;width:100%}.right{float:right}.grow{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.loader{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.overlay{left:0;top:0;right:0;bottom:0;background-color:rgba(192,192,192,0.5);-webkit-transform:none;-ms-transform:none;transform:none;z-index:10000}.loader.overlay svg{left:50%;top:50%;position:fixed;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);text-align:center}.loader.inline{left:initial;top:initial;position:initial;-webkit-transform:initial;-ms-transform:initial;transform:initial;text-align:center;display:inline}.loader.small .spinner{-webkit-transform:scale(0.5);-ms-transform:scale(0.5);transform:scale(0.5)}.loader .spinner{-webkit-box-sizing:border-box;box-sizing:border-box;stroke:#000;stroke-width:3px;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite;animation:line 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite,rotate 1.6s linear infinite}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.height-100{height:100%}.hidden{display:none}.vertical-middle{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.vertical-bottom{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:end;-webkit-align-items:end;-ms-flex-align:end;align-items:end}.horizontal-center{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.width-100{width:100%}h1.inline{display:inline-block}h2.inline{display:inline-block}h3.inline{display:inline-block}h4.inline{display:inline-block}h5.inline{display:inline-block}h6.inline{display:inline-block}img.back-button{cursor:pointer;max-height:1.1rem;margin-right:0.2rem;margin-bottom:0.65rem}a.hidden-link{color:inherit}#main-content-container{overflow:auto;width:100%}#main-content-container>.grid-x{overflow:auto;margin-top:0.5rem;margin-bottom:0.5rem}#main-content-container #main-content{padding-top:0;padding-bottom:0} /*# sourceURL=webpack://./node_modules/foundation-sites/scss/util/_breakpoint.scss */ /*# sourceURL=webpack://./node_modules/foundation-sites/scss/components/_reveal.scss */ @@ -71,6 +71,7 @@ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_tabbedFragment.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_alphabeticList.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_abstractWindow.scss */ +/*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_imageSelectionElement.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites/src/client/scss/_index.scss */ /*# sourceURL=webpack://./node_modules/cordova-sites-user-management/src/client/scss/_rights.scss */ /*# sourceURL=webpack://./src/client/sass/lib/_share.scss */ @@ -86,4 +87,4 @@ /*# sourceURL=webpack://./src/client/sass/_navbarOverride.scss */ /*# sourceURL=webpack://./src/client/sass/_themeBlue.scss */ /*# sourceURL=webpack://./src/client/sass/index.scss */ -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fYnJlYWtwb2ludC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19yZXZlYWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdmVuZG9yL25vcm1hbGl6ZS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9fZ2xvYmFsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX2ZvdW5kYXRpb25TZXR0aW5ncy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19taXhpbnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX3RleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fdW5pdC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2xhYmVsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19oZWxwLXRleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19maWVsZHNldC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fc2VsZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19lcnJvci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy90eXBvZ3JhcGh5L19iYXNlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX2hlbHBlcnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdHlwb2dyYXBoeS9fYWxpZ25tZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX3ByaW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NsYXNzZXMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZ3V0dGVycy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NlbGwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fbWF0aC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19sYXlvdXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fY29sbGFwc2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fcG9zaXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZnJhbWUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnV0dG9uLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jbG9zZS1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbGFiZWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zd2l0Y2guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fY29sb3Iuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYmFkZ2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fY2FsbG91dC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jYXJkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdG9vbHRpcC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVkaWEtb2JqZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX29yYml0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFicy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190aHVtYm5haWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVudS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19tZW51LWljb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYWNjb3JkaW9uLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZHJpbGxkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fb2ZmLWNhbnZhcy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zdGlja3kuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGl0bGUtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZmxvYXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fZmxleC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19mbGV4LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fdG9hc3Quc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fZGlhbG9nLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3NldHRpbmdzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Zvcm0uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fbmF2YmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX3RhYmJlZEZyYWdtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2FscGhhYmV0aWNMaXN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Fic3RyYWN0V2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy11c2VyLW1hbmFnZW1lbnQvc3JjL2NsaWVudC9zY3NzL19yaWdodHMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3NoYXJlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19jb3JlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19jb3JlU2V0dGluZ3Muc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3NldHRpbmdzU2l0ZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2xpYi9fc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3RoZW1lLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3R1dG9yaWFsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3dvcmRyb3RhdG9yVGhlbWUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy93b3JkUm90YXRvci5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL19hbmltYXRpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX25hdmJhck92ZXJyaWRlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3RoZW1lQmx1ZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2luZGV4LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0xRLDJDQ25JTixpREFDRSxVQUFXLENBQ1gsU0FBVSxDQUNWLGFBQWMsQ0FDZixDQ2hERCwyRUFBQSxDQUE0RSxLQVMxRSxnQkFBaUIsQ0FDakIsNkJBQThCLENBQy9CLEtBUUMsUUFBUyxDQUNWLEdBTUMsYUFBYyxDQUNkLGVBQWdCLENBQ2pCLEdBU0MsOEJBQXVCLENBQXZCLHNCQUF1QixDQUN2QixRQUFTLENBQ1QsZ0JBQWlCLENBQ2xCLElBTUMsZ0NBQWlDLENBQ2pDLGFBQWMsQ0FDZixFQVFDLDRCQUE2QixDQUM5QixZQU1DLGtCQUFtQixDQUNuQix5QkFBMEIsQ0FDMUIsd0NBQWlCLENBQWpCLGdDQUFpQyxDQUNsQyxTQU1DLGtCQUFtQixDQUNwQixjQVFDLGdDQUFpQyxDQUNqQyxhQUFjLENBQ2YsTUFLQyxhQUFjLENBQ2YsUUFPQyxhQUFjLENBQ2Qs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QUlDLHdCVFdnQixDU1ZoQixrQlQyWCtCLENTMVhoQyxtQkFJQyxZQUFhLENBQ2QsaUJBR0MsV0FBWSxDQUNaLHFCQUFzQixDQUN2Qix1QkFFQyxhQUFjLENBQ2QsZ0JBQWlCLENBQ2xCLDhCQ3JDQyxvQlY4QmtCLENVN0JsQix3QkFBK0QsQ0FFL0QseURBQ0UsYVYwQmdCLENVM0JsQixnREFDRSxhVjBCZ0IsQ1UzQmxCLG9EQUNFLGFWMEJnQixDVTNCbEIscURBQ0UsYVYwQmdCLENVM0JsQiwyQ0FDRSxhVjBCZ0IsQ1V6QmpCLGtCQTBCQyxhVkRnQixDVUVqQixZQXJCSCxZQUFhLENBQ2IsaUJBQWdDLENBQ2hDLGtCUDhCdUQsQ081QnZELGdCUDRCdUQsQ08zQnZELGdCVjZCdUIsQ1U1QnZCLGFWYW9CLENVTXBCLHVCQUlJLGFBQWMsQ0FDZixvRUNnS0QsUUFBUyxDQUNULFNBQVUsQ0FDWCxFQUlDLGtCWHpGMEIsQ1cyRjFCLGlCQUFrQixDQUNsQixlWDdGc0IsQ1c4RnRCLGlDWDVGeUMsQ1c2RjFDLEtBS0MsaUJBQWtCLENBQ2xCLG1CQUFvQixDQUNyQixTQUtDLGdCWG5McUIsQ1dvTHJCLG1CQUFvQixDYnRMdEIsTWEyTEUsYVhuSGlCLENXb0hqQixtQkFBb0IsQ0FDckIsMENBU0MsOERYMU1xRSxDVzJNckUsaUJYdkpzQixDV3dKdEIsa0JYdk15QixDV3dNekIsYVh2SmtCLENXd0psQixpQ1huSXNDLENXeUh4QyxrSEFhSSxhQUFjLENBQ2QsYVh4TmUsQ1d5TmhCLE9BWU8sZ0JSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksaUJSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksbUJSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksa0JSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksbUJSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ1dtS3JCLE9BSUksY1IzTjZDLENRdU83QyxlWHBMVyxDVzRMWCxZQUFhLENBT2IsbUJYbE1pQixDSm9DckIsMkNlK0hBLE9BSUksY1IzTjZDLENRdU5qRCxPQUlJLGdCUjNONkMsQ1F1TmpELE9BSUksbUJSM042QyxDUXVOakQsT0FJSSxtQlIzTjZDLENRdU5qRCxPQUlJLGlCUjNONkMsQ1F1TmpELE9BSUksY1IzTjZDLENRd1BoRCxDYnhSUCxFYStSRSxtQkFBb0IsQ0FDcEIsYVhqUm9CLENXa1JwQixvQlg1S3lCLENXOEt6QixjQUFlLENBTGpCLGdCQVNJLGFYbkwyRCxDVzBLL0QsTUFnQkksUUFBUyxDYmpVYixHYXVVRSxVQUFXLENBRVgsZVJ0UnFELENRdVJyRCxRQUFTLENBQ1QsbUJYL0x5QixDV2lNekIsWUFBYSxDQUNiLGNBQWUsQ0FDZiwrQlh0U2lCLENXdVNqQixhQUFjLENBQ2YsU0FNQyxrQlh6TjBCLENXME4xQiwyQlh4TXlCLENXeU16QixlWDVOc0IsQ1c2TnZCLEdBSUMsaUJBQWtCLENBQ25CLEdBSUMsbUJYbE5zQixDV21OdEIsb0JYck5rQixDV3NObkIsR0FJQyxtQlh4TnNCLENXeU52Qix3QkFLRyxtQlg3TjJCLENXOE4zQixlQUFnQixDQUNqQixHQUtELGtCWG5PeUIsQ1drTzNCLE1BSUksbUJYcE84QixDV3FPOUIsZ0JYclVtQixDV3NVcEIsV0FLRCxlWGxRMEIsQ1dtUTFCLG9DUjlVcUQsQ1ErVXJELDZCWHpWaUIsQ1dzVm5CLHdCQU1JLGVYeFFvQixDV3lRcEIsYVg1VmEsQ1c2VmQsaUJBY0QsZ0NYMVdXLENXMldYLFdBQVksQ0FDWixvQkFBcUIsQ0FDdEIsT0FJQyxRQUFTLENBQ1YsSUFXQyxRQUFTLENBQ1Qsd0JSalhTLENRbVhULHdCWG5ZZ0IsQ1dxWWhCLHdEWHpVbUUsQ1cwVW5FLGFYbllXLENXd1laLFdDbFZDLGdCWjBFeUIsQ1l6RXpCLG1CWjBFNEIsQ1l4RTVCLGtCWmhEeUIsQ1lpRHpCLGVabUVz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SHJGSSxrQkdxRkwsQ0hyRksscUJHcUZMLENIckZLLGlCR3FGTCxDSHJGSyxhR3FGTCxDQUFDLGNIL0VHLFVHd0NDLENBQUksZ0JIcENILFVHb0NELENBQUkseVBIcEJGLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksb0NuQnNIa0IscVJtQnZINUIsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CZ0h5Qyx1UW1CbEhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLDJDbkJnSHlDLHlQbUJsSGxDLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsK01BWTJDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLGlCSDlCZ0IsY0lzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLFNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLFNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLFNJc0RkLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLFVJc0RmLENBQW1ELG9DdkJvQ25CLHNCbUI5R2Isa0JHa0R0QixDSGxEc0Isb0JHa0R0QixDSGxEc0IsZ0JHa0R0QixDSGxEc0IsWUdrRHRCLENBQUMsVUF2Q0ksQ0FBSSwrUEhOa0Msa0JHNkMzQyxDSDdDMkMscUJHNkMzQyxDSDdDMkMsaUJHNkMzQyxDSDdDMkMsYUc2QzNDLENBQUMsd0JIdkN1QixVR0FuQixDQUFJLG1CSFNVLGNJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFNJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFNJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFNJc0RoQixDQUFtRCxvQkp0RGxDLGVJc0RqQixDQUFtRCxvQkp0RGxDLGVJc0RqQixDQUFtRCxvQkp0RGxDLFVJc0RqQixDQUFtRCxDSm5EdEQsMkNuQmtGeUMscUJtQnpHcEIsa0JHa0RyQixDSGxEcUIsb0JHa0RyQixDSGxEcUIsZ0JHa0RyQixDSGxEcUIsWUdrRHJCLENBQUMsVUF2Q0ksQ0FBSSxrUEhOa0Msa0JHNkMzQyxDSDdDMkMscUJHNkMzQyxDSDdDMkMsaUJHNkMzQyxDSDdDMkMsYUc2QzNDLENBQUMsdUJIdkNzQixVR0FsQixDQUFJLGtCSFNTLGNJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxTSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxTSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxTSXNEZixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLGVJc0RoQixDQUFtRCxtQkp0RG5DLFVJc0RoQixDQUFtRCxDSm5EdEQsMkNuQmtGeUMsb0JtQnpHckIsa0JHa0RwQixDSGxEb0Isb0JHa0RwQixDSGxEb0IsZ0JHa0RwQixDSGxEb0IsWUdrRHBCLENBQUMsVUF2Q0ksQ0FBSSxxT0hOa0Msa0JHNkMzQyxDSDdDMkMscUJHNkMzQyxDSDdDMkMsaUJHNkMzQyxDSDdDMkMsYUc2QzNDLENBQUMsc0JIdkNxQixVR0FqQixDQUFJLGlCSFNRLGNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxVSXNEZixDQUFtRCxDSm5EdEQsa0NBSzhCLFVBQzFCLENBQUksa0NBSXNCLFdBQ3pCLENBQUksZUE4QkEsb0JDdkdvQixDQUFpQyxxQkFBakMsQ0FBaUMsMkNwQmdKckIsZW1CekNoQyxxQkN2R29CLENBQWlDLHNCQUFqQyxDQUFpQyxDRHNJbEUscUJBM0JRLDBCRzdCdUMsQ0FBZ0QsbUJGckVoRSxDQUFpQyxvQkFBakMsQ0FBaUMsMkNwQnVJbkIscUJtQnJDckMsMkJHN0J1QyxDQUFnRCxvQkZyRWhFLENBQWlDLHFCQUFqQyxDQUFpQyxDRDJHMUQscUJBckNBLFVHN0JHLENBQUksdUJIaUNMLFVHakNDLENBQUksd0JIeUNGLDhCR2JvQyxDQUFnRCx3QkhhcEYsK0JHYm9DLENBQWdELHdCSGFwRix5Qkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYsK0JHYm9DLENBQWdELHdCSGFwRix5Qkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYsK0JHYm9DLENBQWdELHdCSGFwRix5Qkdib0MsQ0FBZ0QseUJIYW5GLCtCR2JtQyxDQUFnRCx5QkhhbkYsK0JHYm1DLENBQWdELHlCSGFuRiwwQkdibUMsQ0FBZ0Qsb0N0QnVFeEQsNkJtQnRFekIsVUc3QkwsQ0FBSSwrQkhpQ0csVUdqQ1AsQ0FBSSwwQkh5Q0EsOEJHYmtDLENBQWdELDBCSGFsRiwrQkdia0MsQ0FBZ0QsMEJIYWxGLHlCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRiwrQkdia0MsQ0FBZ0QsMEJIYWxGLHlCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRiwrQkdia0MsQ0FBZ0QsMEJIYWxGLHlCR2JrQyxDQUFnRCwyQkhhakYsK0JHYmlDLENBQWdELDJCSGFqRiwrQkdiaUMsQ0FBZ0QsMkJIYWpGLDBCR2JpQyxDQUFnRCxDSGU3RiwyQ25CbUQyQyxxQm1CakV2QyxVRzdCRyxDQUFJLHVCSGlDTCxVR2pDQyxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELDRCSENsRixVRzdCSixDQUFJLDhCSGlDRSxVR2pDTixDQUFJLHlCSHlDRCwrQkdibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMkJHYmtDLENBQWdELENIZTdGLDJDbkJtRDJDLDJCbUJqRWpDLFVHN0JILENBQUksNkJIaUNDLFVHakNMLENBQUksd0JIeUNGLCtCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRiwwQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRiwwQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRiwwQkdib0MsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QsQ0hlN0YsZ0NBaURjLHFCQzlJaUIsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJnSnJCLGdDbUJGN0Isc0JDOUlpQixDQUFpQyxxQkFBakMsQ0FBaUMsQ0RnSmhFLDJDQUxZLHFCQzNJbUIsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJnSnJCLDJDbUJML0Isc0JDM0ltQixDQUFpQyxxQkFBakMsQ0FBaUMsQ0RzSmhFLHNCQUdNLHFCQ3pKeUIsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJnSnJCLHNCbUJTckMsc0JDekp5QixDQUFpQyxxQkFBakMsQ0FBaUMsQ0QySmhFLGtCSzNKTSxVRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELFdEaUhELENBQW1ELG9DdkJvQ25CLG9Cd0JySi9CLFVEaUhELENBQW1ELG9CQ2pIbEQsU0RpSEQsQ0FBbUQsb0JDakhsRCxlRGlIRCxDQUFtRCxvQkNqSGxELFNEaUhELENBQW1ELG9CQ2pIbEQsU0RpSEQsQ0FBbUQsb0JDakhsRCxlRGlIRCxDQUFtRCxvQkNqSGxELGVEaUhELENBQW1ELG9CQ2pIbEQsV0RpSEQsQ0FBbUQsQ0MvRzFELDJDeEI4STZDLG1Cd0JoSnJDLFVEaUhELENBQW1ELG1CQ2pIbEQsU0RpSEQsQ0FBbUQsbUJDakhsRCxlRGlIRCxDQUFtRCxtQkNqSGxELFNEaUhELENBQW1ELG1CQ2pIbEQsU0RpSEQsQ0FBbUQsbUJDakhsRCxlRGlIRCxDQUFtRCxtQkNqSGxELGVEaUhELENBQW1ELG1CQ2pIbEQsV0RpSEQsQ0FBbUQsQ0MvRzFELDJDeEI4STZDLGtCd0JoSnJDLFVEaUhELENBQW1ELGtCQ2pIbEQsU0RpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsU0RpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELGVEaUhELENBQW1ELGtCQ2pIbEQsV0RpSEQsQ0FBbUQsQ0MvRzFELGdDQUZRLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2Rix5QkY4RXVDLENBQWdELGdDRTlFdkYsK0JGOEV1QyxDQUFnRCxnQ0U5RXZGLHlCRjhFdUMsQ0FBZ0QsZ0NFOUV2Rix5QkY4RXVDLENBQWdELGdDRTlFdkYsK0JGOEV1QyxDQUFnRCxnQ0U5RXZGLCtCRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwyQkY4RXVDLENBQWdELG9DdEJ1RXhELGtDd0JySi9CLDBCRjhFdUMsQ0FBZ0Qsa0NFOUV2Rix5QkY4RXVDLENBQWdELGtDRTlFdkYsK0JGOEV1QyxDQUFnRCxrQ0U5RXZGLHlCRjhFdUMsQ0FBZ0Qsa0NFOUV2Rix5QkY4RXVDLENBQWdELGtDRTlFdkYsK0JGOEV1QyxDQUFnRCxrQ0U5RXZGLCtCRjhFdUMsQ0FBZ0Qsa0NFOUV2RiwyQkY4RXVDLENBQWdELENFNUUvRiwyQ3hCOEk2QyxnQ3dCaEpyQywyQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwwQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsNEJGOEV1QyxDQUFnRCxpQ0U5RXZGLDJCRjhFdUMsQ0FBZ0QsaUNFOUV2RiwwQkY4RXVDLENBQWdELGlDRTlFdkYsZ0NGOEV1QyxDQUFnRCxpQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsaUNFOUV2RiwwQkY4RXVDLENBQWdELGlDRTlFdkYsZ0NGOEV1QyxDQUFnRCxpQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsaUNFOUV2Riw0QkY4RXVDLENBQWdELENFNUUvRiwyQ3hCOEk2QyxnQ3dCaEpyQywyQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwwQkY4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsNEJGOEV1QyxDQUFnRCxDRTVFL0YsdUJMcU15QixjTTlNSyxDQUFDLGFBQUQsQ0FBQyw2QkFHckIsY0FFc0IsQ0FBQyxhQUFELENBQUMsZ0NBc0JkLGNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxVRjZGYixDQUFtRCxvQ3ZCb0NuQixrQ3lCaklsQixjRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsbUNFN0ZwQyxlRjZGZixDQUFtRCxtQ0U3RnBDLGVGNkZmLENBQW1ELG1DRTdGcEMsVUY2RmYsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGlDeUI1SHpCLGNGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxTRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxTRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxTRjZGYixDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxVRjZGZCxDQUFtRCxDRTNGaEQsMkN6QjBIbUMsZ0N5QjVIMUIsY0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLFVGNkZiLENBQW1ELENFM0ZoRCx3Qk51TGdCLGNNN0tJLENBQUMsYUFBRCxDQUFDLDhCQUdyQixlQUV3QixDQUFDLGNBQUQsQ0FBQyxvQ3pCZ0hJLHlCbUJrRFosY005TUcsQ0FBQyxhQUFELENBQUMsK0JBR3JCLGNBRXNCLENBQUMsYUFBRCxDQUFDLENBRTdCLG9DekJxSm1DLGtDeUIxSXBCLGNGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxVRnNHYixDQUFtRCxDRXBHaEQsb0N6QndJNkIsb0N5QmpJbEIsY0Y2RmQsQ0FBbUQsb0NFN0ZyQyxlRjZGZCxDQUFtRCxvQ0U3RnJDLFNGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxlRjZGZCxDQUFtRCxvQ0U3RnJDLFNGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxlRjZGZCxDQUFtRCxvQ0U3RnJDLFNGNkZkLENBQW1ELHFDRTdGcEMsZUY2RmYsQ0FBbUQscUNFN0ZwQyxlRjZGZixDQUFtRCxxQ0U3RnBDLFVGNkZmLENBQW1ELENFM0ZoRCxvQ3pCK0g2QixtQ3lCMUluQixjRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsU0ZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsU0ZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsU0ZzR2IsQ0FBbUQsb0NFdEdyQyxlRnNHZCxDQUFtRCxvQ0V0R3JDLGVGc0dkLENBQW1ELG9DRXRHckMsVUZzR2QsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLGtDeUIxSXBCLGNGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsZUZzR1osQ0FBbUQsa0NFdEd2QyxTRnNHWixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxVRnNHYixDQUFtRCxDRXBHaEQsb0N6QndJNkIsMEJtQndEWCxjTTdLRSxDQUFDLGFBQUQsQ0FBQyxnQ0FHckIsZUFFd0IsQ0FBQyxjQUFELENBQUMsQ0FFL0IsMkN6QnlHeUMsd0JtQnVEbkIsY005TUksQ0FBQyxhQUFELENBQUMsOEJBR3JCLGNBRXNCLENBQUMsYUFBRCxDQUFDLENBRTdCLDJDekJnSnlDLGlDeUJySTFCLGNGc0daLENBQW1ELGlDRXRHdkMsZUZzR1osQ0FBbUQsaUNFdEd2QyxTRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsZUZzR1osQ0FBbUQsaUNFdEd2QyxTRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsZUZzR1osQ0FBbUQsaUNFdEd2QyxTRnNHWixDQUFtRCxrQ0V0R3RDLGVGc0diLENBQW1ELGtDRXRHdEMsZUZzR2IsQ0FBbUQsa0NFdEd0QyxVRnNHYixDQUFtRCxDRXBHaEQsb0N6QndJNkIsbUN5QmpJbEIsY0Y2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFNGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFNGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFNGNkZkLENBQW1ELG9DRTdGcEMsZUY2RmYsQ0FBbUQsb0NFN0ZwQyxlRjZGZixDQUFtRCxvQ0U3RnBDLFVGNkZmLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyxrQ3lCNUh6QixjRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsU0Y2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsU0Y2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsU0Y2RmIsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLGVGNkZkLENBQW1ELG1DRTdGckMsVUY2RmQsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGlDeUI1SDFCLGNGNkZaLENBQW1ELGlDRTdGdkMsZUY2RlosQ0FBbUQsaUNFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsZUY2RlosQ0FBbUQsaUNFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsZUY2RlosQ0FBbUQsaUNFN0Z2QyxTRjZGWixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsZUY2RmIsQ0FBbUQsa0NFN0Z0QyxVRjZGYixDQUFtRCxDRTNGaEQsMkN6QjBIbUMseUJtQjZEbEIsY003S0csQ0FBQyxhQUFELENBQUMsK0JBR3JCLGVBRXdCLENBQUMsY0FBRCxDQUFDLENBRS9CLDJDekJ5R3lDLHVCbUJ1RHBCLGNNOU1LLENBQUMsYUFBRCxDQUFDLDZCQUdyQixjQUVzQixDQUFDLGFBQUQsQ0FBQyxDQUU3QiwyQ3pCZ0p5QyxnQ3lCckkxQixjRnNHWixDQUFtRCxnQ0V0R3ZDLGVGc0daLENBQW1ELGdDRXRHdkMsU0ZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLGVGc0daLENBQW1ELGdDRXRHdkMsU0ZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLGVGc0daLENBQW1ELGdDRXRHdkMsU0ZzR1osQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLGVGc0diLENBQW1ELGlDRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLGtDeUJqSWxCLGNGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxTRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxTRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxTRjZGZCxDQUFtRCxtQ0U3RnBDLGVGNkZmLENBQW1ELG1DRTdGcEMsZUY2RmYsQ0FBbUQsbUNFN0ZwQyxVRjZGZixDQUFtRCxDRTNGaEQsMkN6QjBIbUMsaUN5QnJJekIsY0ZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFNGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFNGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFNGc0diLENBQW1ELGtDRXRHckMsZUZzR2QsQ0FBbUQsa0NFdEdyQyxlRnNHZCxDQUFtRCxrQ0V0R3JDLFVGc0dkLENBQW1ELENFcEdoRCwyQ3pCbUltQyxnQ3lCNUgxQixjRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsVUY2RmIsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLHdCbUI2RG5CLGNNN0tJLENBQUMsYUFBRCxDQUFDLDhCQUdyQixlQUV3QixDQUFDLGNBQUQsQ0FBQyxDQUUvQixnQk5vTGMsY092TVcsQ0FBQywrQlAyTUssOEJPM01OLENBQUMsZ0JQdU1aLG9CT3ZNVyxDQUFDLCtCUDJNSyxvQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSywrQk8zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLCtCTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxxQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssK0JPM01OLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxxQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHFDTzNNUCxDQUFDLG9DMUJpSVMsa0JtQnNFbkIsY092TVMsQ0FBQyxpQ1AyTU8sOEJPM01SLENBQUMsa0JQdU1WLG9CT3ZNUyxDQUFDLGlDUDJNTyxvQ08zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixlT3ZNUyxDQUFDLGlDUDJNTywrQk8zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8scUNPM01SLENBQUMsa0JQdU1WLGVPdk1TLENBQUMsaUNQMk1PLCtCTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8scUNPM01SLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxxQ08zTVIsQ0FBQyxrQlB1TVYsZU92TVMsQ0FBQyxpQ1AyTU8sK0JPM01SLENBQUMsbUJQdU1ULHFCT3ZNUSxDQUFDLGtDUDJNUSxxQ08zTVQsQ0FBQyxtQlB1TVQscUJPdk1RLENBQUMsa0NQMk1RLHFDTzNNVCxDQUFDLENQNk0xQiwyQ25CakZ5QyxpQm1CMkUxQixjT3ZNVSxDQUFDLGdDUDJNTSwrQk8zTVAsQ0FBQyxpQlB1TVgsb0JPdk1VLENBQUMsZ0NQMk1NLHFDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLGVPdk1VLENBQUMsZ0NQMk1NLGdDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxpQlB1TVgsZU92TVUsQ0FBQyxnQ1AyTU0sZ0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxlT3ZNVSxDQUFDLGdDUDJNTSxnQ08zTVAsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHNDTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8sc0NPM01SLENBQUMsQ1A2TTFCLDJDbkJqRnlDLGdCbUIyRTNCLGNPdk1XLENBQUMsK0JQMk1LLCtCTzNNTixDQUFDLGdCUHVNWixvQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssZ0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHNDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSyxnQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHNDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUssc0NPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLGdDTzNNTixDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxDUDZNMUIsUUF6SnFCLG1CRXRFakIsQ0ZzRWlCLG9CRXRFakIsQ0ZzRWlCLG1CRXRFakIsQ0ZzRWlCLFlFdEVqQixDQUFJLDJCQUZVLENBRVYsNEJBRlUsQ0FFViwrQkFGVSxDQUVWLDJCQUZVLENBRVYsdUJBRlUsQ0FBTSxjRnFQcEIsV0c5SU0sQ0FBSSxlQUNJLENBQUksY0hpSmxCLFdHdk1DLENBQUksZ0JIMk1ILFdHM01ELENBQUkseVBIeU5GLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksb0NuQnZIa0IscVJtQnNINUIsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CN0h5Qyx1UW1CMkhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLDJDbkI3SHlDLHlQbUIySGxDLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsK01BVzJDLGtCRy9MM0MsQ0grTDJDLHFCRy9MM0MsQ0grTDJDLGlCRy9MM0MsQ0grTDJDLGFHL0wzQyxDQUFDLGlCSDhNVSxlSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFdJdExULENBQW1ELG9DdkJvQ25CLHNCbUI4SG5CLGtCRzFMaEIsQ0gwTGdCLG9CRzFMaEIsQ0gwTGdCLGdCRzFMaEIsQ0gwTGdCLFlHMUxoQixDQUFDLFdBdkNJLENBQUksK1BIc09rQyxrQkcvTDNDLENIK0wyQyxxQkcvTDNDLENIK0wyQyxpQkcvTDNDLENIK0wyQyxhRy9MM0MsQ0FBQyx3QkhxTWlCLFdHNU9iLENBQUksbUJIcVBJLGVJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsVUl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxVSXRMVixDQUFtRCxtQkpzTHpDLGdCSXRMVixDQUFtRCxtQkpzTHpDLGdCSXRMVixDQUFtRCxtQkpzTHpDLFVJdExWLENBQW1ELG9CSnNMeEMsZ0JJdExYLENBQW1ELG9CSnNMeEMsZ0JJdExYLENBQW1ELG9CSnNMeEMsV0l0TFgsQ0FBbUQsQ0p5THBELDJDbkIxSnVDLHFCbUJtSTFCLGtCRzFMZixDSDBMZSxvQkcxTGYsQ0gwTGUsZ0JHMUxmLENIMExlLFlHMUxmLENBQUMsV0F2Q0ksQ0FBSSxrUEhzT2tDLGtCRy9MM0MsQ0grTDJDLHFCRy9MM0MsQ0grTDJDLGlCRy9MM0MsQ0grTDJDLGFHL0wzQyxDQUFDLHVCSHFNZ0IsV0c1T1osQ0FBSSxrQkhxUEcsZUl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxVSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFVJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsVUl0TFQsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxXSXRMVixDQUFtRCxDSnlMcEQsMkNuQjFKdUMsb0JtQm1JM0Isa0JHMUxkLENIMExjLG9CRzFMZCxDSDBMYyxnQkcxTGQsQ0gwTGMsWUcxTGQsQ0FBQyxXQXZDSSxDQUFJLHFPSHNPa0Msa0JHL0wzQyxDSCtMMkMscUJHL0wzQyxDSCtMMkMsaUJHL0wzQyxDSCtMMkMsYUcvTDNDLENBQUMsc0JIcU1lLFdHNU9YLENBQUksaUJIcVBFLGVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsV0l0TFQsQ0FBbUQsQ0p5THBELGdDQVNZLG1CQ25UZSxDQUFpQyxzQkFBakMsQ0FBaUMsMkNwQmdKckIsZ0NtQm1LM0Isb0JDblRlLENBQWlDLHVCQUFqQyxDQUFpQyxDRHFUOUQsc0JBR00sbUJDeFR1QixDQUFpQyxzQkFBakMsQ0FBaUMsMkNwQmdKckIsc0JtQndLbkMsb0JDeFR1QixDQUFpQyx1QkFBakMsQ0FBaUMsQ0QwVDlELGVBbk5TLG1CQ3ZHb0IsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLGVtQnpDaEMsb0JDdkdvQixDQUFpQyx1QkFBakMsQ0FBaUMsQ0RzSWxFLHFCQTNCUSwyQkc3QnVDLENBQWdELGtCRnJFaEUsQ0FBaUMscUJBQWpDLENBQWlDLDJDcEJ1SW5CLHFCbUJyQ3JDLDRCRzdCdUMsQ0FBZ0QsbUJGckVoRSxDQUFpQyxzQkFBakMsQ0FBaUMsQ0QyRzFELHFCQXJDQSxXRzdCRyxDQUFJLHVCSGlDTCxXR2pDQyxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELG9DdEJ1RXhELDZCbUJ0RXpCLFdHN0JMLENBQUksK0JIaUNHLFdHakNQLENBQUksMEJIeUNBLCtCR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsZ0NHYmlDLENBQWdELDJCSGFqRiwyQkdiaUMsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMscUJtQmpFdkMsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsZ0NHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDRCR2JtQyxDQUFnRCw0QkhDbEYsV0c3QkosQ0FBSSw4QkhpQ0UsV0dqQ04sQ0FBSSx5Qkh5Q0QsZ0NHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCwwQkhhbEYsaUNH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QUksQ0FDYiwyQ25CelB1QyxnQ21CdVBmLFdBQ2YsQ0FBSSxDQUNiLDJDbkJ6UHVDLCtCbUJ1UGhCLFdBQ2QsQ0FBSSxDQUNiLGVBbFNPLG1CQ3ZHb0IsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLGVtQnpDaEMsb0JDdkdvQixDQUFpQyx1QkFBakMsQ0FBaUMsQ0RzSWxFLHFCQTNCUSwyQkc3QnVDLENBQWdELGtCRnJFaEUsQ0FBaUMscUJBQWpDLENBQWlDLDJDcEJ1SW5CLHFCbUJyQ3JDLDRCRzdCdUMsQ0FBZ0QsbUJGckVoRSxDQUFpQyxzQkFBakMsQ0FBaUMsQ0QyRzFELHFCQXJDQSxXRzdCRyxDQUFJLHVCSGlDTCxXR2pDQyxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELG9DdEJ1RXhELDZCbUJ0RXpCLFdHN0JMLENBQUksK0JIaUNHLFdHakNQLENBQUksMEJIeUNBLCtCR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRiwwQkdia0MsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsZ0NHYmlDLENBQWdELDJCSGFqRiwyQkdiaUMsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMscUJtQmpFdkMsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsZ0NHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDRCR2JtQyxDQUFnRCw0QkhDbEYsV0c3QkosQ0FBSSw4QkhpQ0UsV0dqQ04sQ0FBSSx5Qkh5Q0QsZ0NHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCwwQkhhbEYsaUNHYmtDLENBQWdELDBCSGFsRixpQ0dia0MsQ0FBZ0QsMEJIYWxGLDRCR2JrQyxDQUFnRCxDSGU3RiwyQ25CbUQyQywyQm1CakVqQyxXRzdCSCxDQUFJLDZCSGlDQyxXR2pDTCxDQUFJLHdCSHlDRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsMkJHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsMkJHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsMkJHYm9DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsNEJHYm1DLENBQWdELENIZTdGLDBCQWtUd0IsNEJRNVliLENBQTJCLG9DM0JrSkQsMEJtQjBQYiw0QlE1WWIsQ0FBMkIsQ1I4WXRDLDJDbkJqUTJDLDBCbUIrUG5CLDZCUTVZYixDQUEyQixDUjhZdEMsMkNu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QSxjQUNSLGFBR1UsQ0FBQSxpQkFDSyxDQUFBLGdCQUNELENBQUEsbUN0RHNKZCxhQUNVLENBQUEsV0FDQSxDQUFBLG9CQUdHLENBSEgseUJBR0csQ0FISCxZQUdHLENBQUUsMkJBQ1osQ0FEWSxlQUNaLENBRFksZ0JBQ1osQ0FEWSxPQUNQLENBQUUsaUJBSVYsVUFDUSxDQUFBLFlBQ1Isc0J1RHBMOEMsQ3ZEb0w5QyxrQ3VEcEw4QyxDdkRvTDlDLG1CdURwTDhDLEN2RG9MOUMsMEJ1RHBMOEMsQ0FBQSxhQ3dFN0Msb0JEdkVnRCxDQ3VFaEQsZ0NEdkVnRCxDQ3VFaEQsaUJEdkVnRCxDQ3VFaEQsd0JEdkVnRCxDQUFBLGNDdUVoRCx1QkR0RVUsQ0NzRVYsOEJEdEVVLENDc0VWLG9CRHRFVSxDQ3NFVixzQkR0RVUsQ0FBQSxlQ3NFVix3QkRyRVcsQ0NxRVgscUNEckVXLENDcUVYLHFCRHJFVyxDQ3FFWCw2QkRyRVcsQ0FBQSxjQ3FFWCxvQ0RwRVUsQ0NvRVYsd0JEcEVVLENDb0VWLDRCRHBFVSxDQUFBLCtCQzZFUSxzQkRqRjJCLENDaUYzQixrQ0RqRjJCLENDaUYzQixtQkRqRjJCLENDaUYzQiwwQkRqRjJCLENBQUEsZ0NDaUYzQixvQkRoRjhCLENDZ0Y5QixnQ0RoRjhCLENDZ0Y5QixpQkRoRjhCLENDZ0Y5Qix3QkRoRjhCLENBQUEsaUNDZ0Y5Qix1QkQvRVIsQ0MrRVEsOEJEL0VSLENDK0VRLG9CRC9FUixDQytFUSxzQkQvRVIsQ0FBQSxXQ2lGTCx1QkR2RUEsQ0N1RUEsOEJEdkVBLENDdUVBLG9CRHZFQSxDQ3VFQSxzQkR2RUEsQ0FBQSxnQkNnRkosNkJEaEZJLENDZ0ZKLHlCRGhGSSxDQ2dGSixxQkRoRkksQ0FBQSxjQzhFTCxxQkQ3RVEsQ0M2RVIsNEJEN0VRLENDNkVSLGtCRDdFUSxDQzZFUixvQkQ3RVEsQ0FBQSxtQkMrRVAsMkJEL0VPLENDK0VQLHVCRC9FTyxDQytFUCxtQkQvRU8sQ0FBQSxjQzZFUix3QkQ1RVEsQ0M0RVIsMEJENUVRLENDNEVSLHFCRDVFUSxDQzRFUixrQkQ1RVEsQ0FBQSxtQkM4RVAseUJEOUVPLENDOEVQLDBCRDlFTyxDQzhFUCxpQkQ5RU8sQ0FBQSxlQzRFUix5QkQzRVMsQ0MyRVQsMkJEM0VTLENDMkVULHNCRDNFUyxDQzJFVCxtQkQzRVMsQ0FBQSxvQkM2RVIsMEJEN0VRLENDNkVSLDJCRDdFUSxDQzZFUixrQkQ3RVEsQ0FBQSxxQkNpRlIsdUJEOUZTLENDOEZULDhCRDlGUyxDQzhGVCxvQkQ5RlMsQ0M4RlQsc0JEOUZTLENBQUEsd0JBWUYsQ0FaRSwwQkFZRixDQVpFLHFCQVlGLENBWkUsa0JBWUYsQ0FBQSw0QkN3Rk8sQ0R4RlAseUJDd0ZPLENEeEZQLG9CQ3dGTyxDQUFBLGVBQ2hCLDJCRDNCRCxDQzJCQyxlRDNCRCxDQzJCQyxnQkQzQkQsQ0MyQkMsT0QzQkksQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxvQzdEd0V5QixpQjZEdkVwQywyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsaUJBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxpQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsaUJBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxDQUFDLDJDN0RtRThCLGdCNkRsRTFDLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxnQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGdCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxnQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLENBQUMsMkM3RG1FOEIsZTZEbEUxQywyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsQ0FBQyxnQkE1RmhCLG1CRFlTLENDWlQsb0JEWVMsQ0NaVCxtQkRZUyxDQ1pULFlEWVMsQ0FBQSxpQkNWUixrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsaUJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLG1CQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxjQUNQLDZCRFZNLENDVU4sNEJEVk0sQ0NVTiwwQkRWTSxDQ1VOLHNCRFZNLENDVU4sa0JEVk0sQ0FBQSxzQkNhTCw2QkRaYSxDQ1liLDZCRFphLENDWWIsa0NEWmEsQ0NZYiw4QkRaYSxDQ1liLDBCRFphLENBQUEsaUJDWWIsMkJEWFEsQ0NXUiw0QkRYUSxDQ1dSLDZCRFhRLENDV1IseUJEWFEsQ0NXUixxQkRYUSxDQUFBLHlCQ1dSLDJCRFZnQixDQ1VoQiw2QkRWZ0IsQ0NVaEIscUNEVmdCLENDVWhCLGlDRFZnQixDQ1VoQiw2QkRWZ0IsQ0FBQSxvQzVENkpzQix3QjZEekloQyxtQkRmQyxDQ2VELG9CRGZDLENDZUQsbUJEZkMsQ0NlRCxZRGZDLENBQUEseUJDaUJBLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSx5QkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsMkJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLHNCQUNQLDZCRHJDRixDQ3FDRSw0QkRyQ0YsQ0NxQ0UsMEJEckNGLENDcUNFLHNCRHJDRixDQ3FDRSxrQkRyQ0YsQ0FBQSw4QkN3Q0csNkJEdkNLLENDdUNMLDZCRHZDSyxDQ3VDTCxrQ0R2Q0ssQ0N1Q0wsOEJEdkNLLENDdUNMLDBCRHZDSyxDQUFBLHlCQ3VDTCwyQkR0Q0EsQ0NzQ0EsNEJEdENBLENDc0NBLDZCRHRDQSxDQ3NDQSx5QkR0Q0EsQ0NzQ0EscUJEdENBLENBQUEsaUNDc0NBLDJCRHJDUSxDQ3FDUiw2QkRyQ1EsQ0NxQ1IscUNEckNRLENDcUNSLGlDRHJDUSxDQ3FDUiw2QkRyQ1EsQ0FBQSxDQUFjLDJDNUR3SmMsdUI2RHBJdEMsbUJEZkMsQ0NlRCxvQkRmQyxDQ2VELG1CRGZDLENDZUQsWURmQyxDQUFBLHdCQ2lCQSxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsd0JBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLDBCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxxQkFDUCw2QkRyQ0YsQ0NxQ0UsNEJEckNGLENDcUNFLDBCRHJDRixDQ3FDRSxzQkRyQ0YsQ0NxQ0Usa0JEckNGLENBQUEsNkJDd0NHLDZCRHZDSyxDQ3VDTCw2QkR2Q0ssQ0N1Q0wsa0NEdkNLLENDdUNMLDhCRHZDSyxDQ3VDTCwwQkR2Q0ssQ0FBQSx3QkN1Q0wsMkJEdENBLENDc0NBLDRCRHRDQSxDQ3NDQSw2QkR0Q0EsQ0NzQ0EseUJEdENBLENDc0NBLHFCRHRDQSxDQUFBLGdDQ3NDQSwyQkRyQ1EsQ0NxQ1IsNkJEckNRLENDcUNSLHFDRHJDUSxDQ3FDUixpQ0RyQ1EsQ0NxQ1IsNkJEckNRLENBQUEsQ0FBYywyQzVEd0pjLHNCNkRwSXRDLG1CRGZDLENDZUQsb0JEZkMsQ0NlRCxtQkRmQyxDQ2VELFlEZkMsQ0FBQSx1QkNpQkEsa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLHVCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSx5QkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsb0JBQ1AsNkJEckNGLENDcUNFLDRCRHJDRixDQ3FDRSwwQkRyQ0YsQ0NxQ0Usc0JEckNGLENDcUNFLGtCRHJDRixDQUFBLDRCQ3dDRyw2QkR2Q0ssQ0N1Q0wsNkJEdkNLLENDdUNMLGtDRHZDSyxDQ3VDTCw4QkR2Q0ssQ0N1Q0wsMEJEdkNLLENBQUEsdUJDdUNMLDJCRHRDQSxDQ3NDQSw0QkR0Q0EsQ0NzQ0EsNkJEdENBLENDc0NBLHlCRHRDQSxDQ3NDQSxxQkR0Q0EsQ0FBQSwrQkNzQ0EsMkJEckNRLENDcUNSLDZCRHJDUSxDQ3FDUixxQ0RyQ1EsQ0NxQ1IsaUNEckNRLENDcUNSLDZCRHJD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QURSLDhCQUNRLENBRFIsb0JBQ1EsQ0FEUixzQkFDUSxDQUFBLFdBQ2xCLFVBR1EsQ0FBQSxVQUlMLG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxVQURULG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxnQlg4TFYsY1d6TE8sQ0FBQSxpQkFDSSxDQUFBLG1CQUNFLENBQUEscUJBQ0MsQ0FBQSxjWHRDaEIsYVcwQ1EsQ0FBQSx3QkFDUixhQUdXLENBQUEsVUFDSCxDQUFBLGdDQUVMLGFBQ1UsQ0FBQSxpQkFDRSxDQUFBLG9CQUNHLENBQUEsc0NBR2pCLGFBQ2EsQ0FBRSxnQkFDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBicmVha3BvaW50c1xuLy8vL1xuXG4vLy8gQSBsaXN0IG9mIG5hbWVkIGJyZWFrcG9pbnRzLiBZb3UgY2FuIHVzZSB0aGVzZSB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0byBxdWlja2x5IGNyZWF0ZSBtZWRpYSBxdWVyaWVzLlxuLy8vIEB0eXBlIE1hcFxuJGJyZWFrcG9pbnRzOiAoXG4gIHNtYWxsOiAwLFxuICBtZWRpdW06IDY0MHB4LFxuICBsYXJnZTogMTAyNHB4LFxuICB4bGFyZ2U6IDEyMDBweCxcbiAgeHhsYXJnZTogMTQ0MHB4LFxuKSAhZGVmYXVsdDtcblxuLy8vIEEgbGlzdCBvZiBuYW1lZCBIaURQSSBicmVha3BvaW50cy4gWW91IGNhbiB1c2UgdGhlc2Ugd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gcXVpY2tseSBjcmVhdGUgbWVkaWEgcXVlcmllcyBmb3IgcmVzb2x1dGlvbnMuXG4vLy8gVmFsdWVzIG11c3QgcmVwcmVzZW50IHRoZSBkZXZpY2UgcGl4ZWxzIC8gd2ViIHBpeGVscyByYXRpb24gYW5kIGJlIHVuaXRsZXNzIG9yIGluIERQUFguXG4vLy8gQHR5cGUgTWFwXG4kYnJlYWtwb2ludHMtaGlkcGk6IChcbiAgaGlkcGktMTogMSxcbiAgaGlkcGktMS01OiAxLjUsXG4gIGhpZHBpLTI6IDIsXG4gIHJldGluYTogMixcbiAgaGlkcGktMzogM1xuKSAhZGVmYXVsdDtcblxuLy8vIFRoZSBsYXJnZXN0IG5hbWVkIGJyZWFrcG9pbnQgaW4gd2hpY2ggdG8gaW5jbHVkZSBwcmludCBhcyBhIG1lZGlhIHR5cGVcbi8vLyBAdHlwZSBLZXl3b3JkXG4kcHJpbnQtYnJlYWtwb2ludDogbGFyZ2UgIWRlZmF1bHQ7XG5cbiQtemYtemVyby1icmVha3BvaW50OiBzbWFsbCAhZGVmYXVsdDtcblxuJC16Zi1icmVha3BvaW50cy1rZXlzOiBtYXAtdG8tbGlzdCgkYnJlYWtwb2ludHMsICdrZXlzJyk7XG5cbkBpZiBudGgobWFwLXZhbHVlcygkYnJlYWtwb2ludHMpLCAxKSAhPSAwIHtcbiAgQGVycm9yICdUaGUgZmlyc3Qga2V5IGluIHRoZSAkYnJlYWtwb2ludHMgbWFwIG11c3QgaGF2ZSBhIHZhbHVlIG9mIFwiMFwiLic7XG59XG5AZWxzZSB7XG4gICQtemYtemVyby1icmVha3BvaW50OiBudGgobWFwLWtleXMoJGJyZWFrcG9pbnRzKSwgMSk7XG59XG5cbi8vLyBBbGwgb2YgdGhlIG5hbWVzIGluIHRoaXMgbGlzdCB3aWxsIGJlIG91dHB1dCBhcyBjbGFzc2VzIGluIHlvdXIgQ1NTLCBsaWtlIGAuc21hbGwtMTJgLCBgLm1lZGl1bS02YCwgYW5kIHNvIG9uLiBFYWNoIHZhbHVlIGluIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgaW4gdGhlIGAkYnJlYWtwb2ludHNgIG1hcC5cbi8vLyBAdHlwZSBMaXN0XG4kYnJlYWtwb2ludC1jbGFzc2VzOiAoc21hbGwgbWVkaXVtIGxhcmdlKSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyBhIG1lZGlhIHF1ZXJ5IHN0cmluZyBtYXRjaGluZyB0aGUgaW5wdXQgdmFsdWUuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gc2VlIHdoYXQgdGhlIHBvc3NpYmxlIGlucHV0cyBhcmUuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkdmFsIFtzbWFsbF0gLSBCcmVha3BvaW50IG5hbWUsIG9yIHB4LCByZW0sIG9yIGVtIHZhbHVlIHRvIHByb2Nlc3MuXG5AZnVuY3Rpb24gYnJlYWtwb2ludCgkdmFsOiAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAvLyBXZWIgc3RhbmRhcmQgUGl4ZWxzIHBlciBpbmNoLiAoMWRkcHggLyAkc3RkLXdlYi1kcGkpID0gMWRwaVxuICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy12YWx1ZXMtMy8jYWJzb2x1dGUtbGVuZ3Roc1xuICAkc3RkLXdlYi1kcGk6IDk2O1xuXG4gIC8vIFNpemUgb3Iga2V5d29yZFxuICAkYnA6IG50aCgkdmFsLCAxKTtcbiAgLy8gVmFsdWUgb2YgdGhlIGZvbGxvd2luZyBicmVha3BvaW50XG4gICRicC1uZXh0OiBudWxsO1xuICAvLyBWYWx1ZSBmb3IgbWF4LXdpZHRoIG1lZGlhIHF1ZXJpZXNcbiAgJGJwLW1pbjogbnVsbDtcbiAgLy8gVmFsdWUgZm9yIG1pbi13aWR0aCBtZWRpYSBxdWVyaWVzXG4gICRicC1tYXg6IG51bGw7XG4gIC8vIERpcmVjdGlvbiBvZiBtZWRpYSBxdWVyeSAodXAsIGRvd24sIG9yIG9ubHkpXG4gICRkaXI6IGlmKGxlbmd0aCgkdmFsKSA+IDEsIG50aCgkdmFsLCAyKSwgdXApO1xuICAvLyBJZiBuYW1lZCwgbmFtZSBvZiB0aGUgYnJlYWtwb2ludFxuICAkbmFtZTogbnVsbDtcbiAgLy8gSWYgdGhlIGJyZWFrcG9pbnQgaXMgYSBIaURQSSBicmVha3BvaW50XG4gICRoaWRwaTogZmFsc2U7XG5cbiAgLy8gT3JpZW50YXRpb24gbWVkaWEgcXVlcmllcyBoYXZlIGEgdW5pcXVlIHN5bnRheFxuICBAaWYgJGJwID09ICdsYW5kc2NhcGUnIG9yICRicCA9PSAncG9ydHJhaXQnIHtcbiAgICBAcmV0dXJuICcob3JpZW50YXRpb246ICN7JGJwfSknO1xuICB9XG5cbiAgLy8gSWYgYSBicmVha3BvaW50IG5hbWUgaXMgZ2l2ZW4sIGdldCBpdHMgdmFsdWUgZnJvbSB0aGUgJGJyZWFrcG9pbnRzLyRicmVha3BvaW50cy1oaWRwaSBtYXAuXG4gIEBpZiB0eXBlLW9mKCRicCkgPT0gJ3N0cmluZycge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRicCkge1xuICAgICAgJG5hbWU6ICRicDtcbiAgICAgICRicDogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgICAgICRicC1uZXh0OiAtemYtbWFwLW5leHQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gICAgfVxuICAgIEBlbHNlIGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cy1oaWRwaSwgJGJwKSB7XG4gICAgICAkbmFtZTogJGJwO1xuICAgICAgJGJwOiBtYXAtZ2V0KCRicmVha3BvaW50cy1oaWRwaSwgJG5hbWUpO1xuICAgICAgJGJwLW5leHQ6IC16Zi1tYXAtbmV4dC1udW1iZXIoJGJyZWFrcG9pbnRzLWhpZHBpLCAkYnApO1xuICAgICAgJGhpZHBpOiB0cnVlO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkYnA6IDA7XG4gICAgICBAd2FybiAnYnJlYWtwb2ludCgpOiBcIiN7JHZhbH1cIiBpcyBub3QgZGVmaW5lZCBpbiB5b3VyIGAkYnJlYWtwb2ludHNgIG9yIGAkYnJlYWtwb2ludHMtaGlkcGlgIHNldHRpbmcuJztcbiAgICB9XG4gIH1cblxuICBAaWYgbm90ICRuYW1lIGFuZCAkZGlyID09ICdvbmx5JyB7XG4gICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogT25seSBuYW1lZCBtZWRpYSBxdWVyaWVzIGNhbiBoYXZlIGFuIGBvbmx5YCByYW5nZS4nO1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE9ubHkgJ29ubHknIGFuZCAndXAnIGhhdmUgYSBtaW4gbGltaXQuXG4gIEBpZiAkZGlyID09ICdvbmx5JyBvciAkZGlyID09ICd1cCcge1xuICAgICRicC1taW46IGlmKCRoaWRwaSwgc3RyaXAtdW5pdCgkYnApLCAtemYtYnAtdG8tZW0oJGJwKSk7XG4gIH1cbiAgLy8gT25seSAnb25seScgYW5kICdkb3duJyBoYXZlIGEgbWF4IGxpbWl0LlxuICBAaWYgJGRpciA9PSAnb25seScgb3IgJGRpciA9PSAnZG93bicge1xuICAgIC8vIElmIHRoZSBicmVha3BvaW50IGlzIGEgdmFsdWUsIHVzZSBpdCBhcyBtYXggbGltaXQuXG4gICAgQGlmIG5vdCAkbmFtZSB7XG4gICAgICAkYnAtbWF4OiBpZigkaGlkcGksIHN0cmlwLXVuaXQoJGJwKSwgLXpmLWJwLXRvLWVtKCRicCkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgYnJlYWtwb2ludCBpcyBuYW1lZCwgdGhlIG1heCBsaW1pdCBpcyB0aGUgZm9sbG93aW5nIGJyZWFrcG9pbnQgLSAxcHguXG4gICAgQGVsc2UgaWYgJGJwLW5leHQge1xuICAgICAgLy8gTWF4IHZhbHVlIGlzIDAuMnB4IHVuZGVyIHRoZSBuZXh0IGJyZWFrcG9pbnQgKDAuMDIgLyAxNiA9IDAuMDAxMjUpLlxuICAgICAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTEzMTNcbiAgICAgICRicC1tYXg6IGlmKCRoaWRwaSwgJGJwLW5leHQgLSAoMS8kc3RkLXdlYi1kcGkpLCAtemYtYnAtdG8tZW0oJGJwLW5leHQpIC0gMC4wMDEyNSk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdGhlIG1lZGlhIHF1ZXJ5IHN0cmluZyBmcm9tIG1pbiBhbmQgbWF4IGxpbWl0cy5cbiAgQGlmICRoaWRwaSB7XG4gICAgLy8gR2VuZXJhdGUgdmFsdWVzIGluIERQSSBpbnN0ZWFkIG9mIERQUFggZm9yIGFuIElFOS0xMS9PcGVyYSBtaW5pIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gU2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9Y3NzLW1lZGlhLXJlc29sdXRpb25cbiAgICAkYnAtbWluLWRwaTogaWYoJGJwLW1pbiwgJGJwLW1pbiAqICRzdGQtd2ViLWRwaSAqIDFkcGksICRicC1taW4pO1xuICAgICRicC1tYXgtZHBpOiBpZigkYnAtbWF4LCAkYnAtbWF4ICogJHN0ZC13ZWItZHBpICogMWRwaSwgJGJwLW1heCk7XG4gICAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICAgIC16Zi1icC1qb2luKCRicC1taW4sICRicC1tYXgsICctd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW8nLCAnLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvJyksXG4gICAgICAtemYtYnAtam9pbigkYnAtbWluLWRwaSwgJGJwLW1heC1kcGksICdtaW4tcmVzb2x1dGlvbicsICdtYXgtcmVzb2x1dGlvbicpLFxuICAgICAgJywgJyk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gLXpmLWJwLWpvaW4oJGJwLW1pbiwgJGJwLW1heCk7XG4gIH1cbn1cblxuLy8vIFdyYXBzIGEgbWVkaWEgcXVlcnkgYXJvdW5kIHRoZSBjb250ZW50IHlvdSBwdXQgaW5zaWRlIHRoZSBtaXhpbi4gVGhpcyBtaXhpbiBhY2NlcHRzIGEgbnVtYmVyIG9mIHZhbHVlczpcbi8vLyAgLSBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIHRoZSBtaXhpbiB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBgJGJyZWFrcG9pbnRzYCBhbmQgYCRicmVha3BvaW50cy1oaWRwaWAgbWFwcywgYW5kIHVzZSBhIG1lZGlhIHF1ZXJ5IHRoZXJlLlxuLy8vICAtIElmIGEgcGl4ZWwgdmFsdWUgaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBlbSB2YWx1ZSB1c2luZyBgJGdsb2JhbC1mb250LXNpemVgIGFzIHRoZSBiYXNlLlxuLy8vICAtIElmIGEgcmVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHVuaXQgd2lsbCBiZSBjaGFuZ2VkIHRvIGVtLlxuLy8vICAtIElmIGFuIGVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBhcy1pcy5cbi8vL1xuLy8vIElmIG11bHRpcGxlIHZhbHVlcyBhcmUgcGFzc2VkLCB0aGUgbWl4aW4gd2lsbCBnZW5lcmF0ZSBhIG1lZGlhIHF1ZXJ5IGZvciBlYWNoIG9mIHRoZW0gYXMgZGVzY3JpYmVkIGFib3ZlLlxuLy8vIFNpbmNlIHRoZSBjb250ZW50IGlzIGR1cGxpY2F0ZWQgZm9yIGVhY2ggYnJlYWtwb2ludCwgdGhpcyBtaXhpbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcHJvcGVydGllcyB0aGF0XG4vLy8gY2hhbmdlIGFjcm9zcyBicmVha3BvaW50cy5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWx1ZXMuLi4gLSBCcmVha3BvaW50IG5hbWUgb3IgcHgvcmVtL2VtIHZhbHVlIHRvIHByb2Nlc3MuXG4vLy9cbi8vLyBAb3V0cHV0IElmIHRoZSBicmVha3BvaW50IGlzIFwiMHB4IGFuZCBsYXJnZXJcIiwgb3V0cHV0cyB0aGUgY29udGVudCBhcy1pcy4gT3RoZXJ3aXNlLCBvdXRwdXRzIHRoZSBjb250ZW50IHdyYXBwZWQgaW4gYSBtZWRpYSBxdWVyeS5cbkBtaXhpbiBicmVha3BvaW50KCR2YWx1ZXMuLi4pIHtcbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHZhbHVlcykge1xuICAgICR2YWx1ZTogbnRoKCR2YWx1ZXMsICRpKTtcbiAgICAkc3RyOiBicmVha3BvaW50KCR2YWx1ZSk7XG4gICAgJGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsIG50aCgkdmFsdWUsIDEpKTtcbiAgICAkcGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsICRwcmludC1icmVha3BvaW50KTtcbiAgICAvLyBEaXJlY3Rpb24gb2YgbWVkaWEgcXVlcnkgKHVwLCBkb3duLCBvciBvbmx5KVxuICAgICRkaXI6IGlmKGxlbmd0aCgkdmFsdWUpID4gMSwgbnRoKCR2YWx1ZSwgMiksIHVwKTtcblxuICAgICRvbGQtemYtc2l6ZTogbnVsbDtcblxuICAgIC8vIE1ha2UgYnJlYWtwb2ludCBzaXplIGF2YWlsYWJsZSBhcyBhIHZhcmlhYmxlXG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6IG50aCgkdmFsdWUsIDEpICFnbG9iYWw7IC8vIGdldCB0aGUgZmlyc3QgdmFsdWUgdG8gYWNjb3VudCBmb3IgYG9ubHlgIGFuZCBgZG93bmAga2V5d29yZHNcblxuICAgIC8vIElmICRzdHIgaXMgc3RpbGwgYW4gZW1wdHkgc3RyaW5nLCBubyBtZWRpYSBxdWVyeSBpcyBuZWVkZWRcbiAgICBAaWYgJHN0ciA9PSAnJyB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHdyYXAgdGhlIGNvbnRlbnQgaW4gYSBtZWRpYSBxdWVyeVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIEZvciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHByaW50LWJyZWFrcG9pbnQsIGFkZCBwcmludCB0byB0aGUgbWVkaWEgdHlwZXNcbiAgICAgIC8vIGdlbmVyYXRlIHByaW50IGlmIHRoZSBicmVha3BvaW50IGFmZmVjdHMgdGhlIHByaW50LWJyZWFrcG9pbnQgKG9yIHNtYWxsZXIpLlxuICAgICAgLy8gVGhpcyBtZWFucyB0aGUgY3VycmVudCBjb25kaXRpb24gb25seSBuZWVkcyB0byBiZSBleHRlbmRlZCBzbyAnZG93bicgYWx3YXlzIGdlbmVyYXRlcyBwcmludC5cbiAgICAgIEBpZiAkYnAgIT0gbnVsbCBhbmQgKCRicCA8PSAkcGJwIG9yICRkaXIgPT0gZG93bikge1xuICAgICAgICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkLXpmLXNpemU6ICRvbGQtemYtc2l6ZSAhZ2xvYmFsO1xuICB9XG59XG5cbi8vLyBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludHMgbWFwIHRvIGEgVVJMLWVuY29kZWQgc3RyaW5nLCBsaWtlIHRoaXM6IGBrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMmAuIFRoZSB2YWx1ZSBpcyB0aGVuIGRyb3BwZWQgaW50byB0aGUgQ1NTIGZvciBhIHNwZWNpYWwgYDxtZXRhPmAgdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHQuIFRoaXMgaXMgaG93IHdlIHRyYW5zZmVyIHZhbHVlcyBmcm9tIFNhc3MgdG8gSmF2YVNjcmlwdCwgc28gdGhleSBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgcGxhY2UuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byBjb252ZXJ0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbWFwJ3MgY29udGVudHMuXG5AZnVuY3Rpb24gLXpmLWJwLXNlcmlhbGl6ZSgkbWFwKSB7XG4gICRzdHI6ICcnO1xuICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcCB7XG4gICAgJHN0cjogJHN0ciArICRrZXkgKyAnPScgKyAtemYtYnAtdG8tZW0oJHZhbHVlKSArICcmJztcbiAgfVxuICAkc3RyOiBzdHItc2xpY2UoJHN0ciwgMSwgLTIpO1xuXG4gIEByZXR1cm4gJHN0cjtcbn1cblxuLy8vIEZpbmQgdGhlIG5leHQga2V5IGluIGEgbWFwLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICRtYXAgLSBNYXAgdG8gdHJhdmVyc2UuXG4vLy8gQHBhcmFtIHtNaXhlZH0gJGtleSAtIEtleSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtNaXhlZH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGFmdGVyIGAka2V5YCwgaWYgYCRrZXlgIHdhcyBmb3VuZC4gSWYgYCRrZXlgIHdhcyBub3QgZm91bmQsIG9yIGAka2V5YCB3YXMgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIG1hcCwgcmV0dXJucyBgbnVsbGAuXG5AZnVuY3Rpb24gLXpmLW1hcC1uZXh0KCRtYXAsICRrZXkpIHtcblxuICAvLyBTdG9yZSB0aGUga2V5cyBvZiB0aGUgbWFwIGFzIGEgbGlzdFxuICAkdmFsdWVzOiBtYXAta2V5cygkbWFwKTtcblxuICAkaTogMDtcblxuICAvLyBJZiB0aGUgS2V5IEV4aXN0cywgR2V0IHRoZSBpbmRleCBvZiB0aGUga2V5IHdpdGhpbiB0aGUgbWFwIGFuZCBhZGQgMSB0byBpdCBmb3IgdGhlIG5leHQgYnJlYWtwb2ludCBpbiB0aGUgbWFwXG4gIEBpZiAobWFwLWhhcy1rZXkoJG1hcCwgJGtleSkpIHtcbiAgICAkaTogaW5kZXgoJHZhbHVlcywgJGtleSkgKyAxO1xuICB9XG5cbiAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBvciBpdCdzIHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwLCByZXR1cm4gbnVsbFxuICBAaWYgKCRpID4gbGVuZ3RoKCRtYXApIG9yICRpID09IDApIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbHVlXG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgbnRoKCR2YWx1ZXMsICRpKSk7XG4gIH1cblxufVxuXG4vLy8gRmluZCB0aGUgbmV4dCBudW1iZXIgaW4gYSBtYXAuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byB0cmF2ZXJzZS5cbi8vLyBAcGFyYW0ge01peGVkfSAkbnVtYmVyIC0gTnVtYmVyIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge01peGVkfSBUaGUgbnVtYmVyIGZvbGxvd2luZyBgJG51bWJlcmAsIGlmIGAkbnVtYmVyYCB3YXMgZm91bmQuIElmIGAkbnVtYmVyYCB3YXMgbm90IGZvdW5kLCBvciBgJG51bWJlcmAgd2FzIHRoZSBiaWdnZXN0IG51bWJlciBpbiB0aGUgbWFwLCByZXR1cm5zIGBudWxsYC5cbkBmdW5jdGlvbiAtemYtbWFwLW5leHQtbnVtYmVyKCRtYXAsICRudW1iZXIpIHtcblxuICAkbmV4dF9udW1iZXI6IG51bGw7XG5cbiAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgIEBpZiB0eXBlLW9mKCR2KSA9PSAnbnVtYmVyJyBhbmQgJHYgPiAkbnVtYmVyIGFuZCAoJG5leHRfbnVtYmVyID09IG51bGwgb3IgJHYgPCAkbmV4dF9udW1iZXIpIHtcbiAgICAgICRuZXh0X251bWJlcjogJHY7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmV4dF9udW1iZXI7XG59XG5cbi8vLyBSZXR1cm4gYSBsaXN0IG9mIG91ciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gJGtleS4gVXNlZnVsIGZvciBkZWFsaW5nIHdpdGhcbi8vLyByZXNwb25zaXZlIGd1dHRlcnMgZm9yIHRoZSBncmlkLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRrZXkgLSBLZXkgdG8gdXNlIGFzIGxhc3QgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtBcnJheX0gVGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgdXAgdG8gYW5kLiBJZiAka2V5IGlzIGF1dG8sIHJldHVybnMgYnJlYWtwb2ludHMgYWJvdmUgdGhlIHplcm9cbkBmdW5jdGlvbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCRrZXkpIHtcbiAgJGxpc3Q6ICgpO1xuICAkZm91bmRfa2V5OiBmYWxzZTtcblxuICBAZWFjaCAkbmFtZSBpbiAkLXpmLWJyZWFrcG9pbnRzLWtleXMge1xuICAgIEBpZiAoJG5hbWUgPT0gJGtleSkge1xuICAgICAgJGZvdW5kX2tleTogdHJ1ZTtcbiAgICB9XG4gICAgQGlmIG5vdCAkZm91bmRfa2V5IHtcbiAgICAgICRsaXN0OiBhcHBlbmQoJGxpc3QsICRuYW1lKTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiAkbGlzdDtcbn1cblxuLy8vIFJldHVybiBhIGxpc3Qgb2Ygb3VyIG5hbWVkIGJyZWFrcG9pbnRzIGxlc3MgdGhhbiAka2V5LiBVc2VmdWwgZm9yIGRlYWxpbmcgd2l0aFxuLy8vIHJlc3BvbnNpdmUgZ3V0dGVycyBmb3IgdGhlIGdyaWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgLSBhIG5hbWVkIG9yIG5vbi1uYW1lZCBicmVha3BvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge0FycmF5fSBUaGUgbGlzdCBvZiBicmVha3BvaW50cyB1cCB0byBhbmQuIElmICRrZXkgaXMgYXV0bywgcmV0dXJucyBicmVha3BvaW50cyBhYm92ZSB0aGUgemVyb1xuQGZ1bmN0aW9uIC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgJGxhc3Q6ICQtemYtemVyby1icmVha3BvaW50O1xuICAkZm91bmQ6IGZhbHNlO1xuXG4gICR2YWx1ZTogdW5pdGxlc3MtY2FsYygkYnJlYWtwb2ludCwgMXB4KTtcbiAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgIEBpZiBub3QgJGZvdW5kIHtcbiAgICAgIEBpZiB1bml0bGVzcy1jYWxjKCR2YWwpID4gJHZhbHVlIHtcbiAgICAgICAgJGZvdW5kOiB0cnVlO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRsYXN0OiAka2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxhc3Q7XG59XG5cbi8vLyBHZXQgYSB2YWx1ZSBmb3IgYSBicmVha3BvaW50IGZyb20gYSByZXNwb25zaXZlIGNvbmZpZyBtYXAgb3Igc2luZ2xlIHZhbHVlLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIHNpbmdsZSB2YWx1ZSwgcmV0dXJuIGl0IHJlZ2FyZGxlc3Mgb2YgYCR2YWx1ZWAuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBoYXMgdGhlIGtleSBgJHZhbHVlYCwgdGhlIGV4YWN0IGJyZWFrcG9pbnQgdmFsdWUgaXMgcmV0dXJuZWQuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBkb2VzICpub3QqIGhhdmUgdGhlIGJyZWFrcG9pbnQsIHRoZSB2YWx1ZSBtYXRjaGluZyB0aGUgbmV4dCBsb3dlc3QgYnJlYWtwb2ludCBpbiB0aGUgY29uZmlnIG1hcCBpcyByZXR1cm5lZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIFJlc3BvbnNpdmUgY29uZmlnIG1hcCBvciBzaW5nbGUgdmFsdWUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgLSBCcmVha3BvaW50IG5hbWUgdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TWl4ZWR9IFRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUuXG5AZnVuY3Rpb24gLXpmLWdldC1icC12YWwoJG1hcCwgJHZhbHVlKSB7XG4gIC8vIElmIHRoZSBnaXZlbiBtYXAgaXMgYSBzaW5nbGUgdmFsdWUsIHJldHVybiBpdFxuICBAaWYgdHlwZS1vZigkbWFwKSA9PSAnbnVtYmVyJyB7XG4gICAgQHJldHVybiAkbWFwO1xuICB9XG5cblxuICAvLyBDaGVjayBpZiB0aGUgYnJlYWtwb2ludCBuYW1lIGV4aXN0cyBnbG9iYWxseVxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJHZhbHVlKSB7XG4gICAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgICAkdmFsdWU6IC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJHZhbHVlKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIEByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgaWYgdGhlIGJyZWFrcG9pbnQgbmFtZSBleGlzdHMgaW4gdGhlIGxvY2FsIGNvbmZpZyBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJG1hcCwgJHZhbHVlKSB7XG4gICAgLy8gSWYgaXQgZG9lcywganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gICAgQHJldHVybiBtYXAtZ2V0KCRtYXAsICR2YWx1ZSk7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCBmaW5kIHRoZSBuZXh0IGxvd2VzdCBicmVha3BvaW50IGFuZCByZXR1cm4gdGhhdCB2YWx1ZVxuICBAZWxzZSB7XG4gICAgJGFuY2hvcjogbnVsbDtcbiAgICAkZm91bmQ6IGZhbHNlO1xuXG4gICAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgQGlmIG5vdCAkZm91bmQge1xuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG1hcCwgJGtleSkge1xuICAgICAgICAgICRhbmNob3I6ICRrZXk7XG4gICAgICAgIH1cbiAgICAgICAgQGlmICRrZXkgPT0gJHZhbHVlIHtcbiAgICAgICAgICAkZm91bmQ6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgJGFuY2hvcik7XG4gIH1cbn1cblxuLy8vIFJldHVybiB0aGUgYmVzdCBicmVha3BvaW50IHRvIHVzZSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxpbmcgY29udGV4dC4gSXQgcmV0dXJucyBpbiBvcmRlcjpcbi8vLyAxLiB0aGUgZ2l2ZW4gYCR2YWx1ZWAgYXJndW1lbnQgaWYgaXQgaXMgbm90IG51bGwuXG4vLy8gMi4gdGhlIGdsb2JhbCBicmVha3BvaW50IGNvbnRleHQgYCQtemYtc2l6ZWAgaWYgaXQgaXMgbm90IG51bGwgKGxpa2UgaWYgY2FsbGVkIGluc2lkZSB0aGVuIGBicmVha3BvaW50KClgIG1peGluKVxuLy8vIDMuIHRoZSBnaXZlbiBgJGRlZmF1bHRgIGFyZ3VtZW50LlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgW251bGxdIC0gQnJlYWtwb2ludCB0byB1c2UgaW4gcHJpb3JpdHkgaWYgbm9uLW51bGwuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGVmYXVsdCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBieSBkZWZhdWx0IGlmIG5vIG90aGVyIHZhbHVlIGNhbiBiZSB1c2VkLlxuLy8vXG4vLy8gQHJldHVybiB7S2V5d29yZH0gVGhlIHJlc29sdmVkIGJyZWFrcG9pbnQuXG5AZnVuY3Rpb24gLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkdmFsdWU6IG51bGwsICRkZWZhdWx0OiBudWxsKSB7XG4gIEBpZiAoJHZhbHVlICE9IG51bGwpIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuICBAZWxzZSBpZiAodmFyaWFibGUtZXhpc3RzKC16Zi1zaXplKSBhbmQgdHlwZS1vZigkLXpmLXNpemUpICE9ICdudW1iZXInKSBhbmQgJC16Zi1zaXplICE9IG51bGwge1xuICAgIEByZXR1cm4gJC16Zi1zaXplO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuICRkZWZhdWx0O1xuICB9XG59XG5cbi8vLyBSZXR1cm4gbWVkaWEgcXVlcnkgc3RyaW5nIGZyb20gdGhlIGdpdmVuIG1pbiBhbmQvb3IgbWF4IGxpbWl0cy5cbi8vLyBJZiBhIGxpbWl0IGlzIGVxdWFsIHRvIGBudWxsYCBvciBgMGAsIGl0IGlzIGlnbm9yZWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF0gLSBNaW4gbWVkaWEgcXVlcnkgbGltaXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXggWzBdIC0gTWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWluLW5hbWUgWydtaW4td2lkdGgnXSAtIE5hbWUgb2YgdGhlIG1pbiBtZWRpYSBxdWVyeSBsaW1pdC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGRlbGltaXRlciBbJ21heC13aWR0aCddIC0gTmFtZSBvZiB0aGUgbWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gTWVkaWEgUXVlcnkgc3RyaW5nLlxuQGZ1bmN0aW9uIC16Zi1icC1qb2luKFxuICAkbWluOiAwLFxuICAkbWF4OiAwLFxuICAkbWluLW5hbWU6ICdtaW4td2lkdGgnLFxuICAkbWF4LW5hbWU6ICdtYXgtd2lkdGgnXG4pIHtcbiAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICBpZigkbWluIGFuZCAkbWluID4gMCwgJygjeyRtaW4tbmFtZX06ICN7JG1pbn0pJywgbnVsbCksXG4gICAgaWYoJG1heCBhbmQgJG1heCA+IDAsICcoI3skbWF4LW5hbWV9OiAjeyRtYXh9KScsIG51bGwpLFxuICAgICcgYW5kICcpO1xufVxuXG4kc21hbGwtdXA6ICcnO1xuJHNtYWxsLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBzbWFsbCkge1xuICAkc21hbGwtdXA6IHNjcmVlbjtcbiAgJHNtYWxsLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHNtYWxsIG9ubHkpfScpO1xufVxuXG4kbWVkaXVtLXVwOiAnJztcbiRtZWRpdW0tb25seTogJyc7XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIG1lZGl1bSkge1xuICAkbWVkaXVtLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChtZWRpdW0pfScpO1xuICAkbWVkaXVtLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KG1lZGl1bSBvbmx5KX0nKTtcbn1cblxuJGxhcmdlLXVwOiAnJztcbiRsYXJnZS1vbmx5OiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgbGFyZ2UpIHtcbiAgJGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSl9Jyk7XG4gICRsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSBvbmx5KX0nKTtcbn1cblxuJHhsYXJnZS11cDogJyc7XG4keGxhcmdlLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCB4bGFyZ2UpIHtcbiAgJHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeGxhcmdlKX0nKTtcbiAgJHhsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4bGFyZ2Ugb25seSl9Jyk7XG59XG5cbiR4eGxhcmdlLXVwOiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgeHhsYXJnZSkge1xuICAkeHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeHhsYXJnZSl9Jyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgcmV2ZWFsXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSBtb2RhbC5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHdpZHRoIG9mIGEgbW9kYWwsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtd2lkdGg6IDYwMHB4ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXhpbXVtIHdpZHRoIG9mIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLW1heC13aWR0aDogJGdsb2JhbC13aWR0aCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgYXJvdW5kIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHotaW5kZXggZm9yIG1vZGFscy4gVGhlIG92ZXJsYXkgdXNlcyB0aGlzIHZhbHVlLCB3aGlsZSB0aGUgbW9kYWwgaXRzZWxmIHVzZXMgdGhpcyB2YWx1ZSBwbHVzIG9uZS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtemluZGV4OiAxMDA1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBtb2RhbCBvdmVybGF5cy5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjQ1KSAhZGVmYXVsdDtcblxuXG4vLyBQbGFjZWhvbGRlciBzZWxlY3RvciBmb3IgbWVkaXVtLWFuZC11cCBtb2RhbHNcbi8vIFByZXZlbnRzIGR1cGxpY2F0ZSBDU1Mgd2hlbiBkZWZpbmluZyBtdWx0aXBsZSBSZXZlYWwgc2l6ZXNcbi8vIFRoaXMgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGJyZWFrcG9pbnQgdGhlbiBgQG1peGluIHJldmVhbC1tb2RhbC13aWR0aGBcbkBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICVyZXZlYWwtY2VudGVyZWQge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gIH1cbn1cblxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbW9kYWwgb3ZlcmxheS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgb3ZlcmxheS5cbkBtaXhpbiByZXZlYWwtb3ZlcmxheSgkYmFja2dyb3VuZDogJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQpIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICRyZXZlYWwtemluZGV4O1xuXG4gIGRpc3BsYXk6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgYSBtb2RhbC5cbkBtaXhpbiByZXZlYWwtbW9kYWwtYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgei1pbmRleDogJHJldmVhbC16aW5kZXggKyAxO1xuICAvLyBXb3JrYXJvdW5kIGFuZHJvaWQgYnJvd3NlciB6LWluZGV4IGJ1Z1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHJldmVhbC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJHJldmVhbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyZXZlYWwtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmV2ZWFsLWJhY2tncm91bmQ7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHJvd3MgZG9uJ3QgaGF2ZSBhIG1pbi13aWR0aCBvbiB0aGVtXG4gIC5jb2x1bW4ge1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxuXG4gIC8vIFN0cmlwIG1hcmdpbnMgZnJvbSB0aGUgbGFzdCBpdGVtIGluIHRoZSBtb2RhbFxuICA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vLyBBZGp1c3RzIHRoZSB3aWR0aCBvZiBhIG1vZGFsLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggLSBXaWR0aCBvZiB0aGUgbW9kYWwuIEdlbmVyYWxseSBhIHBlcmNlbnRhZ2UuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXgtd2lkdGggWyRyZXZlYWwtbWF4LXdpZHRoXSAtIE1heGltdW0gd2lkdGggb2YgdGhlIG1vZGFsLlxuQG1peGluIHJldmVhbC1tb2RhbC13aWR0aChcbiAgJHdpZHRoOiAkcmV2ZWFsLXdpZHRoLFxuICAkbWF4LXdpZHRoOiAkcmV2ZWFsLW1heC13aWR0aFxuKSB7XG4gIC8vIEV4dGVuZHMgbXVzdCBiZSBtYWRlIG91dHNpZGUgb2YgYnJlYWtwb2ludHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlciBTYXNzIHZlcnNpb25zIChsaWJzYXNzIHYzLjUpXG4gIEBleHRlbmQgJXJldmVhbC1jZW50ZXJlZDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIG1heC13aWR0aDogJG1heC13aWR0aDtcbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIGZ1bGwtc2NyZWVuIG1vZGFsLCB3aGljaCBzdHJldGNoZXMgdGhlIGZ1bGwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgd2luZG93LlxuQG1peGluIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuIHtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXZlYWwge1xuXG4gIC8vLyBEaXNhYmxlcyB0aGUgc2Nyb2xsIHdoZW4gUmV2ZWFsIGlzIHNob3duIHRvIHByZXZlbnQgdGhlIGJhY2tncm91bmQgZnJvbSBzaGlmdGluZ1xuICBodG1sLmlzLXJldmVhbC1vcGVuIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuXG4gICAgJi56Zi1oYXMtc2Nyb2xsIHtcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICB9XG5cbiAgICBib2R5IHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheVxuICAucmV2ZWFsLW92ZXJsYXkge1xuICAgIEBpbmNsdWRlIHJldmVhbC1vdmVybGF5O1xuICB9XG5cbiAgLy8gTW9kYWwgY29udGFpbmVyXG4gIC5yZXZlYWwge1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1iYXNlO1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgkcmV2ZWFsLXdpZHRoKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAxMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIC8vIFJlbW92ZSBwYWRkaW5nXG4gICAgJi5jb2xsYXBzZSB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8vIFNpemluZyBjbGFzc2VzXG4gICAgJi50aW55ICB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgzMCUpOyB9XG4gICAgJi5zbWFsbCB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg1MCUpOyB9XG4gICAgJi5sYXJnZSB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg5MCUpOyB9XG5cbiAgICAvLyBGdWxsLXNjcmVlbiBtb2RlXG4gICAgJi5mdWxsIHtcbiAgICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJC16Zi16ZXJvLWJyZWFrcG9pbnQgb25seSkge1xuICAgICAgQGluY2x1ZGUgcmV2ZWFsLW1vZGFsLWZ1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgJi53aXRob3V0LW92ZXJsYXkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGZvdW5kYXRpb24tbm9ybWFsaXplKCkge1xuICAvKiEgbm9ybWFsaXplLmNzcyB2OC4wLjAgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbiAgLy8gRG9jdW1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuXG4gIGh0bWwge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG4gIH1cblxuICAvLyBTZWN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2Vycy5cblxuICBib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gIC8vIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIG1hcmdpbjogMC42N2VtIDA7XG4gIH1cblxuICAvLyBHcm91cGluZyBjb250ZW50XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAgLy8gMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG5cbiAgaHIge1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvLyAxXG4gICAgaGVpZ2h0OiAwOyAvLyAxXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIDJcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cblxuICBwcmUge1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMWVtOyAvLyAyXG4gIH1cblxuICAvLyBUZXh0LWxldmVsIHNlbWFudGljc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cblxuICBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBDaHJvbWUgNTctXG4gIC8vIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG5cbiAgYWJiclt0aXRsZV0ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7IC8vIDFcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLy8gMlxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cblxuICBiLFxuICBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAvLyAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgY29kZSxcbiAga2JkLFxuICBzYW1wIHtcbiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8vIDFcbiAgICBmb250LXNpemU6IDFlbTsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogODAlO1xuICB9XG5cbiAgLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gIC8vIGFsbCBicm93c2Vycy5cblxuICBzdWIsXG4gIHN1cCB7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgYm90dG9tOiAtMC4yNWVtO1xuICB9XG5cbiAgc3VwIHtcbiAgICB0b3A6IC0wLjVlbTtcbiAgfVxuXG4gIC8vIEVtYmVkZGVkIGNvbnRlbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuXG4gIGltZyB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gRm9ybXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAgLy8gMi4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpLlxuXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMTAwJTsgLy8gMVxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgbWFyZ2luOiAwOyAvLyAyXG4gIH1cblxuICAvLyBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAgLy8gMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cblxuICBidXR0b24sXG4gIGlucHV0IHsgLy8gMVxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gIC8vIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cblxuICBidXR0b24sXG4gIHNlbGVjdCB7IC8vIDFcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG5cbiAgYnV0dG9uLFxuICBbdHlwZT1cImJ1dHRvblwiXSxcbiAgW3R5cGU9XCJyZXNldFwiXSxcbiAgW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG4gIFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAvLyBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG5cbiAgYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuICBbdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJyZXNldFwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBmaWVsZHNldCB7XG4gICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAgLy8gMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICAvLyAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gIC8vICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuXG4gIGxlZ2VuZCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxuICAgIGNvbG9yOiBpbmhlcml0OyAvLyAyXG4gICAgZGlzcGxheTogdGFibGU7IC8vIDFcbiAgICBtYXgtd2lkdGg6IDEwMCU7IC8vIDFcbiAgICBwYWRkaW5nOiAwOyAvLyAzXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLy8gMVxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cblxuICBwcm9ncmVzcyB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSAxMCsuXG5cbiAgdGV4dGFyZWEge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gIC8vIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cblxuICBbdHlwZT1cImNoZWNrYm94XCJdLFxuICBbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gICAgcGFkZGluZzogMDsgLy8gMlxuICB9XG5cbiAgLy8gQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuXG4gIFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICBbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuXG4gIFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gMVxuICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvLyAyXG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG5cbiAgW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cblxuICA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMVxuICAgIGZvbnQ6IGluaGVyaXQ7IC8vIDJcbiAgfVxuXG4gIC8vIEludGVyYWN0aXZlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUgMTArLCBhbmQgRmlyZWZveC5cblxuICBkZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC8vIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cblxuICBzdW1tYXJ5IHtcbiAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gIH1cblxuICAvLyBNaXNjXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuXG4gIHRlbXBsYXRlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG5cbiAgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8gc2Fzcy1saW50OmRpc2FibGUgbm8tY29sb3ItbGl0ZXJhbHMsIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcblxuLy8vL1xuLy8vIEBncm91cCBnbG9iYWxcbi8vLy9cblxuQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8vIEZvbnQgc2l6ZSBhdHRyaWJ1dGUgYXBwbGllZCB0byBgPGh0bWw+YCBhbmQgYDxib2R5PmAuIFdlIHVzZSAxMDAlIGJ5IGRlZmF1bHQgc28gdGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSB1c2VyJ3MgYnJvd3NlciBzZXR0aW5ncy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHdpZHRoIG9mIHlvdXIgc2l0ZS4gVXNlZCBieSB0aGUgZ3JpZCB0byBkZXRlcm1pbmUgcm93IHdpZHRoLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC13aWR0aDogcmVtLWNhbGMoMTIwMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBhbGwgdHlwZS4gYCRnbG9iYWwtbGluZWhlaWdodGAgaXMgMjRweCB3aGlsZSBgJGdsb2JhbC1mb250LXNpemVgIGlzIDE2cHhcbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbGluZWhlaWdodDogMS41ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3JzIHVzZWQgZm9yIGJ1dHRvbnMsIGNhbGxvdXRzLCBsaW5rcywgZXRjLiBUaGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbG9yIGNhbGxlZCBgcHJpbWFyeWAuXG4vLy8gQHR5cGUgTWFwXG4kZm91bmRhdGlvbi1wYWxldHRlOiAoXG4gIHByaW1hcnk6ICMxNzc5YmEsXG4gIHNlY29uZGFyeTogIzc2NzY3NixcbiAgc3VjY2VzczogIzNhZGI3NixcbiAgd2FybmluZzogI2ZmYWUwMCxcbiAgYWxlcnQ6ICNjYzRiMzcsXG4pICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgbGlnaHQgZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGxpZ2h0LWdyYXk6ICNlNmU2ZTYgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBtZWRpdW0gZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJG1lZGl1bS1ncmF5OiAjY2FjYWNhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgZGFyayBncmF5IFVJIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kZGFyay1ncmF5OiAjOGE4YThhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgYmxhY2sgdWkgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRibGFjazogIzBhMGEwYSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIHVzZWQgZm9yIHdoaXRlIHVpIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kd2hpdGU6ICNmZWZlZmUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1mb250LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0YWNrIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIExpc3RcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG5cbi8vLyBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBhbnRpYWxpYXNlZCB0eXBlLCB1c2luZyB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGFuZCBgLW1vei1vc3gtZm9udC1zbW9vdGhpbmdgIENTUyBwcm9wZXJ0aWVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRib2R5LWFudGlhbGlhc2VkOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIG1hcmdpbiBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgcGFkZGluZyBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIHBvc2l0aW9uaW5nIG9uIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXBvc2l0aW9uOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIG5vcm1hbCB0eXBlLlxuLy8vIEB0eXBlIEtleXdvcmQgfCBOdW1iZXJcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIGJvbGQgdHlwZS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kZ2xvYmFsLXdlaWdodC1ib2xkOiBib2xkICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSBib3JkZXIgcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1yYWRpdXM6IDAgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgYWxsIG1lbnUgc3R5bGVzLiBDYW4gYmUgb3ZlcndyaXR0ZW4gYXQgaW5kaXZpZHVhbCBtZW51IGNvbXBvbmVudCBsZXZlbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbWVudS1wYWRkaW5nOiAwLjdyZW0gMXJlbSAhZGVmYXVsdDtcblxuLy8vIEdsb2JhbCB2YWx1ZSB1c2VkIGZvciBhbGwgbWVudSBzdHlsZXMuIE5lc3RlZCBtYXJnaW4gZm9yIHN1Ym1lbnUuXG4kZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFNldHMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBDU1MuIENhbiBiZSBlaXRoZXIgYGx0cmAgb3IgYHJ0bGAuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGdsb2JhbC10ZXh0LWRpcmVjdGlvbjogbHRyICFkZWZhdWx0O1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGZvciBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCBpdC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZ2xvYmFsLWZsZXhib3g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVkIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMgZm9yIHByb3RvdHlwZXMgaWYgYXBwbGljYWJsZVxuLy8vIEB0eXBlIEJvb2xlYW5cbiRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBjdXJzb3IncyB2YWx1ZSwgYGF1dG9gIGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBLZXl3b3JkXG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG8gIWRlZmF1bHQ7XG5cbkBpZiBub3QgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICBAZXJyb3IgJ0luICRmb3VuZGF0aW9uLXBhbGV0dGUsIHlvdSBtdXN0IGhhdmUgYSBjb2xvciBuYW1lZCBcInByaW1hcnlcIi4nO1xufVxuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgdGV4dCBkaXJlY3Rpb25cbiRnbG9iYWwtbGVmdDogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBydGwsIHJpZ2h0LCBsZWZ0KTtcbiRnbG9iYWwtcmlnaHQ6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBsZWZ0LCByaWdodCk7XG5cbi8vIEludGVybmFsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIGZsZXgganVzdGlmeWluZyBvcHRpb25zXG4kLXpmLWZsZXgtanVzdGlmeTogLXpmLWZsZXgtanVzdGlmeSgkZ2xvYmFsLXRleHQtZGlyZWN0aW9uKTtcblxuLy8vIEdsb2JhbCB0b2xlcmFuY2UgZm9yIGNvbG9yIHBpY2sgY29udHJhc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwICFkZWZhdWx0O1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgY29sb3JzXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWdsb2JhbC1zdHlsZXMge1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLW5vcm1hbGl6ZTtcblxuICAvLyBUaGVzZSBzdHlsZXMgYXJlIGFwcGxpZWQgdG8gYSA8bWV0YT4gdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHRcbiAgLmZvdW5kYXRpb24tbXEge1xuICAgIGZvbnQtZmFtaWx5OiAnI3stemYtYnAtc2VyaWFsaXplKCRicmVha3BvaW50cyl9JztcbiAgfVxuXG4gIGh0bWwge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIFNldCBib3gtc2l6aW5nIGdsb2JhbGx5IHRvIGhhbmRsZSBwYWRkaW5nIGFuZCBib3JkZXIgd2lkdGhzXG4gICosXG4gICo6OmJlZm9yZSxcbiAgKjo6YWZ0ZXIge1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBEZWZhdWx0IGJvZHkgc3R5bGVzXG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZDtcblxuICAgIGZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseTtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4gICAgY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG5cbiAgICBAaWYgKCRib2R5LWFudGlhbGlhc2VkKSB7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICAvLyBHZXQgcmlkIG9mIGdhcCB1bmRlciBpbWFnZXMgYnkgbWFraW5nIHRoZW0gZGlzcGxheTogaW5saW5lLWJsb2NrOyBieSBkZWZhdWx0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAvLyBHcmlkIGRlZmF1bHRzIHRvIGdldCBpbWFnZXMgYW5kIGVtYmVkcyB0byB3b3JrIHByb3Blcmx5XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIHRha2VzIG9uIGhlaWdodCBhdXRvbWF0aWNhbGx5XG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogNTBweDtcbiAgICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgfVxuXG4gIC8vIE1ha2Ugc2VsZWN0IGVsZW1lbnRzIGFyZSAxMDAlIHdpZHRoIGJ5IGRlZmF1bHRcbiAgc2VsZWN0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgLy8gU3R5bGVzIEdvb2dsZSBNYXBzIGFuZCBNYXBRdWVzdCBlbWJlZHMgcHJvcGVybHlcbiAgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1pZHNcbiAgLm1hcF9jYW52YXMsXG4gIC5tcWEtZGlzcGxheSB7XG4gICAgaW1nLFxuICAgIGVtYmVkLFxuICAgIG9iamVjdCB7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNldCA8YnV0dG9uPiBzdHlsZXMgY3JlYXRlZCBieSBtb3N0IGJyb3dzZXJzXG4gIGJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY3Vyc29yOiAkZ2xvYmFsLWJ1dHRvbi1jdXJzb3I7XG4gIH1cblxuICAvLyBQcmV2ZW50IHRleHQgb3ZlcmZsb3cgb24gcHJlXG4gIHByZSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAvLyBNYWtlIHJlc2V0IGluaGVyaXQgZm9udC1mYW1pbHkgaW5zdGVhZCBvZiBzZXR0aW5ncyBzYW5zLXNlcmlmXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGNsYXNzZXMgdG8gc2hvdy9oaWRlIGVsZW1lbnRzIGluIEphdmFTY3JpcHRcbiAgLmlzLXZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaXMtaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8vICBGb3VuZGF0aW9uIGZvciBTaXRlcyBTZXR0aW5nc1xuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gIFRhYmxlIG9mIENvbnRlbnRzOlxuLy9cbi8vICAgMS4gR2xvYmFsXG4vLyAgIDIuIEJyZWFrcG9pbnRzXG4vLyAgIDMuIFRoZSBHcmlkXG4vLyAgIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gICA1LiBUeXBvZ3JhcGh5IEhlbHBlcnNcbi8vICAgNi4gQWJpZGVcbi8vICAgNy4gQWNjb3JkaW9uXG4vLyAgIDguIEFjY29yZGlvbiBNZW51XG4vLyAgIDkuIEJhZGdlXG4vLyAgMTAuIEJyZWFkY3J1bWJzXG4vLyAgMTEuIEJ1dHRvblxuLy8gIDEyLiBCdXR0b24gR3JvdXBcbi8vICAxMy4gQ2FsbG91dFxuLy8gIDE0LiBDYXJkXG4vLyAgMTUuIENsb3NlIEJ1dHRvblxuLy8gIDE2LiBEcmlsbGRvd25cbi8vICAxNy4gRHJvcGRvd25cbi8vICAxOC4gRHJvcGRvd24gTWVudVxuLy8gIDE5LiBGbGV4Ym94IFV0aWxpdGllc1xuLy8gIDIwLiBGb3Jtc1xuLy8gIDIxLiBMYWJlbFxuLy8gIDIyLiBNZWRpYSBPYmplY3Rcbi8vICAyMy4gTWVudVxuLy8gIDI0LiBNZXRlclxuLy8gIDI1LiBPZmYtY2FudmFzXG4vLyAgMjYuIE9yYml0XG4vLyAgMjcuIFBhZ2luYXRpb25cbi8vICAyOC4gUHJvZ3Jlc3MgQmFyXG4vLyAgMjkuIFByb3RvdHlwZSBBcnJvd1xuLy8gIDMwLiBQcm90b3R5cGUgQm9yZGVyLUJveFxuLy8gIDMxLiBQcm90b3R5cGUgQm9yZGVyLU5vbmVcbi8vICAzMi4gUHJvdG90eXBlIEJvcmRlcmVkXG4vLyAgMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAgMzQuIFByb3RvdHlwZSBGb250LVN0eWxpbmdcbi8vICAzNS4gUHJvdG90eXBlIExpc3QtU3R5bGUtVHlwZVxuLy8gIDM2LiBQcm90b3R5cGUgT3ZlcmZsb3dcbi8vICAzNy4gUHJvdG90eXBlIFBvc2l0aW9uXG4vLyAgMzguIFByb3RvdHlwZSBSb3VuZGVkXG4vLyAgMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vICA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gIDQxLiBQcm90b3R5cGUgU2l6aW5nXG4vLyAgNDIuIFByb3RvdHlwZSBTcGFjaW5nXG4vLyAgNDMuIFByb3RvdHlwZSBUZXh0LURlY29yYXRpb25cbi8vICA0NC4gUHJvdG90eXBlIFRleHQtVHJhbnNmb3JtYXRpb25cbi8vICA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAgNDYuIFJlc3BvbnNpdmUgRW1iZWRcbi8vICA0Ny4gUmV2ZWFsXG4vLyAgNDguIFNsaWRlclxuLy8gIDQ5LiBTd2l0Y2hcbi8vICA1MC4gVGFibGVcbi8vICA1MS4gVGFic1xuLy8gIDUyLiBUaHVtYm5haWxcbi8vICA1My4gVGl0bGUgQmFyXG4vLyAgNTQuIFRvb2x0aXBcbi8vICA1NS4gVG9wIEJhclxuLy8gIDU2LiBYeSBHcmlkXG5cbi8vQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8gMS4gR2xvYmFsXG4vLyAtLS0tLS0tLS1cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCU7XG4kZ2xvYmFsLXdpZHRoOiByZW0tY2FsYygxMjAwKTtcbiRnbG9iYWwtbGluZWhlaWdodDogMS41O1xuJGZvdW5kYXRpb24tcGFsZXR0ZTogKFxuICAgICAgICBwcmltYXJ5OiAjMTc3OWJhLFxuICAgICAgICBzZWNvbmRhcnk6ICM3Njc2NzYsXG4gICAgICAgIHN1Y2Nlc3M6ICMzYWRiNzYsXG4gICAgICAgIHdhcm5pbmc6ICNmZmFlMDAsXG4gICAgICAgIGFsZXJ0OiAjY2M0YjM3LFxuKTtcbiRsaWdodC1ncmF5OiAjZTZlNmU2O1xuJG1lZGl1bS1ncmF5OiAjY2FjYWNhO1xuJGRhcmstZ3JheTogIzhhOGE4YTtcbiRibGFjazogIzBhMGEwYTtcbiR3aGl0ZTogI2ZlZmVmZTtcbiRib2R5LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRib2R5LWZvbnQtY29sb3I6ICRibGFjaztcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4kYm9keS1hbnRpYWxpYXNlZDogdHJ1ZTtcbiRnbG9iYWwtbWFyZ2luOiAxcmVtO1xuJGdsb2JhbC1wYWRkaW5nOiAxcmVtO1xuJGdsb2JhbC1wb3NpdGlvbjogMXJlbTtcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsO1xuJGdsb2JhbC13ZWlnaHQtYm9sZDogYm9sZDtcbiRnbG9iYWwtcmFkaXVzOiAwO1xuJGdsb2JhbC1tZW51LXBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW46IDFyZW07XG4kZ2xvYmFsLXRleHQtZGlyZWN0aW9uOiBsdHI7XG4kZ2xvYmFsLWZsZXhib3g6IHRydWU7XG4kZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50czogZmFsc2U7XG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG87XG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwO1xuJHByaW50LXRyYW5zcGFyZW50LWJhY2tncm91bmRzOiB0cnVlO1xuXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG4kcHJpbnQtaHJlZnM6IHRydWU7XG5cbi8vIDIuIEJyZWFrcG9pbnRzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kYnJlYWtwb2ludHM6IChcbiAgICAgICAgc21hbGw6IDAsXG4gICAgICAgIHNtZWRpdW06IDQwMHB4LFxuICAgICAgICBtZWRpdW06IDY0MHB4LFxuICAgICAgICBsYXJnZTogMTAyNHB4LFxuICAgICAgICB4bGFyZ2U6IDEyMDBweCxcbiAgICAgICAgeHhsYXJnZTogMTQ0MHB4LFxuKTtcbiRwcmludC1icmVha3BvaW50OiBsYXJnZTtcbiRicmVha3BvaW50LWNsYXNzZXM6IChzbWFsbCBzbWVkaXVtIG1lZGl1bSBsYXJnZSk7XG5cbi8vIDMuIFRoZSBHcmlkXG4vLyAtLS0tLS0tLS0tLVxuXG4kZ3JpZC1yb3ctd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW4tY291bnQ6IDEyO1xuJGdyaWQtY29sdW1uLWd1dHRlcjogKFxuICAgICAgICBzbWFsbDogMjBweCxcbiAgICAgICAgbWVkaXVtOiAzMHB4LFxuKTtcbiRncmlkLWNvbHVtbi1hbGlnbi1lZGdlOiB0cnVlO1xuJGdyaWQtY29sdW1uLWFsaWFzOiAnY29sdW1ucyc7XG4kYmxvY2stZ3JpZC1tYXg6IDg7XG5cbi8vIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRoZWFkZXItZm9udC1mYW1pbHk6ICRib2R5LWZvbnQtZmFtaWx5O1xuJGhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGhlYWRlci1mb250LXN0eWxlOiBub3JtYWw7XG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiRoZWFkZXItY29sb3I6IGluaGVyaXQ7XG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJGhlYWRlci1zdHlsZXM6IChcbiAgICAgICAgc21hbGw6IChcbiAgICAgICAgICAgICAgICAnaDEnOiAoJ2ZvbnQtc2l6ZSc6IDI0KSxcbiAgICAgICAgICAgICAgICAnaDInOiAoJ2ZvbnQtc2l6ZSc6IDIwKSxcbiAgICAgICAgICAgICAgICAnaDMnOiAoJ2ZvbnQtc2l6ZSc6IDE5KSxcbiAgICAgICAgICAgICAgICAnaDQnOiAoJ2ZvbnQtc2l6ZSc6IDE4KSxcbiAgICAgICAgICAgICAgICAnaDUnOiAoJ2ZvbnQtc2l6ZSc6IDE3KSxcbiAgICAgICAgICAgICAgICAnaDYnOiAoJ2ZvbnQtc2l6ZSc6IDE2KSxcbiAgICAgICAgKSxcbiAgICAgICAgbWVkaXVtOiAoXG4gICAgICAgICAgICAgICAgJ2gxJzogKCdmb250LXNpemUnOiA0OCksXG4gICAgICAgICAgICAgICAgJ2gyJzogKCdmb250LXNpemUnOiA0MCksXG4gICAgICAgICAgICAgICAgJ2gzJzogKCdmb250LXNpemUnOiAzMSksXG4gICAgICAgICAgICAgICAgJ2g0JzogKCdmb250LXNpemUnOiAyNSksXG4gICAgICAgICAgICAgICAgJ2g1JzogKCdmb250LXNpemUnOiAyMCksXG4gICAgICAgICAgICAgICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICAgICAgICksXG4pO1xuJGhlYWRlci10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuJHNtYWxsLWZvbnQtc2l6ZTogODAlO1xuJGhlYWRlci1zbWFsbC1mb250LWNvbG9yOiAkbWVkaXVtLWdyYXk7XG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNjtcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRwYXJhZ3JhcGgtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiRjb2RlLWNvbG9yOiAkYmxhY2s7XG4kY29kZS1mb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTtcbiRjb2RlLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjb2RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjb2RlLXBhZGRpbmc6IHJlbS1jYWxjKDIgNSAxKTtcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJGFuY2hvci1jb2xvci1ob3Zlcjogc2NhbGUtY29sb3IoJGFuY2hvci1jb2xvciwgJGxpZ2h0bmVzczogLTE0JSk7XG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyOiBub25lO1xuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoO1xuJGhyLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRoci1tYXJnaW46IHJlbS1jYWxjKDIwKSBhdXRvO1xuJGxpc3QtbGluZWhlaWdodDogJHBhcmFncmFwaC1saW5laGVpZ2h0O1xuJGxpc3QtbWFyZ2luLWJvdHRvbTogJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tO1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiRsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuJGxpc3Qtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRkZWZubGlzdC10ZXJtLXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b206IDAuM3JlbTtcbiRibG9ja3F1b3RlLWNvbG9yOiAkZGFyay1ncmF5O1xuJGJsb2NrcXVvdGUtcGFkZGluZzogcmVtLWNhbGMoOSAyMCAwIDE5KTtcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGNpdGUtY29sb3I6ICRkYXJrLWdyYXk7XG4kY2l0ZS1wc2V1ZG8tY29udGVudDogJ1xcMjAxNCBcXDAwMjAnO1xuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlO1xuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrO1xuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRrZXlzdHJva2UtcGFkZGluZzogcmVtLWNhbGMoMiA0IDApO1xuJGtleXN0cm9rZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGFiYnItdW5kZXJsaW5lOiAxcHggZG90dGVkICRibGFjaztcblxuLy8gNS4gVHlwb2dyYXBoeSBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjU7XG4kbGVhZC1saW5laGVpZ2h0OiAxLjY7XG4kc3ViaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXk7XG4kc3ViaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kc3ViaGVhZGVyLW1hcmdpbi10b3A6IDAuMnJlbTtcbiRzdWJoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJHN0YXQtZm9udC1zaXplOiAyLjVyZW07XG5cbi8vIDYuIEFiaWRlXG4vLyAtLS0tLS0tLVxuXG4kYWJpZGUtaW5wdXRzOiB0cnVlO1xuJGFiaWRlLWxhYmVsczogdHJ1ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCk7XG4kZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJGlucHV0LWVycm9yLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuXG4vLyA3LiBBY2NvcmRpb25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kYWNjb3JkaW9uLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlO1xuJGFjY29yZGlvbi10aXRsZS1mb250LXNpemU6IHJlbS1jYWxjKDEyKTtcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXk7XG4kYWNjb3JkaW9uLWl0ZW0tcGFkZGluZzogMS4yNXJlbSAxcmVtO1xuJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tY29udGVudC1ib3JkZXI6IDFweCBzb2xpZCAkbGlnaHQtZ3JheTtcbiRhY2NvcmRpb24tY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA4LiBBY2NvcmRpb24gTWVudVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG4kYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luOiAkZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiRhY2NvcmRpb25tZW51LWFycm93czogdHJ1ZTtcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRhY2NvcmRpb25tZW51LWl0ZW0tYmFja2dyb3VuZDogbnVsbDtcbiRhY2NvcmRpb25tZW51LWJvcmRlcjogbnVsbDtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLWJhY2tncm91bmQ6IG51bGw7XG4kYWNjb3JkaW9uLXN1Ym1lbnUtdG9nZ2xlLWJvcmRlcjogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtd2lkdGg6IDQwcHg7XG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyA5LiBCYWRnZVxuLy8gLS0tLS0tLS1cblxuJGJhZGdlLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJhZGdlLWNvbG9yOiAkd2hpdGU7XG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2s7XG4kYmFkZ2UtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRiYWRnZS1wYWRkaW5nOiAwLjNlbTtcbiRiYWRnZS1taW53aWR0aDogMi4xZW07XG4kYmFkZ2UtZm9udC1zaXplOiAwLjZyZW07XG5cbi8vIDEwLiBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiRicmVhZGNydW1icy1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwO1xuJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplOiByZW0tY2FsYygxMSk7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50OiAkYmxhY2s7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtO1xuJGJyZWFkY3J1bWJzLWl0ZW0tdXBwZXJjYXNlOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJztcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLXJ0bDogJ1xcXFwnO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWNvbG9yOiAkbWVkaXVtLWdyYXk7XG5cbi8vIDExLiBCdXR0b25cbi8vIC0tLS0tLS0tLS1cblxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdDtcbiRidXR0b24tcGFkZGluZzogMC44NWVtIDFlbTtcbiRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gMDtcbiRidXR0b24tZmlsbDogc29saWQ7XG4kYnV0dG9uLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyOiBzY2FsZS1jb2xvcigkYnV0dG9uLWJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xNSUpO1xuJGJ1dHRvbi1jb2xvcjogJHdoaXRlO1xuJGJ1dHRvbi1jb2xvci1hbHQ6ICRibGFjaztcbiRidXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRidXR0b24taG9sbG93LWJvcmRlci13aWR0aDogMXB4O1xuJGJ1dHRvbi1zaXplczogKFxuICAgICAgICB0aW55OiAwLjZyZW0sXG4gICAgICAgIHNtYWxsOiAwLjc1cmVtLFxuICAgICAgICBkZWZhdWx0OiAwLjlyZW0sXG4gICAgICAgIGxhcmdlOiAxLjI1cmVtLFxuKTtcbiRidXR0b24tcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlci1saWdodG5lc3M6IC0yMCU7XG4kYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3M6IC01MCU7XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0O1xuJGJ1dHRvbi1yZXNwb25zaXZlLWV4cGFuZGVkOiBmYWxzZTtcblxuLy8gMTIuIEJ1dHRvbiBHcm91cFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kYnV0dG9uZ3JvdXAtbWFyZ2luOiAxcmVtO1xuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweDtcbiRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcjogJy5idXR0b24nO1xuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDY7XG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWU7XG5cbi8vIDEzLiBDYWxsb3V0XG4vLyAtLS0tLS0tLS0tLVxuXG4kY2FsbG91dC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FsbG91dC1iYWNrZ3JvdW5kLWZhZGU6IDg1JTtcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KTtcbiRjYWxsb3V0LW1hcmdpbjogMCAwIDFyZW0gMDtcbiRjYWxsb3V0LXBhZGRpbmc6IDFyZW07XG4kY2FsbG91dC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhbGxvdXQtZm9udC1jb2xvci1hbHQ6ICRib2R5LWJhY2tncm91bmQ7XG4kY2FsbG91dC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGNhbGxvdXQtbGluay10aW50OiAzMCU7XG5cbi8vIDE0LiBDYXJkXG4vLyAtLS0tLS0tLVxuXG4kY2FyZC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FyZC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5O1xuJGNhcmQtc2hhZG93OiBub25lO1xuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmc7XG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcblxuLy8gMTUuIENsb3NlIEJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kY2xvc2VidXR0b24tcG9zaXRpb246IHJpZ2h0IHRvcDtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbDogKFxuICAgICAgICBzbWFsbDogMC42NnJlbSxcbiAgICAgICAgbWVkaXVtOiAxcmVtLFxuKTtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtdmVydGljYWw6IChcbiAgICAgICAgc21hbGw6IDAuMzNlbSxcbiAgICAgICAgbWVkaXVtOiAwLjVyZW0sXG4pO1xuJGNsb3NlYnV0dG9uLXNpemU6IChcbiAgICAgICAgc21hbGw6IDEuNWVtLFxuICAgICAgICBtZWRpdW06IDJlbSxcbik7XG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMTtcbiRjbG9zZWJ1dHRvbi1jb2xvcjogJGRhcmstZ3JheTtcbiRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjogJGJsYWNrO1xuXG4vLyAxNi4gRHJpbGxkb3duXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhcjtcbiRkcmlsbGRvd24tYXJyb3dzOiB0cnVlO1xuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcmlsbGRvd24tbmVzdGVkLW1hcmdpbjogMDtcbiRkcmlsbGRvd24tYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyaWxsZG93bi1zdWJtZW51LXBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyAxNy4gRHJvcGRvd25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kZHJvcGRvd24tcGFkZGluZzogMXJlbTtcbiRkcm9wZG93bi1iYWNrZ3JvdW5kOiAkYm9keS1iYWNrZ3JvdW5kO1xuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1mb250LXNpemU6IDFyZW07XG4kZHJvcGRvd24td2lkdGg6IDMwMHB4O1xuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZHJvcGRvd24tc2l6ZXM6IChcbiAgICAgICAgdGlueTogMTAwcHgsXG4gICAgICAgIHNtYWxsOiAyMDBweCxcbiAgICAgICAgbGFyZ2U6IDQwMHB4LFxuKTtcblxuLy8gMTguIERyb3Bkb3duIE1lbnVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlO1xuJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvcjogJGFuY2hvci1jb2xvcjtcbiRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nOiAxLjVyZW07XG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHg7XG4kZHJvcGRvd25tZW51LWJhY2tncm91bmQ6IG51bGw7XG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyb3Bkb3dubWVudS1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcm9wZG93bm1lbnUtbmVzdGVkLW1hcmdpbjogMDtcbiRkcm9wZG93bm1lbnUtc3VibWVudS1wYWRkaW5nOiAkZHJvcGRvd25tZW51LXBhZGRpbmc7XG4kZHJvcGRvd25tZW51LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1tZW51LWl0ZW0tY29sb3ItYWN0aXZlOiBnZXQtY29sb3IocHJpbWFyeSk7XG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudDtcblxuLy8gMTkuIEZsZXhib3ggVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2O1xuJGZsZXhib3gtcmVzcG9uc2l2ZS1icmVha3BvaW50czogdHJ1ZTtcblxuLy8gMjAuIEZvcm1zXG4vLyAtLS0tLS0tLS1cblxuJGZpZWxkc2V0LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRmaWVsZHNldC1wYWRkaW5nOiByZW0tY2FsYygyMCk7XG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKTtcbiRsZWdlbmQtcGFkZGluZzogcmVtLWNhbGMoMCAzKTtcbiRmb3JtLXNwYWNpbmc6IHJlbS1jYWxjKDE2KTtcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrO1xuJGhlbHB0ZXh0LWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGhlbHB0ZXh0LWZvbnQtc3R5bGU6IGl0YWxpYztcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjaztcbiRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDogJGxpZ2h0LWdyYXk7XG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1wcmVmaXgtcGFkZGluZzogMXJlbTtcbiRmb3JtLWxhYmVsLWNvbG9yOiAkYmxhY2s7XG4kZm9ybS1sYWJlbC1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kZm9ybS1sYWJlbC1saW5lLWhlaWdodDogMS44O1xuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5O1xuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGlucHV0LWNvbG9yOiAkYmxhY2s7XG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1mb250LWZhbWlseTogaW5oZXJpdDtcbiRpbnB1dC1mb250LXNpemU6IHJlbS1jYWxjKDE2KTtcbiRpbnB1dC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGlucHV0LWxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4kaW5wdXQtYmFja2dyb3VuZDogJHdoaXRlO1xuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheTtcbiRpbnB1dC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMjtcbiRpbnB1dC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKCRibGFjaywgMC4xKTtcbiRpbnB1dC1zaGFkb3ctZm9jdXM6IDAgMCA1cHggJG1lZGl1bS1ncmF5O1xuJGlucHV0LWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7XG4kaW5wdXQtbnVtYmVyLXNwaW5uZXJzOiB0cnVlO1xuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZm9ybS1idXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMjEuIExhYmVsXG4vLyAtLS0tLS0tLS1cblxuJGxhYmVsLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGxhYmVsLWNvbG9yOiAkd2hpdGU7XG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2s7XG4kbGFiZWwtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbTtcbiRsYWJlbC1wYWRkaW5nOiAwLjMzMzMzcmVtIDAuNXJlbTtcbiRsYWJlbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyMi4gTWVkaWEgT2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlO1xuXG4vLyAyMy4gTWVudVxuLy8gLS0tLS0tLS1cblxuJG1lbnUtbWFyZ2luOiAwO1xuJG1lbnUtbmVzdGVkLW1hcmdpbjogJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW47XG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW07XG4kbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogJHdoaXRlO1xuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpO1xuJG1lbnUtaWNvbi1zcGFjaW5nOiAwLjI1cmVtO1xuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWU7XG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZTtcbiRtZW51LWljb25zLWJhY2stY29tcGF0OiB0cnVlO1xuXG4vLyAyNC4gTWV0ZXJcbi8vIC0tLS0tLS0tLVxuXG4kbWV0ZXItaGVpZ2h0OiAxcmVtO1xuJG1ldGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kbWV0ZXItYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5O1xuJG1ldGVyLWZpbGwtZ29vZDogJHN1Y2Nlc3MtY29sb3I7XG4kbWV0ZXItZmlsbC1tZWRpdW06ICR3YXJuaW5nLWNvbG9yO1xuJG1ldGVyLWZpbGwtYmFkOiAkYWxlcnQtY29sb3I7XG5cbi8vIDI1LiBPZmYtY2FudmFzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5O1xuJG9mZmNhbnZhcy1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoJGJsYWNrLCAwLjcpO1xuJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZTogMjBweDtcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LWNvbG9yOiByZ2JhKCRibGFjaywgMC4yNSk7XG4kb2ZmY2FudmFzLW92ZXJsYXktemluZGV4OiAxMTtcbiRvZmZjYW52YXMtcHVzaC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDogMTM7XG4kb2ZmY2FudmFzLXJldmVhbC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cztcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmc6IGVhc2U7XG4kb2ZmY2FudmFzLWZpeGVkLXJldmVhbDogdHJ1ZTtcbiRvZmZjYW52YXMtZXhpdC1iYWNrZ3JvdW5kOiByZ2JhKCR3aGl0ZSwgMC4yNSk7XG4kbWFpbmNvbnRlbnQtY2xhc3M6ICdvZmYtY2FudmFzLWNvbnRlbnQnO1xuXG4vLyAyNi4gT3JiaXRcbi8vIC0tLS0tLS0tLVxuXG4kb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU6ICRkYXJrLWdyYXk7XG4kb3JiaXQtYnVsbGV0LWRpYW1ldGVyOiAxLjJyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbjogMC4xcmVtO1xuJG9yYml0LWJ1bGxldC1tYXJnaW4tdG9wOiAwLjhyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbTtcbiRvcmJpdC1jYXB0aW9uLWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTA7XG5cbi8vIDI3LiBQYWdpbmF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kcGFnaW5hdGlvbi1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvcjogJGJsYWNrO1xuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKTtcbiRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZzogcmVtLWNhbGMoMSk7XG4kcGFnaW5hdGlvbi1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheTtcbiRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1jdXJyZW50OiAkcHJpbWFyeS1jb2xvcjtcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJHBhZ2luYXRpb24tZWxsaXBzaXMtY29sb3I6ICRibGFjaztcbiRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtczogZmFsc2U7XG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZTtcbiRwYWdpbmF0aW9uLWFycm93czogdHJ1ZTtcblxuLy8gMjguIFByb2dyZXNzIEJhclxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvZ3Jlc3MtaGVpZ2h0OiAxcmVtO1xuJHByb2dyZXNzLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRwcm9ncmVzcy1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm9ncmVzcy1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyOS4gUHJvdG90eXBlIEFycm93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtYXJyb3ctZGlyZWN0aW9uczogKFxuICAgICAgICBkb3duLFxuICAgICAgICB1cCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnRcbik7XG4kcHJvdG90eXBlLWFycm93LXNpemU6IDAuNDM3NXJlbTtcbiRwcm90b3R5cGUtYXJyb3ctY29sb3I6ICRibGFjaztcblxuLy8gMzAuIFByb3RvdHlwZSBCb3JkZXItQm94XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1ib3JkZXItYm94LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzEuIFByb3RvdHlwZSBCb3JkZXItTm9uZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlci1ub25lLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzIuIFByb3RvdHlwZSBCb3JkZXJlZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlcmVkLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtYm9yZGVyLXdpZHRoOiByZW0tY2FsYygxKTtcbiRwcm90b3R5cGUtYm9yZGVyLXR5cGU6IHNvbGlkO1xuJHByb3RvdHlwZS1ib3JkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcblxuLy8gMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kaXNwbGF5LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtZGlzcGxheTogKFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIGlubGluZS1ibG9jayxcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHRhYmxlLFxuICAgICAgICB0YWJsZS1jZWxsXG4pO1xuXG4vLyAzNC4gUHJvdG90eXBlIEZvbnQtU3R5bGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1mb250LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtd2lkZS1sZXR0ZXItc3BhY2luZzogcmVtLWNhbGMoNCk7XG4kcHJvdG90eXBlLWZvbnQtbm9ybWFsOiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kcHJvdG90eXBlLWZvbnQtYm9sZDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcblxuLy8gMzUuIFByb3RvdHlwZSBMaXN0LVN0eWxlLVR5cGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtbGlzdC1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXN0eWxlLXR5cGUtdW5vcmRlcmVkOiAoXG4gICAgICAgIGRpc2MsXG4gICAgICAgIGNpcmNsZSxcbiAgICAgICAgc3F1YXJlXG4pO1xuJHByb3RvdHlwZS1zdHlsZS10eXBlLW9yZGVyZWQ6IChcbiAgICAgICAgZGVjaW1hbCxcbiAgICAgICAgbG93ZXItYWxwaGEsXG4gICAgICAgIGxvd2VyLWxhdGluLFxuICAgICAgICBsb3dlci1yb21hbixcbiAgICAgICAgdXBwZXItYWxwaGEsXG4gICAgICAgIHVwcGVyLWxhdGluLFxuICAgICAgICB1cHBlci1yb21hblxuKTtcblxuLy8gMzYuIFByb3RvdHlwZSBPdmVyZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLW92ZXJmbG93LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtb3ZlcmZsb3c6IChcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgaGlkZGVuLFxuICAgICAgICBzY3JvbGxcbik7XG5cbi8vIDM3LiBQcm90b3R5cGUgUG9zaXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1wb3NpdGlvbi1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXBvc2l0aW9uOiAoXG4gICAgICAgIHN0YXRpYyxcbiAgICAgICAgcmVsYXRpdmUsXG4gICAgICAgIGFic29sdXRlLFxuICAgICAgICBmaXhlZFxuKTtcbiRwcm90b3R5cGUtcG9zaXRpb24tei1pbmRleDogOTc1O1xuXG4vLyAzOC4gUHJvdG90eXBlIFJvdW5kZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXJvdW5kZWQtYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3JkZXItcmFkaXVzOiByZW0tY2FsYygzKTtcblxuLy8gMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtc2VwYXJhdG9yLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtc2VwYXJhdG9yLWFsaWduOiBjZW50ZXI7XG4kcHJvdG90eXBlLXNlcGFyYXRvci1oZWlnaHQ6IHJlbS1jYWxjKDIpO1xuJHByb3RvdHlwZS1zZXBhcmF0b3Itd2lkdGg6IDNyZW07XG4kcHJvdG90eXBlLXNlcGFyYXRvci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm90b3R5cGUtc2VwYXJhdG9yLW1hcmdpbi10b3A6ICRnbG9iYWwtbWFyZ2luO1xuXG4vLyA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaGFkb3ctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIC4xNiksXG4wIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpO1xuXG4vLyA0MS4gUHJvdG90eXBlIFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaXppbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zaXppbmc6IChcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuKTtcbiRwcm90b3R5cGUtc2l6ZXM6IChcbiAgICAgICAgMjU6IDI1JSxcbiAgICAgICAgNTA6IDUwJSxcbiAgICAgICAgNzU6IDc1JSxcbiAgICAgICAgMTAwOiAxMDAlXG4pO1xuXG4vLyA0Mi4gUHJvdG90eXBlIFNwYWNpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXNwYWNpbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zcGFjZXJzLWNvdW50OiAzO1xuXG4vLyA0My4gUHJvdG90eXBlIFRleHQtRGVjb3JhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kZWNvcmF0aW9uLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1kZWNvcmF0aW9uOiAoXG4gICAgICAgIG92ZXJsaW5lLFxuICAgICAgICB1bmRlcmxpbmUsXG4gICAgICAgIGxpbmUtdGhyb3VnaCxcbik7XG5cbi8vIDQ0LiBQcm90b3R5cGUgVGV4dC1UcmFuc2Zvcm1hdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdHJhbnNmb3JtYXRpb24tYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS10ZXh0LXRyYW5zZm9ybWF0aW9uOiAoXG4gICAgICAgIGxvd2VyY2FzZSxcbiAgICAgICAgdXBwZXJjYXNlLFxuICAgICAgICBjYXBpdGFsaXplXG4pO1xuXG4vLyA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdXRpbGl0aWVzLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cbi8vIDQ2LiBSZXNwb25zaXZlIEVtYmVkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tOiByZW0tY2FsYygxNik7XG4kcmVzcG9uc2l2ZS1lbWJlZC1yYXRpb3M6IChcbiAgICAgICAgZGVmYXVsdDogNCBieSAzLFxuICAgICAgICB3aWRlc2NyZWVuOiAxNiBieSA5LFxuKTtcblxuLy8gNDcuIFJldmVhbFxuLy8gLS0tLS0tLS0tLVxuXG4kcmV2ZWFsLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRyZXZlYWwtd2lkdGg6IDYwMHB4O1xuJHJldmVhbC1tYXgtd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kcmV2ZWFsLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRyZXZlYWwtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJHJldmVhbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHJldmVhbC16aW5kZXg6IDEwMDU7XG4kcmV2ZWFsLW92ZXJsYXktYmFja2dyb3VuZDogcmdiYSgkYmxhY2ssIDAuNDUpO1xuXG4vLyA0OC4gU2xpZGVyXG4vLyAtLS0tLS0tLS0tXG5cbiRzbGlkZXItd2lkdGgtdmVydGljYWw6IDAuNXJlbTtcbiRzbGlkZXItdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4kc2xpZGVyLWhlaWdodDogMC41cmVtO1xuJHNsaWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRzbGlkZXItZmlsbC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kc2xpZGVyLWhhbmRsZS1oZWlnaHQ6IDEuNHJlbTtcbiRzbGlkZXItaGFuZGxlLXdpZHRoOiAxLjRyZW07XG4kc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRzbGlkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNDkuIFN3aXRjaFxuLy8gLS0tLS0tLS0tLVxuXG4kc3dpdGNoLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU6ICRwcmltYXJ5LWNvbG9yO1xuJHN3aXRjaC1oZWlnaHQ6IDJyZW07XG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW07XG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbTtcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW07XG4kc3dpdGNoLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kc3dpdGNoLW1hcmdpbjogJGdsb2JhbC1tYXJnaW47XG4kc3dpdGNoLXBhZGRsZS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc3dpdGNoLXBhZGRsZS1vZmZzZXQ6IDAuMjVyZW07XG4kc3dpdGNoLXBhZGRsZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0O1xuXG4vLyA1MC4gVGFibGVcbi8vIC0tLS0tLS0tLVxuXG4kdGFibGUtYmFja2dyb3VuZDogJHdoaXRlO1xuJHRhYmxlLWNvbG9yLXNjYWxlOiA1JTtcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1wYWRkaW5nOiByZW0tY2FsYyg4IDEwIDEwKTtcbiR0YWJsZS1ob3Zlci1zY2FsZTogMiU7XG4kdGFibGUtcm93LWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtcm93LXN0cmlwZS1ob3ZlcjogZGFya2VuKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUgKyAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWlzLXN0cmlwZWQ6IHRydWU7XG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1zdHJpcGU6IGV2ZW47XG4kdGFibGUtaGVhZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlIC8gMik7XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWZvb3QtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSk7XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWhlYWQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWJsZS1mb290LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4kc2hvdy1oZWFkZXItZm9yLXN0YWNrZWQ6IGZhbHNlO1xuJHRhYmxlLXN0YWNrLWJyZWFrcG9pbnQ6IG1lZGl1bTtcblxuLy8gNTEuIFRhYnNcbi8vIC0tLS0tLS0tXG5cbiR0YWItbWFyZ2luOiAwO1xuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiR0YWItYmFja2dyb3VuZC1hY3RpdmU6ICRsaWdodC1ncmF5O1xuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJHRhYi1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZTtcbiR0YWItaXRlbS1wYWRkaW5nOiAxLjI1cmVtIDEuNXJlbTtcbiR0YWItY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbnRlbnQtYm9yZGVyOiAkbGlnaHQtZ3JheTtcbiR0YWItY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA1Mi4gVGh1bWJuYWlsXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiR0aHVtYm5haWwtYm9yZGVyOiA0cHggc29saWQgJHdoaXRlO1xuJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiR0aHVtYm5haWwtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgkYmxhY2ssIDAuMik7XG4kdGh1bWJuYWlsLXNoYWRvdy1ob3ZlcjogMCAwIDZweCAxcHggcmdiYSgkcHJpbWFyeS1jb2xvciwgMC41KTtcbiR0aHVtYm5haWwtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcyBlYXNlLW91dDtcbiR0aHVtYm5haWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTMuIFRpdGxlIEJhclxuLy8gLS0tLS0tLS0tLS0tLVxuXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrO1xuJHRpdGxlYmFyLWNvbG9yOiAkd2hpdGU7XG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtO1xuJHRpdGxlYmFyLXRleHQtZm9udC13ZWlnaHQ6IGJvbGQ7XG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlO1xuJHRpdGxlYmFyLWljb24tY29sb3ItaG92ZXI6ICRtZWRpdW0tZ3JheTtcbiR0aXRsZWJhci1pY29uLXNwYWNpbmc6IDAuMjVyZW07XG5cbi8vIDU0LiBUb29sdGlwXG4vLyAtLS0tLS0tLS0tLVxuXG4kaGFzLXRpcC1jdXJzb3I6IGhlbHA7XG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheTtcbiR0b29sdGlwLWJhY2tncm91bmQtY29sb3I6ICRibGFjaztcbiR0b29sdGlwLWNvbG9yOiAkd2hpdGU7XG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtO1xuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbTtcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbTtcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2O1xuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTUuIFRvcCBCYXJcbi8vIC0tLS0tLS0tLS0tXG5cbiR0b3BiYXItcGFkZGluZzogMC41cmVtO1xuJHRvcGJhci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwO1xuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHg7XG4kdG9wYmFyLXVuc3RhY2stYnJlYWtwb2ludDogbWVkaXVtO1xuXG4vLyA1Ni4gWHkgR3JpZFxuLy8gLS0tLS0tLS0tLS1cblxuJHh5LWdyaWQ6IHRydWU7XG4kZ3JpZC1jb250YWluZXI6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW5zOiAxMjtcbiRncmlkLW1hcmdpbi1ndXR0ZXJzOiAoXG4gICAgICAgIHNtYWxsOiAyMHB4LFxuICAgICAgICBtZWRpdW06IDMwcHhcbik7XG4kZ3JpZC1wYWRkaW5nLWd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzO1xuJGdyaWQtY29udGFpbmVyLXBhZGRpbmc6ICRncmlkLXBhZGRpbmctZ3V0dGVycztcbiRncmlkLWNvbnRhaW5lci1tYXg6ICRnbG9iYWwtd2lkdGg7XG4keHktYmxvY2stZ3JpZC1tYXg6IDg7XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIENyZWF0ZXMgYW4gaW5uZXIgYm94LXNoYWRvdyBmb3Igb25seSBvbmUgc2lkZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2lkZSAtIFNpZGUgdGhlIHNoYWRvdyBpcyBzdXBwb3NlZCB0byBhcHBlYXIuIENhbiBiZSBgdG9wYCwgYGxlZnRgLCBgcmlnaHRgIG9yIGBib3R0b21gLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkc2l6ZSAtIFdpZHRoIGZvciB0aGUgdGFyZ2V0IHNpZGUuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIC0gQ29sb3Igb2YgdGhlIHNoYWRvdy5cbkBtaXhpbiBpbm5lci1zaWRlLXNoYWRvdyhcbiAgJHNpZGU6IGJvdHRvbSxcbiAgJHNpemU6IDIwcHgsXG4gICRjb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpXG4pIHtcblxuICAkaGVscGVyOiByb3VuZCgkc2l6ZSAqIDAuNjUpO1xuXG4gIEBpZiAoJHNpZGUgPT0gdG9wKSB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAkaGVscGVyICRzaXplICgtMSkqJGhlbHBlciAkY29sb3I7XG4gIH0gQGVsc2UgaWYgKCRzaWRlID09IGxlZnQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAkaGVscGVyIDAgJHNpemUgKC0xKSokaGVscGVyICRjb2xvcjtcbiAgfSBAZWxzZSBpZiAoJHNpZGUgPT0gcmlnaHQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAoLTEpKiRoZWxwZXIgMCAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9IEBlbHNlIGlmICgkc2lkZSA9PSBib3R0b20pIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwICgtMSkqJGhlbHBlciAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgQ1NTIHRyaWFuZ2xlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZHJvcGRvd24gYXJyb3dzLCBkcm9wZG93biBwaXBzLCBhbmQgbW9yZS4gVXNlIHRoaXMgbWl4aW4gaW5zaWRlIGEgYCY6OmJlZm9yZWAgb3IgYCY6OmFmdGVyYCBzZWxlY3RvciwgdG8gYXR0YWNoIHRoZSB0cmlhbmdsZSB0byBhbiBleGlzdGluZyBlbGVtZW50LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0cmlhbmdsZS1zaXplIC0gV2lkdGggb2YgdGhlIHRyaWFuZ2xlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICR0cmlhbmdsZS1jb2xvciAtIENvbG9yIG9mIHRoZSB0cmlhbmdsZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICR0cmlhbmdsZS1kaXJlY3Rpb24gLSBEaXJlY3Rpb24gdGhlIHRyaWFuZ2xlIHBvaW50cy4gQ2FuIGJlIGB1cGAsIGByaWdodGAsIGBkb3duYCwgb3IgYGxlZnRgLlxuQG1peGluIGNzcy10cmlhbmdsZShcbiAgJHRyaWFuZ2xlLXNpemUsXG4gICR0cmlhbmdsZS1jb2xvcixcbiAgJHRyaWFuZ2xlLWRpcmVjdGlvblxuKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuXG4gIGJvcmRlcjogaW5zZXQgJHRyaWFuZ2xlLXNpemU7XG5cbiAgY29udGVudDogJyc7XG5cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IGRvd24pIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJHRyaWFuZ2xlLWNvbG9yIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG4gIEBpZiAoJHRyaWFuZ2xlLWRpcmVjdGlvbiA9PSB1cCkge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3I7XG4gIH1cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IHJpZ2h0KSB7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICR0cmlhbmdsZS1jb2xvcjtcbiAgfVxuICBAaWYgKCR0cmlhbmdsZS1kaXJlY3Rpb24gPT0gbGVmdCkge1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBtZW51IGljb24gd2l0aCBhIHNldCB3aWR0aCwgaGVpZ2h0LCBudW1iZXIgb2YgYmFycywgYW5kIGNvbG9ycy4gVGhlIG1peGluIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUgaWNvbiBhbmQgdGhlIHdlaWdodCBvZiB0aGUgYmFycyB0byBkZXRlcm1pbmUgc3BhY2luZy4gPGRpdiBjbGFzcz1cImRvY3MtZXhhbXBsZS1idXJnZXJcIj48L2Rpdj5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIGljb24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yLWhvdmVyIFskZGFyay1ncmF5XSAtIENvbG9yIHRvIHVzZSB3aGVuIHRoZSBpY29uIGlzIGhvdmVyZWQgb3Zlci5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFsyMHB4XSAtIFdpZHRoIG9mIHRoZSBpY29uLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkaGVpZ2h0IFsxNnB4XSAtIEhlaWdodCBvZiB0aGUgaWNvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdlaWdodCBbMnB4XSAtIEhlaWdodCBvZiBpbmRpdmlkdWFsIGJhcnMgaW4gdGhlIGljb24uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXJzIFszXSAtIE51bWJlciBvZiBiYXJzIGluIHRoZSBpY29uLlxuQG1peGluIGhhbWJ1cmdlcihcbiAgJGNvbG9yOiAkYmxhY2ssXG4gICRjb2xvci1ob3ZlcjogJGRhcmstZ3JheSxcbiAgJHdpZHRoOiAyMHB4LFxuICAkaGVpZ2h0OiAxNnB4LFxuICAkd2VpZ2h0OiAycHgsXG4gICRiYXJzOiAzXG4pIHtcbiAgLy8gYm94LXNoYWRvdyBDU1Mgb3V0cHV0XG4gICRzaGFkb3c6ICgpO1xuICAkaG92ZXItc2hhZG93OiAoKTtcblxuICAvLyBTcGFjaW5nIGJldHdlZW4gYmFycyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGljb24gYW5kIHRoZSB3ZWlnaHQgb2YgZWFjaCBiYXJcbiAgJHNwYWNpbmc6ICgkaGVpZ2h0IC0gKCR3ZWlnaHQgKiAkYmFycykpIC8gKCRiYXJzIC0gMSk7XG5cbiAgQGlmIHVuaXQoJHNwYWNpbmcpID09ICdweCcge1xuICAgICRzcGFjaW5nOiBmbG9vcigkc3BhY2luZyk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAkb2Zmc2V0OiAoJHdlaWdodCArICRzcGFjaW5nKSAqICgkaSAtIDEpO1xuICAgICRzaGFkb3c6IGFwcGVuZCgkc2hhZG93LCAwICRvZmZzZXQgMCAkY29sb3IsIGNvbW1hKTtcbiAgfVxuXG4gIC8vIEljb24gY29udGFpbmVyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogJHdpZHRoO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBJY29uIGJhcnNcbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJHdlaWdodDtcblxuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93O1xuXG4gICAgY29udGVudDogJyc7XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZVxuICBAaWYgJGNvbG9yLWhvdmVyIHtcbiAgICAvLyBHZW5lcmF0ZSBDU1NcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAgICRvZmZzZXQ6ICgkd2VpZ2h0ICsgJHNwYWNpbmcpICogKCRpIC0gMSk7XG4gICAgICAkaG92ZXItc2hhZG93OiBhcHBlbmQoJGhvdmVyLXNoYWRvdywgMCAkb2Zmc2V0IDAgJGNvbG9yLWhvdmVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhvdmVyO1xuICAgICAgYm94LXNoYWRvdzogJGhvdmVyLXNoYWRvdztcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgYSBkb3dud2FyZC1mYWNpbmcgdHJpYW5nbGUgYXMgYSBiYWNrZ3JvdW5kIGltYWdlIHRvIGFuIGVsZW1lbnQuIFRoZSBpbWFnZSBpcyBmb3JtYXR0ZWQgYXMgYW4gU1ZHLCBtYWtpbmcgaXQgZWFzeSB0byBjaGFuZ2UgdGhlIGNvbG9yLiBCZWNhdXNlIEludGVybmV0IEV4cGxvcmVyIGRvZXNuJ3Qgc3VwcG9ydCBlbmNvZGVkIFNWR3MgYXMgYmFja2dyb3VuZCBpbWFnZXMsIGEgUE5HIGZhbGxiYWNrIGlzIGFsc28gaW5jbHVkZWQuXG4vLy8gVGhlcmUgYXJlIHR3byBQTkcgZmFsbGJhY2tzOiBhIGJsYWNrIHRyaWFuZ2xlIGFuZCBhIHdoaXRlIHRyaWFuZ2xlLiBUaGUgb25lIHVzZWQgZGVwZW5kcyBvbiB0aGUgbGlnaHRuZXNzIG9mIHRoZSBpbnB1dCBjb2xvci5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIHRyaWFuZ2xlLlxuQG1peGluIGJhY2tncm91bmQtdHJpYW5nbGUoJGNvbG9yOiAkYmxhY2spIHtcbiAgJHJnYjogJ3JnYiUyOCN7cm91bmQocmVkKCRjb2xvcikpfSwgI3tyb3VuZChncmVlbigkY29sb3IpKX0sICN7cm91bmQoYmx1ZSgkY29sb3IpKX0lMjknO1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPSczMicgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDMyIDI0Jz48cG9seWdvbiBwb2ludHM9JzAsMCAzMiwwIDE2LDI0JyBzdHlsZT0nZmlsbDogI3skcmdifSc+PC9wb2x5Z29uPjwvc3ZnPlwiKTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjBcXDApIHtcbiAgICBAaWYgbGlnaHRuZXNzKCRjb2xvcikgPCA2MCUge1xuICAgICAgLy8gV2hpdGUgdHJpYW5nbGVcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFZQ0FZQUFBQ2JVLzgwQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJcEpSRUZVZU5yRWtja05nREFNQkJmUmtFdDBPYlJCQmRzR1hVRGdtUWZLNFhoSDJtOGN6UUFBeTI3UjN0c3c0UWZlMng4dU9PNm9ZTGI2R2xPb3IzR0Yrc3dVUkFPbVVKK1J3dEVKczlXdlRHRVl4QlhxSTFNUUFaaENmVVFLUnpETVZqK1R3ckFJVjZqdlNVRWtZQXIxTFNrY3lUQmIvVitLWWZYN3hBZXVzcTNzTER0R0gza0VHQUNQV0lmbE5aZmhSUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBCbGFjayB0cmlhbmdsZVxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQVlDQVlBQUFDYlUvODBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQU1CSlJFRlVlTnJFbGxzT2hDQU1SVnN6QzlJbHpVN0tDbVZIVEpzb01XWU1VdHB5djlCZ2J1WFFCNVpTZGdCWVlZNHljZ0Jpdms4S1lGc1FNZk1pVFRCUDRvM25VekNLek9hYkxKYkx5Mi9nMzFldkdrQWdpblI0L1plZ0tINXFYM2JKQ3NjQTN0MHgza2dPNXRRRnloaEZmNTB4UnFGTGJ5TVVOSlF6Z3lqR1Mvd2dDcHZLcWtSQnB1V3JFNFY5ZCsxRTRkUFVYcUlnMTA3U1FPRS8yRFJReE13VER5Z0lJblZERVQ5VDNsQ29qLzZqL1ZDbUdqWk9sMmxLcFo4QUF3RFFQN3pJaW1ER0ZRQUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHRoZSBtaWNybyBjbGVhcmZpeCBoYWNrIHBvcHVsYXJpemVkIGJ5IE5pY29sYXMgR2FsbGFnaGVyLiBJbmNsdWRlIHRoaXMgbWl4aW4gb24gYSBjb250YWluZXIgaWYgaXRzIGNoaWxkcmVuIGFyZSBhbGwgZmxvYXRlZCwgdG8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcHJvcGVyIGhlaWdodC5cbi8vLyBUaGUgY2xlYXJmaXggaXMgYXVnbWVudGVkIHdpdGggc3BlY2lmaWMgc3R5bGVzIHRvIHByZXZlbnQgYm9yZGVycyBpbiBmbGV4Ym94IGVudmlyb25tZW50c1xuLy8vIEBsaW5rIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLyBNaWNybyBDbGVhcmZpeCBIYWNrXG4vLy8gQGxpbmsgaHR0cDovL2RhbmlzYWRlc2lnbmVyLmNvbS9ibG9nL2ZsZXhib3gtY2xlYXItZml4LXBzZXVkby1lbGVtZW50cy8gRmxleGJveCBmaXhcbkBtaXhpbiBjbGVhcmZpeCB7XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJztcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleC1iYXNpczogMDtcbiAgICAgIG9yZGVyOiAxO1xuICAgIH1cbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG4vLy8gQWRkcyBDU1MgZm9yIGEgXCJxdWFudGl0eSBxdWVyeVwiIHNlbGVjdG9yIHRoYXQgYXV0b21hdGljYWxseSBzaXplcyBlbGVtZW50cyBiYXNlZCBvbiBob3cgbWFueSB0aGVyZSBhcmUgaW5zaWRlIGEgY29udGFpbmVyLlxuLy8vIEBsaW5rIGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3F1YW50aXR5LXF1ZXJpZXMtZm9yLWNzcyBRdWFudGl0eSBRdWVyaWVzIGZvciBDU1Ncbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWF4IC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gZGV0ZWN0LiBUaGUgaGlnaGVyIHRoaXMgbnVtYmVyIGlzLCB0aGUgbW9yZSBDU1MgdGhhdCdzIHJlcXVpcmVkIHRvIGNvdmVyIGVhY2ggbnVtYmVyIG9mIGl0ZW1zLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGVsZW0gW2xpXSAtIFRhZyB0byB1c2UgZm9yIHNpYmxpbmcgc2VsZWN0b3JzLlxuQG1peGluIGF1dG8td2lkdGgoJG1heCwgJGVsZW06IGxpKSB7XG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJG1heCB7XG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQsXG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQgfiAjeyRlbGVtfSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgxIC8gJGkpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gUmVtb3ZlcyB0aGUgZm9jdXMgcmluZyBhcm91bmQgYW4gZWxlbWVudCB3aGVuIGEgbW91c2UgaW5wdXQgaXMgZGV0ZWN0ZWQuXG5AbWl4aW4gZGlzYWJsZS1tb3VzZS1vdXRsaW5lIHtcbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddICYge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8vIE1ha2VzIGFuIGVsZW1lbnQgdmlzdWFsbHkgaGlkZGVuLCBidXQgc3RpbGwgYWNjZXNzaWJsZSB0byBrZXlib2FyZHMgYW5kIGFzc2lzdGl2ZSBkZXZpY2VzLlxuLy8vIEBsaW5rIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHkgSGlkaW5nIENvbnRlbnQgZm9yIEFjY2Vzc2liaWxpdHlcbi8vLyBAbGluayBodHRwOi8vaHVnb2dpcmF1ZGVsLmNvbS8yMDE2LzEwLzEzL2Nzcy1oaWRlLWFuZC1zZWVrL1xuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZW5mb3JjZSAtIElmIGB0cnVlYCwgdXNlIGAhaW1wb3J0YW50YCBvbiBhcHBsaWVkIHByb3BlcnRpZXNcbkBtaXhpbiBlbGVtZW50LWludmlzaWJsZShcbiAgJGVuZm9yY2U6IHRydWVcbikge1xuICAkaW1wb3J0YW50OiBpZigkZW5mb3JjZSwgJyFpbXBvcnRhbnQnLCBudWxsKTtcblxuICBwb3NpdGlvbjogYWJzb2x1dGUgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBoZWlnaHQ6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBwYWRkaW5nOiAwICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiBoaWRkZW4gI3skaW1wb3J0YW50fTtcbiAgY2xpcDogcmVjdCgwLDAsMCwwKSAjeyRpbXBvcnRhbnR9O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwICN7JGltcG9ydGFudH07XG4gIGJvcmRlcjogMCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gUmV2ZXJzZXMgdGhlIENTUyBvdXRwdXQgY3JlYXRlZCBieSB0aGUgYGVsZW1lbnQtaW52aXNpYmxlKClgIG1peGluLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGVuZm9yY2UgLSBJZiBgdHJ1ZWAsIHVzZSBgIWltcG9ydGFudGAgb24gYXBwbGllZCBwcm9wZXJ0aWVzXG5AbWl4aW4gZWxlbWVudC1pbnZpc2libGUtb2ZmKFxuICAkZW5mb3JjZTogdHJ1ZVxuKSB7XG4gICRpbXBvcnRhbnQ6IGlmKCRlbmZvcmNlLCAnIWltcG9ydGFudCcsIG51bGwpO1xuXG4gIHBvc2l0aW9uOiBzdGF0aWMgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgaGVpZ2h0OiBhdXRvICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiB2aXNpYmxlICN7JGltcG9ydGFudH07XG4gIGNsaXA6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gVmVydGljYWxseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiB2ZXJ0aWNhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCBpbnNpZGUgb2YgaXRzIGZpcnN0IG5vbi1zdGF0aWMgcGFyZW50LFxuLy8vIEBsaW5rIGh0dHA6Ly93d3cuc2l0ZXBvaW50LmNvbS9jZW50ZXJpbmctd2l0aC1zYXNzLyBDZW50ZXJpbmcgV2l0aCBTYXNzXG5AbWl4aW4gaG9yaXpvbnRhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLy8gQWJzb2x1dGVseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLy8gSXRlcmF0ZXMgdGhyb3VnaCBicmVha3BvaW50cyBkZWZpbmVkIGluIGAkYnJlYWtwb2ludC1jbGFzc2VzYCBhbmQgcHJpbnRzIHRoZSBDU1MgaW5zaWRlIHRoZSBtaXhpbiBhdCBlYWNoIGJyZWFrcG9pbnQncyBtZWRpYSBxdWVyeS4gVXNlIHRoaXMgd2l0aCB0aGUgZ3JpZCwgb3IgYW55IG90aGVyIGNvbXBvbmVudCB0aGF0IGhhcyByZXNwb25zaXZlIGNsYXNzZXMuXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRzbWFsbCBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBza2lwIHRoZSBgc21hbGxgIGJyZWFrcG9pbnQuIFVzZSB0aGlzIHdpdGggY29tcG9uZW50cyB0aGF0IGRvbid0IHByZWZpeCBjbGFzc2VzIHdpdGggYHNtYWxsLWAsIG9ubHkgYG1lZGl1bS1gIGFuZCB1cC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRhdXRvLWluc2VydC1icmVha3BvaW50cyBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBpdGVyYXRlIG92ZXIgYnJlYWtwb2ludHMgd2l0aG91dCBkb2luZyB0aGUgbWVkaWEgcXVlcnkgaXRzZWxmLiBVc2VmdWwgZm9yIG1vcmUgY29tcGxleCBtZWRpYSBxdWVyeSBnZW5lcmF0aW9uIGFzIGluIHRoZSBtYXJnaW4gZ3JpZC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50KFxuICAkc21hbGw6IHRydWUsXG4gICRhdXRvLWluc2VydC1icmVha3BvaW50czogdHJ1ZVxuKSB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oYXV0bywgLXpmLWJvb2woJHNtYWxsKSwgLXpmLWJvb2woJGF1dG8taW5zZXJ0LWJyZWFrcG9pbnRzKSkge1xuICAgIEBjb250ZW50XG4gIH07XG59XG5cbi8vLyBJdGVyYXRlcyB3aXRoIGBAY29udGVudGAgdGhyb3VnaCB0aGUgZ2l2ZW4gbGlzdCBvZiBicmVha3BvaW50cyBgJGJyZWFrcG9pbnRzYC5cbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfExpc3R9ICRicmVha3BvaW50cyBbYXV0b10gLSBCcmVha3BvaW50cyB0byBpdGVyYXRlcyBvbi4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbnxOdWxsfSAkemVyby1icmVha3BvaW50IFtudWxsXSAtIFdoZXRoZXIgdGhlIHplcm8tYnJlYWtwb2ludCAob2Z0ZW4gYHNtYWxsYCkgbXVzdCBiZSBpbmNsdWRlZC4gSWYgYHRydWVgLCBpdCB3aWxsIGFsd2F5cyBiZSBhZGRlZCB0byB0aGUgbGlzdCBpZiBub3QgYWxyZWFkeSB0aGVyZS4gSWYgYGZhbHNlYCwgaXQgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZC4gRG9lcyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4vLy8gQHBhcmFtIHtCb29sZWFufEtleXdvcmR9ICRtZWRpYS1xdWVyaWVzIFt0cnVlXSAtIFdoZXRoZXIgbWVkaWEtcXVlcmllcyBtdXN0IGJlIGdlbmVyYXRlZC4gSWYgYGZvci1saXN0c2AsIG9ubHkgZ2VuZXJhdGUgbWVkaWEtcXVlcmllcyB3aGVuIGAkYnJlYWtwb2ludHNgIGlzIGEgbGlzdC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50LWluKFxuICAkYnJlYWtwb2ludHM6IGF1dG8sXG4gICR6ZXJvLWJyZWFrcG9pbnQ6IG51bGwsXG4gICRtZWRpYS1xdWVyaWVzOiB0cnVlXG4pIHtcbiAgJC1saXN0OiAoKTtcbiAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IHRydWU7XG5cbiAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgYnJlYWtwb2ludChzKSB0byBpdGVyYXRlIG9uLlxuICBAaWYgJGJyZWFrcG9pbnRzID09IGF1dG8ge1xuICAgICQtbGlzdDogJGJyZWFrcG9pbnQtY2xhc3NlcztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ2xpc3QnIHtcbiAgICAkLWxpc3Q6ICRicmVha3BvaW50cztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ3N0cmluZycge1xuICAgICQtbGlzdDogKCRicmVha3BvaW50cyk7XG4gICAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IGZhbHNlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCIkYnJlYWtwb2ludHNcIiBpbiBcIi16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oKVwiLiBHb3QgXCIjeyRicmVha3BvaW50c31cIiAoI3t0eXBlLW9mKCRicmVha3BvaW50cyl9KS4gRXhwZWN0ZWQgYSBicmVha3BvaW50IG5hbWUsIGEgbGlzdCBvZiBicmVha3BvaW50cyBvciBcImF1dG9cIic7XG4gIH1cblxuICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSB6ZXJvIGJyZWFrcG9pbnQgYWNjb3JkaW5nIHRvIGAkemVyby1icmVha3BvaW50YFxuICBAaWYgJHplcm8tYnJlYWtwb2ludCA9PSB0cnVlIHtcbiAgICAkLWxpc3Q6IGpvaW4oKCQtemYtemVyby1icmVha3BvaW50KSwgc2wtcmVtb3ZlKCQtbGlzdCwgJC16Zi16ZXJvLWJyZWFrcG9pbnQpKTtcbiAgfVxuICBAZWxzZSBpZiAkemVyby1icmVha3BvaW50ID09IGZhbHNlIHtcbiAgICAkLWxpc3Q6IHNsLXJlbW92ZSgkLWxpc3QsICQtemYtemVyby1icmVha3BvaW50KTtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb24gYnJlYWtwb2ludChzKVxuICBAZWFjaCAkYnAgaW4gJC1saXN0IHtcbiAgICAkb2xkLXpmLXNpemU6IG51bGw7XG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6ICRicCAhZ2xvYmFsO1xuXG4gICAgQGlmICgkbWVkaWEtcXVlcmllcyA9PSB0cnVlXG4gICAgICBvciAoJG1lZGlhLXF1ZXJpZXMgPT0gJ2Zvci1saXN0cycgYW5kICQtYnJlYWtwb2ludHMtaXMtYS1saXN0KSkge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnApIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgICQtemYtc2l6ZTogJG9sZC16Zi1zaXplICFnbG9iYWw7XG4gIH1cbn1cblxuLy8vIEdlbmVyYXRlIHRoZSBgQGNvbnRlbnRgIHBhc3NlZCB0byB0aGUgbWl4aW4gd2l0aCBhIHZhbHVlIGAkLXpmLWJwLXZhbHVlYCByZWxhdGVkIHRvIGEgYnJlYWtwb2ludCwgZGVwZW5kaW5nIG9uIHRoZSBgJG5hbWVgIHBhcmFtZXRlcjpcbi8vLyAtIEZvciBhIHNpbmdsZSB2YWx1ZSwgYCQtemYtYnAtdmFsdWVgIGlzIHRoaXMgdmFsdWUuXG4vLy8gLSBGb3IgYSBicmVha3BvaW50IG5hbWUsIGAkLXpmLWJwLXZhbHVlYCBpcyB0aGUgY29ycmVzcG9uZGluZyBicmVha3BvaW50IHZhbHVlIGluIGAkbWFwYC5cbi8vLyAtIEZvciBcImF1dG9cIiwgYCQtemYtYnAtdmFsdWVgIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUgaW4gYCRtYXBgIGFuZCBpcyBwYXNzZWQgdG8gYEBjb250ZW50YCwgd2hpY2ggaXMgbWFkZSByZXNwb25zaXZlIGZvciBlYWNoIGJyZWFrcG9pbnQgb2YgYCRtYXBgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfEFycmF5fEtleXdvcmR9ICRuYW1lIFthdXRvXSAtIFNpbmdsZSB2YWx1ZSwgYnJlYWtwb2ludCBuYW1lLCBvciBsaXN0IG9mIGJyZWFrcG9pbnQgbmFtZXMgdG8gdXNlLiBcImF1dG9cIiBieSBkZWZhdWx0LlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIE1hcCBvZiBicmVha3BvaW50cyBhbmQgdmFsdWVzIG9yIHNpbmdsZSB2YWx1ZSB0byB1c2UuXG5AbWl4aW4gLXpmLWJyZWFrcG9pbnQtdmFsdWUoXG4gICRuYW1lOiBhdXRvLFxuICAkbWFwOiBudWxsXG4pIHtcbiAgQGlmICRuYW1lID09IGF1dG8gYW5kIHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcge1xuICAgIC8vIFwiYXV0b1wiXG4gICAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkaykge1xuICAgICAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZSgkdiwgJG1hcCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBicmVha3BvaW50IG5hbWVcbiAgICBAaWYgdHlwZS1vZigkbmFtZSkgPT0gJ3N0cmluZycge1xuICAgICAgJGJwLXZhbHVlOiAtemYtZ2V0LWJwLXZhbCgkbWFwLCAkbmFtZSk7XG4gICAgICBAaWYgJGJwLXZhbHVlICE9IG51bGwge1xuICAgICAgICAkbmFtZTogJGJwLXZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVcbiAgICAkLXpmLWJwLXZhbHVlOiAkbmFtZSAhZ2xvYmFsO1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEZvbnQgY29sb3Igb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBjb2xvciBvZiBwbGFjZWhvbGRlciB0ZXh0IHdpdGhpbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGZhbWlseSBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBGb250XG4kaW5wdXQtZm9udC1mYW1pbHk6IGluaGVyaXQgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaW5wdXQtZm9udC1zaXplOiByZW0tY2FsYygxNikgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRpbnB1dC1saW5lLWhlaWdodDogJGdsb2JhbC1saW5laGVpZ2h0ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZm9jdXNlZCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZGlzYWJsZWQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBmb2N1c2VkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMiAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgaW5zaWRlIHRleHQgaW5wdXRzIHdoZW4gbm90IGZvY3VzZWQuXG4vLy8gQHR5cGUgU2hhZG93XG4kaW5wdXQtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIDAuMSkgIWRlZmF1bHQ7XG5cbi8vLyBCb3ggc2hhZG93IG91dHNpZGUgdGV4dCBpbnB1dHMgd2hlbiBmb2N1c2VkLlxuLy8vIEB0eXBlIFNoYWRvd1xuJGlucHV0LXNoYWRvdy1mb2N1czogMCAwIDVweCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgdG8gdXNlIHdoZW4gaG92ZXJpbmcgb3ZlciBhIGRpc2FibGVkIHRleHQgaW5wdXQuXG4vLy8gQHR5cGUgQ3Vyc29yXG4kaW5wdXQtY3Vyc29yLWRpc2FibGVkOiBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuLy8vIFByb3BlcnRpZXMgdG8gdHJhbnNpdGlvbiBvbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBUcmFuc2l0aW9uXG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVzIHRoZSB1cC9kb3duIGJ1dHRvbnMgdGhhdCBDaHJvbWUgYW5kIEZpcmVmb3ggYWRkIHRvIGA8aW5wdXQgdHlwZT0nbnVtYmVyJz5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRpbnB1dC1udW1iZXItc3Bpbm5lcnM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBSYWRpdXMgZm9yIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEJvcmRlclxuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBmb3JtIGJ1dHRvbnMsIGRlZmF1bHRlZCB0byBnbG9iYWwtcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGZvcm0tYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWVsZW1lbnQge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmc7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGlucHV0LXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3c7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiBoYXMtdmFsdWUoJGlucHV0LXRyYW5zaXRpb24pIHtcbiAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgfVxuXG4gIC8vIEZvY3VzIHN0YXRlXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyLWZvY3VzO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kLWZvY3VzO1xuICAgIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3ctZm9jdXM7XG5cbiAgICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS10ZXh0IHtcbiAgLy8gVGV4dCBpbnB1dHNcbiAgI3t0ZXh0LWlucHV0cygpfSxcbiAgdGV4dGFyZWEge1xuICAgIEBpbmNsdWRlIGZvcm0tZWxlbWVudDtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgLy8gVGV4dCBhcmVhc1xuICB0ZXh0YXJlYSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuXG4gICAgJltyb3dzXSB7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgaW5wdXQsXG4gIHRleHRhcmVhIHtcbiAgICAvLyBEaXNhYmxlZC9yZWFkb25seSBzdGF0ZVxuICAgICY6ZGlzYWJsZWQsXG4gICAgJltyZWFkb25seV0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgICBjdXJzb3I6ICRpbnB1dC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgc3R5bGVzIG9uIGJ1dHRvbi1saWtlIGlucHV0c1xuICBbdHlwZT0nc3VibWl0J10sXG4gIFt0eXBlPSdidXR0b24nXSB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1idXR0b24tcmFkaXVzO1xuICB9XG5cbiAgLy8gUmVzZXQgTm9ybWFsaXplIHNldHRpbmcgY29udGVudC1ib3ggdG8gc2VhcmNoIGVsZW1lbnRzXG4gIGlucHV0W3R5cGU9J3NlYXJjaCddIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIC8vIE51bWJlciBpbnB1dCBzdHlsZXNcbiAgW3R5cGU9J251bWJlciddIHtcbiAgICBAaWYgbm90ICRpbnB1dC1udW1iZXItc3Bpbm5lcnMge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG5cbiAgICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXZlbmRvci1wcmVmaXhlc1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGxhY2Vob2xkZXIgdGV4dFxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gUmVtb3ZlcyB0aGUgdW5pdCAoZS5nLiBweCwgZW0sIHJlbSkgZnJvbSBhIHZhbHVlLCByZXR1cm5pbmcgdGhlIG51bWJlciBvbmx5LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRudW0gLSBOdW1iZXIgdG8gc3RyaXAgdW5pdCBmcm9tLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gVGhlIHNhbWUgbnVtYmVyLCBzYW5zIHVuaXQuXG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtKSB7XG4gIEByZXR1cm4gJG51bSAvICgkbnVtICogMCArIDEpO1xufVxuXG4vLy8gQ29udmVydHMgb25lIG9yIG1vcmUgcGl4ZWwgdmFsdWVzIGludG8gbWF0Y2hpbmcgcmVtIHZhbHVlcy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICR2YWx1ZXMgLSBPbmUgb3IgbW9yZSB2YWx1ZXMgdG8gY29udmVydC4gQmUgc3VyZSB0byBzZXBhcmF0ZSB0aGVtIHdpdGggc3BhY2VzIGFuZCBub3QgY29tbWFzLiBJZiB5b3UgbmVlZCB0byBjb252ZXJ0IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdyYXAgdGhlIGxpc3QgaW4gcGFyZW50aGVzZXMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIFtudWxsXSAtIFRoZSBiYXNlIHZhbHVlIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgcmVtYC4gSWYgeW91J3JlIHVzaW5nIEZvdW5kYXRpb24gb3V0IG9mIHRoZSBib3gsIHRoaXMgaXMgMTZweC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgYG51bGxgLCB0aGUgZnVuY3Rpb24gd2lsbCByZWZlcmVuY2UgdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUgYXMgdGhlIGJhc2UuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gQSBsaXN0IG9mIGNvbnZlcnRlZCB2YWx1ZXMuXG5AZnVuY3Rpb24gcmVtLWNhbGMoJHZhbHVlcywgJGJhc2U6IG51bGwpIHtcbiAgJHJlbS12YWx1ZXM6ICgpO1xuICAkY291bnQ6IGxlbmd0aCgkdmFsdWVzKTtcblxuICAvLyBJZiBubyBiYXNlIGlzIGRlZmluZWQsIGRlZmVyIHRvIHRoZSBnbG9iYWwgZm9udCBzaXplXG4gIEBpZiAkYmFzZSA9PSBudWxsIHtcbiAgICAkYmFzZTogJGdsb2JhbC1mb250LXNpemU7XG4gIH1cblxuICAvLyBJZiB0aGUgYmFzZSBmb250IHNpemUgaXMgYSAlLCB0aGVuIG11bHRpcGx5IGl0IGJ5IDE2cHhcbiAgLy8gVGhpcyBpcyBiZWNhdXNlIDEwMCUgZm9udCBzaXplID0gMTZweCBpbiBtb3N0IGFsbCBicm93c2Vyc1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVtIGFzIGJhc2UgYWxsb3dzIGNvcnJlY3Qgc2NhbGluZ1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ3JlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgJGNvdW50ID09IDEge1xuICAgIEByZXR1cm4gLXpmLXRvLXJlbSgkdmFsdWVzLCAkYmFzZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJlbS12YWx1ZXM6IGFwcGVuZCgkcmVtLXZhbHVlcywgLXpmLXRvLXJlbShudGgoJHZhbHVlcywgJGkpLCAkYmFzZSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVtLXZhbHVlcztcbn1cblxuLy8gQ29udmVydHMgYSB1bml0bGVzcywgcGl4ZWwsIG9yIHJlbSB2YWx1ZSB0byBlbSwgZm9yIHVzZSBpbiBicmVha3BvaW50cy5cbkBmdW5jdGlvbiAtemYtYnAtdG8tZW0oJHZhbHVlKSB7XG4gIC8vIFBpeGVsIGFuZCB1bml0bGVzcyB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byByZW1zXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyBvciB1bml0bGVzcygkdmFsdWUpIHtcbiAgICAkdmFsdWU6IHJlbS1jYWxjKCR2YWx1ZSwgJGJhc2U6IDE2cHgpO1xuICB9XG5cbiAgLy8gVGhlbiB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGVtc1xuICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAqIDFlbTtcbn1cblxuLy8vIENvbnZlcnRzIGEgcGl4ZWwgdmFsdWUgdG8gbWF0Y2hpbmcgcmVtIHZhbHVlLiAqQW55KiB2YWx1ZSBwYXNzZWQsIHJlZ2FyZGxlc3Mgb2YgdW5pdCwgaXMgYXNzdW1lZCB0byBiZSBhIHBpeGVsIHZhbHVlLiBCeSBkZWZhdWx0LCB0aGUgYmFzZSBwaXhlbCB2YWx1ZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcmVtIHZhbHVlIGlzIHRha2VuIGZyb20gdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gUGl4ZWwgdmFsdWUgdG8gY29udmVydC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gQmFzZSBmb3IgcGl4ZWwgY29udmVyc2lvbi5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IEEgbnVtYmVyIGluIHJlbXMsIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZCB0aGUgYmFzZSBwaXhlbCB2YWx1ZS4gcmVtIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggYXMgaXMuXG5AZnVuY3Rpb24gLXpmLXRvLXJlbSgkdmFsdWUsICRiYXNlOiBudWxsKSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkdmFsdWUpICE9ICdudW1iZXInIHtcbiAgICBAd2FybiBpbnNwZWN0KCR2YWx1ZSkgKyAnIHdhcyBwYXNzZWQgdG8gcmVtLWNhbGMoKSwgd2hpY2ggaXMgbm90IGEgbnVtYmVyLic7XG4gICAgQHJldHVybiAkdmFsdWU7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gZW0gaW50byByZW0gaWYgc29tZW9uZSBoYW5kcyBvdmVyICdlbSdzXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAxcmVtO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHJlbSBpZiB1bml0cyBmb3IgJHZhbHVlIGlzIG5vdCByZW0gb3IgZW1cbiAgQGlmIHVuaXQoJHZhbHVlKSAhPSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKSAqIDFyZW07XG4gIH1cblxuICAvLyBUdXJuIDByZW0gaW50byAwXG4gIEBpZiAkdmFsdWUgPT0gMHJlbSB7XG4gICAgJHZhbHVlOiAwO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbi8vLyBDb252ZXJ0cyBhIHBpeGVsLCBwZXJjZW50YWdlLCByZW0gb3IgZW0gdmFsdWUgdG8gYSB1bml0bGVzcyB2YWx1ZSBiYXNlZCBvbiBhIGdpdmVuIGZvbnQgc2l6ZS4gSWRlYWwgZm9yIHdvcmtpbmcgb3V0IHVuaXRsZXNzIGxpbmUgaGVpZ2h0cy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBjb252ZXJ0IHRvIGEgdW5pdGxlc3MgbGluZSBoZWlnaHRcbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgLSBUaGUgZm9udCBzaXplIHRvIHVzZSB0byB3b3JrIG91dCB0aGUgbGluZSBoZWlnaHQgLSBkZWZhdWx0cyB0byAkZ2xvYmFsLWZvbnQtc2l6ZVxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIFVuaXRsZXNzIG51bWJlclxuQGZ1bmN0aW9uIHVuaXRsZXNzLWNhbGMoJHZhbHVlLCAkYmFzZTogbnVsbCkge1xuXG4gIC8vIElmIG5vIGJhc2UgaXMgZGVmaW5lZCwgZGVmZXIgdG8gdGhlIGdsb2JhbCBmb250IHNpemVcbiAgQGlmICRiYXNlID09IG51bGwge1xuICAgICRiYXNlOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIEZpcnN0LCBsZXRzIGNvbnZlcnQgb3VyICRiYXNlIHRvIHBpeGVsc1xuXG4gIC8vIElmIHRoZSBiYXNlIGZvbnQgc2l6ZSBpcyBhICUsIHRoZW4gbXVsdGlwbHkgaXQgYnkgMTZweFxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdyZW0nIHtcbiAgICAkYmFzZTogc3RyaXAtdW5pdCgkYmFzZSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICAvLyBOb3cgbGV0J3MgY29udmVydCBvdXIgdmFsdWUgdG8gcGl4ZWxzIHRvb1xuICBAaWYgdW5pdCgkdmFsdWUpID09ICclJyB7XG4gICAgJHZhbHVlOiAoJHZhbHVlIC8gMTAwJSkgKiAkYmFzZTtcbiAgfVxuXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3JlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICBAaWYgdW5pdCgkdmFsdWUpID09ICdlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICAvLyAncHgnXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyB7XG4gICAgQHJldHVybiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKTtcbiAgfVxuXG4gIC8vIGFzc3VtZSB0aGF0IGxpbmUtaGVpZ2h0cyBncmVhdGVyIHRoYW4gMTAgYXJlIG1lYW50IHRvIGJlIGFic29sdXRlIGluICdweCdcbiAgQGlmIHVuaXRsZXNzKCR2YWx1ZSkgYW5kICgkdmFsdWUgPiAxMCkge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gc3RyaXAtdW5pdCgkYmFzZSk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWNoZWNrYm94IHtcbiAgW3R5cGU9J2ZpbGUnXSxcbiAgW3R5cGU9J2NoZWNrYm94J10sXG4gIFt0eXBlPSdyYWRpbyddIHtcbiAgICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICB9XG5cbiAgLy8gU3R5bGVzIGZvciBpbnB1dC9sYWJlbCBzaWJsaW5nc1xuICBbdHlwZT0nY2hlY2tib3gnXSArIGxhYmVsLFxuICBbdHlwZT0ncmFkaW8nXSArIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuXG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGZvcm0tc3BhY2luZyAqIDAuNTtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJGZvcm0tc3BhY2luZztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgJltmb3JdIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsZXMgZm9yIGlucHV0cyBpbnNpZGUgbGFiZWxzXG4gIGxhYmVsID4gW3R5cGU9J2NoZWNrYm94J10sXG4gIGxhYmVsID4gW3R5cGU9J3JhZGlvJ10ge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkZm9ybS1zcGFjaW5nICogMC41O1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIGZpbGUgaW5wdXQgd2lkdGhcbiAgW3R5cGU9J2ZpbGUnXSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gQ29sb3IgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kZm9ybS1sYWJlbC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBmb3JtIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBmb3IgZm9ybSBsYWJlbHMuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGl0cyBpbnB1dCBmaWVsZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWxpbmUtaGVpZ2h0OiAxLjggIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcblxuICBmb250LXNpemU6ICRmb3JtLWxhYmVsLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGZvcm0tbGFiZWwtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvcjtcbn1cblxuQG1peGluIGZvcm0tbGFiZWwtbWlkZGxlIHtcbiAgJGlucHV0LWJvcmRlci13aWR0aDogZ2V0LWJvcmRlci12YWx1ZSgkaW5wdXQtYm9yZGVyLCB3aWR0aCk7XG5cbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgcGFkZGluZzogKCRmb3JtLXNwYWNpbmcgLyAyICsgcmVtLWNhbGMoJGlucHV0LWJvcmRlci13aWR0aCkpIDA7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tbGFiZWwge1xuICBsYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICYubWlkZGxlIHtcbiAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWwtbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWxwIHRleHQuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGhlbHAgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWxwdGV4dC1mb250LXNpemU6IHJlbS1jYWxjKDEzKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzdHlsZSBmb3IgaGVscCB0ZXh0LlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoZWxwdGV4dC1mb250LXN0eWxlOiBpdGFsaWMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0taGVscHRleHQge1xuICAuaGVscC10ZXh0IHtcbiAgICAkbWFyZ2luLXRvcDogKCRmb3JtLXNwYWNpbmcgKiAwLjUpICogLTE7XG5cbiAgICBtYXJnaW4tdG9wOiAkbWFyZ2luLXRvcDtcbiAgICBmb250LXNpemU6ICRoZWxwdGV4dC1mb250LXNpemU7XG4gICAgZm9udC1zdHlsZTogJGhlbHB0ZXh0LWZvbnQtc3R5bGU7XG4gICAgY29sb3I6ICRoZWxwdGV4dC1jb2xvcjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBDb2xvciBvZiBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgbGFiZWxzIHByZWZpeGVkIHRvIGFuIGlucHV0LlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtcHJlZml4LWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIExlZnQvcmlnaHQgcGFkZGluZyBvZiBhbiBwcmUvcG9zdGZpeGVkIGlucHV0IGxhYmVsXG4kaW5wdXQtcHJlZml4LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tcHJlcG9zdGZpeCB7XG4gICRoZWlnaHQ6ICgkaW5wdXQtZm9udC1zaXplICogJGlucHV0LWxpbmUtaGVpZ2h0KSArIChnZXQtc2lkZSgkaW5wdXQtcGFkZGluZywgJ3RvcCcpICsgZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICdib3R0b20nKSkgLSByZW0tY2FsYygxKTtcblxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlmKCRnbG9iYWwtZmxleGJveCwgZmxleCwgdGFibGUpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmc7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIH1cblxuICAgID4gOmZpcnN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAlaW5wdXQtZ3JvdXAtY2hpbGQge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmlucHV0LWdyb3VwLWxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nOiAwICRpbnB1dC1wcmVmaXgtcGFkZGluZztcbiAgICBib3JkZXI6ICRpbnB1dC1wcmVmaXgtYm9yZGVyO1xuICAgIGJhY2tncm91bmQ6ICRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDtcblxuICAgIGNvbG9yOiAkaW5wdXQtcHJlZml4LWNvbG9yO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICB3aWR0aDogMSU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtcHJlZml4LWJvcmRlcikge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtZ3JvdXAtY2hpbGQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAuaW5wdXQtZ3JvdXAtYnV0dG9uIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIGEsXG4gICAgaW5wdXQsXG4gICAgYnV0dG9uLFxuICAgIGxhYmVsIHtcbiAgICAgIEBleHRlbmQgJWlucHV0LWdyb3VwLWNoaWxkO1xuXG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgICB9XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljaXR5IGJ1bXAgbmVlZGVkIHRvIHByZXZlbnQgb3ZlcnJpZGUgYnkgYnV0dG9uc1xuICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIC5pbnB1dC1ncm91cC1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJvcmRlciBhcm91bmQgY3VzdG9tIGZpZWxkc2V0cy5cbi8vLyBAdHlwZSBCb3JkZXJcbiRmaWVsZHNldC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgaW5zaWRlIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtcGFkZGluZzogcmVtLWNhbGMoMjApICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gYXJvdW5kIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBiZXR3ZWVuIHRoZSBsZWdlbmQgdGV4dCBhbmQgZmllbGRzZXQgYm9yZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlZ2VuZC1wYWRkaW5nOiByZW0tY2FsYygwIDMpICFkZWZhdWx0O1xuXG5AbWl4aW4gZmllbGRzZXQge1xuICBtYXJnaW46ICRmaWVsZHNldC1tYXJnaW47XG4gIHBhZGRpbmc6ICRmaWVsZHNldC1wYWRkaW5nO1xuICBib3JkZXI6ICRmaWVsZHNldC1ib3JkZXI7XG5cbiAgbGVnZW5kIHtcbiAgICAvLyBDb3ZlcnMgdXAgdGhlIGZpZWxkc2V0J3MgYm9yZGVyIHRvIGNyZWF0ZSBhcnRpZmljaWFsIHBhZGRpbmdcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogcmVtLWNhbGMoLTMpO1xuICAgIHBhZGRpbmc6ICRsZWdlbmQtcGFkZGluZztcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWZpZWxkc2V0IHtcbiAgZmllbGRzZXQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmcgKiAwLjU7XG4gIH1cblxuICAuZmllbGRzZXQge1xuICAgIEBpbmNsdWRlIGZpZWxkc2V0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiB0aGUgZHJvcGRvd24gdHJpYW5nbGUgaW5zaWRlIHNlbGVjdCBtZW51cy4gU2V0IHRvIGB0cmFuc3BhcmVudGAgdG8gcmVtb3ZlIGl0IGVudGlyZWx5LlxuLy8vIEB0eXBlIENvbG9yXG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG5AbWl4aW4gZm9ybS1zZWxlY3Qge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgaGVpZ2h0OiAkaGVpZ2h0O1xuICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6ICRpbnB1dC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRzZWxlY3QtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LWJhY2tncm91bmQ7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiAkc2VsZWN0LXRyaWFuZ2xlLWNvbG9yICE9IHRyYW5zcGFyZW50IHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXRyaWFuZ2xlKCRzZWxlY3QtdHJpYW5nbGUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAkZ2xvYmFsLXJpZ2h0ICgtJGZvcm0tc3BhY2luZykgY2VudGVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA5cHggNnB4O1xuXG4gICAgcGFkZGluZy0jeyRnbG9iYWwtcmlnaHR9OiAoJGZvcm0tc3BhY2luZyAqIDEuNSk7XG4gIH1cblxuICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gIH1cblxuICAvLyBGb2N1cyBzdGF0ZVxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogJGlucHV0LWJvcmRlci1mb2N1cztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmFja2dyb3VuZC1mb2N1cztcbiAgICBib3gtc2hhZG93OiAkaW5wdXQtc2hhZG93LWZvY3VzO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtdHJhbnNpdGlvbikge1xuICAgICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgY3Vyc29yOiAkaW5wdXQtY3Vyc29yLWRpc2FibGVkO1xuICB9XG5cbiAgLy8gSGlkZSB0aGUgZHJvcGRvd24gYXJyb3cgc2hvd24gaW4gbmV3ZXIgSUUgdmVyc2lvbnNcbiAgJjo6LW1zLWV4cGFuZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZbbXVsdGlwbGVdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmOm5vdChbbXVsdGlwbGVdKSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1zZWxlY3Qge1xuICBzZWxlY3Qge1xuICAgIEBpbmNsdWRlIGZvcm0tc2VsZWN0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYWJpZGVcbi8vLy9cblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBpbnB1dHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWlucHV0czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBsYWJlbHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWxhYmVsczogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgdG8gdXNlIGZvciBpbnZhbGlkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYmFja2dyb3VuZC1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdG8gdXNlIGZvciBsYWJlbHMgb2YgaW52YWxpZCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRmb3JtLWxhYmVsLWNvbG9yLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRpbnB1dC1lcnJvci1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZXJyb3ItZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTdHlsZXMgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlciBvZiBhbiBpbnB1dCBmaWVsZCB0byBoYXZlIGFuIGVycm9yIHN0YXRlLlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRhbGVydC1jb2xvcl0gLSBDb2xvciB0byB1c2UgZm9yIHRoZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYWNrZ3JvdW5kLWxpZ2h0ZW4gWzEwJV0gLSBMaWdodG5lc3MgbGV2ZWwgb2YgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gZm9ybS1pbnB1dC1lcnJvcihcbiAgJGJhY2tncm91bmQ6ICRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQsXG4gICRiYWNrZ3JvdW5kLWxpZ2h0ZW46IDEwJVxuKSB7XG4gICY6bm90KDpmb2N1cykge1xuICAgIGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCRiYWNrZ3JvdW5kLCAkd2hpdGUsICRiYWNrZ3JvdW5kLWxpZ2h0ZW4pO1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBlcnJvciBzdHlsZXMgdG8gYSBmb3JtIGVsZW1lbnQsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHNldHRpbmdzIGZpbGUuXG5AbWl4aW4gZm9ybS1lcnJvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmcgKiAtMC41O1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1zcGFjaW5nO1xuXG4gIGZvbnQtc2l6ZTogJGlucHV0LWVycm9yLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRpbnB1dC1lcnJvci1mb250LXdlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1lcnJvci1jb2xvcjtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1lcnJvciB7XG4gIEBpZiAkYWJpZGUtaW5wdXRzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgaW52YWxpZCBpbnB1dHNcbiAgICAuaXMtaW52YWxpZC1pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBmb3JtLWlucHV0LWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkYWJpZGUtbGFiZWxzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgbGFiZWxzIG9mIGludmFsaWQgb3V0cHV0c1xuICAgIC5pcy1pbnZhbGlkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gZXJyb3IgZWxlbWVudFxuICAuZm9ybS1lcnJvciB7XG4gICAgQGluY2x1ZGUgZm9ybS1lcnJvcjtcblxuICAgICYuaXMtdmlzaWJsZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0eXBvZ3JhcGh5LWJhc2Vcbi8vLy9cblxuLy8gQmFzZSBUeXBvZ3JhcGh5XG4vLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuLy8gVGhlc2UgYXJlIHN0eWxlcyBhcHBsaWVkIHRvIGJhc2ljIEhUTUwgdGFncywgaW5jbHVkaW5nOlxuLy8gICAtIFBhcmFncmFwaHMgPHA+XG4vLyAgIC0gQm9sZC9pdGFsaWNzIDxiPiA8c3Ryb25nPiA8aT4gPGVtPlxuLy8gICAtIFNtYWxsIHRleHQgPHNtYWxsPlxuLy8gICAtIEhlYWRpbmdzIDxoMT4tPGg2PlxuLy8gICAtIEFuY2hvcnMgPGE+XG4vLyAgIC0gRGl2aWRlcnMgPGhyPlxuLy8gICAtIExpc3RzIDx1bD4gPG9sPiA8ZGw+XG4vLyAgIC0gQmxvY2txdW90ZXMgPGJsb2NrcXVvdGU+XG4vLyAgIC0gQ29kZSBibG9ja3MgPGNvZGU+XG4vLyAgIC0gQWJicmV2aWF0aW9ucyA8YWJicj5cbi8vICAgLSBDaXRhdGlvbnMgPGNpdGU+XG4vLyAgIC0gS2V5c3Ryb2tlcyA8a2JkPlxuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGhlYWRlciBlbGVtZW50cy5cbi8vLyBAdHlwZSBTdHJpbmcgfCBMaXN0XG4kaGVhZGVyLWZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0eWxlIChlLmcuIGl0YWxpY2l6ZWQpIG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtc3R5bGU6IG5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc3RhY2sgdXNlZCBmb3IgZWxlbWVudHMgdGhhdCB1c2UgbW9ub3NwYWNlZCB0eXBlLCBzdWNoIGFzIGNvZGUgc2FtcGxlc1xuLy8vIEB0eXBlIFN0cmluZyB8IExpc3RcbiRmb250LWZhbWlseS1tb25vc3BhY2U6IENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgQ291cmllciwgbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBDb2xvclxuJGhlYWRlci1jb2xvcjogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNCAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gU3R5bGVzIGZvciBoZWFkaW5ncyBhdCB2YXJpb3VzIHNjcmVlbiBzaXplcy4gRWFjaCBrZXkgaXMgYSBicmVha3BvaW50LCBhbmQgZWFjaCB2YWx1ZSBpcyBhIG1hcCBvZiBoZWFkaW5nIHN0eWxlcy5cbi8vLyBAdHlwZSBNYXBcbiRoZWFkZXItc3R5bGVzOiAoXG4gIHNtYWxsOiAoXG4gICAgJ2gxJzogKCdmb250LXNpemUnOiAyNCksXG4gICAgJ2gyJzogKCdmb250LXNpemUnOiAyMCksXG4gICAgJ2gzJzogKCdmb250LXNpemUnOiAxOSksXG4gICAgJ2g0JzogKCdmb250LXNpemUnOiAxOCksXG4gICAgJ2g1JzogKCdmb250LXNpemUnOiAxNyksXG4gICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICksXG4gIG1lZGl1bTogKFxuICAgICdoMSc6ICgnZm9udC1zaXplJzogNDgpLFxuICAgICdoMic6ICgnZm9udC1zaXplJzogNDApLFxuICAgICdoMyc6ICgnZm9udC1zaXplJzogMzEpLFxuICAgICdoNCc6ICgnZm9udC1zaXplJzogMjUpLFxuICAgICdoNSc6ICgnZm9udC1zaXplJzogMjApLFxuICAgICdoNic6ICgnZm9udC1zaXplJzogMTYpLFxuICApLFxuKSAhZGVmYXVsdDtcblxuLy8gJGhlYWRlci1zdHlsZXMgbWFwIGlzIGJ1aWx0IGZyb20gJGhlYWRlci1zaXplcyBpbiBvcmRlciB0byBlbnN1cmUgZG93bndhcmQgY29tcGF0aWJpbGl0eVxuLy8gd2hlbiAkaGVhZGVyLXNpemVzIGlzIGRlcHJlY2lhdGVkLCAkaGVhZGVyLXN0eWxlcyBuZWVkcyB0byBnZXQgIWRlZmF1bHQgdmFsdWVzIGxpa2Ugc2V0dGluZ3Muc2Nzc1xuQGZ1bmN0aW9uIGJ1aWxkX2Zyb21faGVhZGVyLXNpemVzKCRoZWFkZXItc2l6ZXMpIHtcbiAgQHdhcm4gJ05vdGUsIHRoYXQgJGhlYWRlci1zaXplcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoICRoZWFkZXItc3R5bGVzLiAkaGVhZGVyLXNpemVzIHN0aWxsIHdvcmtzLCBidXQgaXQgaXMgZ29pbmcgdG8gYmUgZGVwcmVjaWF0ZWQuJztcbiAgJGhlYWRlci1zdHlsZXM6ICgpO1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zaXplcyB7XG4gICAgJGhlYWRlci1tYXA6ICgpO1xuICAgIEBlYWNoICRoZWFkZXIsICRmb250LXNpemUgaW4gJGhlYWRlcnMge1xuICAgICAgJGhlYWRlci1tYXA6IG1hcC1tZXJnZSgkaGVhZGVyLW1hcCwgKCRoZWFkZXI6ICgnZm9udC1zaXplJzogJGZvbnQtc2l6ZSkpKTtcbiAgICB9XG4gICAgJGhlYWRlci1zdHlsZXM6IG1hcC1tZXJnZSgkaGVhZGVyLXN0eWxlcywgKCRzaXplOiAkaGVhZGVyLW1hcCkpO1xuICB9XG4gIEByZXR1cm4gJGhlYWRlci1zdHlsZXM7XG59XG5cbi8vIElmIGl0IGV4aXN0cyAkaGVhZGVycy1zaXplcyBpcyB1c2VkIHRvIGJ1aWxkICRoZWFkZXItc3R5bGVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGhlYWRlci1zaXplcykge1xuICAkaGVhZGVyLXN0eWxlczogYnVpbGRfZnJvbV9oZWFkZXItc2l6ZXMoJGhlYWRlci1zaXplcyk7XG59XG5cbi8vLyBUZXh0IHJlbmRlcmluZyBtZXRob2Qgb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRoZWFkZXItdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiBgPHNtYWxsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc21hbGwtZm9udC1zaXplOiA4MCUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBgPHNtYWxsPmAgZWxlbWVudHMgd2hlbiBwbGFjZWQgaW5zaWRlIGhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWFkZXItc21hbGwtZm9udC1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gTGluZSBoZWlnaHQgb2YgdGV4dCBpbnNpZGUgYDxwPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNiAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgcGFyYWdyYXBocy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFRleHQgcmVuZGVyaW5nIG1ldGhvZCBmb3IgcGFyYWdyYXBoIHRleHQuXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFyYWdyYXBoLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHkgIWRlZmF1bHQ7XG5cbi8vLyBVc2UgdGhlIGAuY29kZS1pbmxpbmVgIGNvbXBvbmVudCBhcyBkZWZhdWx0IGZvciBgPGNvZGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZW5hYmxlLWNvZGUtaW5saW5lOiB0cnVlO1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3MuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRhbmNob3ItY29sb3IsICRsaWdodG5lc3M6IC0xNCUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGRlY29yYXRpb24gZm9yIGxpbmtzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGFuY2hvci10ZXh0LWRlY29yYXRpb246IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgZGVjb3JhdGlvbiBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbi1ob3Zlcjogbm9uZSAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gd2lkdGggb2YgYSBkaXZpZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBMaXN0XG4kaHItYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kaHItbWFyZ2luOiByZW0tY2FsYygyMCkgYXV0byAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1saW5laGVpZ2h0OiAkcGFyYWdyYXBoLWxpbmVoZWlnaHQgIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1tYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b20gIWRlZmF1bHQ7XG5cbi8vLyBCdWxsZXQgdHlwZSB0byB1c2UgZm9yIHVub3JkZXJlZCBsaXN0cyAoZS5nLiwgYHNxdWFyZWAsIGBjaXJjbGVgLCBgZGlzY2ApLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYyAhZGVmYXVsdDtcblxuLy8vIFBvc2l0aW9uaW5nIGZvciBidWxsZXRzIG9uIHVub3JkZXJlZCBsaXN0IGl0ZW1zLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGUgIWRlZmF1bHQ7XG5cbi8vLyBMZWZ0IChvciByaWdodCkgbWFyZ2luIGZvciBsaXN0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsaXN0LXNpZGUtbWFyZ2luOiAxLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gTGVmdCAob3IgcmlnaHQpIG1hcmdpbiBmb3IgYSBsaXN0IGluc2lkZSBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBgPGRsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBgPGR0PmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kZGVmbmxpc3QtdGVybS13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gYDxkdD5gIGFuZCBgPGRkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtdGVybS1tYXJnaW4tYm90dG9tOiAwLjNyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmxvY2txdW90ZS1jb2xvcjogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgaW5zaWRlIGEgYDxibG9ja3F1b3RlPmAgZWxlbWVudC5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kYmxvY2txdW90ZS1wYWRkaW5nOiByZW0tY2FsYyg5IDIwIDAgMTkpICFkZWZhdWx0O1xuXG4vLy8gU2lkZSBib3JkZXIgZm9yIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIFVzZSB0aGUgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQgYXMgZGVmYXVsdCBmb3IgYDxjaXRlPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGVuYWJsZS1jaXRlLWJsb2NrOiB0cnVlO1xuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGtleXN0cm9rZS1wYWRkaW5nOiByZW0tY2FsYygyIDQgMCkgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBgPGtiZD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRrZXlzdHJva2UtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBib3JkZXIgc3R5bGUgZm9yIGA8YWJicj5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRhYmJyLXVuZGVybGluZTogMXB4IGRvdHRlZCAkYmxhY2sgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXR5cG9ncmFwaHktYmFzZSB7XG4gIC8vIFR5cG9ncmFwaHkgcmVzZXRzXG4gIGRpdixcbiAgZGwsXG4gIGR0LFxuICBkZCxcbiAgdWwsXG4gIG9sLFxuICBsaSxcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcHJlLFxuICBmb3JtLFxuICBwLFxuICBibG9ja3F1b3RlLFxuICB0aCxcbiAgdGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gUGFyYWdyYXBoc1xuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICB0ZXh0LXJlbmRlcmluZzogJHBhcmFncmFwaC10ZXh0LXJlbmRlcmluZztcbiAgfVxuXG4gIC8vIEVtcGhhc2l6ZWQgdGV4dFxuICBlbSxcbiAgaSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG5cbiAgLy8gU3Ryb25nIHRleHRcbiAgc3Ryb25nLFxuICBiIHtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEhlYWRpbmdzXG4gIGgxLCAuaDEsXG4gIGgyLCAuaDIsXG4gIGgzLCAuaDMsXG4gIGg0LCAuaDQsXG4gIGg1LCAuaDUsXG4gIGg2LCAuaDYge1xuICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQtZmFtaWx5O1xuICAgIGZvbnQtc3R5bGU6ICRoZWFkZXItZm9udC1zdHlsZTtcbiAgICBmb250LXdlaWdodDogJGhlYWRlci1mb250LXdlaWdodDtcbiAgICBjb2xvcjogJGhlYWRlci1jb2xvcjtcbiAgICB0ZXh0LXJlbmRlcmluZzogJGhlYWRlci10ZXh0LXJlbmRlcmluZztcblxuICAgIHNtYWxsIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgY29sb3I6ICRoZWFkZXItc21hbGwtZm9udC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkaW5nIHN0eWxlc1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zdHlsZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgIEBlYWNoICRoZWFkZXIsICRoZWFkZXItZGVmcyBpbiAkaGVhZGVycyB7XG4gICAgICAgICRmb250LXNpemUtdGVtcDogMXJlbTtcbiAgICAgICAgI3skaGVhZGVyfSwgLiN7JGhlYWRlcn0ge1xuXG4gICAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRoZWFkZXItZGVmcywgZm9udC1zaXplKSB7XG4gICAgICAgICAgICAkZm9udC1zaXplLXRlbXA6IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBmb250LXNpemUpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBmcykge1xuICAgICAgICAgICAgJGZvbnQtc2l6ZS10ZW1wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgZnMpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgJHNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRlbXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIGxpbmUtaGVpZ2h0KSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdW5pdGxlc3MtY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbGluZS1oZWlnaHQpLCAkZm9udC1zaXplLXRlbXApO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBsaCkge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHVuaXRsZXNzLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIGxoKSwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9IEBlbHNlIGlmICRzaXplID09ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB1bml0bGVzcy1jYWxjKCRoZWFkZXItbGluZWhlaWdodCwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tdG9wKSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLXRvcCkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtdCkge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG10KSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tYm90dG9tKSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLWJvdHRvbSkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYikge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG1iKSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYygkaGVhZGVyLW1hcmdpbi1ib3R0b20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkYW5jaG9yLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogJGFuY2hvci10ZXh0LWRlY29yYXRpb247XG5cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6ICRhbmNob3ItY29sb3ItaG92ZXI7XG4gICAgICBAaWYgJGFuY2hvci10ZXh0LWRlY29yYXRpb24taG92ZXIgIT0gJGFuY2hvci10ZXh0LWRlY29yYXRpb24ge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246ICRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGltZyB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9yaXpvbnRhbCBydWxlXG4gIGhyIHtcbiAgICBjbGVhcjogYm90aDtcblxuICAgIG1heC13aWR0aDogJGhyLXdpZHRoO1xuICAgIGhlaWdodDogMDtcbiAgICBtYXJnaW46ICRoci1tYXJnaW47XG5cbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItYm90dG9tOiAkaHItYm9yZGVyO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICB9XG5cbiAgLy8gTGlzdHNcbiAgdWwsXG4gIG9sLFxuICBkbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxpc3QtbWFyZ2luLWJvdHRvbTtcbiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiAkbGlzdC1zdHlsZS1wb3NpdGlvbjtcbiAgICBsaW5lLWhlaWdodDogJGxpc3QtbGluZWhlaWdodDtcbiAgfVxuXG4gIC8vIExpc3QgaXRlbXNcbiAgbGkge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBsaXN0c1xuICB1bCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gICAgbGlzdC1zdHlsZS10eXBlOiAkbGlzdC1zdHlsZS10eXBlO1xuICB9XG5cbiAgLy8gT3JkZXJlZCBsaXN0c1xuICBvbCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gIH1cblxuICAvLyBOZXN0ZWQgdW5vcmRlcmVkL29yZGVyZWQgbGlzdHNcbiAgdWwsIG9sIHtcbiAgICAmICYge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3QtbmVzdGVkLXNpZGUtbWFyZ2luO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZpbml0aW9uIGxpc3RzXG4gIGRsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTtcblxuICAgIGR0IHtcbiAgICAgIG1hcmdpbi1ib3R0b206ICRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b207XG4gICAgICBmb250LXdlaWdodDogJGRlZm5saXN0LXRlcm0td2VpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMCAwICRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTtcbiAgICBwYWRkaW5nOiAkYmxvY2txdW90ZS1wYWRkaW5nO1xuICAgIGJvcmRlci0jeyRnbG9iYWwtbGVmdH06ICRibG9ja3F1b3RlLWJvcmRlcjtcblxuICAgICYsIHAge1xuICAgICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICAgIGNvbG9yOiAkYmxvY2txdW90ZS1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBJbmxpbmUgQ2l0YXRpb25zXG4gIEBpZiAoJGVuYWJsZS1jaXRlLWJsb2NrID09IHRydWUpIHtcbiAgICBjaXRlIHtcbiAgICAgIC8vIEV4dGVuZGluZyBhIGNsYXNzIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgIC8vIFRPRE86IEJyZWFrIHRoZSB0eXBvZ3JhcGh5LWJhc2UvdHlwb2dyYXBoeS1oZWxwZXJzIHNlcGFyYXRpb25cbiAgICAgIEBleHRlbmQgLmNpdGUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLy8gQWJicmV2aWF0aW9uc1xuICBhYmJyLCBhYmJyW3RpdGxlXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGFiYnItdW5kZXJsaW5lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBGaWd1cmVzXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLy8gQ29kZVxuICBAaWYgKCRlbmFibGUtY29kZS1pbmxpbmUgPT0gdHJ1ZSkge1xuICAgIGNvZGUge1xuICAgICAgQGV4dGVuZCAuY29kZS1pbmxpbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5c3Ryb2tlc1xuICBrYmQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAka2V5c3Ryb2tlLXBhZGRpbmc7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAka2V5c3Ryb2tlLWJhY2tncm91bmQ7XG5cbiAgICBmb250LWZhbWlseTogJGtleXN0cm9rZS1mb250O1xuICAgIGNvbG9yOiAka2V5c3Ryb2tlLWNvbG9yO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgka2V5c3Ryb2tlLXJhZGl1cykge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGtleXN0cm9rZS1yYWRpdXM7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdHlwb2dyYXBoeS1oZWxwZXJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgbGVhZCBwYXJhZ3JhcGhzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBsZWFkIHBhcmFncmFwaHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kbGVhZC1saW5laGVpZ2h0OiAxLjYgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1saW5laGVpZ2h0OiAxLjQgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgd2VpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJHN1YmhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0b3AgbWFyZ2luIGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1tYXJnaW4tdG9wOiAwLjJyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4gZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3ViaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIGZvciBzdGF0aXN0aWMgbnVtYmVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzdGF0LWZvbnQtc2l6ZTogMi41cmVtICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjaXRlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBgLmNpdGUtYmxvY2tgIGNvbXBvbmVudC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpICFkZWZhdWx0O1xuXG4vLy8gUHNldWRvIGNvbnRlbnQgZm9yIGAuY2l0ZS1ibG9ja2AgY29tcG9uZW50LlxuLy8vIEB0eXBlIFN0cmluZ1xuJGNpdGUtcHNldWRvLWNvbnRlbnQ6ICdcXDIwMTQgXFwwMDIwJyAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNvZGUtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEZvbnQgZmFtaWx5IG9mIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGNvZGUtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2UgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGluIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kY29kZS1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBgLmNvZGUtaW5saW5lYCBhbmQgYC5jb2RlLWJsb2NrYCBjb21wb25lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBMaXN0XG4kY29kZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGFyb3VuZCB0ZXh0IG9mIHRoZSBgLmNvZGUtaW5saW5lYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtcGFkZGluZzogcmVtLWNhbGMoMiA1IDEpICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBhcm91bmQgdGV4dCBvZiB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtYmxvY2stcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIE1hcmdpbiB1bmRlciB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY29kZS1ibG9jay1tYXJnaW4tYm90dG9tOiAxLjVyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBjaXRlLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAkY2l0ZS1jb2xvcjtcbiAgZm9udC1zaXplOiAkY2l0ZS1mb250LXNpemU7XG5cbiAgJjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICRjaXRlLXBzZXVkby1jb250ZW50O1xuICB9XG59XG5cbi8vLyBBZGQgYmFzaWMgc3R5bGVzIGZvciBhIGNvZGUgaGVscGVyLlxuLy8vIFNlZSBgY29kZS1pbmxpbmVgIGFuZCBgY29kZS1ibG9ja2AgbWl4aW5zLlxuQG1peGluIGNvZGUtc3R5bGUge1xuICBib3JkZXI6ICRjb2RlLWJvcmRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmFja2dyb3VuZDtcblxuICBmb250LWZhbWlseTogJGNvZGUtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkY29kZS1mb250LXdlaWdodDtcbiAgY29sb3I6ICRjb2RlLWNvbG9yO1xufVxuXG4vLy8gTWFrZSBjb2RlIGhlbHBlciBmcm9tIHRoZSBgY29kZS1zdHlsZWAgbWl4aW4gaW5saW5lLlxuLy8vIFVzZWQgdG8gZ2VuZXJhdGUgYC5jb2RlLWlubGluZWBcbkBtaXhpbiBjb2RlLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG5cbiAgcGFkZGluZzogJGNvZGUtcGFkZGluZztcbn1cblxuLy8vIE1ha2UgY29kZSBoZWxwZXIgZnJvbSB0aGUgYGNvZGUtc3R5bGVgIG1peGluIGEgYmxvY2suXG4vLy8gVXNlZCB0byBnZW5lcmF0ZSBgLmNvZGUtYmxvY2tgXG5AbWl4aW4gY29kZS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcblxuICBwYWRkaW5nOiAkY29kZS1ibG9jay1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiAkY29kZS1ibG9jay1tYXJnaW4tYm90dG9tO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi10eXBvZ3JhcGh5LWhlbHBlcnMge1xuICAvLyBVc2UgdG8gY3JlYXRlIGEgc3ViaGVhZGluZyB1bmRlciBhIG1haW4gaGVhZGVyXG4gIC8vIE1ha2Ugc3VyZSB5b3UgcGFpciB0aGUgdHdvIGVsZW1lbnRzIGluIGEgPGhlYWRlcj4gZWxlbWVudCwgbGlrZSB0aGlzOlxuICAvLyA8aGVhZGVyPlxuICAvLyAgIDxoMT5IZWFkaW5nPC9oMT5cbiAgLy8gICA8aDI+U3ViaGVhZGluZzwvaDI+XG4gIC8vIDwvaGVhZGVyPlxuICAuc3ViaGVhZGVyIHtcbiAgICBtYXJnaW4tdG9wOiAkc3ViaGVhZGVyLW1hcmdpbi10b3A7XG4gICAgbWFyZ2luLWJvdHRvbTogJHN1YmhlYWRlci1tYXJnaW4tYm90dG9tO1xuXG4gICAgZm9udC13ZWlnaHQ6ICRzdWJoZWFkZXItZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRzdWJoZWFkZXItbGluZWhlaWdodDtcbiAgICBjb2xvcjogJHN1YmhlYWRlci1jb2xvcjtcbiAgfVxuXG4gIC8vIFVzZSB0byBzdHlsZSBhbiBpbnRyb2R1Y3RvcnkgbGVhZCwgZGVjaywgYmx1cmIsIGV0Yy5cbiAgLmxlYWQge1xuICAgIGZvbnQtc2l6ZTogJGxlYWQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGVhZC1saW5laGVpZ2h0O1xuICB9XG5cbiAgLy8gVXNlIHRvIHN0eWxlIGEgbGFyZ2UgbnVtYmVyIHRvIGRpc3BsYXkgYSBzdGF0aXN0aWNcbiAgLnN0YXQge1xuICAgIGZvbnQtc2l6ZTogJHN0YXQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgcCArICYge1xuICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwsIG9sIHtcbiAgICAvLyBVc2UgdG8gcmVtb3ZlIG51bWJlcnMgZnJvbSBvcmRlcmVkIGxpc3QgJiBidWxsZXRzIGZyb20gdW5vcmRlcmVkIGxpc3RcbiAgICAmLm5vLWJ1bGxldCB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuY2l0ZS1ibG9jayB7XG4gICAgQGluY2x1ZGUgY2l0ZS1ibG9jaztcbiAgfVxuXG4gIC5jb2RlLWlubGluZSB7XG4gICAgQGluY2x1ZGUgY29kZS1zdHlsZTtcbiAgICBAaW5jbHVkZSBjb2RlLWlubGluZTtcbiAgfVxuXG4gIC5jb2RlLWJsb2NrIHtcbiAgICBAaW5jbHVkZSBjb2RlLXN0eWxlO1xuICAgIEBpbmNsdWRlIGNvZGUtYmxvY2s7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tdGV4dC1hbGlnbm1lbnQge1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICBAZWFjaCAkYWxpZ24gaW4gKGxlZnQsIHJpZ2h0LCBjZW50ZXIsIGp1c3RpZnkpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tdGV4dC0jeyRhbGlnbn0ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJGFsaWduO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgLnRleHQtI3skYWxpZ259IHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246ICRhbGlnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIElmIGB0cnVlYCwgYWxsIGVsZW1lbnRzIHdpbGwgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcyB3aGVuIHByaW50ZWQsIHRvIHNhdmUgb24gaW5rLlxuLy8vIEB0eXBlIEJvb2xlYW5cbi8vLyBAZ3JvdXAgZ2xvYmFsXG4kcHJpbnQtdHJhbnNwYXJlbnQtYmFja2dyb3VuZHM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGRpc3BsYXlzIG5leHQgdG8gYWxsIGxpbmtzIHRoZWlyIFwiaHJlZlwiIHdoZW4gcHJpbnRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4vLy8gQGdyb3VwIGdsb2JhbFxuJHByaW50LWhyZWZzOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZS1hbGxcblxuQG1peGluIGZvdW5kYXRpb24tcHJpbnQtc3R5bGVzIHtcbiAgLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICAqIHtcbiAgICAgIC8vIEVuc3VyZSBhIFwiYmxhY2stb24td2hpdGVcIiBwcmludCBieSByZW1vdmluZyBiYWNrZ3JvdW5kcyxcbiAgICAgIC8vIHVzaW5nIGJsYWNrIHRleHQgZXZlcnl3aGVyZSBhbmQgZm9yY2luZyB0aGUgYnJvd3NlciB0byBlY29ub21pemUgaW5rLlxuICAgICAgQGlmICRwcmludC10cmFuc3BhcmVudC1iYWNrZ3JvdW5kcyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyAvLyBCbGFjayBwcmludHMgZmFzdGVyOiBoNWJwLmNvbS9zXG4gICAgICAgIGNvbG9yLWFkanVzdDogZWNvbm9teTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgcHJldmVudCBhbnkgZWNvbm9teSBieSB0aGUgYnJvd3Nlci5cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgY29sb3ItYWRqdXN0OiBleGFjdDtcbiAgICAgIH1cblxuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gICAgLmhpZGUtZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgICB0YWJsZS5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgICB0aGVhZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XG4gICAgdGJvZHkuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfVxuICAgIHRyLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgICB0ZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxuICAgIHRoLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG5cbiAgICAvLyBEaXNwbGF5IHRoZSBVUkwgb2YgYSBsaW5rIGFmdGVyIHRoZSB0ZXh0XG4gICAgYSxcbiAgICBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9XG4gICAgQGlmICRwcmludC1ocmVmcyB7XG4gICAgICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogJyAoJyBhdHRyKGhyZWYpICcpJzsgfVxuICAgIH1cblxuICAgIC8vIERvbid0IGRpc3BsYXkgdGhlIFVSTCBmb3IgaW1hZ2VzIG9yIEphdmFTY3JpcHQvaW50ZXJuYWwgbGlua3NcbiAgICAuaXIgYTphZnRlcixcbiAgICBhW2hyZWZePSdqYXZhc2NyaXB0OiddOmFmdGVyLFxuICAgIGFbaHJlZl49JyMnXTphZnRlciB7IGNvbnRlbnQ6ICcnOyB9XG5cbiAgICAvLyBEaXNwbGF5IHdoYXQgYW4gYWJicmV2aWF0aW9uIHN0YW5kcyBmb3IgYWZ0ZXIgdGhlIHRleHRcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7IGNvbnRlbnQ6ICcgKCcgYXR0cih0aXRsZSkgJyknOyB9XG5cbiAgICAvLyBQcmV2ZW50IHBhZ2UgYnJlYWtzIGluIHRoZSBtaWRkbGUgb2YgYSBibG9ja3F1b3RlIG9yIHByZWZvcm1hdHRlZCB0ZXh0IGJsb2NrXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICAvLyBoNWJwLmNvbS90XG4gICAgdGhlYWQgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cblxuICAgIHRyLFxuICAgIGltZyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfVxuXG4gICAgaW1nIHsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cblxuICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICBvcnBoYW5zOiAzO1xuICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIC8vIEF2b2lkIHBhZ2UgYnJlYWtzIGFmdGVyIGEgaGVhZGluZ1xuICAgIGgyLFxuICAgIGgzIHsgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH1cblxuICAgIC8vIEhlbHBlciB0byByZS1hbGxvdyBwYWdlIGJyZWFrcyBpbiB0aGUgbWlkZGxlIG9mIGNlcnRhaW4gZWxlbWVudHMgKGUuZy4gcHJlLCBibG9ja3F1b3RlLCB0cilcbiAgICAucHJpbnQtYnJlYWstaW5zaWRlIHtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LWJhc2UtZ3JpZC1jbGFzc2VzIHtcblxuICAvLyBHcmlkIENvbnRhaW5lclxuICAuZ3JpZC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQtY29udGFpbmVyO1xuXG4gICAgJi5mbHVpZCB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWNvbnRhaW5lcigxMDAlKTtcbiAgICB9XG5cbiAgICAmLmZ1bGwge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb250YWluZXIoMTAwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFzZSBncmlkIHN0eWxlc1xuICAuZ3JpZC14IHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkO1xuICB9XG5cbiAgLmNlbGwge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoZnVsbCwgJGd1dHRlci10eXBlOiBub25lKTtcblxuICAgICYuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2UoYXV0byk7XG4gICAgfVxuXG4gICAgJi5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgfVxuXG4gIH1cbiAgLmdyaWQteCB7XG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG5cbiAgICA+IC5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKHNocmluaywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdXRvIHdpZHRoXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyAmIFBScyBmb3IgdGhlIGJhY2tzdG9yeTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMDI0NFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL3B1bGwvMTAxNjRcbiAgICAuZ3JpZC14IHtcbiAgICAgICRzdHI6IFwiPiAuI3skLXpmLXNpemV9LXNocmluaywgPiAuI3skLXpmLXNpemV9LWZ1bGxcIjtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICRzdHI6ICRzdHIgKyBcIiwgPiAuI3skLXpmLXNpemV9LSN7JGl9XCJcbiAgICAgIH1cbiAgICAgICN7JHN0cn0ge1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gUmVzcG9uc2l2ZSBcImF1dG9cIiBtb2RpZmllclxuICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAuZ3JpZC14ID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbChhdXRvLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2Uoc2hyaW5rKTtcbiAgICB9XG5cbiAgICAvLyBSZXNwb25zaXZlIFwic2hyaW5rXCIgbW9kaWZpZXJcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tc2hyaW5rIHtcbiAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstaG9yaXpvbnRhbC0jeyQtemYtc2l6ZX07XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzcG9uc2l2ZSB3aWR0aCBtb2RpZmllcnNcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICBAZXh0ZW5kICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRpLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2V0IHdpZHRoIHdoZW4gdXNpbmcgYC5ncmlkLW1hcmdpbi14YCBub3Qgb24gYC5ncmlkLXhgXG4gIC5ncmlkLW1hcmdpbi14Om5vdCguZ3JpZC14KSA+IC5jZWxsIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gIC8vIFJlc2V0IGhlaWdodCB3aGVuIHVzaW5nIGAuZ3JpZC1tYXJnaW4teWAgbm90IG9uIGAuZ3JpZC15YFxuICAuZ3JpZC1tYXJnaW4teTpub3QoLmdyaWQteSkgPiAuY2VsbCB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbkBtaXhpbiAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGNsYXNzLWJyZWFrcG9pbnQsICRndXR0ZXItYnJlYWtwb2ludCwgJHZlcnRpY2FsKSB7XG4gICRwcmVmaXg6IGlmKCRjbGFzcy1icmVha3BvaW50ID09ICQtemYtemVyby1icmVha3BvaW50LCAnJywgJyN7JGNsYXNzLWJyZWFrcG9pbnR9LScpO1xuICA+IC4jeyRwcmVmaXh9YXV0byB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKGF1dG8sICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gID4gLiN7JHByZWZpeH1zaHJpbmsge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICRjbGFzc25hbWU6IGlmKCR2ZXJ0aWNhbCwgJy4jeyRjbGFzcy1icmVha3BvaW50fS0jeyRpfScsICcuI3skY2xhc3MtYnJlYWtwb2ludH0tI3skaX0nKTtcblxuICAgID4gI3skY2xhc3NuYW1lfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoXG4gICRndXR0ZXItcG9zaXRpb246IGxlZnQgcmlnaHQsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICR3cmFwcGluZy1zZWxlY3RvcjogJy5ncmlkLW1hcmdpbi14J1xuKXtcbiAgI3skd3JhcHBpbmctc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRuZWdhdGl2ZTogdHJ1ZSwgJGd1dHRlci1wb3NpdGlvbjogJGd1dHRlci1wb3NpdGlvbik7XG5cbiAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgfVxuXG4gICAgLy8gYmFzZSBzdHlsZXMgbmVlZCB0byBhbGwgYmUgYmVmb3JlIHRoZSBhdXRvIGFuZCBzaHJpbmsgc3R5bGVzXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIEBpZih0eXBlLW9mKCRncmlkLW1hcmdpbi1ndXR0ZXJzKSA9PSAnbWFwJyBhbmQgbWFwLWhhcy1rZXkoJGdyaWQtbWFyZ2luLWd1dHRlcnMsICQtemYtc2l6ZSkgYW5kICQtemYtc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgICA+IC5jZWxsIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuXG4gICAgICAvLyBUaGlzIGlzIHB1cmVseSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzIC0gdGhlIG1hcmdpbiBncmlkIGhhcyB0byBnbyBiYWNrIGFuZCBhZGp1c3Qgd2lkdGhzIChvciBoZWlnaHRzKVxuICAgICAgLy8gZm9yIGFsbCBwcmlvciBicmVha3BvaW50cy5cbiAgICAgIC8vIEFzIHRoZWlyIGd1dHRlciBpcyBkZWZpbmVkIHdpdGggdGhlaXIgd2lkdGgvaGVpZ2h0LCBldmVuIGJyZWFrcG9pbnQgd2l0aG91dCBhIG5ldyBtYXJnaW4gbXVzdCBiZVxuICAgICAgLy8gZ2VuZXJhdGVkIHRvIG5vdCBoYXZpbmcgdGhlaXIgd2lkdGgvaGVpZ2h0IG92ZXJyaWRlZCBieSByZS1hZGp1c3RlZCBzbWFsbGVyIGJyZWFrcG9pbnRzLlxuICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICBAZWFjaCAkYnAgaW4gLXpmLWJyZWFrcG9pbnRzLWxlc3MtdGhhbigkLXpmLXNpemUpIHtcbiAgICAgICAgICBAaW5jbHVkZSAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGJwLCAkLXpmLXNpemUsICR2ZXJ0aWNhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgLXh5LWJyZWFrcG9pbnQtY2VsbC1jbGFzc2VzKCQtemYtc2l6ZSwgJC16Zi1zaXplLCAkdmVydGljYWwpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBQYWRkaW5nIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzIHtcbiAgLmdyaWQtcGFkZGluZy14IHtcblxuICAgIC8vIE5lZ2F0aXZlIG1hcmdpbiBmb3IgbmVzdGVkIGdyaWRzXG4gICAgLmdyaWQtcGFkZGluZy14IHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJG5lZ2F0aXZlOiB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIGdyaWRzIHdpdGhpbiBgZ3JpZC1jb250YWluZXIvZ3JpZC1jb250YWluZXIuZmx1aWRgXG4gICAgLy8gVGhpcyBhbGxvd3MgbWFyZ2luIGFuZCBwYWRkaW5nIGdyaWRzIHRvIGxpbmUgdXAgd2l0aCBlYWNob3RoZXJcbiAgICAuZ3JpZC1jb250YWluZXI6bm90KC5mdWxsKSA+ICYge1xuICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUpO1xuICAgIH1cblxuICAgIC8vIEJhc2UgY2VsbCBzdHlsZXNcbiAgICA+IC5jZWxsIHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRncmlkLXBhZGRpbmctZ3V0dGVycywgJGd1dHRlci10eXBlOiBwYWRkaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQmxvY2sgR3JpZCBjbGFzc2VzXG5AbWl4aW4geHktYmxvY2stZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZDogdHJ1ZSwgJHBhZGRpbmctZ3JpZDogdHJ1ZSkge1xuICBAaWYgJHBhZGRpbmctZ3JpZCB7XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC4jeyQtemYtc2l6ZX0tdXAtI3skaX0ge1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtbGF5b3V0KCRuOiAkaSwgJHNlbGVjdG9yOiAnLmNlbGwnLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRvdXRwdXQ6IChzaXplKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50IHtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJHh5LWJsb2NrLWdyaWQtbWF4IHtcbiAgICAgICAgLy8gVGhpcyBpcyBwdXJlbHkgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycyAtIHRoZSBtYXJnaW4gZ3JpZCBoYXMgdG8gZ28gYmFjayBhbmQgYWRqdXN0IHdpZHRocyAob3IgaGVpZ2h0cylcbiAgICAgICAgLy8gZm9yIHByaW9yIGJyZWFrcG9pbnRzIGJhc2VkIG9uIHRoZSByZXNwb25zaXZlIGd1dHRlci5cbiAgICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICAgIEBlYWNoICRicCBpbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCQtemYtc2l6ZSkge1xuICAgICAgICAgICAgQGlmKG1hcC1oYXMta2V5KCRncmlkLW1hcmdpbi1ndXR0ZXJzLCAkYnApKSB7XG4gICAgICAgICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JGJwfS11cC0jeyRpfSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JC16Zi1zaXplfS11cC0jeyRpfSB7XG4gICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbGxhcHNlIGNsYXNzZXNcbkBtaXhpbiB4eS1jb2xsYXBzZS1ncmlkLWNsYXNzZXMoJG1hcmdpbi1ncmlkOiB0cnVlLCAkcGFkZGluZy1ncmlkOiB0cnVlKSB7XG4gIEBlYWNoICRicCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICAgIC4jeyRicH0tbWFyZ2luLWNvbGxhcHNlIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb2xsYXBzZSgkZ3V0dGVyLXR5cGU6IG1hcmdpbiwgJG1pbi1icmVha3BvaW50OiAkYnApO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkcGFkZGluZy1ncmlkIHtcbiAgICAgIC4jeyRicH0tcGFkZGluZy1jb2xsYXBzZSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtY29sbGFwc2UoJGd1dHRlci10eXBlOiBwYWRkaW5nLCAkbWluLWJyZWFrcG9pbnQ6ICRicCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE9mZnNldCBjbGFzc2VzXG5AbWl4aW4geHktb2Zmc2V0LWNlbGwtY2xhc3NlcyB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQge1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAvLyBPZmZzZXRzXG4gICAgICAkbzogJGkgLSAxO1xuXG4gICAgICAuI3skLXpmLXNpemV9LW9mZnNldC0jeyRvfSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtb2Zmc2V0KCRvLCAkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuICAgICAgfVxuXG4gICAgICAuZ3JpZC1tYXJnaW4teCA+IC4jeyQtemYtc2l6ZX0tb2Zmc2V0LSN7JG99IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1vZmZzZXQoJG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBWZXJ0aWNhbCBHcmlkIGNsYXNzZXNcbkBtaXhpbiB4eS12ZXJ0aWNhbC1ncmlkLWNsYXNzZXMoXG4gICRtYXJnaW4tZ3JpZDogdHJ1ZSxcbiAgJHBhZGRpbmctZ3JpZDogdHJ1ZVxuKSB7XG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLXkge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQodmVydGljYWwsIGZhbHNlKTtcblxuXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXJlc2V0KCk7XG4gICAgfVxuXG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lLCAkdmVydGljYWw6IHRydWUpO1xuICAgIH1cblxuICAgID4gLnNocmluayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoc2hyaW5rLCAkZ3V0dGVyLXR5cGU6IG5vbmUsICR2ZXJ0aWNhbDogdHJ1ZSk7XG4gICAgfVxuXG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyBhbmQgUFJzIGZvciB0aGUgYmFja3N0b3J5OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTAyNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDE2NFxuICAgICAgJHN0cjogXCI+IC4jeyQtemYtc2l6ZX0tc2hyaW5rLCA+IC4jeyQtemYtc2l6ZX0tZnVsbFwiO1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgJHN0cjogJHN0ciArIFwiLCA+IC4jeyQtemYtc2l6ZX0tI3skaX1cIlxuICAgICAgfVxuICAgICAgI3skc3RyfSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJhdXRvXCIgbW9kaWZpZXJcbiAgICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAgID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKGF1dG8sICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJzaHJpbmtcIiBtb2RpZmllclxuICAgICAgQGlmIG5vdCgkLXpmLXNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQpIHtcbiAgICAgICAgPiAuI3skLXpmLXNpemV9LXNocmluayB7XG4gICAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9O1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb25zaXZlIHdpZHRoIG1vZGlmaWVyc1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgICA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICAgIEBleHRlbmQgJS14eS1jZWxsLWJhc2Utc2hyaW5rLXZlcnRpY2FsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWRkaW5nLWdyaWQge1xuICAgIC5ncmlkLXBhZGRpbmcteSB7XG4gICAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIG5lc3RlZCBncmlkc1xuICAgICAgLmdyaWQtcGFkZGluZy15IHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuXG4gICAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgICA+IC5jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAkbWFyZ2luLWdyaWQge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXModG9wIGJvdHRvbSwgdHJ1ZSwgJy5ncmlkLW1hcmdpbi15Jyk7XG4gIH1cblxufVxuXG5AbWl4aW4geHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkOiB0cnVlLCAkbWFyZ2luLWdyaWQ6IHRydWUpIHtcbiAgLy8gRnJhbWVkIGdyaWQgc3R5bGVzXG4gIC5ncmlkLWZyYW1lIHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lO1xuICB9XG5cbiAgLmNlbGwgLmdyaWQtZnJhbWUge1xuICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICB9XG5cbiAgLmNlbGwtYmxvY2sge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2soKTtcbiAgfVxuXG4gIC5jZWxsLWJsb2NrLXkge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gIH1cblxuXG4gIC5jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ibG9jay1jb250YWluZXIoKTtcbiAgfVxuXG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuXG4gICAgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWU7XG4gICAgfVxuXG4gICAgLmNlbGwgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrKCk7XG4gICAgfVxuXG4gICAgLiN7JC16Zi1zaXplfS1jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jay15IHtcbiAgICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICR2ZXJ0aWNhbC1ncmlkIHtcbiAgICAuZ3JpZC15IHtcbiAgICAgICYuZ3JpZC1mcmFtZSB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgICYuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgICAuY2VsbCB7XG4gICAgICAuZ3JpZC15LmdyaWQtZnJhbWUge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IC8vIFNhbWUgYXMgaW5jbHVkZSB3aXRoICRuZXN0ZWQsIGJ1dCB3aXRoIGxlc3MgY3NzXG4gICAgICB9XG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgIC5ncmlkLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIGhlaWdodDogMTAwJTsgLy8gU2FtZSBhcyBpbmNsdWRlIHdpdGggJG5lc3RlZCwgYnV0IHdpdGggbGVzcyBjc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSB4eS1tYXJnaW4tZ3JpZC1jbGFzc2VzKHRvcCBib3R0b20sIHRydWUsICcuZ3JpZC1tYXJnaW4teScpO1xuICAgIC5ncmlkLWZyYW1lLmdyaWQtbWFyZ2luLXkge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1mcmFtZSh0cnVlLCBmYWxzZSwgJGdyaWQtbWFyZ2luLWd1dHRlcnMsICRpbmNsdWRlLWJhc2U6IGZhbHNlKTtcbiAgICB9XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuICAgICAgLmdyaWQtbWFyZ2luLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUsIGZhbHNlLCAkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZpbmFsIGNsYXNzZXNcbkBtaXhpbiBmb3VuZGF0aW9uLXh5LWdyaWQtY2xhc3NlcyhcbiAgJGJhc2UtZ3JpZDogdHJ1ZSxcbiAgJG1hcmdpbi1ncmlkOiB0cnVlLFxuICAkcGFkZGluZy1ncmlkOiB0cnVlLFxuICAkYmxvY2stZ3JpZDogdHJ1ZSxcbiAgJGNvbGxhcHNlOiB0cnVlLFxuICAkb2Zmc2V0OiB0cnVlLFxuICAkdmVydGljYWwtZ3JpZDogdHJ1ZSxcbiAgJGZyYW1lLWdyaWQ6IHRydWVcbikge1xuXG4gIC8vIEJhc2UgZ3JpZCBzdHlsZXNcbiAgQGlmKCRiYXNlLWdyaWQpIHtcbiAgICBAaW5jbHVkZSB4eS1iYXNlLWdyaWQtY2xhc3NlcygpO1xuICB9XG5cbiAgLy8gTWFyZ2luIGdyaWRcbiAgQGlmKCRtYXJnaW4tZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFBhZGRpbmcgZ3JpZFxuICBAaWYoJHBhZGRpbmctZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzKCk7XG4gIH1cblxuICAvLyBCbG9jayBncmlkXG4gIEBpZigkYmxvY2stZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LWJsb2NrLWdyaWQtY2xhc3NlcygkbWFyZ2luLWdyaWQsICRwYWRkaW5nLWdyaWQpO1xuICB9XG5cbiAgLy8gQ29sbGFwc2UgZ3V0dGVyc1xuICBAaWYoJGNvbGxhcHNlKSB7XG4gICAgQGluY2x1ZGUgeHktY29sbGFwc2UtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICAvLyBPZmZzZXQgZ3V0dGVyc1xuICBAaWYoJG9mZnNldCkge1xuICAgIEBpbmNsdWRlIHh5LW9mZnNldC1jZWxsLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsIGdyaWRcbiAgQGlmKCR2ZXJ0aWNhbC1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktdmVydGljYWwtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICBAaWYgKCRmcmFtZS1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkLCAkbWFyZ2luLWdyaWQpXG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGUgZ3V0dGVycyBmb3IgYSBjZWxsL2NvbnRhaW5lci5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgZWl0aGVyIG1hcmdpbiBvciBwYWRkaW5nLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb24gdG8gYXBwbHkgZ3V0dGVycyB0by4gQWNjZXB0cyBgdG9wYCwgYGJvdHRvbWAsIGBsZWZ0YCwgYHJpZ2h0YCBpbiBhbnkgY29tYmluYXRpb24uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkbmVnYXRpdmUgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gYXBwbHkgdGhlIGd1dHRlciBhcyBhIG5lZ2F0aXZlIHZhbHVlLiBDb21tb25seSB1c2VkIGZvciBuZXN0ZWQgZ3JpZHMuXG5AbWl4aW4geHktZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogcmlnaHQgbGVmdCxcbiAgJG5lZ2F0aXZlOiBmYWxzZVxuKSB7XG4gICRvcGVyYXRvcjogaWYoJG5lZ2F0aXZlLCAnLScsICcnKTtcblxuICAvLyBJZiB3ZSBoYXZlIGRlY2xhcmVkIG5lZ2F0aXZlIGd1dHRlcnMsIGZvcmNlIHR5cGUgdG8gYG1hcmdpbi5cbiAgJGd1dHRlci10eXBlOiBpZigkbmVnYXRpdmUsICdtYXJnaW4nLCAkZ3V0dGVyLXR5cGUpO1xuXG4gIC8vIE91dHB1dCBvdXIgbWFyZ2luIGd1dHRlcnMuXG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkZ3V0dGVycykge1xuICAgICAgJGd1dHRlcjogcmVtLWNhbGMoJC16Zi1icC12YWx1ZSkgLyAyO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgI3skZ3V0dGVyLXR5cGV9LSN7JHZhbHVlfTogdW5xdW90ZShcIiN7JG9wZXJhdG9yfSN7JGd1dHRlcn1cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICh0eXBlLW9mKCRndXR0ZXJzKSA9PSAnbnVtYmVyJykge1xuICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXJzKSAvIDI7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAjeyRndXR0ZXItdHlwZX0tI3skdmFsdWV9OiB1bnF1b3RlKFwiI3skb3BlcmF0b3J9I3skZ3V0dGVyfVwiKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGVzIGEgbWF4IHdpZHRoIGNvbnRhaW5lciwgZGVzaWduZWQgdG8gaG91c2UgeW91ciBncmlkIGNvbnRlbnQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFskZ3JpZC1jb250YWluZXJdIC0gYSB3aWR0aCB0byBsaW1pdCB0aGUgY29udGFpbmVyIHRvLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkcGFkZGluZyBbJGdyaWQtY29udGFpbmVyLXBhZGRpbmddIC0gcGFkZGluZ3Mgb2YgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiB4eS1ncmlkLWNvbnRhaW5lcihcbiAgJHdpZHRoOiAkZ3JpZC1jb250YWluZXIsXG4gICRwYWRkaW5nOiAkZ3JpZC1jb250YWluZXItcGFkZGluZ1xuKSB7XG4gIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRwYWRkaW5nLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuXG4gIG1heC13aWR0aDogJHdpZHRoO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4vLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgeW91ciBmbGV4IGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyZWN0aW9uIFtob3Jpem9udGFsXSAtIEVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGRpcmVjdGlvbiBvZiBjZWxscyB3aXRoaW4uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkd3JhcCBbdHJ1ZV0gLSBJZiB0aGUgY2VsbHMgd2l0aGluIHNob3VsZCB3cmFwIG9yIG5vdC5cbkBtaXhpbiB4eS1ncmlkKFxuICAkZGlyZWN0aW9uOiBob3Jpem9udGFsLFxuICAkd3JhcDogdHJ1ZVxuKSB7XG4gICRkaXJlY3Rpb246IGlmKCRkaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnLCByb3csIGNvbHVtbik7XG4gICR3cmFwOiBpZigkd3JhcCwgd3JhcCwgbm93cmFwKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6ICRkaXJlY3Rpb24gJHdyYXA7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIGZsZXggdmFsdWUgZm9yIGEgY2VsbCBiYXNlLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gVGhlIGNlbGwgZmxleCBwcm9wZXJ0eSB2YWx1ZS5cbkBmdW5jdGlvbiB4eS1jZWxsLWJhc2UoJHNpemU6IGZ1bGwpIHtcbiAgQGlmICgkc2l6ZSA9PSAnYXV0bycpIHtcbiAgICBAcmV0dXJuIDEgMSAwcHg7XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdncm93Jykge1xuICAgIEByZXR1cm4gMSAwIGF1dG87XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdzaHJpbmsnIG9yICRzaXplID09ICdmdWxsJyBvciB6Zi1pcy1mcmFjdGlvbigkc2l6ZSwgJGFsbG93LW5vLWRlbm9taW5hdG9yOiB0cnVlKSkge1xuICAgIEByZXR1cm4gMCAwIGF1dG87XG4gIH1cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLy8gQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgY2VsbCBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgZ3V0dGVycyBtYXAgYCRndXR0ZXJzYC4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcnxNYXB9IFRoZSBjZWxsIGd1dHRlciBzaXplIG9yIHRoZSByZXNwb25zaXZlIGd1dHRlcnMgbWFwLlxuQGZ1bmN0aW9uIHh5LWNlbGwtZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gIC8vIEZvciBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgbWFwIGAkZ3V0dGVyc2AuXG4gIEBpZiAoJGJyZWFrcG9pbnQgPT0gJ2F1dG8nKSB7XG4gICAgQHJldHVybiAkZ3V0dGVycztcbiAgfVxuXG4gIC8vIFVzZSB0aGUgY29udGV4dHVhbCBicmVha3BvaW50IGJ5IGRlZmF1bHQuXG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50KTtcblxuICBAaWYgKCRicmVha3BvaW50KSB7XG4gICAgQHJldHVybiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIC16Zi1nZXQtYnAtdmFsKCRndXR0ZXJzLCAkLXpmLXplcm8tYnJlYWtwb2ludCkgb3IgMDtcbiAgfVxufVxuXG4vLy8gUmV0dXJucyB0aGUgcGVyY2VudGFnZSBzaXplIG9mIGEgY2VsbC5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICRzaXplIFskZ3JpZC1jb2x1bW5zXSAtIFNpemUgdG8gbWFrZSB0aGUgY2VsbC4gWW91IGNhbiBwYXNzIGEgdmFsdWUgaW4gbXVsdGlwbGUgZm9ybWF0cywgc3VjaCBhcyBgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8zYC5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFNpemUgb2YgdGhlIGNlbGwgKGluIHBlcmNlbnQpLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZShcbiAgJHNpemU6ICRncmlkLWNvbHVtbnNcbikge1xuICBAcmV0dXJuIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoJHNpemUsICRkZW5vbWluYXRvcjogJGdyaWQtY29sdW1ucyk7XG59XG5cbi8vLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBDU1MgdmFsdWUgZm9yIGEgY2VsbCBzaXplLlxuLy8vXG4vLy8gR3V0dGVycy1yZWxhdGVkIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgZm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMgKGJ5IGRlZmF1bHQpIGFzIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfE51bWJlcn0gJHNpemUgW2Z1bGxdIC0gVGhlIHNpemUgb2YgeW91ciBjZWxsLiBDYW4gYmUgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgIG9yIGFueSBmcmFjdGlvbiBsaWtlIGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCByZXR1cm5zIGEgbWFwIG9mIHNpemVzIGFkYXB0ZWQgdG8gcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ3xNYXB9IFRoZSBjZWxsIHNpemluZyBwcm9wZXJ0eSB2YWx1ZSwgb3IgYSByZXNwb25zaXZlIG1hcCBvZiB0aGVtLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZS1jc3MoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gICRtYXJnaW4tZ3V0dGVyOiAwO1xuXG4gIEBpZiAoJHNpemUgPT0gJ2F1dG8nIG9yICRzaXplID09ICdzaHJpbmsnKSB7XG4gICAgQHJldHVybiBhdXRvO1xuICB9XG5cbiAgLy8gRm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMsIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuICAgICRtYXJnaW4tZ3V0dGVyOiB4eS1jZWxsLWd1dHRlcnMoJGd1dHRlcnMsICRicmVha3BvaW50KTtcbiAgICBAaWYgKCRtYXJnaW4tZ3V0dGVyID09IG51bGwpIHtcbiAgICAgIEBlcnJvciAneHktY2VsbC1zaXplOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBjZWxsIHNpemUgKG51bWJlcilcbiAgJHNpemUtcmF3OiBpZigkc2l6ZSA9PSAnZnVsbCcsIDEwMCUsIHh5LWNlbGwtc2l6ZSgkc2l6ZSkpO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgY2VsbCBDU1Mgc2l6ZSBpbmNsdWRpbmcgZ3V0dGVycyAoc3RyaW5nKVxuICAvLyBJZiB0aGUgY2VsbCBoYXMgcmVzcG9uc2l2ZSBtYXJnaW4gZ3V0dGVycywgcmV0dXJuIGEgcmVzcG9uc2l2ZSBtYXAgb2Ygc2l6ZXMuXG4gIEBpZiB0eXBlLW9mKCRtYXJnaW4tZ3V0dGVyKSA9PSAnbWFwJyB7XG4gICAgJHJlc3BvbnNpdmUtY3NzLXNpemVzOiAoKTtcblxuICAgIEBlYWNoICRicCwgJG1nIGluICRtYXJnaW4tZ3V0dGVyIHtcbiAgICAgICRzaXplLWNzczogaWYoJG1nID09IDAsICRzaXplLXJhdywgY2FsYygjeyRzaXplLXJhd30gLSAje3JlbS1jYWxjKCRtZyl9KSk7XG4gICAgICAkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXM6IG1hcC1tZXJnZSgkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXMsICgkYnA6ICRzaXplLWNzcykpO1xuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3BvbnNpdmUtY3NzLXNpemVzO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgc2luZ2xlIENTUyBzaXplLlxuICBAZWxzZSB7XG4gICAgJGNzcy1zaXplOiBpZigkbWFyZ2luLWd1dHRlciA9PSAwLCAkc2l6ZS1yYXcsIGNhbGMoI3skc2l6ZS1yYXd9IC0gI3tyZW0tY2FsYygkbWFyZ2luLWd1dHRlcil9KSk7XG4gICAgQHJldHVybiAkY3NzLXNpemU7XG4gIH1cbn1cblxuLy8vIFNldHMgYmFzZSBmbGV4IHByb3BlcnRpZXMgZm9yIGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG5AbWl4aW4geHktY2VsbC1iYXNlKCRzaXplOiBmdWxsKSB7XG4gICRiYXNlOiB4eS1jZWxsLWJhc2UoJHNpemUpO1xuXG4gIGZsZXg6ICN7JGJhc2V9O1xuXG4gIC8vIFNldCBiYXNlIHN0eWxlcyBmb3IgXCJmdWxsXCIgb25seVxuICBAaWYoJHNpemUgPT0gJ2Z1bGwnKSB7XG4gICAgbWluLWhlaWdodDogMHB4O1xuICAgIG1pbi13aWR0aDogMHB4O1xuICB9XG59XG5cbi8vLyBSZXNldHMgYSBjZWxscyB3aWR0aCAob3IgaGVpZ2h0IGlmIHZlcnRpY2FsIGlzIHRydWUpIGFzIHdlbGwgYXMgc3RyaXBzIGl0cyBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtcmVzZXQoJHZlcnRpY2FsOiB0cnVlKSB7XG4gICRkaXJlY3Rpb246IGlmKCR2ZXJ0aWNhbCA9PSB0cnVlLCBoZWlnaHQsIHdpZHRoKTtcbiAgI3skZGlyZWN0aW9ufTogYXV0bztcbiAgbWF4LSN7JGRpcmVjdGlvbn06IG5vbmU7XG59XG5cbi8vLyBTZXRzIHNpemluZyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEd1dHRlcnMtcmVsYXRlZCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGZvciBjZWxscyB3aXRoIG1hcmdpbiBndXR0ZXJzIChieSBkZWZhdWx0KSBhcyB0aGUgZ3V0dGVyIGlzIGluY2x1ZGVkIGluIHRoZSB3aWR0aC5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gVHlwZSBvZiBndXR0ZXIgdG8gb3V0cHV0LiBBY2NlcHRzIGBtYXJnaW5gLCBgcGFkZGluZ2Agb3IgYG5vbmVgLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uIElmIGBhdXRvYCwgZ2VuZXJhdGVzIHNpemVzIGFkYXB0ZWQgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycy4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJHZlcnRpY2FsIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBvdXRwdXQgdmVydGljYWwgKGhlaWdodCkgc3R5bGVzIHJhdGhlciB0aGFuIHdpZHRocy5cbkBtaXhpbiB4eS1jZWxsLXNpemUoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRzaXplczogeHktY2VsbC1zaXplLWNzcygkc2l6ZSwgJGd1dHRlcnMsICRndXR0ZXItdHlwZSwgJGJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgaGVpZ2h0LCB3aWR0aCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzaXplcykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkc2l6ZXMpIHtcbiAgICAgICN7JGRpcmVjdGlvbn06ICQtemYtYnAtdmFsdWU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRkaXJlY3Rpb259OiAkc2l6ZXM7XG4gIH1cbn1cblxuLy8vIFNldHMgZ3V0dGVycyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtMaXN0fSAkZ3V0dGVyLXBvc2l0aW9uIFtudWxsXSAtIFRoZSBwb3NpdGlvbiB0byBhcHBseSBndXR0ZXJzIHRvLiBBY2NlcHRzIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgLCBgcmlnaHRgIGluIGFueSBjb21iaW5hdGlvbi4gQnkgZGVmYXVsdCBgcmlnaHQgbGVmdGAgZm9yIGhvcml6b250YWwgY2VsbHMgYW5kIGB0b3AgYm90dG9tYCBmb3IgdmVydGljYWwgY2VsbHMuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCBnZW5lcmF0ZXMgcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIERpcmVjdGlvbiBvZiB0aGUgZ3V0dGVycyB0byBvdXRwdXQuIFNlZSBgJGd1dHRlci1wb3NpdGlvbmAuXG5AbWl4aW4geHktY2VsbC1ndXR0ZXJzKFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIC8vIEdldCB0aGUgZGVmYXVsdCBndXR0ZXIgcG9zaXRpb24gYWNjb3JkaW5nIHRvIGNlbGwgZGlyZWN0aW9uXG4gIEBpZigkZ3V0dGVyLXBvc2l0aW9uID09IG51bGwpIHtcbiAgICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGd1dHRlciB3aWR0aCBmb3IgdGhpcyBicmVha3BvaW50XG4gICRndXR0ZXItd2lkdGg6IHh5LWNlbGwtZ3V0dGVycygkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICBAaWYgKCRndXR0ZXItd2lkdGggPT0gbnVsbCkge1xuICAgIEBlcnJvciAneHktY2VsbC1ndXR0ZXJzOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gIH1cblxuICBAaWYgKCRndXR0ZXItdHlwZSBhbmQgJGd1dHRlci10eXBlICE9IG5vbmUpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXItd2lkdGgsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBjZWxsIGZvciB5b3VyIGdyaWQuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIENhbiBiZSBgZnVsbGAgKDEwMCUgd2lkdGgpLCBgYXV0b2AgKHVzZSBhbGwgYXZhaWxhYmxlIHNwYWNlKSwgYHNocmlua2AgKHVzZSBvbmx5IHRoZSByZXF1aXJlZCBzcGFjZSkgb3IgYW55IGZyYWN0aW9uIChgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8yYC4uLikuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIGdlbmVyYXRlcyByZXNwb25zaXZlIGd1dHRlcnMuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gb3V0cHV0IHZlcnRpY2FsIChoZWlnaHQpIHN0eWxlcyByYXRoZXIgdGhhbiB3aWR0aHMuXG4vLy8gQHBhcmFtIHtMaXN0fSAkb3V0cHV0IFsoYmFzZSBzaXplIGd1dHRlcnMpXSAtIENlbGwgcGFydHMgdG8gb3V0cHV0LiBZb3Ugd2lsbCBuZWVkIHRvIGdlbmVyYXRlIG90aGVycyBwYXJ0cyBvZiB0aGUgY2VsbCBzZXBlcmF0ZWx5LCBpdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgb3RoZXJ3aXNlLlxuQG1peGluIHh5LWNlbGwoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyLW91dHB1dDogbnVsbCxcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogbnVsbCxcbiAgJGJyZWFrcG9pbnQ6IG51bGwsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICRvdXRwdXQ6IChiYXNlIHNpemUgZ3V0dGVycylcbikge1xuICAvLyBEZWZhdWx0IGZvciAkZ3V0dGVyLW91dHB1dFxuICBAaWYgKCRndXR0ZXItb3V0cHV0ICE9IG51bGwpIHtcbiAgICBAd2FybiAneHktY2VsbDogJGd1dHRlci1vdXRwdXQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBTZWUgbWlncmF0aW9uIG5vdGVzIGF0IGh0dHBzOi8vZ2l0LmlvL2ZvdW5kYXRpb24tNi02LTAnO1xuICAgIEBpZiAoJGd1dHRlci1vdXRwdXQgPT0gZmFsc2UpIHtcbiAgICAgICRvdXRwdXQ6IHNsLXJlbW92ZSgkb3V0cHV0LCBndXR0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGJhc2UpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKCRzaXplKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIHNpemUpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRzaXplLCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGd1dHRlcnMpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkZ3V0dGVyLXR5cGUsICRndXR0ZXItcG9zaXRpb24sICRicmVha3BvaW50LCAkdmVydGljYWwpO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2luZ2xlIGJyZWFrcG9pbnQgc2l6ZWQgZ3JpZC4gVXNlZCB0byBnZW5lcmF0ZSBvdXIgZ3JpZCBjbGFzc2VzLlxuLy8vXG4vLy8gYHh5LWNlbGwtc3RhdGljKClgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC5cbi8vLyBVc2UgYHh5LWNlbGwoKWAgaW5zdGVhZCB3aXRoIGAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKWAgdG8gbm90IGdlbmVyYXRlIHRoZSBjZWxsIGJhc2UuXG4vLy8gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wXG4vLy9cbi8vLyBAZGVwcmVjYXRlZCB2Ni42LjBcbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRndXR0ZXItb3V0cHV0IFt0cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBndXR0ZXJzLiBBbHdheXMgYHRydWVgIGZvciBtYXJnaW4gZ3V0dGVycy5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtc3RhdGljKFxuICAkc2l6ZTogZnVsbCxcbiAgJGd1dHRlci1vdXRwdXQ6IHRydWUsXG4gICRndXR0ZXJzOiAkZ3JpZC1tYXJnaW4tZ3V0dGVycyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRicmVha3BvaW50OiAkLXpmLXplcm8tYnJlYWtwb2ludCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIEB3YXJuICd4eS1jZWxsLXN0YXRpYygpIG1peGluIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIFwieHktY2VsbCgpXCIgaW5zdGVhZC4gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wJztcblxuICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG5cbiAgJC1ndXR0ZXItb3V0cHV0OiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsIHRydWUsICRndXR0ZXItb3V0cHV0KTtcbiAgJC1ndXR0ZXItbWFyZ2luOiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsICRndXR0ZXIsIDApO1xuXG4gIEBpbmNsdWRlIC14eS1jZWxsLXByb3BlcnRpZXMoJHNpemUsICQtZ3V0dGVyLW1hcmdpbiwgJHZlcnRpY2FsKTtcbiAgQGlmICgkLWd1dHRlci1vdXRwdXQpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXIsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gaW50ZWdlcnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJGEgLSBGaXJzdCBudW1iZXIgdG8gY29tcGFyZS5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGIgLSBTZWNvbmQgbnVtYmVyIHRvIGNvbXBhcmUuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuXG5AZnVuY3Rpb24gZ2NkKCRhLCAkYikge1xuICAvLyBGcm9tOiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvR3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IjSmF2YVNjcmlwdFxuICBAaWYgKCRiICE9IDApIHtcbiAgICBAcmV0dXJuIGdjZCgkYiwgJGEgJSAkYik7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gYWJzKCRhKTtcbiAgfVxufVxuXG4vLy8gSGFuZGxlcyBkZWNpbWFsIGV4cG9uZW50cyBieSB0cnlpbmcgdG8gY29udmVydCB0aGVtIGludG8gYSBmcmFjdGlvbiBhbmQgdGhlbiB1c2UgYSBudGgtcm9vdC1hbGdvcml0aG0gZm9yIHBhcnRzIG9mIHRoZSBjYWxjdWxhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gVGhlIGJhc2UgbnVtYmVyLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZXhwb25lbnQgLSBUaGUgZXhwb25lbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgcHJvZHVjdCBvZiB0aGUgZXhwb25lbnRpYXRpb24uXG5AZnVuY3Rpb24gcG93KCRiYXNlLCAkZXhwb25lbnQsICRwcmVjOiAxNikge1xuICBAaWYgKGZsb29yKCRleHBvbmVudCkgIT0gJGV4cG9uZW50KSB7XG4gICAgJHByZWMyIDogcG93KDEwLCAkcHJlYyk7XG4gICAgJGV4cG9uZW50OiByb3VuZCgkZXhwb25lbnQgKiAkcHJlYzIpO1xuICAgICRkZW5vbWluYXRvcjogZ2NkKCRleHBvbmVudCwgJHByZWMyKTtcbiAgICBAcmV0dXJuIG50aC1yb290KHBvdygkYmFzZSwgJGV4cG9uZW50IC8gJGRlbm9taW5hdG9yKSwgJHByZWMyIC8gJGRlbm9taW5hdG9yLCAkcHJlYyk7XG4gIH1cblxuICAkdmFsdWU6ICRiYXNlO1xuICBAaWYgJGV4cG9uZW50ID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkZXhwb25lbnQge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgKiAkYmFzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGV4cG9uZW50IDwgMSB7XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAtJGV4cG9uZW50IHtcbiAgICAgICR2YWx1ZTogJHZhbHVlIC8gJGJhc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbkBmdW5jdGlvbiBudGgtcm9vdCgkbnVtLCAkbjogMiwgJHByZWM6IDEyKSB7XG4gIC8vIEZyb206IGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICR4OiAxO1xuXG4gIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggJHByZWMge1xuICAgICR4OiAxIC8gJG4gKiAoKCRuIC0gMSkgKiAkeCArICgkbnVtIC8gcG93KCR4LCAkbiAtIDEpKSk7XG4gIH1cblxuICBAcmV0dXJuICR4O1xufVxuXG4vLy8gQ2FsY3VsYXRlcyB0aGUgaGVpZ2h0IGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggZm9yIGEgZ2l2ZW4gcmF0aW8uXG4vLy8gQHBhcmFtIHtMaXN0fSAkcmF0aW8gLSBSYXRpbyB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQsIGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IEEgcGVyY2VudGFnZSB2YWx1ZSBmb3IgdGhlIGhlaWdodCByZWxhdGl2ZSB0byB0aGUgd2lkdGggb2YgYSByZXNwb25zaXZlIGNvbnRhaW5lci5cbkBmdW5jdGlvbiByYXRpby10by1wZXJjZW50YWdlKCRyYXRpbykge1xuICAkdzogbnRoKCRyYXRpbywgMSk7XG4gICRoOiBudGgoJHJhdGlvLCAzKTtcbiAgQHJldHVybiAkaCAvICR3ICogMTAwJTtcbn1cblxuLy8vIFBhcnNlIHRoZSBnaXZlbiBgJGZyYWN0aW9uYCB0byBudW1lcmF0b3JzIGFuZCBkZW51bWVyYXRvcnMuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICRmcmFjdGlvbiAtIFZhbHVlIHJlcHJlc2VudGluZyBhIGZyYWN0aW9uIHRvIHBhcnNlLiBJdCBjYW4gYmUgZm9ybWF0dGVkIGFzIGA1MCVgLCBgMSBvZiAyYCwgYDEvMmAgb3IgYDUwYCAobm8gZGVub21pbmF0b3Igd291bGQgYmUgcmV0dXJuZWQpLlxuLy8vXG4vLy8gQHJldHVybiB7TGlzdH0gTGlzdCBvZiBwYXJzZWQgdmFsdWVzIHdpdGggbnVtZXJhdG9yIGF0IGZpcnN0IHBvc2l0aW9uIGFuZCBkZW51bWVyYXRvciBhcyBzZWNvbmQuIFRoZXNlIHZhbHVlcyBtYXkgYmUgbnVsbC5cbkBmdW5jdGlvbiB6Zi1wYXJzZS1mcmFjdGlvbigkZnJhY3Rpb24pIHtcblxuICBAaWYgdHlwZS1vZigkZnJhY3Rpb24pID09ICdudW1iZXInIHtcbiAgICAvLyBcIjUwJVwiXG4gICAgQGlmIHVuaXQoJGZyYWN0aW9uKSA9PSAnJScge1xuICAgICAgQHJldHVybiAoc3RyaXAtdW5pdCgkZnJhY3Rpb24pLCAxMDApO1xuICAgIH1cbiAgICBAZWxzZSBpZiAodW5pdCgkZnJhY3Rpb24pID09ICcnKSB7XG4gICAgICAvLyBcIjAuNVwiXG4gICAgICBAaWYgJGZyYWN0aW9uIDwgMSB7XG4gICAgICAgIEByZXR1cm4gKCRmcmFjdGlvbiAqIDEwMCwgMTAwKTtcbiAgICAgIH1cbiAgICAgIC8vIFwiNTBcIlxuICAgICAgQGVsc2Uge1xuICAgICAgICBAcmV0dXJuICgkZnJhY3Rpb24sIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGZyYWN0aW9uKSA9PSAnbGlzdCcge1xuICAgIC8vIFwiNTAgb2YgMTAwXCIsIFwiNTAvMTAwXCIuLi5cbiAgICBAaWYgbGVuZ3RoKCRmcmFjdGlvbikgPT0gM1xuICAgICAgYW5kIHR5cGUtb2YobnRoKCRmcmFjdGlvbiwgMSkgPT0gJ251bWJlcicpXG4gICAgICBhbmQgdHlwZS1vZihudGgoJGZyYWN0aW9uLCAzKSA9PSAnbnVtYmVyJykge1xuICAgICAgQHJldHVybiAobnRoKCRmcmFjdGlvbiwgMSksIG50aCgkZnJhY3Rpb24sIDMpKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIChudWxsLCBudWxsKTtcbn1cblxuLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLiBTdXBwb3J0cyBmb3JtYXRzIGxpa2UgYDUwJWAsIGAxIG9mIDJgLCBgMSBwZXIgMmAgb3IgYDEvMmAuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICR2YWx1ZSAtIFZhbHVlIHRvIHRlc3QuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkYWxsb3ctbm8tZGVub21pbmF0b3IgW2ZhbHNlXSAtIElmIGB0cnVlYCwgc2ltcGxlIG51bWJlcnMgd2l0aG91dCBkZW5vbWluYXRvcnMgbGlrZSBgNTBgIGFyZSBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLCBgZmFsc2VgIG90aGVyd2lzZS5cbkBmdW5jdGlvbiB6Zi1pcy1mcmFjdGlvbigkdmFsdWUsICRhbGxvdy1uby1kZW5vbWluYXRvcjogZmFsc2UpIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJHZhbHVlKTtcbiAgQHJldHVybiBub3QobnRoKCRwYXJzZWQsIDEpID09IG51bGxcbiAgICBvciAobnRoKCRwYXJzZWQsIDIpID09IG51bGwgYW5kICRhbGxvdy1uby1kZW5vbWluYXRvciA9PSBmYWxzZSkpO1xufVxuXG4vLy8gQ2FsY3VsYXRlIGEgcGVyY2VudGFnZSBmcm9tIGEgZ2l2ZW4gZnJhY3Rpb24uXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkZnJhY3Rpb24gLSBWYWx1ZSByZXByZXNlbnRpbmcgYSBmcmFjdGlvbiB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlLCBmb3JtYXR0ZWQgYXMgYDUwYCAocmVsYXRpdmUgdG8gYCRkZW5vbWluYXRvcmApLCBgNTAlYCwgYDEgb2YgMmAgb3IgYDEvMmAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJGRlbm9taW5hdG9yIC0gRGVmYXVsdCB2YWx1ZSB0byB1c2UgYXMgZGVub21pbmF0b3Igd2hlbiBgJGZyYWN0aW9uYCByZXByZXNlbnRzIGFuIGFic29sdXRlIHZhbHVlLlxuQGZ1bmN0aW9uIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoXG4gICRmcmFjdGlvbixcbiAgJGRlbm9taW5hdG9yOiBudWxsXG4pIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJGZyYWN0aW9uKTtcbiAgJHBhcnNlZC1ub21pbmF0b3I6IG50aCgkcGFyc2VkLCAxKTtcbiAgJHBhcnNlZC1kZW5vbWluYXRvcjogbnRoKCRwYXJzZWQsIDIpO1xuXG4gIEBpZiAkcGFyc2VkLW5vbWluYXRvciA9PSBudWxsIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gVXNlIGEgbnVtYmVyLCBkZWNpbWFsLCBwZXJjZW50YWdlLCBvciBcIm4gb2YgblwiIC8gXCJuL25cIi4nO1xuICB9XG4gIEBpZiAkcGFyc2VkLWRlbm9taW5hdG9yID09IG51bGwge1xuICAgIEBpZiB0eXBlLW9mKCRkZW5vbWluYXRvcikgPT0gJ251bWJlcicge1xuICAgICAgJHBhcnNlZC1kZW5vbWluYXRvcjogJGRlbm9taW5hdG9yO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAZXJyb3IgJ0Vycm9yIHdpdGggXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gQSBkZWZhdWx0IFwiJGRlbm9taW5hdG9yXCIgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBhYnNvbHV0ZSB2YWx1ZXMnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gcGVyY2VudGFnZSgkcGFyc2VkLW5vbWluYXRvciAvICRwYXJzZWQtZGVub21pbmF0b3IpO1xufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIFNpemVzIGNoaWxkIGVsZW1lbnRzIHNvIHRoYXQgYCRuYCBudW1iZXIgb2YgaXRlbXMgYXBwZWFyIG9uIGVhY2ggcm93LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRuIC0gTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRpc3BsYXkgcGVyIHJvdy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFsnLmNlbGwnXSAtIFNlbGVjdG9yKHMpIHRvIHVzZSBmb3IgY2hpbGQgZWxlbWVudHMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIGJyZWFrcG9pbnQgdG8gdXNlIGZvciB0aGUgY2VsbCBnZW5lcmF0aW9uLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuLy8vIEBwYXJhbSB7TGlzdH0gJG91dHB1dCBbKGJhc2Ugc2l6ZSBndXR0ZXJzKV0gLSBDZWxsIHBhcnRzIHRvIG91dHB1dC4gWW91IHdpbGwgbmVlZCB0byBnZW5lcmF0ZSBvdGhlcnMgcGFydHMgb2YgdGhlIGNlbGwgc2VwZXJhdGVseSwgaXQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSBvdGhlcndpc2UuXG5AbWl4aW4geHktZ3JpZC1sYXlvdXQoXG4gICRuLFxuICAkc2VsZWN0b3I6ICcuY2VsbCcsXG4gICRndXR0ZXItb3V0cHV0OiBudWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZSxcbiAgJG91dHB1dDogKGJhc2Ugc2l6ZSBndXR0ZXJzKVxuKSB7XG4gICRzaXplOiBwZXJjZW50YWdlKDEvJG4pO1xuXG4gICYgPiAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoJHNpemUsICRndXR0ZXItb3V0cHV0LCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkZ3V0dGVyLXBvc2l0aW9uLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsLCAkb3V0cHV0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIENvbGxhcHNlcyB0aGUgZ3JpZCBhIGNlbGxzIHdpdGhpbiBpdC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWy5jZWxsXSAtIFRoZSBjaGlsZCBlbGVtZW50IHRvIHJlbW92ZSB0aGUgZ3V0dGVyIGZyb20uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUaGUgdHlwZSBvZiBndXR0ZXIgdG8gcmVtb3ZlLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb25zIHRvIHJlbW92ZSBndXR0ZXJzIGZyb20uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG1pbi1icmVha3BvaW50IFskLXpmLXplcm8tYnJlYWtwb2ludF0gLSBNaW5pbXVtIGJyZWFrcG9pbnQgaW4gYCRicmVha3BvaW50LWNsYXNzZXNgIGZvciB3aGljaCB0byBjb2xsYXBzZSB0aGUgZ3V0dGVyLlxuQG1peGluIHh5LWdyaWQtY29sbGFwc2UoXG4gICRzZWxlY3RvcjogJy5jZWxsJyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRndXR0ZXItcG9zaXRpb246IHJpZ2h0IGxlZnQsXG4gICRtaW4tYnJlYWtwb2ludDogJC16Zi16ZXJvLWJyZWFrcG9pbnRcbikge1xuICAvLyBGaXJzdCwgbGV0cyBuZWdhdGUgYW55IG1hcmdpbnMgb24gdGhlIHRvcCBsZXZlbFxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbWluLWJyZWFrcG9pbnQpIHtcbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgIH1cblxuICAgICAgPiAjeyRzZWxlY3Rvcn0ge1xuICAgICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRleGNsdWRlZC1icHM6IC16Zi1icmVha3BvaW50cy1sZXNzLXRoYW4oJG1pbi1icmVha3BvaW50KTtcblxuICAgIC8vIE91dHB1dCBuZXcgd2lkdGhzIHRvIG5vdCBpbmNsdWRlIGd1dHRlcnNcbiAgICBAZWFjaCAkYnAgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgICBAaWYoc2wtY29udGFpbigkZXhjbHVkZWQtYnBzLCAkYnApKSB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgICAgIC8vIFNpemluZyAocGVyY2VudGFnZSlcbiAgICAgICAgICAgID4gLiN7JGJwfS0jeyRpfSB7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZSgkaSwgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRicCkge1xuICAgICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICAgICAvLyBTaXppbmcgKHBlcmNlbnRhZ2UpXG4gICAgICAgICAgICA+IC4jeyRicH0tI3skaX0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgIG1hcmdpbi0jeyR2YWx1ZX06IDA7XG4gICAgICB9XG5cbiAgICAgID4gI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGVhY2ggJHZhbHVlIGluICRndXR0ZXItcG9zaXRpb24ge1xuICAgICAgICAgIHBhZGRpbmctI3skdmFsdWV9OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIHZhbHVlIHRvIG9mZnNldCBhIGNlbGwuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ30gVGhlIGNlbGwgb2Zmc2V0IHByb3BlcnR5IHZhbHVlLlxuQGZ1bmN0aW9uIHh5LWNlbGwtb2Zmc2V0KFxuICAkbixcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGJyZWFrcG9pbnQ6IG51bGxcbikge1xuICAkYnJlYWtwb2ludDogLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkYnJlYWtwb2ludCwgJGRlZmF1bHQ6ICQtemYtemVyby1icmVha3BvaW50KTtcbiAgJHNpemU6IHh5LWNlbGwtc2l6ZSgkbik7XG5cbiAgJG9mZnNldDogJHNpemU7XG4gIEBpZiAoJGd1dHRlci10eXBlID09ICdtYXJnaW4nKSB7XG4gICAgJGd1dHRlcjogcmVtLWNhbGMoeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkYnJlYWtwb2ludCkgLyAyKTtcbiAgICAkb2Zmc2V0OiBpZigkZ3V0dGVyID09IDAsICRzaXplLCBjYWxjKCN7JHNpemV9ICsgI3skZ3V0dGVyfSkpO1xuICB9XG4gIEByZXR1cm4gJG9mZnNldDtcbn1cblxuLy8vIE9mZnNldHMgYSBjb2x1bW4gdG8gdGhlIHJpZ2h0L2JvdHRvbSBieSBgJG5gIGNvbHVtbnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge051bWJlcnxBcnJheXxLZXl3b3JkfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBmb3IgYCRndXR0ZXJzYC4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLiBJZiBhIGxpc3QgaXMgZ2l2ZW4sIG1lZGlhLXF1ZXJpZXMgd2lsbCBiZSBnZW5lcmF0ZWQuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIFNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgb2Zmc2V0LiBJZiBzZXQgdG8gdHJ1ZSB3aWxsIGFwcGx5IG1hcmdpbi10b3AgaW5zdGVhZC5cbkBtaXhpbiB4eS1jZWxsLW9mZnNldChcbiAkbixcbiAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gJGJyZWFrcG9pbnQ6IG51bGwsXG4gJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50LCAkZGVmYXVsdDogJC16Zi16ZXJvLWJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwsICd0b3AnLCAkZ2xvYmFsLWxlZnQpO1xuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oJGJyZWFrcG9pbnQsICRtZWRpYS1xdWVyaWVzOiAnZm9yLWxpc3RzJykge1xuICAgICRvZmZzZXQ6IHh5LWNlbGwtb2Zmc2V0KCRuLCAkZ3V0dGVycywgJGd1dHRlci10eXBlKTtcbiAgICBtYXJnaW4tI3skZGlyZWN0aW9ufTogI3skb2Zmc2V0fTtcbiAgfVxufVxuIiwiLy8vIE1vZGlmaWVzIGEgZ3JpZCB0byBnaXZlIGl0IFwiZnJhbWVcIiBiZWhhdmlvciAobm8gb3ZlcmZsb3csIG5vIHdyYXAsIHN0cmV0Y2ggYmVoYXZpb3IpXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gSXMgZ3JpZCB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiBTaG91bGQgbWF0Y2ggZ3JpZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRuZXN0ZWQgW2ZhbHNlXSAtIElzIGdyaWQgbmVzdGVkIG9yIG5vdC4gSWYgbmVzdGVkIGlzIHRydWUgdGhpcyBzZXRzIHRoZSBmcmFtZSB0byAxMDAlIGhlaWdodCwgb3RoZXJ3aXNlIHdpbGwgYmUgMTAwdmguXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbbnVsbF0gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkaW5jbHVkZS1iYXNlIFt0cnVlXSAtIEluY2x1ZGUgdGhlIGJhc2Ugc3R5bGVzIHRoYXQgZG9uJ3QgdmFyeSBwZXIgYnJlYWtwb2ludC5cbkBtaXhpbiB4eS1ncmlkLWZyYW1lKFxuICAkdmVydGljYWw6IGZhbHNlLFxuICAkbmVzdGVkOiBmYWxzZSxcbiAgJGd1dHRlcnM6IG51bGwsXG4gICRicmVha3BvaW50OiBudWxsLFxuICAkaW5jbHVkZS1iYXNlOiB0cnVlXG4pIHtcblxuICBAaWYgJGluY2x1ZGUtYmFzZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIH1cblxuICBAaWYgJGJyZWFrcG9pbnQgPT0gbnVsbCBhbmQgdHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcge1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKCR2ZXJ0aWNhbCwgJG5lc3RlZCwgJGd1dHRlcnMsICQtemYtc2l6ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgLy8gR2V0IG91ciBndXR0ZXJzIGlmIGFwcGxpY2FibGVcbiAgICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIGd1dHRlciwgYWRkIGl0IHRvIHRoZSB3aWR0aC9oZWlnaHRcbiAgICBAaWYgJGd1dHRlciB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2aCk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoI3skdW5pdH0gKyAjeyRndXR0ZXJ9KTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2dyk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICB3aWR0aDogY2FsYygjeyR1bml0fSArICN7JGd1dHRlcn0pO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICBoZWlnaHQ6IGlmKCRuZXN0ZWQgPT0gdHJ1ZSwgMTAwJSwgMTAwdmgpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHdpZHRoOiBpZigkbmVzdGVkID09IHRydWUsIDEwMCUsIDEwMHZ3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIE1vZGlmaWVzIGEgY2VsbCB0byBnaXZlIGl0IFwiYmxvY2tcIiBiZWhhdmlvciAob3ZlcmZsb3cgYXV0bywgaW5lcnRpYWwgc2Nyb2xsaW5nKVxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIElzIGdyaWQgdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gU2hvdWxkIG1hdGNoIGdyaWQuXG5AbWl4aW4geHktY2VsbC1ibG9jayhcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRwcm9wZXJ0eTogaWYoJHZlcnRpY2FsID09IHRydWUsICdvdmVyZmxvdy15JywgJ292ZXJmbG93LXgnKTtcblxuICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICB9IEBlbHNlIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7XG59XG5cbi8vLyBDb250YWluZXIgZm9yIGluc2lkZSBhIGdyaWQgZnJhbWUgY29udGFpbmluZyBtdWx0aXBsZSBibG9ja3MuIFR5cGljYWxseSB1c2VkXG4vLy8gYXMgYSBtb2RpZmllciBmb3IgYSBgLmNlbGxgIHRvIGFsbG93IHRoZSBjZWxsIHRvIHBhc3MgYWxvbmcgZmxleCBzaXppbmdcbi8vLyBjb25zdHJhaW50cyAvIGZyb20gcGFyZW50cyB0byBjaGlsZHJlbi5cbkBtaXhpbiB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LWhlaWdodDogMTAwJTtcblxuICA+IC5ncmlkLXgge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b25cbi8vLy9cblxuLy8vIEZvbnQgZmFtaWx5IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gQHR5cGUgRm9udFxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gSWdub3JlZCBpZiBudWxsIChkZWZhdWx0KVxuLy8vIEB0eXBlIEZvbnQtV2VpZ2h0XG4kYnV0dG9uLWZvbnQtd2VpZ2h0OiBudWxsICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXBhZGRpbmc6IDAuODVlbSAxZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYXJvdW5kIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmaWxsIGZvciBidXR0b25zLiBDYW4gZWl0aGVyIGJlIGBzb2xpZGAgb3IgYGhvbGxvd2AuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGJ1dHRvbi1maWxsOiBzb2xpZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBDb2xvclxuJGJ1dHRvbi1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJ1dHRvbi1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgY29sb3IgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQWx0ZXJuYXRpdmUgZm9udCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWNvbG9yLWFsdDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHJhZGl1cyBmb3IgYnV0dG9ucywgZGVmYXVsdGVkIHRvIGdsb2JhbC1yYWRpdXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgZm9yIGJ1dHRvbnMsIHRyYW5zcGFyZW50IGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHdpZHRoIGZvciBob2xsb3cgb3V0bGluZSBidXR0b25zXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNpemVzIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1zaXplczogKFxuICB0aW55OiAwLjZyZW0sXG4gIHNtYWxsOiAwLjc1cmVtLFxuICBkZWZhdWx0OiAwLjlyZW0sXG4gIGxhcmdlOiAxLjI1cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIENvbG9yaW5nIGNsYXNzZXMuIEEgbWFwIG9mIGNsYXNzZXMgdG8gb3V0cHV0IGluIHlvdXIgQ1NTLCBsaWtlIGAuc2Vjb25kYXJ5YCwgYC5zdWNjZXNzYCwgYW5kIHNvIG9uLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gb3BhY2l0eSBmb3IgYSBkaXNhYmxlZCBidXR0b24uXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1vcGFjaXR5LWRpc2FibGVkOiAwLjI1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBsaWdodG5lc3Mgb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWJhY2tncm91bmQtaG92ZXItbGlnaHRuZXNzOiAtMjAlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyIGZvciBob2xsb3cgYnV0dG9ucy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b24taG9sbG93LWhvdmVyLWxpZ2h0bmVzczogLTUwJSAhZGVmYXVsdDtcblxuLy8gSW50ZXJuYWw6IGZsaXAgZnJvbSBtYXJnaW4tcmlnaHQgdG8gbWFyZ2luLWxlZnQgZm9yIGRlZmF1bHRzXG5AaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gJGdsb2JhbC1tYXJnaW4gIWRlZmF1bHQ7XG59XG5cbi8vLyB0cmFuc2l0aW9ucyBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gQWRkaXRpb25hbCByZXNwb25zaXZlIGNsYXNzZXMgZm9yIC5leHBhbmRlZFxuLy8vIEB0eXBlIEJvb2xlYW5cbiRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIFRPRE86IERvY3VtZW50IGJ1dHRvbi1iYXNlKCkgbWl4aW5cbkBtaXhpbiBidXR0b24tYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW46ICRidXR0b24tbWFyZ2luO1xuXG4gIEBpZiAodHlwZS1vZigkYnV0dG9uLXBhZGRpbmcpID09ICdtYXAnKSB7XG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluICRidXR0b24tcGFkZGluZyB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nO1xuICB9XG5cbiAgYm9yZGVyOiAkYnV0dG9uLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gIHRyYW5zaXRpb246ICRidXR0b24tdHJhbnNpdGlvbjtcbiAgZm9udC1mYW1pbHk6ICRidXR0b24tZm9udC1mYW1pbHk7XG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcbiAgZm9udC13ZWlnaHQ6ICRidXR0b24tZm9udC13ZWlnaHQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vLy8gRXhwYW5kcyBhIGJ1dHRvbiB0byBtYWtlIGl0IGZ1bGwtd2lkdGguXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFt0cnVlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBleHBhbmQgYmVoYXZpb3IuIFNldCB0byBgZmFsc2VgIHRvIHJldmVyc2UgdGhpcyBiZWhhdmlvci5cbkBtaXhpbiBidXR0b24tZXhwYW5kKCRleHBhbmQ6IHRydWUpIHtcbiAgQGlmICRleHBhbmQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogJGJ1dHRvbi1tYXJnaW47XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IG9yIGNsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWZpbGwtc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZmlsbCBbJGJ1dHRvbi1maWxsXSAtIFR5cGUgb2YgZmlsbGluZyBiZXR3ZWVuIGBob2xsb3dgIGFuZCBgY2xlYXJgLiBgc29saWRgIGhhcyBubyBlZmZlY3RzLlxuQG1peGluIGJ1dHRvbi1maWxsKFxuICAkZmlsbDogJGJ1dHRvbi1maWxsXG4pIHtcbiAgQGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdztcbiAgfVxuICBAZWxzZSBpZiAkZmlsbCA9PSBjbGVhciB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWNsZWFyO1xuICB9XG59XG5cbi8vLyBTZXRzIHRoZSB2aXN1YWwgc3R5bGVzIG9mIGEgc29saWQvaG9sbG93L2NsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbnMgYGJ1dHRvbi1zdHlsZWAsIGBidXR0b24taG9sbG93LXN0eWxlYCBhbmQgYGJ1dHRvbi1jbGVhci1zdHlsZWAgZm9yIGVmZmVjdHMgb2YgdmlzdWFsIHN0eWxpbmcgcGFyYW1ldGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRmaWxsIFskYnV0dG9uLWZpbGxdIC0gVHlwZSBvZiBmaWxsaW5nIGJldHdlZW4gYGhvbGxvd2AgYW5kIGBjbGVhcmAuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRidXR0b24tYmFja2dyb3VuZF0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQtaG92ZXIgWyRidXR0b24tYmFja2dyb3VuZC1ob3Zlcl0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIC1cbkBtaXhpbiBidXR0b24tZmlsbC1zdHlsZShcbiAgJGZpbGw6ICRidXR0b24tZmlsbCxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yXG4pIHtcbiAgQGlmICRmaWxsID09IHNvbGlkIHtcbiAgICBAaW5jbHVkZSBidXR0b24tc3R5bGUoJGJhY2tncm91bmQsICRiYWNrZ3JvdW5kLWhvdmVyLCAkY29sb3IpO1xuICB9XG4gIEBlbHNlIGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdy1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbiAgQGVsc2UgaWYgJGZpbGwgPT0gY2xlYXIge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1jbGVhci1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJGJ1dHRvbi1iYWNrZ3JvdW5kXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZC1ob3ZlciBbJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci4gU2V0IHRvIGBhdXRvYCB0byBoYXZlIHRoZSBtaXhpbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgaG92ZXIgY29sb3IuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIFRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbi4gU2V0IHRvIGBhdXRvYCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29sb3IgYmFzZWQgb24gdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gYnV0dG9uLXN0eWxlKFxuICAkYmFja2dyb3VuZDogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkY29sb3I6ICRidXR0b24tY29sb3IsXG4gICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzc1xuKSB7XG4gIEBpZiAkY29sb3IgPT0gYXV0byB7XG4gICAgJGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGJ1dHRvbi1jb2xvciwgJGJ1dHRvbi1jb2xvci1hbHQpKTtcbiAgfVxuXG4gIEBpZiAkYmFja2dyb3VuZC1ob3ZlciA9PSBhdXRvIHtcbiAgICAkYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJhY2tncm91bmQsICRsaWdodG5lc3M6ICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzcyk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGFuZCBkaXNhYmxlZCBzdGF0ZXNcbiAgJixcbiAgJi5kaXNhYmxlZCwgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQ6aG92ZXIsICZbZGlzYWJsZWRdOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzLCAmW2Rpc2FibGVkXTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBTZWUgbWl4aW4gYGJ1dHRvbi1ob2xsb3ctc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG5AbWl4aW4gYnV0dG9uLWhvbGxvdyB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgdmlzdWFsIHN0eWxlIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGFuZCBib3JkZXIgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkaG92ZXItbGlnaHRuZXNzIFskYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3NdIC0gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRib3JkZXItd2lkdGggWyRidXR0b24taG9sbG93LWJvcmRlci13aWR0aF0gLSBCb3JkZXIgd2lkdGggb2YgdGhlIGJ1dHRvbi5cbkBtaXhpbiBidXR0b24taG9sbG93LXN0eWxlKFxuICAkY29sb3I6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzLFxuICAkYm9yZGVyLXdpZHRoOiAkYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGhcbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3I7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3ItaG92ZXI7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgY2xlYXIgYnV0dG9uLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWNsZWFyLXN0eWxlYCBmb3IgdGhlIGZpbGxpbmcgc3R5bGVzLlxuQG1peGluIGJ1dHRvbi1jbGVhciB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGNsZWFyIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGNvbG9yIG9mIHRoZSBidXR0b24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGhvdmVyLWxpZ2h0bmVzcyBbJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzXSAtIENvbG9yIGxpZ2h0bmVzcyBvbiBob3Zlci5cbkBtaXhpbiBidXR0b24tY2xlYXItc3R5bGUoXG4gICRjb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkaG92ZXItbGlnaHRuZXNzOiAkYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3Ncbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cblxuICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGNvbG9yLWhvdmVyO1xuICB9XG59XG5cbi8vLyBBZGRzIGRpc2FibGVkIHN0eWxlcyB0byBhIGJ1dHRvbiBieSBmYWRpbmcgdGhlIGVsZW1lbnQgYW5kIHJlc2V0aW5nIHRoZSBjdXJzb3IuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcGFjaXR5IFskYnV0dG9uLW9wYWNpdHktZGlzYWJsZWRdIC0gT3BhY2l0eSBvZiB0aGUgZGlzYWJsZWQgYnV0dG9uLlxuQG1peGluIGJ1dHRvbi1kaXNhYmxlZChcbiAgJG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZFxuKSB7XG4gIG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLy8vIEFkZHMgYSBkcm9wZG93biBhcnJvdyB0byBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNpemUgWzAuNGVtXSAtIFNpemUgb2YgdGhlIGFycm93LiBXZSByZWNvbW1lbmQgdXNpbmcgYW4gYGVtYCB2YWx1ZSBzbyB0aGUgdHJpYW5nbGUgc2NhbGVzIHdoZW4gdXNlZCBpbnNpZGUgZGlmZmVyZW50IHNpemVzIG9mIGJ1dHRvbnMuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFt3aGl0ZV0gLSBDb2xvciBvZiB0aGUgYXJyb3cuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvZmZzZXQgWyRidXR0b24tcGFkZGluZ10gLSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBhcnJvdyBhbmQgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbi4gRGVmYXVsdHMgdG8gd2hhdGV2ZXIgdGhlIHJpZ2h0IHBhZGRpbmcgb2YgYSBidXR0b24gaXMuXG5AbWl4aW4gYnV0dG9uLWRyb3Bkb3duKFxuICAkc2l6ZTogMC40ZW0sXG4gICRjb2xvcjogJHdoaXRlLFxuICAkb2Zmc2V0OiBnZXQtc2lkZSgkYnV0dG9uLXBhZGRpbmcsIHJpZ2h0KVxuKSB7XG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHNpemUsICRjb2xvciwgZG93bik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMC40ZW07IC8vIEFsaWducyB0aGUgYXJyb3cgd2l0aCB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1yaWdodH07XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJG9mZnNldDtcbiAgfVxufVxuXG4vLy8gQWRkcyBhbGwgc3R5bGVzIGZvciBhIGJ1dHRvbi4gRm9yIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIHN0eWxlcywgdXNlIHRoZSBpbmRpdmlkdWFsIGJ1dHRvbiBtaXhpbnMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFtmYWxzZV0gLSBTZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGJ1dHRvbiBmdWxsLXdpZHRoLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIFskYnV0dG9uLWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kLWhvdmVyIFskYnV0dG9uLWJhY2tncm91bmQtaG92ZXJdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uIG9uIGhvdmVyLiBTZXQgdG8gYGF1dG9gIHRvIGhhdmUgdGhlIG1peGluIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBob3ZlciBjb2xvci5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tY29sb3JdIC0gVGV4dCBjb2xvciBvZiB0aGUgYnV0dG9uLiBTZXQgdG8gYGF1dG9gIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBjb2xvciBiYXNlZCBvbiB0aGUgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHlsZSBbc29saWRdIC0gU2V0IHRvIGBob2xsb3dgIHRvIGNyZWF0ZSBhIGhvbGxvdyBidXR0b24uIFRoZSBjb2xvciBkZWZpbmVkIGluIGAkYmFja2dyb3VuZGAgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcmltYXJ5IGNvbG9yIG9mIHRoZSBidXR0b24uXG5AbWl4aW4gYnV0dG9uKFxuICAkZXhwYW5kOiBmYWxzZSxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yLFxuICAkc3R5bGU6ICRidXR0b24tZmlsbFxuKSB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1iYXNlO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbCgkc3R5bGUpO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkc3R5bGUsICRiYWNrZ3JvdW5kLCAkYmFja2dyb3VuZC1ob3ZlciwgJGNvbG9yKTtcblxuICBAaWYgJGV4cGFuZCB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1idXR0b24ge1xuICAuYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBidXR0b24oJHN0eWxlOiBub25lKTtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBmb250LXNpemU6ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmV4cGFuZGVkIHsgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDsgfVxuXG4gICAgQGlmICRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZCB7XG4gICAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBvbmx5KSB7XG4gICAgICAgICAgJi4jeyRzaXplfS1vbmx5LWV4cGFuZGVkIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1leHBhbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAkc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBkb3duKSB7XG4gICAgICAgICAgICAmLiN7JHNpemV9LWRvd24tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoI3skc2l6ZX0pIHtcbiAgICAgICAgICAgICYuI3skc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNvbGlkLCBob2xsb3cgJiBjbGVhciBzdHlsZXNcbiAgICBAZWFjaCAkZmlsbGluZyBpbiAoc29saWQgaG9sbG93IGNsZWFyKSB7XG4gICAgICAkc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkZmlsbGluZyk7XG5cbiAgICAgICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkYnV0dG9uLXBhbGV0dGUge1xuICAgICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcsICRjb2xvciwgYXV0bywgYXV0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgICAmLmRpc2FibGVkLCAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd24gYXJyb3dcbiAgICAmLmRyb3Bkb3duIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1kcm9wZG93bjtcblxuICAgICAgQGlmICRidXR0b24tZmlsbCA9PSBob2xsb3cge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuaG9sbG93LCAmLmNsZWFyIHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRidXR0b24tYmFja2dyb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1dHRvbiB3aXRoIGRyb3Bkb3duIGFycm93IG9ubHlcbiAgICAmLmFycm93LW9ubHk6OmFmdGVyIHtcbiAgICAgIHRvcDogLTAuMWVtO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIH1cbiAgfVxuXG4gIGEuYnV0dG9uIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b24tZ3JvdXBcbi8vLy9cblxuLy8vIE1hcmdpbiBmb3IgYnV0dG9uIGdyb3Vwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b25ncm91cC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3I6ICcuYnV0dG9uJyAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gbnVtYmVyIG9mIGJ1dHRvbnMgdGhhdCBjYW4gYmUgaW4gYW4gZXZlbi13aWR0aCBidXR0b24gZ3JvdXAuIChPbmx5IG5lZWRlZCB3aGVuICRnbG9iYWwtZmxleGJveDogZmFsc2U7KVxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDYgIWRlZmF1bHQ7XG5cbi8vLyBEZXRlcm1pbmVzIGlmICRidXR0b24tcmFkaXVzIGlzIGFwcGxpZWQgdG8gZWFjaCBidXR0b24gb3IgdGhlIGJ1dHRvbiBncm91cCBhcyBhIHdob2xlLiBVc2UgJGdsb2JhbC1yYWRpdXMgaW4gX3NldHRpbmdzLnNjc3MgdG8gY2hhbmdlIHJhZGl1cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBBZGQgc3R5bGVzIGZvciBhIGJ1dHRvbiBncm91cCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRjaGlsZC1zZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzcGFjaW5nIFskYnV0dG9uZ3JvdXAtc3BhY2luZ10gLSBTcGFjaW5nIGJldHdlZW4gYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAoXG4gICRjaGlsZC1zZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmdcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLWJvdHRvbTogJGJ1dHRvbmdyb3VwLW1hcmdpbjtcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgLy8gRGlzYWJsZSBjbGVhcmZpeFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZm9udC1zaXplOiAwO1xuICB9XG5cbiAgI3skY2hpbGQtc2VsZWN0b3J9IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRzcGFjaW5nO1xuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkYnV0dG9uLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBNYWtlIGJ1dHRvbnMgYm9uZGVkIHdpdGhvdXQgZ2FwIGJldHdlZW4gdGhlbS4gQm9yZGVycyBiZXR3ZWVuIGJ1dHRvbnMgYXJlIG1lcmdlZFxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcl0gLSBTZWxlY3RvciBmb3IgdGhlIGJ1dHRvbnMgaW5zaWRlIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1uby1nYXBzKFxuICAkc2VsZWN0b3I6ICRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcixcbiAgJGJvcmRlci13aWR0aDogJGJ1dHRvbi1ob2xsb3ctYm9yZGVyLXdpZHRoXG4pIHtcbiAgI3skc2VsZWN0b3J9IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogcmVtLWNhbGMoLSRib3JkZXItd2lkdGgpO1xuXG4gICAgKyAjeyRzZWxlY3Rvcn0ge1xuICAgICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgZnVsbC13aWR0aCBidXR0b24gZ3JvdXAsIG1ha2luZyBlYWNoIGJ1dHRvbiBlcXVhbCB3aWR0aC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNwYWNpbmcgWyRidXR0b25ncm91cC1zcGFjaW5nXSAtIFNwYWNpbmcgYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1leHBhbmQoXG4gICRzZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmcsXG4gICRjb3VudDogbnVsbFxuKSB7XG4gIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogLSRzcGFjaW5nO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIERpc2FibGUgY2xlYXJmaXhcbiAgICB9XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gT25lIGNoaWxkXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gI3skc3BhY2luZ30pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFR3byBvciBtb3JlIGNoaWxkcmVlblxuICAgICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkYnV0dG9uZ3JvdXAtZXhwYW5kLW1heCB7XG4gICAgICAgICY6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoI3skaX0pIHtcbiAgICAgICAgICAmLCAmOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKCN7JGl9KSB+ICN7JHNlbGVjdG9yfSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygje3BlcmNlbnRhZ2UoMSAvICRpKX0gLSAjeyRzcGFjaW5nfSk7XG4gICAgICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZyAqIC0kYnV0dG9uZ3JvdXAtZXhwYW5kLW1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFN0YWNrcyB0aGUgYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBVbi1zdGFja3MgdGhlIGJ1dHRvbnMgaW4gYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRzZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgdGhlIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAtdW5zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgQGlmIG5vdCAkYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2gge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJ1dHRvbi1ncm91cCB7XG4gIC5idXR0b24tZ3JvdXAge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cDtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0gI3skYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3J9IHtcbiAgICAgICAgZm9udC1zaXplOiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBHcm91cFxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLWdyb3VwLWV4cGFuZDtcbiAgICB9XG5cbiAgICAvLyBTb2xpZCwgaG9sbG93ICYgY2xlYXIgc3R5bGVzXG4gICAgQGVhY2ggJGZpbGxpbmcgaW4gKHNvbGlkIGhvbGxvdyBjbGVhcikge1xuICAgICAgJGJhc2Utc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skYmFzZS1zZWxlY3Rvcn0ge1xuICAgICAgICAvLyBEbyBub3QgZ2VuZXJhdGUgYnV0dG9uIGJhc2Ugc3R5bGVzIGZvciB0aGUgZGVmYXVsdCBmaWxsaW5nXG4gICAgICAgIEBpZigkYnV0dG9uLWZpbGwgIT0gJGZpbGxpbmcpIHtcbiAgICAgICAgICAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAkaW5kaXZpZHVhbC1zZWxlY3RvcjogaWYoJGJ1dHRvbi1maWxsID09ICRmaWxsaW5nLCBudWxsLCAnICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfS4jeyRuYW1lfScpO1xuXG4gICAgICAgICAgJi4jeyRuYW1lfSAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0sICN7JGluZGl2aWR1YWwtc2VsZWN0b3J9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1maWxsLXN0eWxlKCRmaWxsaW5nLCAkY29sb3IsIGF1dG8sIGF1dG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi5uby1nYXBzIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1uby1nYXBzO1xuICAgIH1cblxuICAgICYuc3RhY2tlZCxcbiAgICAmLnN0YWNrZWQtZm9yLXNtYWxsLFxuICAgICYuc3RhY2tlZC1mb3ItbWVkaXVtIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1zdGFjaztcblxuICAgICAgJi5leHBhbmRlZCB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5zdGFja2VkLWZvci1zbWFsbCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZ3JvdXAtdW5zdGFjaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC11bnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuc3RhY2tlZC1mb3Itc21hbGwuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBvbmx5KSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bS5leHBhbmRlZCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSBkb3duKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjbG9zZS1idXR0b25cbi8vLy9cblxuLy8vIERlZmF1bHQgcG9zaXRpb24gb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVGhlIGZpcnN0IHZhbHVlIHNob3VsZCBiZSBgcmlnaHRgIG9yIGBsZWZ0YCwgYW5kIHRoZSBzZWNvbmQgdmFsdWUgc2hvdWxkIGJlIGB0b3BgIG9yIGBib3R0b21gLlxuLy8vIEB0eXBlIExpc3RcbiRjbG9zZWJ1dHRvbi1wb3NpdGlvbjogcmlnaHQgdG9wICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB6LWluZGV4IGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjbG9zZWJ1dHRvbi16LWluZGV4OiAxMCAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBzaXplIHRvIHVzZSBhcyBkZWZhdWx0XG4vLy8gQHR5cGUgU3RyaW5nXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tc2l6ZVxuLy8vIEBzZWUgJGNsb3NlYnV0dG9uLW9mZnNldC1ob3Jpem9udGFsXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsXG4kY2xvc2VidXR0b24tZGVmYXVsdC1zaXplOiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBSaWdodCAob3IgbGVmdCkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LWhvcml6b250YWw6IChcbiAgc21hbGw6IDAuNjZyZW0sXG4gIG1lZGl1bTogMXJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUb3AgKG9yIGJvdHRvbSkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsOiAoXG4gIHNtYWxsOiAwLjMzZW0sXG4gIG1lZGl1bTogMC41cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIFNpemUocykgb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVXNlZCB0byBnZW5lcmF0ZSBzaXppbmcgbW9kaWZpZXJzLlxuLy8vIEB0eXBlIE51bWJlcnxNYXBcbiRjbG9zZWJ1dHRvbi1zaXplOiAoXG4gIHNtYWxsOiAxLjVlbSxcbiAgbWVkaXVtOiAyZW0sXG4pICFkZWZhdWx0O1xuXG4vLy8gVGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBjbG9zZSBidXR0b24uIEl0IGFmZmVjdHMgdGhlIHNwYWNpbmcgb2YgdGhlIGVsZW1lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgY2xvc2UgYnV0dG9uIHdoZW4gYmVpbmcgaG92ZXJlZCBvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yLWhvdmVyOiAkYmxhY2sgIWRlZmF1bHQ7XG5cblxuLy8vIEdldCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGEgY2xvc2UgYnV0dG9uLiBJZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBudW1iZXIsIHRoZSBudW1iZXIgaXMgcmV0dXJuZWQuIElmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIGNvbmZpZyBtYXAgYW5kIHRoZSBtYXAgaGFzIHRoZSBrZXkgYCRzaXplYCwgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkdmFsdWUgLSBBIG51bWJlciBvciBtYXAgdGhhdCByZXByZXNlbnRzIHRoZSBzaXplIG9yIHBvc2l0aW9uIHZhbHVlKHMpIG9mIHRoZSBjbG9zZSBidXR0b24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSAtIFRoZSBzaXplIG9mIHRoZSBjbG9zZSBidXR0b24gdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSBUaGUgZ2l2ZW4gbnVtYmVyIG9yIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgbWFwLlxuQGZ1bmN0aW9uIC16Zi1nZXQtc2l6ZS12YWwoJHZhbHVlLCAkc2l6ZSkge1xuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgLy8gSWYgaXQgaXMsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzaXplIG5hbWUgZXhpc3RzIGluIHRoZSB2YWx1ZSBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJHZhbHVlLCAkc2l6ZSkge1xuICAgIC8vIElmIGl0IGRvZXMsIHJldHVybiB0aGUgdmFsdWVcbiAgICBAcmV0dXJuIG1hcC1nZXQoJHZhbHVlLCAkc2l6ZSk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIGEgY2xvc2UgYnV0dG9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgW21lZGl1bV0gLSBUaGUgc2l6ZSB0byB1c2UuIFNldCB0byBgc21hbGxgIHRvIGNyZWF0ZSBhIHNtYWxsIGNsb3NlIGJ1dHRvbi4gVGhlICdtZWRpdW0nIHZhbHVlcyBkZWZpbmVkIGluIGAkY2xvc2VidXR0b24tKmAgdmFyaWFibGVzIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgY2xvc2UgYnV0dG9uLlxuQG1peGluIGNsb3NlLWJ1dHRvbi1zaXplKCRzaXplKSB7XG4gICR4OiBudGgoJGNsb3NlYnV0dG9uLXBvc2l0aW9uLCAxKTtcbiAgJHk6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDIpO1xuXG4gICN7JHh9OiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbCwgJHNpemUpO1xuICAjeyR5fTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsLCAkc2l6ZSk7XG4gIGZvbnQtc2l6ZTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tc2l6ZSwgJHNpemUpO1xuICBsaW5lLWhlaWdodDogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tbGluZWhlaWdodCwgJHNpemUpO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgY2xvc2UgYnV0dG9uLCB1c2luZyB0aGUgc3R5bGVzIGluIHRoZSBzZXR0aW5ncyB2YXJpYWJsZXMuXG5AbWl4aW4gY2xvc2UtYnV0dG9uIHtcbiAgJHg6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDEpO1xuICAkeTogbnRoKCRjbG9zZWJ1dHRvbi1wb3NpdGlvbiwgMik7XG5cbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICRjbG9zZWJ1dHRvbi16LWluZGV4O1xuICBjb2xvcjogJGNsb3NlYnV0dG9uLWNvbG9yO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1jbG9zZS1idXR0b24ge1xuICAuY2xvc2UtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBjbG9zZS1idXR0b247XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHBsYWNlaG9sZGVyIGFuZCBhIGNsYXNzIGZvciBlYWNoIHNpemVcbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJGNsb3NlYnV0dG9uLXNpemUge1xuICAgICAgQGF0LXJvb3Qge1xuICAgICAgICAlemYtY2xvc2UtYnV0dG9uLS0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgY2xvc2UtYnV0dG9uLXNpemUoJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAZXh0ZW5kICV6Zi1jbG9zZS1idXR0b24tLSN7JG5hbWV9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBieSBkZWZhdWx0IHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgZGVmYXVsdCBzaXplXG4gICAgQGV4dGVuZCAlemYtY2xvc2UtYnV0dG9uLS0jeyRjbG9zZWJ1dHRvbi1kZWZhdWx0LXNpemV9O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbGFiZWxcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBDb2xvclxuJGxhYmVsLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRsYWJlbC1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXBhZGRpbmc6IDAuMzMzMzNyZW0gMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgb2YgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBHZW5lcmF0ZXMgYmFzZSBzdHlsZXMgZm9yIGEgbGFiZWwuXG5AbWl4aW4gbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6ICRsYWJlbC1wYWRkaW5nO1xuXG4gIGJvcmRlci1yYWRpdXM6ICRsYWJlbC1yYWRpdXM7XG5cbiAgZm9udC1zaXplOiAkbGFiZWwtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogMTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1sYWJlbCB7XG4gIC5sYWJlbCB7XG4gICAgQGluY2x1ZGUgbGFiZWw7XG5cbiAgICBiYWNrZ3JvdW5kOiAkbGFiZWwtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkbGFiZWwtcGFsZXR0ZSB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgICAgICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkY29sb3IsICgkbGFiZWwtY29sb3IsICRsYWJlbC1jb2xvci1hbHQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHByb2dyZXNzIGJhciBjb250YWluZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAkcHJvZ3Jlc3MtaGVpZ2h0O1xuICBtYXJnaW4tYm90dG9tOiAkcHJvZ3Jlc3MtbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyLXJhZGl1czogJHByb2dyZXNzLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhY2tncm91bmQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGlubmVyIG1ldGVyIG9mIGEgcHJvZ3Jlc3MgYmFyLlxuQG1peGluIHByb2dyZXNzLW1ldGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGV4dCBpbiB0aGUgcHJvZ3Jlc3MgbWV0ZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtbWV0ZXItdGV4dCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJHdoaXRlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRwcm9ncmVzcy1yYWRpdXM7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tcHJvZ3Jlc3MtYmFyIHtcbiAgLy8gUHJvZ3Jlc3MgYmFyXG4gIC5wcm9ncmVzcyB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtY29udGFpbmVyO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAucHJvZ3Jlc3MtbWV0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElubmVyIG1ldGVyXG4gIC5wcm9ncmVzcy1tZXRlciB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtbWV0ZXI7XG4gIH1cblxuICAvLyBJbm5lciBtZXRlciB0ZXh0XG4gIC5wcm9ncmVzcy1tZXRlci10ZXh0IHtcbiAgICBAaW5jbHVkZSBwcm9ncmVzcy1tZXRlci10ZXh0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vIFtUT0RPXSBDaGVjayBob3cgcGx1Z2luIGNvbmZpcm1zIGRpc2FibGVkIG9yIHZlcnRpY2FsIHN0YXR1c1xuLy8gW1RPRE9dIENoZWNrIGlmIHRyYW5zaXRpb246IGFsbDsgaXMgbmVjZXNzYXJ5XG5cbi8vLy9cbi8vLyBAZ3JvdXAgc2xpZGVyXG4vLy8vXG5cbi8vLyBEZWZhdWx0IHNsaWRlciB3aWR0aCBvZiBhIHZlcnRpY2FsIHNsaWRlci4gKERvZXNuJ3QgYXBwbHkgdG8gdGhlIG5hdGl2ZSBzbGlkZXIuKVxuLy8vIEB0eXBlIE51bWJlclxuJHNsaWRlci13aWR0aC12ZXJ0aWNhbDogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBzbGlkZXIgaGFuZGxlIGFuZCBmaWxsLiAoRG9lc24ndCBhcHBseSB0byB0aGUgbmF0aXZlIHNsaWRlci4pXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHNsaWRlci10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciBzbGlkZXJzLlxuQG1peGluIHNsaWRlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogJHNsaWRlci1oZWlnaHQ7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDIuMjVyZW07XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1iYWNrZ3JvdW5kO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi8vLyBBZGRzIHRoZSBnZW5lcmFsIHN0eWxlcyBmb3IgYWN0aXZlIGZpbGwgZm9yIHNsaWRlcnMuXG5AbWl4aW4gc2xpZGVyLWZpbGwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkc2xpZGVyLWhlaWdodDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWZpbGwtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciB0aGUgc2xpZGVyIGhhbmRsZXMuXG5AbWl4aW4gc2xpZGVyLWhhbmRsZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgQGluY2x1ZGUgdmVydGljYWwtY2VudGVyO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcblxuICBib3JkZXItcmFkaXVzOiAkc2xpZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1oYW5kbGUtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzY2FsZS1jb2xvcigkc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKTtcbiAgfVxuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuQG1peGluIHNsaWRlci1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6ICRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuQG1peGluIHNsaWRlci12ZXJ0aWNhbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItd2lkdGgtdmVydGljYWw7XG4gIGhlaWdodDogMTIuNXJlbTtcbiAgbWFyZ2luOiAwIDEuMjVyZW07XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuXG4gIC5zbGlkZXItZmlsbCB7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkc2xpZGVyLXdpZHRoLXZlcnRpY2FsO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcbiAgICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zbGlkZXIge1xuICAvLyBDb250YWluZXJcbiAgLnNsaWRlciB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIEZpbGwgYXJlYVxuICAuc2xpZGVyLWZpbGwge1xuICAgIEBpbmNsdWRlIHNsaWRlci1maWxsO1xuICB9XG5cbiAgLy8gRHJhZ2dhYmxlIGhhbmRsZVxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWhhbmRsZTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlXG4gIC5zbGlkZXIuZGlzYWJsZWQsXG4gIC5zbGlkZXJbZGlzYWJsZWRdIHtcbiAgICBAaW5jbHVkZSBzbGlkZXItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBWZXJ0aWNhbCBzbGlkZXJcbiAgLnNsaWRlci52ZXJ0aWNhbCB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLXZlcnRpY2FsO1xuICB9XG5cbiAgLy8gUlRMIHN1cHBvcnRcbiAgQGlmICRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsIHtcbiAgICAuc2xpZGVyOm5vdCgudmVydGljYWwpIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHN3aXRjaFxuLy8vL1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGFjdGl2ZSBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kLWFjdGl2ZTogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2gsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0OiAycmVtICFkZWZhdWx0O1xuXG4vLy8gSGVpZ2h0IG9mIGEgc3dpdGNoIHdpdGggLnRpbnkgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2ggd2l0aCAuc21hbGwgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbSAhZGVmYXVsdDtcblxuLy8vIEhlaWdodCBvZiBhIHN3aXRjaCB3aXRoIC5sYXJnZSBjbGFzcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIG9mIHRoZSBzd2l0Y2hcbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIGJvcmRlciBhcm91bmQgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtbWFyZ2luOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzd2l0Y2ggY29udGFpbmVyIGFuZCBwYWRkbGUuXG4vLy8gQHR5cGUgQ29sb3JcbiRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFNwYWNpbmcgYmV0d2VlbiBhIHN3aXRjaCBwYWRkbGUgYW5kIHRoZSBlZGdlIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtb2Zmc2V0OiAwLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gYm9yZGVyIHJhZGl1cyBvZiB0aGUgc3dpdGNoIHBhZGRsZVxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHN3aXRjaCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gT3BhY2l0eSBvZiBhIGRpc2FibGVkIHN3aXRjaC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtb3BhY2l0eS1kaXNhYmxlZDogLjUgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgZm9yIGEgZGlzYWJsZWQgc3dpdGNoLlxuLy8vIEB0eXBlIEN1cnNvclxuJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkICFkZWZhdWx0O1xuXG4vLyBtYWtlIHRoZW0gdmFyaWFibGVzXG4vLyBhc2sgYWJvdXQgYWNjZXNzaWJpbGl0eSBvbiBsYWJlbFxuLy8gY2hhbmdlIGNsYXNzIG5hbWUgZm9yIHRleHRcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gYSBjb250YWluZXIgY2xhc3MuXG5AbWl4aW4gc3dpdGNoLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHN3aXRjaC1tYXJnaW47XG4gIG91dGxpbmU6IDA7XG5cbiAgLy8gVGhlc2UgcHJvcGVydGllcyBjYXNjYWRlIGRvd24gdG8gdGhlIHN3aXRjaCB0ZXh0XG4gIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICR3aGl0ZTtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBpbnB1dC4gQXBwbHkgdGhpcyB0byBhbiBgPGlucHV0PmAgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYmFja2dyb3VuZCBhbmQgcGFkZGxlIG9mIGEgc3dpdGNoLiBBcHBseSB0aGlzIHRvIGEgYDxsYWJlbD5gIHdpdGhpbiBhIHN3aXRjaC5cbkBtaXhpbiBzd2l0Y2gtcGFkZGxlIHtcbiAgJHN3aXRjaC13aWR0aDogJHN3aXRjaC1oZWlnaHQgKiAyO1xuICAkcGFkZGxlLWhlaWdodDogJHN3aXRjaC1oZWlnaHQgLSAoJHN3aXRjaC1wYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRzd2l0Y2gtcGFkZGxlLW9mZnNldCAqIDIpO1xuICAkcGFkZGxlLWFjdGl2ZS1vZmZlc3Q6ICRzd2l0Y2gtd2lkdGggLSAkcGFkZGxlLXdpZHRoIC0gJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkc3dpdGNoLXdpZHRoO1xuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIGJvcmRlci1yYWRpdXM6ICRzd2l0Y2gtcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkc3dpdGNoLWJhY2tncm91bmQ7XG4gIHRyYW5zaXRpb246ICRzd2l0Y2gtcGFkZGxlLXRyYW5zaXRpb247XG5cbiAgLy8gUmVzZXR0aW5nIHRoZXNlIDxsYWJlbD4gcHJlc2V0cyBzbyB0eXBlIHN0eWxlcyBjYXNjYWRlIGRvd25cbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBOZWVkZWQgdG8gb3ZlcnJpZGUgc3BlY2lmaWNpdHlcbiAgaW5wdXQgKyAmIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBUaGUgcGFkZGxlIGl0c2VsZlxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICRwYWRkbGUtd2lkdGg7XG4gICAgaGVpZ2h0OiAkcGFkZGxlLWhlaWdodDtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgYm9yZGVyLXJhZGl1czogJHN3aXRjaC1wYWRkbGUtcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ7XG4gICAgdHJhbnNpdGlvbjogJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjtcbiAgICBjb250ZW50OiAnJztcbiAgfVxuXG4gIC8vIENoYW5nZSB0aGUgdmlzdWFsIHN0eWxlIHdoZW4gdGhlIHN3aXRjaCBpcyBhY3RpdmVcbiAgaW5wdXQ6Y2hlY2tlZCB+ICYge1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbmRpY2F0ZSBhIGRpc2FibGVkIHN3aXRjaFxuICBpbnB1dDpkaXNhYmxlZCB+ICYge1xuICAgIGN1cnNvcjogJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogJHN3aXRjaC1vcGFjaXR5LWRpc2FibGVkO1xuICB9XG5cbiAgaW5wdXQ6Zm9jdXMgfiAmIHtcbiAgICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIH1cbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIGFjdGl2ZS9pbmFjdGl2ZSB0ZXh0IGluc2lkZSBhIHN3aXRjaC4gQXBwbHkgdGhpcyB0byB0ZXh0IGVsZW1lbnRzIGluc2lkZSB0aGUgc3dpdGNoIGA8bGFiZWw+YC5cbkBtaXhpbiBzd2l0Y2gtdGV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWN0aXZlIHN0YXRlIHRleHQgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC10ZXh0LWFjdGl2ZSB7XG4gICN7JGdsb2JhbC1sZWZ0fTogOCU7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5hY3RpdmUgc3RhdGUgdGV4dCB3aXRoaW4gYSBzd2l0Y2guXG5AbWl4aW4gc3dpdGNoLXRleHQtaW5hY3RpdmUge1xuICAjeyRnbG9iYWwtcmlnaHR9OiAxNSU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4vLy8gQ2hhbmdlcyB0aGUgc2l6ZSBvZiBhIHN3aXRjaCBieSBtb2RpZnlpbmcgdGhlIHNpemUgb2YgdGhlIGJvZHkgYW5kIHBhZGRsZS4gQXBwbHkgdGhpcyB0byBhIHN3aXRjaCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRmb250LXNpemUgWzFyZW1dIC0gRm9udCBzaXplIG9mIGxhYmVsIHRleHQgd2l0aGluIHRoZSBzd2l0Y2guXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzd2l0Y2gtaGVpZ2h0IFsycmVtXSAtIEhlaWdodCBvZiB0aGUgc3dpdGNoIGJvZHkuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRwYWRkbGUtb2Zmc2V0IFswLjI1cmVtXSAtIFNwYWNpbmcgYmV0d2VlbiB0aGUgc3dpdGNoIHBhZGRsZSBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHN3aXRjaCBib2R5LlxuQG1peGluIHN3aXRjaC1zaXplKFxuICAkZm9udC1zaXplOiAxcmVtLFxuICAkc3dpdGNoLWhlaWdodDogMnJlbSxcbiAgJHBhZGRsZS1vZmZzZXQ6IDAuMjVyZW1cbikge1xuXG4gICRzd2l0Y2gtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0ICogMjtcbiAgJHBhZGRsZS13aWR0aDogJHN3aXRjaC1oZWlnaHQgLSAoJHBhZGRsZS1vZmZzZXQgKiAyKTtcbiAgJHBhZGRsZS1oZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRwYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtYWN0aXZlLW9mZmVzdDogJHN3aXRjaC13aWR0aCAtICRwYWRkbGUtd2lkdGggLSAkcGFkZGxlLW9mZnNldDtcblxuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIC5zd2l0Y2gtcGFkZGxlIHtcbiAgICB3aWR0aDogJHN3aXRjaC13aWR0aDtcbiAgICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgdG9wOiAkcGFkZGxlLW9mZnNldDtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtb2Zmc2V0O1xuICAgIHdpZHRoOiAkcGFkZGxlLXdpZHRoO1xuICAgIGhlaWdodDogJHBhZGRsZS1oZWlnaHQ7XG4gIH1cblxuICBpbnB1dDpjaGVja2VkIH4gLnN3aXRjaC1wYWRkbGU6OmFmdGVyIHtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zd2l0Y2gge1xuICAvLyBDb250YWluZXIgY2xhc3NcbiAgLnN3aXRjaCB7XG4gICAgaGVpZ2h0OiAkc3dpdGNoLWhlaWdodDtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtY29udGFpbmVyO1xuICB9XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50XG4gIC5zd2l0Y2gtaW5wdXQge1xuICAgIEBpbmNsdWRlIHN3aXRjaC1pbnB1dDtcbiAgfVxuXG4gIC8vIDxsYWJlbD4gZWxlbWVudFxuICAuc3dpdGNoLXBhZGRsZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXBhZGRsZTtcbiAgfVxuXG4gIC8vIEJhc2UgbGFiZWwgdGV4dCBzdHlsZXNcbiAgJXN3aXRjaC10ZXh0IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtdGV4dDtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBsYWJlbCB0ZXh0IHN0eWxlc1xuICAuc3dpdGNoLWFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtYWN0aXZlO1xuICB9XG5cbiAgLy8gSW5hY3RpdmUgbGFiZWwgdGV4dCBzdHlsZXNcbiAgLnN3aXRjaC1pbmFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtaW5hY3RpdmU7XG4gIH1cblxuICAvLyBTd2l0Y2ggc2l6ZXNcbiAgLnN3aXRjaC50aW55IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMCksICRzd2l0Y2gtaGVpZ2h0LXRpbnksICRzd2l0Y2gtcGFkZGxlLW9mZnNldCk7XG4gIH1cblxuICAuc3dpdGNoLnNtYWxsIHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMiksICRzd2l0Y2gtaGVpZ2h0LXNtYWxsLCAkc3dpdGNoLXBhZGRsZS1vZmZzZXQpO1xuICB9XG5cbiAgLnN3aXRjaC5sYXJnZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXNpemUocmVtLWNhbGMoMTYpLCAkc3dpdGNoLWhlaWdodC1sYXJnZSwgJHN3aXRjaC1wYWRkbGUtb2Zmc2V0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGFibGVcbi8vLy9cblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIHRhYmxlIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1iYWNrZ3JvdW5kOiAkd2hpdGUgICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzY2FsZSBmb3IgZGFya2VuaW5nIHRoZSBzdHJpcGVkIHRhYmxlIHJvd3MgYW5kIHRoZSB0YWJsZSBib3JkZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtY29sb3Itc2NhbGU6IDUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzdHlsZSBmb3IgdGFibGUgYm9yZGVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFibGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtcGFkZGluZzogcmVtLWNhbGMoOCAxMCAxMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHNjYWxlIGZvciBkYXJrZW5pbmcgdGhlIHRhYmxlIHJvd3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtaG92ZXItc2NhbGU6IDIlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBzdGFuZGFyZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWhvdmVyLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2Ygc3RyaXBlZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSArICR0YWJsZS1ob3Zlci1zY2FsZSkgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIHRhYmxlcyBhcmUgc3RyaXBlZCBieSBkZWZhdWx0IGFuZCBhbiAudW5zdHJpcGVkIGNsYXNzIGlzIGNyZWF0ZWQuIElmIGBmYWxzZWAsIGEgLnN0cmlwZWQgY2xhc3MgaXMgY3JlYXRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kdGFibGUtaXMtc3RyaXBlZDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3Igc3RyaXBlZCByb3dzLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIHN0cmlwZSBvbiByb3dzIG9mIHRoZSB0YWJsZXMsIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGFuZCBmb290ZXIuIElmIGV2ZW4sIHRoZSBldmVuIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgb2RkLCB0aGUgb2RkIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgZW1wdHksIG9yIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRhYmxlIHJvd3Mgd2lsbCBoYXZlIG5vIHN0cmlwaW5nLlxuLy8vIEB0eXBlIEtleXdvcmRcbiR0YWJsZS1zdHJpcGU6IGV2ZW4gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWFkZXIgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWhlYWQtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSAvIDIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBoZWFkZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgZm9vdGVyIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1mb290LWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBmb290ZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBoZWFkZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1oZWFkLWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvb3Rlci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWZvb3QtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIGhlYWRlciB3aGVuIHVzaW5nIHN0YWNrZWQgdGFibGVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRzaG93LWhlYWRlci1mb3Itc3RhY2tlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHN0YWNrZWQgdGFibGUgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0YWJsZS1zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGU6ICR0YWJsZS1zdHJpcGUpIHtcbiAgdHIge1xuICAgIC8vIElmIHN0cmlwZSBpcyBzZXQgdG8gZXZlbiwgZGFya2VuIHRoZSBldmVuIHJvd3MuXG4gICAgQGlmICRzdHJpcGUgPT0gZXZlbiB7XG4gICAgICAmOm50aC1jaGlsZChldmVuKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc3RyaXBlIGlzIHNldCB0byBvZGQsIGRhcmtlbiB0aGUgb2RkIHJvd3MuXG4gICAgQGVsc2UgaWYgJHN0cmlwZSA9PSBvZGQge1xuICAgICAgJjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiAtemYtdGFibGUtdW5zdHJpcGUoKSB7XG4gIHRyIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICR0YWJsZS1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJhY2tncm91bmQ7XG4gIH1cbn1cblxuQG1peGluIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZTogJHRhYmxlLXN0cmlwZSwgJGlzLXN0cmlwZWQ6ICR0YWJsZS1pcy1zdHJpcGVkKSB7XG4gIHRoZWFkLFxuICB0Ym9keSxcbiAgdGZvb3Qge1xuICAgIGJvcmRlcjogJHRhYmxlLWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC8vIENhcHRpb25cbiAgY2FwdGlvbiB7XG4gICAgcGFkZGluZzogJHRhYmxlLXBhZGRpbmc7XG4gICAgZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4gIH1cblxuICAvLyBUYWJsZSBoZWFkXG4gIHRoZWFkIHtcbiAgICBiYWNrZ3JvdW5kOiAkdGFibGUtaGVhZC1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkdGFibGUtaGVhZC1mb250LWNvbG9yO1xuICB9XG5cbiAgLy8gVGFibGUgZm9vdFxuICB0Zm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHRhYmxlLWZvb3QtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRhYmxlLWZvb3QtZm9udC1jb2xvcjtcbiAgfVxuXG4gIC8vIFRhYmxlIGhlYWQgYW5kIGZvb3RcbiAgdGhlYWQsXG4gIHRmb290IHtcbiAgICAvLyBSb3dzIHdpdGhpbiBoZWFkIGFuZCBmb290XG4gICAgdHIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8gQ2VsbHMgd2l0aGluIGhlYWQgYW5kIGZvb3RcbiAgICB0aCxcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiAkdGFibGUtcGFkZGluZztcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuICAgICAgdGV4dC1hbGlnbjogI3skZ2xvYmFsLWxlZnR9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFRhYmxlIHJvd3NcbiAgdGJvZHkge1xuICAgIHRoLFxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6ICR0YWJsZS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRhYmxlcyBhcmUgc3RyaXBlZFxuICBAaWYgJGlzLXN0cmlwZWQgPT0gdHJ1ZSB7XG4gICAgdGJvZHkge1xuICAgICAgQGluY2x1ZGUgLXpmLXRhYmxlLXN0cmlwZSgkc3RyaXBlKTtcbiAgICB9XG5cbiAgICAmLnVuc3RyaXBlZCB7XG4gICAgICB0Ym9keSB7XG4gICAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS11bnN0cmlwZSgpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0YWJsZXMgYXJlIG5vdCBzdHJpcGVkXG4gIEBlbHNlIGlmICRpcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICB0Ym9keSB7XG4gICAgICBAaW5jbHVkZSAtemYtdGFibGUtdW5zdHJpcGUoKTtcbiAgICB9XG5cbiAgICAmLnN0cmlwZWQge1xuICAgICAgdGJvZHkge1xuICAgICAgICBAaW5jbHVkZSAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyB0aGUgZ2VuZXJhbCBzdHlsZXMgZm9yIHRhYmxlcy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHJpcGUgWyR0YWJsZS1zdHJpcGVdIC0gVXNlcyBrZXl3b3JkcyBldmVuLCBvZGQsIG9yIG5vbmUgdG8gZGFya2VuIHJvd3Mgb2YgdGhlIHRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBldmVuLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJG5lc3QgW2ZhbHNlXSAtIE5lZWRlZCBpZiB5b3Ugb25seSB3YW50IHRvIGFwcGx5IHRoaXMgdG8gYSBzcGVjaWZpYyB0YWJsZS5cbkBtaXhpbiB0YWJsZShcbiAgJHN0cmlwZTogJHRhYmxlLXN0cmlwZSxcbiAgJG5lc3Q6IGZhbHNlXG4pIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuICBAaWYgJG5lc3Qge1xuICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBhdC1yb290IHtcbiAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHRoZSBhYmlsaXR5IHRvIGhvcml6b250YWxseSBzY3JvbGwgdGhlIHRhYmxlIHdoZW4gdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIGhvcml6b250YWxseS5cbkBtaXhpbiB0YWJsZS1zY3JvbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93LXg6IGF1dG87XG59XG5cbi8vLyBTbGlnaHRseSBkYXJrZW5zIHRoZSB0YWJsZSByb3dzIG9uIGhvdmVyLlxuQG1peGluIHRhYmxlLWhvdmVyIHtcbiAgdGhlYWQgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgaGVhZGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtaGVhZC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGZvb3QgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgZm9vdGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtZm9vdC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGJvZHkgdHIge1xuICAgIC8vRGFya2VucyB0aGUgbm9uLXN0cmlwZWQgdGFibGUgcm93cyBvbiBob3Zlci5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgQGlmICR0YWJsZS1pcy1zdHJpcGVkID09IHRydWUge1xuICAgIC8vIERhcmtlbnMgdGhlIGV2ZW4gc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBpZigkdGFibGUtc3RyaXBlID09IGV2ZW4pIHtcbiAgICAgICY6bm90KC51bnN0cmlwZWQpIHRyOm50aC1vZi10eXBlKGV2ZW4pOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLXJvdy1zdHJpcGUtaG92ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGFya2VucyB0aGUgb2RkIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAZWxzZSBpZigkdGFibGUtc3RyaXBlID09IG9kZCkge1xuICAgICAgJjpub3QoLnVuc3RyaXBlZCkgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmICR0YWJsZS1pcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICAvLyBEYXJrZW5zIHRoZSBldmVuIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAaWYoJHRhYmxlLXN0cmlwZSA9PSBldmVuKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUoZXZlbik6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtcm93LXN0cmlwZS1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXJrZW5zIHRoZSBvZGQgc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBlbHNlIGlmKCR0YWJsZS1zdHJpcGUgPT0gb2RkKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc3RhY2tlZCB0YWJsZS4gVXNlZnVsIGZvciBzbWFsbC1zY3JlZW4gbGF5b3V0cy5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRoZWFkZXIgWyRzaG93LWhlYWRlci1mb3Itc3RhY2tlZF0gLSBTaG93IHRoZSBmaXJzdCB0aCBvZiBoZWFkZXIgd2hlbiBzdGFja2VkLlxuQG1peGluIHRhYmxlLXN0YWNrKCRoZWFkZXI6ICRzaG93LWhlYWRlci1mb3Itc3RhY2tlZCkge1xuICBAaWYgJGhlYWRlciB7XG4gICAgdGhlYWQge1xuICAgICAgdGgge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIHRoZWFkIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGZvb3Qge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICB0cixcbiAgdGgsXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIHRkIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRhYmxlKCRuZXN0OiBmYWxzZSkge1xuICB0YWJsZSB7XG4gICAgQGluY2x1ZGUgdGFibGUoJG5lc3Q6ICRuZXN0KTtcbiAgfVxuXG4gIHRhYmxlLnN0YWNrIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0YWJsZS1zdGFjay1icmVha3BvaW50IGRvd24pIHtcbiAgICAgIEBpbmNsdWRlIHRhYmxlLXN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlLnNjcm9sbCB7XG4gICAgQGluY2x1ZGUgdGFibGUtc2Nyb2xsO1xuICB9XG5cbiAgdGFibGUuaG92ZXIge1xuICAgIEBpbmNsdWRlIHRhYmxlLWhvdmVyO1xuICB9XG5cbiAgLnRhYmxlLXNjcm9sbCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbkBpbXBvcnQgJ21hdGgnO1xuXG4kY29udHJhc3Qtd2FybmluZ3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbi8vLyBDaGVja3MgdGhlIGx1bWluYW5jZSBvZiBgJGNvbG9yYC5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIGNoZWNrIHRoZSBsdW1pbmFuY2Ugb2YuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbHVtaW5hbmNlIG9mIGAkY29sb3JgLlxuQGZ1bmN0aW9uIGNvbG9yLWx1bWluYW5jZSgkY29sb3IpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICRyZ2JhOiByZWQoJGNvbG9yKSwgZ3JlZW4oJGNvbG9yKSwgYmx1ZSgkY29sb3IpO1xuICAkcmdiYTI6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggMyB7XG4gICAgJHJnYjogbnRoKCRyZ2JhLCAkaSk7XG4gICAgJHJnYjogJHJnYiAvIDI1NTtcblxuICAgICRyZ2I6IGlmKCRyZ2IgPCAwLjAzOTI4LCAkcmdiIC8gMTIuOTIsIHBvdygoJHJnYiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpKTtcblxuICAgICRyZ2JhMjogYXBwZW5kKCRyZ2JhMiwgJHJnYik7XG4gIH1cblxuICBAcmV0dXJuIDAuMjEyNiAqIG50aCgkcmdiYTIsIDEpICsgMC43MTUyICogbnRoKCRyZ2JhMiwgMikgKyAwLjA3MjIgKiBudGgoJHJnYmEyLCAzKTtcbn1cblxuLy8vIENoZWNrcyB0aGUgY29udHJhc3QgcmF0aW8gb2YgdHdvIGNvbG9ycy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjEgLSBGaXJzdCBjb2xvciB0byBjb21wYXJlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjIgLSBTZWNvbmQgY29sb3IgdG8gY29tcGFyZS5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBjb250cmFzdCByYXRpbyBvZiB0aGUgY29tcGFyZWQgY29sb3JzLlxuQGZ1bmN0aW9uIGNvbG9yLWNvbnRyYXN0KCRjb2xvcjEsICRjb2xvcjIpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICRsdW1pbmFuY2UxOiBjb2xvci1sdW1pbmFuY2UoJGNvbG9yMSkgKyAwLjA1O1xuICAkbHVtaW5hbmNlMjogY29sb3ItbHVtaW5hbmNlKCRjb2xvcjIpICsgMC4wNTtcbiAgJHJhdGlvOiAkbHVtaW5hbmNlMSAvICRsdW1pbmFuY2UyO1xuXG4gIEBpZiAkbHVtaW5hbmNlMiA+ICRsdW1pbmFuY2UxIHtcbiAgICAkcmF0aW86IDEgLyAkcmF0aW87XG4gIH1cblxuICAkcmF0aW86IHJvdW5kKCRyYXRpbyAqIDEwKSAvIDEwO1xuXG4gIEByZXR1cm4gJHJhdGlvO1xufVxuXG4vLy8gQ2hlY2tzIHRoZSBsdW1pbmFuY2Ugb2YgYCRiYXNlYCwgYW5kIHJldHVybnMgdGhlIGNvbG9yIGZyb20gYCRjb2xvcnNgIChsaXN0IG9mIGNvbG9ycykgdGhhdCBoYXMgdGhlIG1vc3QgY29udHJhc3QuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFzZSAtIENvbG9yIHRvIGNoZWNrIGx1bWluYW5jZS5cbi8vLyBAcGFyYW0ge0xpc3R9ICRjb2xvcnMgWygkd2hpdGUsICRibGFjayldIC0gQ29sb3JzIHRvIGNvbXBhcmUuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0b2xlcmFuY2UgWyRnbG9iYWwtY29sb3ItcGljay1jb250cmFzdC10b2xlcmFuY2VdIC0gQ29udHJhc3QgdG9sZXJhbmNlLlxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSB0aGUgY29sb3IgZnJvbSBgJGNvbG9yc2AgKGxpc3Qgb2YgY29sb3JzKSB0aGF0IGhhcyB0aGUgbW9zdCBjb250cmFzdC5cbkBmdW5jdGlvbiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYXNlLCAkY29sb3JzOiAoJHdoaXRlLCAkYmxhY2spLCAkdG9sZXJhbmNlOiAkZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlKSB7XG4gICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAxKSk7XG4gICRiZXN0OiBudGgoJGNvbG9ycywgMSk7XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCBsZW5ndGgoJGNvbG9ycykge1xuICAgICRjdXJyZW50LWNvbnRyYXN0OiBjb2xvci1jb250cmFzdCgkYmFzZSwgbnRoKCRjb2xvcnMsICRpKSk7XG4gICAgQGlmICgkY3VycmVudC1jb250cmFzdCAtICRjb250cmFzdCA+ICR0b2xlcmFuY2UpIHtcbiAgICAgICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAkaSkpO1xuICAgICAgJGJlc3Q6IG50aCgkY29sb3JzLCAkaSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkY29udHJhc3Qtd2FybmluZ3MgYW5kICRjb250cmFzdCA8IDMpIHtcbiAgICBAd2FybiBcIkNvbnRyYXN0IHJhdGlvIG9mICN7JGJlc3R9IG9uICN7JGJhc2V9IGlzIHByZXR0eSBiYWQsIGp1c3QgI3skY29udHJhc3R9XCI7XG4gIH1cblxuICBAcmV0dXJuICRiZXN0O1xufVxuXG4vLy8gU2NhbGVzIGEgY29sb3IgdG8gYmUgZGFya2VyIGlmIGl0J3MgbGlnaHQsIG9yIGxpZ2h0ZXIgaWYgaXQncyBkYXJrLiBVc2UgdGhpcyBmdW5jdGlvbiB0byB0aW50IGEgY29sb3IgYXBwcm9wcmlhdGUgdG8gaXRzIGxpZ2h0bmVzcy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIHNjYWxlLlxuLy8vIEBwYXJhbSB7UGVyY2VudGFnZX0gJHNjYWxlIFs1JV0gLSBBbW91bnQgdG8gc2NhbGUgdXAgb3IgZG93bi5cbi8vLyBAcGFyYW0ge1BlcmNlbnRhZ2V9ICR0aHJlc2hvbGQgWzQwJV0gLSBUaHJlc2hvbGQgb2YgbGlnaHRuZXNzIHRvIGNoZWNrIGFnYWluc3QuXG4vLy9cbi8vLyBAcmV0dXJucyB7Q29sb3J9IEEgc2NhbGVkIGNvbG9yLlxuQGZ1bmN0aW9uIHNtYXJ0LXNjYWxlKCRjb2xvciwgJHNjYWxlOiA1JSwgJHRocmVzaG9sZDogNDAlKSB7XG4gIEBpZiBsaWdodG5lc3MoJGNvbG9yKSA+ICR0aHJlc2hvbGQge1xuICAgICRzY2FsZTogLSRzY2FsZTtcbiAgfVxuICBAcmV0dXJuIHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJHNjYWxlKTtcbn1cblxuLy8vIEdldCBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHBhcmFtIHtrZXl9IGNvbG9yIGtleSBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuQGZ1bmN0aW9uIGdldC1jb2xvcigka2V5KSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCAka2V5KSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsICRrZXkpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ2dpdmVuICRrZXkgaXMgbm90IGF2YWlsYWJsZSBpbiAkZm91bmRhdGlvbi1wYWxldHRlJztcbiAgfVxufVxuXG4vLy8gVHJhbnNmZXJzIHRoZSBjb2xvcnMgaW4gdGhlIGAkZm91bmRhdGlvbi1wYWxldHRlYCBtYXAgaW50byB2YXJpYWJsZXMsIHN1Y2ggYXMgYCRwcmltYXJ5LWNvbG9yYCBhbmQgYCRzZWNvbmRhcnktY29sb3JgLiBDYWxsIHRoaXMgbWl4aW4gYmVsb3cgdGhlIEdsb2JhbCBzZWN0aW9uIG9mIHlvdXIgc2V0dGluZ3MgZmlsZSB0byBwcm9wZXJseSBtaWdyYXRlIHlvdXIgY29kZWJhc2UuXG5AbWl4aW4gYWRkLWZvdW5kYXRpb24tY29sb3JzKCkge1xuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICAgICRwcmltYXJ5LWNvbG9yOiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHByaW1hcnkpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRwcmltYXJ5LWNvbG9yOiAjMTc3OWJhICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHNlY29uZGFyeSkge1xuICAgICRzZWNvbmRhcnktY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgc2Vjb25kYXJ5KSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc2Vjb25kYXJ5LWNvbG9yOiAjNzY3Njc2ICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHN1Y2Nlc3MpIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCBzdWNjZXNzKSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogIzNhZGI3NiAhZ2xvYmFsO1xuICB9XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCB3YXJuaW5nKSB7XG4gICAgJHdhcm5pbmctY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgd2FybmluZykgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJHdhcm5pbmctY29sb3I6ICNmZmFlMDAgIWdsb2JhbDtcbiAgfVxuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpIHtcbiAgICAkYWxlcnQtY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRhbGVydC1jb2xvcjogI2NjNGIzNyAhZ2xvYmFsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYmFkZ2Vcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJhZGdlLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRiYWRnZS1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGluc2lkZSBiYWRnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtcGFkZGluZzogMC4zZW0gIWRlZmF1bHQ7XG5cbi8vLyBNaW5pbXVtIHdpZHRoIG9mIGEgYmFkZ2UuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtbWlud2lkdGg6IDIuMWVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRiYWRnZS1mb250LXNpemU6IDAuNnJlbSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyB0aGUgYmFzZSBzdHlsZXMgZm9yIGEgYmFkZ2UuXG5AbWl4aW4gYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogJGJhZGdlLW1pbndpZHRoO1xuICBwYWRkaW5nOiAkYmFkZ2UtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgZm9udC1zaXplOiAkYmFkZ2UtZm9udC1zaXplO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJhZGdlIHtcbiAgLmJhZGdlIHtcbiAgICBAaW5jbHVkZSBiYWRnZTtcblxuICAgIGJhY2tncm91bmQ6ICRiYWRnZS1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkYmFkZ2UtY29sb3I7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICRiYWRnZS1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG4gICAgICAgIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRjb2xvciwgKCRiYWRnZS1jb2xvciwgJGJhZGdlLWNvbG9yLWFsdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGJyZWFkY3J1bWJzXG4vLy8vXG5cbi8vLyBNYXJnaW4gYXJvdW5kIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLW1hcmdpbjogMCAwICRnbG9iYWwtbWFyZ2luIDAgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTEpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGFjdGl2ZSBicmVhZGNydW1iIGxpbmsuXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWN1cnJlbnQ6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIE9wYWNpdHkgb2YgZGlzYWJsZWQgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBicmVhZGNydW1iIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBtYWtlcyBicmVhZGNydW1iIGxpbmtzIHVwcGVyY2FzZS5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2U6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGFkZHMgYSBzZXBlcmF0b3IgYmV0d2VlbiBicmVhZGNydW1iIGxpbmtzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvcjogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gSWYgaXQgZXhpc3RzICRicmVhZGNydW1icy1pdGVtLXNsYXNoIGlzIHVzZWQgdG8gYnVpbGQgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gpIHtcbiAgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zbGFzaDtcbn1cblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJyAhZGVmYXVsdDtcblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IgaW4gcnRsIG1vZGUuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW0tcnRsOiAnXFxcXCcgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBicmVhZGNydW1iIGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLyBJZiBpdCBleGlzdHMgJGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gtY29sb3IgaXMgdXNlZCB0byBidWlsZCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbi5cbkBpZiB2YXJpYWJsZS1leGlzdHMoYnJlYWRjcnVtYnMtaXRlbS1zbGFzaC1jb2xvcikge1xuICAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I6ICRicmVhZGNydW1icy1pdGVtLXNsYXNoLWNvbG9yO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLCBhbG9uZyB3aXRoIHRoZSBzdHlsZXMgZm9yIHRoZSBgPGxpPmAgYW5kIGA8YT5gIGVsZW1lbnRzIGluc2lkZSBvZiBpdC5cbkBtaXhpbiBicmVhZGNydW1icy1jb250YWluZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luOiAkYnJlYWRjcnVtYnMtbWFyZ2luO1xuICBsaXN0LXN0eWxlOiBub25lO1xuXG4gIC8vIEl0ZW0gd3JhcHBlclxuICBsaSB7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1sZWZ0fTtcblxuICAgIGZvbnQtc2l6ZTogJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplO1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgIEBpZiAkYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2Uge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICBAaWYgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yIHtcbiAgICAgIC8vIE5lZWQgdG8gZXNjYXBlIHRoZSBiYWNrc2xhc2hcbiAgICAgICRzZXBhcmF0b3I6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gJ2x0cicsICRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItaXRlbS1ydGwpO1xuXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIG1hcmdpbjogMCAkYnJlYWRjcnVtYnMtaXRlbS1tYXJnaW47XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICBjb250ZW50OiAkc2VwYXJhdG9yO1xuICAgICAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRicmVhZGNydW1icy1pdGVtLW1hcmdpbjtcbiAgICB9XG4gIH1cblxuICAvLyBQYWdlIGxpbmtzXG4gIGEge1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJyZWFkY3J1bWJzIHtcbiAgLmJyZWFkY3J1bWJzIHtcbiAgICBAaW5jbHVkZSBicmVhZGNydW1icy1jb250YWluZXI7XG5cbiAgICAuZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkO1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjYWxsb3V0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZmFkZSB2YWx1ZSBmb3IgY2FsbG91dCBiYWNrZ3JvdW5kcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjYWxsb3V0LWJhY2tncm91bmQtZmFkZTogODUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgc3R5bGUgZm9yIGNhbGxvdXRzLlxuLy8vIEB0eXBlIExpc3RcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FsbG91dC1tYXJnaW46IDAgMCAxcmVtIDAgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgQ2FsbG91dCBwYWRkaW5ncy5cbi8vLyBAdHlwZSBNYXBcbiRjYWxsb3V0LXNpemVzOiAoXG4gIHNtYWxsOiAwLjVyZW0sXG4gIGRlZmF1bHQ6IDFyZW0sXG4gIGxhcmdlOiAzcmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBjb2xvciBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGNhbGxvdXRzLCBpZiB0aGUgY2FsbG91dCBoYXMgYSBkYXJrIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3ItYWx0OiAkYm9keS1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgcmFkaXVzIGZvciBjYWxsb3V0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhbGxvdXQtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEFtb3VudCB0byB0aW50IGxpbmtzIHVzZWQgd2l0aGluIGNvbG9yZWQgcGFuZWxzLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbi8vLyBAdHlwZSBOdW1iZXIgfCBCb29sZWFuXG4kY2FsbG91dC1saW5rLXRpbnQ6IDMwJSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzaWMgc3R5bGVzIGZvciBhIGNhbGxvdXQsIGluY2x1ZGluZyBwYWRkaW5nIGFuZCBtYXJnaW4uXG5AbWl4aW4gY2FsbG91dC1iYXNlKCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJGNhbGxvdXQtbWFyZ2luO1xuICBwYWRkaW5nOiBtYXAtZ2V0KCRjYWxsb3V0LXNpemVzLCBkZWZhdWx0KTtcblxuICBib3JkZXI6ICRjYWxsb3V0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGNhbGxvdXQtcmFkaXVzO1xuXG4gIC8vIFJlc3BlY3QgdGhlIHBhZGRpbmcsIGZvb2wuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gR2VuZXJhdGUgcXVpY2sgc3R5bGVzIGZvciBhIGNhbGxvdXQgdXNpbmcgYSBzaW5nbGUgY29sb3IgYXMgYSBiYXNlbGluZS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRjYWxsb3V0LWJhY2tncm91bmRdIC0gQ29sb3IgdG8gdXNlLlxuQG1peGluIGNhbGxvdXQtc3R5bGUoJGNvbG9yOiAkY2FsbG91dC1iYWNrZ3JvdW5kKSB7XG4gICRiYWNrZ3JvdW5kOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6ICRjYWxsb3V0LWJhY2tncm91bmQtZmFkZSk7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGNhbGxvdXQtZm9udC1jb2xvciwgJGNhbGxvdXQtZm9udC1jb2xvci1hbHQpKTtcbn1cblxuQG1peGluIGNhbGxvdXQtc2l6ZSgkcGFkZGluZykge1xuICBwYWRkaW5nLXRvcDogJHBhZGRpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmc7XG4gIHBhZGRpbmctbGVmdDogJHBhZGRpbmc7XG59XG5cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhbGxvdXQuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskY2FsbG91dC1iYWNrZ3JvdW5kXSAtIENvbG9yIHRvIHVzZS5cbkBtaXhpbiBjYWxsb3V0KCRjb2xvcjogJGNhbGxvdXQtYmFja2dyb3VuZCkge1xuICBAaW5jbHVkZSBjYWxsb3V0LWJhc2U7XG4gIEBpbmNsdWRlIGNhbGxvdXQtc3R5bGUoJGNvbG9yKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FsbG91dCB7XG4gIC5jYWxsb3V0IHtcbiAgICBAaW5jbHVkZSBjYWxsb3V0O1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXN0eWxlKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluIG1hcC1yZW1vdmUoJGNhbGxvdXQtc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXNpemUoJHBhZGRpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGNhcmRcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBjYXJkcy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHN0eWxlLlxuLy8vIEB0eXBlIExpc3RcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjYXJkIHNoYWRvdy5cbi8vLyBAdHlwZSBMaXN0XG4kY2FyZC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciByYWRpdXMuXG4vLy8gQHR5cGUgTGlzdFxuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4uXG4vLy8gQHR5cGUgbnVtYmVyXG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgY29udGFpbmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgLSBmb250IGNvbG9yIG9mIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIC0gQm90dG9tIG1hcmdpbiBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRib3JkZXIgLSBCb3JkZXIgYXJvdW5kIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TGlzdH0gJHJhZGl1cyAtIGJvcmRlciByYWRpdXMgb2YgdGhlIGNhcmQuXG4vLy8gQHBhcmFtIHtMaXN0fSAkc2hhZG93IC0gYm94IHNoYWRvdyBvZiB0aGUgY2FyZC5cbkBtaXhpbiBjYXJkLWNvbnRhaW5lcihcbiAgJGJhY2tncm91bmQ6ICRjYXJkLWJhY2tncm91bmQsXG4gICRjb2xvcjogJGNhcmQtZm9udC1jb2xvcixcbiAgJG1hcmdpbjogJGNhcmQtbWFyZ2luLWJvdHRvbSxcbiAgJGJvcmRlcjogJGNhcmQtYm9yZGVyLFxuICAkcmFkaXVzOiAkY2FyZC1ib3JkZXItcmFkaXVzLFxuICAkc2hhZG93OiAkY2FyZC1zaGFkb3dcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZmxleC1ncm93OiAxO1xuICB9XG5cbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcblxuICBib3JkZXI6ICRib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG5cbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3c7XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICRjb2xvcjtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgZGl2aWRlci5cbkBtaXhpbiBjYXJkLWRpdmlkZXIoXG4gICRiYWNrZ3JvdW5kOiAkY2FyZC1kaXZpZGVyLWJhY2tncm91bmQsXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAwIDEgYXV0bztcbiAgfVxuXG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgc2VjdGlvbi5cbkBtaXhpbiBjYXJkLXNlY3Rpb24oXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZmxleDogMSAwIGF1dG87XG4gIH1cblxuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FyZCB7XG4gIC5jYXJkIHtcbiAgICBAaW5jbHVkZSBjYXJkLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC5jYXJkLWRpdmlkZXIge1xuICAgIEBpbmNsdWRlIGNhcmQtZGl2aWRlcjtcbiAgfVxuXG4gIC5jYXJkLXNlY3Rpb24ge1xuICAgIEBpbmNsdWRlIGNhcmQtc2VjdGlvbjtcbiAgfVxuXG4gIC8vIEZvciBJRSAxMSAtIEZsZXhidWdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHdhbHRvbi9mbGV4YnVncy9pc3N1ZXMvNzVcbiAgLmNhcmQtaW1hZ2Uge1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duXG4vLy8vXG5cbi8vLyBQYWRkaW5nIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgZm9yIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZCAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWZvbnQtc2l6ZTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFdpZHRoIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bi13aWR0aDogMzAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgZHJvcGRvd24gcGFuZXMuIEVhY2ggc2l6ZSBpcyBhIENTUyBjbGFzcyB5b3UgY2FuIGFwcGx5LlxuLy8vIEB0eXBlIE1hcFxuJGRyb3Bkb3duLXNpemVzOiAoXG4gIHRpbnk6IDEwMHB4LFxuICBzbWFsbDogMjAwcHgsXG4gIGxhcmdlOiA0MDBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgYSBiYXNpYyBkcm9wZG93bi5cbkBtaXhpbiBkcm9wZG93bi1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwO1xuXG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgd2lkdGg6ICRkcm9wZG93bi13aWR0aDtcbiAgcGFkZGluZzogJGRyb3Bkb3duLXBhZGRpbmc7XG5cbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBib3JkZXI6ICRkcm9wZG93bi1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRkcm9wZG93bi1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1iYWNrZ3JvdW5kO1xuXG4gIGZvbnQtc2l6ZTogJGRyb3Bkb3duLWZvbnQtc2l6ZTtcblxuXG4gIC8vIEFsbG93IGFuIGludGVybWl0dGVudCBzdGF0ZSB0byBkbyBwb3NpdGlvbmluZyBiZWZvcmUgbWFraW5nIHZpc2libGUuXG4gICYuaXMtb3BlbmluZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAmLmlzLW9wZW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZHJvcGRvd24ge1xuICAuZHJvcGRvd24tcGFuZSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tY29udGFpbmVyO1xuICB9XG5cbiAgQGVhY2ggJG5hbWUsICRzaXplIGluICRkcm9wZG93bi1zaXplcyB7XG4gICAgLmRyb3Bkb3duLXBhbmUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIHdpZHRoOiAkc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBwYWdpbmF0aW9uXG4vLy8vXG5cbi8vLyBGb250IHNpemUgb2YgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIG9mIHRoZSBwYWdpbmF0aW9uIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGluc2lkZSBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKSAhZGVmYXVsdDtcblxuLy8vIFJpZ2h0IG1hcmdpbiB0byBzZXBhcmF0ZSBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1zcGFjaW5nOiByZW0tY2FsYygxKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtcyBvbiBob3Zlci5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtIGZvciB0aGUgY3VycmVudCBwYWdlLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtY3VycmVudDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBwYWdpbmF0aW9uIGl0ZW0gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4vLy8gQHR5cGUgQ29sb3JcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhIGRpc2FibGVkIHBhZ2luYXRpb24gaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGVsbGlwc2lzIGluIGEgcGFnaW5hdGlvbiBtZW51LlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1lbGxpcHNpcy1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gSWYgYGZhbHNlYCwgZG9uJ3QgZGlzcGxheSBwYWdlIG51bWJlciBsaW5rcyBvbiBtb2JpbGUsIG9ubHkgbmV4dC9wcmV2aW91cyBsaW5rc1xuLy8vIGFuZCBvcHRpb25hbGx5IGN1cnJlbnQgcGFnZSBudW1iZXIuXG4vLy8gQHR5cGUgQm9vbGVhblxuJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIG51bWJlciBvbiBtb2JpbGUgZXZlbiBpZiBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zYCBpcyBzZXQgdG8gYGZhbHNlYC5cbi8vLyBUaGlzIHBhcmFtZXRlciB3aWxsIG9ubHkgb3ZlcnJpZGUgdGhlIHZpc2liaWxpdHkgc2V0dGluZyBvZiB0aGUgY3VycmVudCBpdGVtIGZvciBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZTtgLFxuLy8vIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgY3VycmVudCBwYWdlIG51bWJlciB2aXNpYmlsaXR5IHdoZW4gYCRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtc2AgaXMgc2V0IHRvIGB0cnVlYC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYXJyb3dzIGFyZSBhZGRlZCB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgbGlua3Mgb2YgcGFnaW5hdGlvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgcHJldmlvdXMgYXJyb3cgd2hlbiBgJHBhZ2luYXRpb24tYXJyb3dzYCBpcyBgdHJ1ZWBcbi8vLyBAdHlwZSBTdHJpbmdcbiRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzOiAnXFwwMEFCJyAhZGVmYXVsdDtcblxuLy8vIENvbnRlbnQgZm9yIHRoZSBuZXh0IGFycm93IHdoZW4gYCRwYWdpbmF0aW9uLWFycm93c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFnaW5hdGlvbi1hcnJvdy1uZXh0OiAnXFwwMEJCJyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHBhZ2luYXRpb24gY29udGFpbmVyLiBBcHBseSB0aGlzIHRvIGEgYDx1bD5gLlxuQG1peGluIHBhZ2luYXRpb24tY29udGFpbmVyIChcbiAgJG1hcmdpbi1ib3R0b206ICRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b20sXG4gICRmb250LXNpemU6ICRwYWdpbmF0aW9uLWZvbnQtc2l6ZSxcbiAgJHNwYWNpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZyxcbiAgJHJhZGl1czogJHBhZ2luYXRpb24tcmFkaXVzLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWl0ZW0tY29sb3IsXG4gICRwYWRkaW5nOiAkcGFnaW5hdGlvbi1pdGVtLXBhZGRpbmcsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXJcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMDtcbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbi1ib3R0b207XG5cbiAgLy8gTGlzdCBpdGVtXG4gIGxpIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG5cbiAgICBAaWYgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cblxuICAgICAgQGlmICRwYWdpbmF0aW9uLW1vYmlsZS1jdXJyZW50LWl0ZW0ge1xuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBsaW5rc1xuICBhLFxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtaG92ZXI7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBpdGVtLiBBcHBseSB0aGlzIHRvIGFuIGA8YT5gLlxuQG1peGluIHBhZ2luYXRpb24taXRlbS1jdXJyZW50IChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGJhY2tncm91bmQtY3VycmVudDogJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWN1cnJlbnQsXG4gICRjb2xvci1jdXJyZW50OiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnRcbikge1xuICBwYWRkaW5nOiAkcGFkZGluZztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtY3VycmVudDtcbiAgY29sb3I6ICRjb2xvci1jdXJyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBkaXNhYmxlZCBwYWdpbmF0aW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gYW4gYDxhPmAuXG5AbWl4aW4gcGFnaW5hdGlvbi1pdGVtLWRpc2FibGVkIChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGNvbG9yOiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWRpc2FibGVkXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBlbGxpcHNpcyBmb3IgdXNlIGluIGEgcGFnaW5hdGlvbiBsaXN0LlxuQG1peGluIHBhZ2luYXRpb24tZWxsaXBzaXMgKFxuICAkcGFkZGluZzogJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWVsbGlwc2lzLWNvbG9yXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbnRlbnQ6ICdcXDIwMjYnO1xuICBjb2xvcjogJGNvbG9yO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1wYWdpbmF0aW9uIHtcbiAgLnBhZ2luYXRpb24ge1xuICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tY29udGFpbmVyO1xuXG4gICAgLmN1cnJlbnQge1xuICAgICAgQGluY2x1ZGUgcGFnaW5hdGlvbi1pdGVtLWN1cnJlbnQ7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24taXRlbS1kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAuZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tZWxsaXBzaXM7XG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWdpbmF0aW9uLWFycm93cyB7XG4gICAgLnBhZ2luYXRpb24tcHJldmlvdXMgYTo6YmVmb3JlLFxuICAgIC5wYWdpbmF0aW9uLXByZXZpb3VzLmRpc2FibGVkOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDAuNXJlbTtcbiAgICAgIGNvbnRlbnQ6ICRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzO1xuICAgIH1cblxuICAgIC5wYWdpbmF0aW9uLW5leHQgYTo6YWZ0ZXIsXG4gICAgLnBhZ2luYXRpb24tbmV4dC5kaXNhYmxlZDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMC41cmVtO1xuICAgICAgY29udGVudDogJHBhZ2luYXRpb24tYXJyb3ctbmV4dDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0b29sdGlwXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGN1cnNvciBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoYXMtdGlwLWN1cnNvcjogaGVscCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgb2YgdGhlIGRlZmluZWQgdGVybS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIGJvdHRvbSBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIExpc3RcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIHRvb2x0aXAgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgdG9vbHRpcCBmb250LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9vbHRpcC1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIHRoZSB0b29sdGlwIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXggd2lkdGggZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIG9mIHRoZSB0b29sdGlwIHRleHQuIEJ5IGRlZmF1bHQsIHdlIHJlY29tbWVuZCBhIHNtYWxsZXIgZm9udCBzaXplIHRoYW4gdGhlIGJvZHkgY29weS5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIHdpZHRoIGZvciB0b29sdGlwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIGhlaWdodCBmb3IgdG9vbHRpcHMuIFRoaXMgaXMgaGVscGZ1bCBmb3IgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvb2x0aXAgd29yZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuQG1peGluIGhhcy10aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBib3JkZXItYm90dG9tOiAkaGFzLXRpcC1ib3JkZXItYm90dG9tO1xuICBmb250LXdlaWdodDogJGhhcy10aXAtZm9udC13ZWlnaHQ7XG4gIGN1cnNvcjogJGhhcy10aXAtY3Vyc29yO1xufVxuXG5AbWl4aW4gdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiBjYWxjKDEwMCUgKyAjeyR0b29sdGlwLXBpcC1oZWlnaHR9KTtcbiAgei1pbmRleDogMTIwMDtcblxuICBtYXgtd2lkdGg6ICR0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogJHRvb2x0aXAtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiAkdG9vbHRpcC1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJhY2tncm91bmQtY29sb3I7XG4gIGZvbnQtc2l6ZTogJHRvb2x0aXAtZm9udC1zaXplO1xuICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAmLmJvdHRvbSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHVwKTtcbiAgICAgIGJvdHRvbTogMTAwJTtcbiAgICB9XG5cbiAgICAmLmFsaWduLWNlbnRlcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnRvcCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGRvd24pO1xuICAgICAgdG9wOiAxMDAlO1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgIH1cblxuICAgICYuYWxpZ24tY2VudGVyOjpiZWZvcmUge1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHJpZ2h0KTtcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnJpZ2h0IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCR0b29sdGlwLXBpcC13aWR0aCwgJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgbGVmdCk7XG4gICAgICByaWdodDogMTAwJTtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLXRvcDo6YmVmb3JlIHtcbiAgICBib3R0b206IGF1dG87XG4gICAgdG9wOiAxMCU7XG4gIH1cblxuICAmLmFsaWduLWJvdHRvbTo6YmVmb3JlIHtcbiAgICBib3R0b206IDEwJTtcbiAgICB0b3A6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLWxlZnQ6OmJlZm9yZSB7XG4gICAgbGVmdDogMTAlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodDo6YmVmb3JlIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiAxMCU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdG9vbHRpcCB7XG4gIC5oYXMtdGlwIHtcbiAgICBAaW5jbHVkZSBoYXMtdGlwO1xuICB9XG5cbiAgLnRvb2x0aXAge1xuICAgIEBpbmNsdWRlIHRvb2x0aXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb25cbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY2NvcmRpb24gZ3JvdXAuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBhZGRzIHBsdXMgYW5kIG1pbnVzIGljb25zIHRvIHRoZSBzaWRlIG9mIGVhY2ggYWNjb3JkaW9uIHRpdGxlLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQ29udGVudCBmb3IgdGhlIHBsdXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLXBsdXMtY29udGVudDogJ1xcMDAyQicgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgbWludXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ6ICdcXDIwMTMnICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIGFjY29yZGlvbiB0aXRsZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIGZvciBpdGVtcyBpbiBhIE1lbnUuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGl0ZW1zIGluIGEgTWVudS5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIGFuIGFjY29yZGlvbiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24taXRlbS1wYWRkaW5nOiAxLjI1cmVtIDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciBjb2xvciBvZiB0YWIgY29udGVudC5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1jb250ZW50LWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGFuIGFjY29yZGlvbiBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gdGhlIHNhbWUgZWxlbWVudCB0aGF0IGdldHMgYGRhdGEtYWNjb3JkaW9uYC5cbkBtaXhpbiBhY2NvcmRpb24tY29udGFpbmVyIChcbiAgJGJhY2tncm91bmQ6ICRhY2NvcmRpb24tYmFja2dyb3VuZFxuKSB7XG4gIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cbiAgJltkaXNhYmxlZF0ge1xuICAgIC5hY2NvcmRpb24tdGl0bGUge1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWNjb3JkaW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gdGhlIGxpc3QgaXRlbSB3aXRoaW4gYW4gYWNjb3JkaW9uIHVsLlxuQG1peGluIGFjY29yZGlvbi1pdGVtIHtcbiAgJjpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgJGdsb2JhbC1yYWRpdXMgMCAwO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAkZ2xvYmFsLXJhZGl1cyAkZ2xvYmFsLXJhZGl1cztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSB0aXRsZSBvZiBhbiBhY2NvcmRpb24gaXRlbS4gQXBwbHkgdGhpcyB0byB0aGUgbGluayB3aXRoaW4gYW4gYWNjb3JkaW9uIGl0ZW0uXG5AbWl4aW4gYWNjb3JkaW9uLXRpdGxlIChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24taXRlbS1wYWRkaW5nLFxuICAkZm9udC1zaXplOiAkYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkYWNjb3JkaW9uLWl0ZW0tY29sb3IsXG4gICRib3JkZXI6ICRhY2NvcmRpb24tY29udGVudC1ib3JkZXIsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlclxuKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuXG4gIGJvcmRlcjogJGJvcmRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkOm5vdCguaXMtYWN0aXZlKSA+ICYge1xuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwICRnbG9iYWwtcmFkaXVzICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtaG92ZXI7XG4gIH1cblxuICBAaWYgJGFjY29yZGlvbi1wbHVzbWludXMge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgICBtYXJnaW4tdG9wOiAtMC41cmVtO1xuICAgICAgY29udGVudDogJGFjY29yZGlvbi1wbHVzLWNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLmlzLWFjdGl2ZSA+ICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAkYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYWNjb3JkaW9uIGNvbnRlbnQuIEFwcGx5IHRoaXMgdG8gdGhlIGNvbnRlbnQgcGFuZSBiZWxvdyBhbiBhY2NvcmRpb24gaXRlbSdzIHRpdGxlLlxuQG1peGluIGFjY29yZGlvbi1jb250ZW50IChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nLFxuICAkYm9yZGVyOiAkYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyLFxuICAkYmFja2dyb3VuZDogJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQsXG4gICRjb2xvcjogJGFjY29yZGlvbi1jb250ZW50LWNvbG9yXG4pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgYm9yZGVyOiAkYm9yZGVyO1xuICBib3JkZXItYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcblxuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkID4gJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbiB7XG4gIC5hY2NvcmRpb24ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1jb250YWluZXI7XG4gIH1cblxuICAuYWNjb3JkaW9uLWl0ZW0ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1pdGVtO1xuICB9XG5cbiAgLmFjY29yZGlvbi10aXRsZSB7XG4gICAgQGluY2x1ZGUgYWNjb3JkaW9uLXRpdGxlO1xuICB9XG5cbiAgLmFjY29yZGlvbi1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBhY2NvcmRpb24tY29udGVudDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG1lZGlhLW9iamVjdFxuLy8vL1xuXG4vLy8gQm90dG9tIG1hcmdpbiBvZiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIExlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgb24gc2VjdGlvbnMgd2l0aGluIGEgbWVkaWEgb2JqZWN0LlxuLy8vIEB0eXBlIE51bWJlclxuJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gV2lkdGggb2YgaW1hZ2VzIHdpdGhpbiBhIG1lZGlhIG9iamVjdCwgd2hlbiB0aGUgb2JqZWN0IGlzIHN0YWNrZWQgdmVydGljYWxseS4gU2V0IHRvICdhdXRvJyB0byB1c2UgdGhlIGltYWdlJ3MgbmF0dXJhbCB3aWR0aC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbWVkaWEgb2JqZWN0IGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3QtY29udGFpbmVyIHtcbiAgZGlzcGxheTogaWYoJGdsb2JhbC1mbGV4Ym94LCBmbGV4LCBibG9jayk7XG4gIG1hcmdpbi1ib3R0b206ICRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tO1xuXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB9XG5cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAmLnN0YWNrLWZvci0jeyQtemYtemVyby1icmVha3BvaW50fSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCQtemYtemVyby1icmVha3BvaW50IG9ubHkpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHNlY3Rpb25zIHdpdGhpbiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHBhZGRpbmcgWyRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmddIC0gUGFkZGluZyBiZXR3ZWVuIHNlY3Rpb25zLlxuQG1peGluIG1lZGlhLW9iamVjdC1zZWN0aW9uKCRwYWRkaW5nOiAkbWVkaWFvYmplY3Qtc2VjdGlvbi1wYWRkaW5nKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIH1cblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLSN7JGdsb2JhbC1yaWdodH06ICRwYWRkaW5nO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkOm5vdCg6bnRoLWNoaWxkKDIpKSB7XG4gICAgcGFkZGluZy0jeyRnbG9iYWwtbGVmdH06ICRwYWRkaW5nO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5zdGFjay1mb3ItI3skLXpmLXplcm8tYnJlYWtwb2ludH0gJiB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkLXpmLXplcm8tYnJlYWtwb2ludCBvbmx5KSB7XG4gICAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgJi5tYWluLXNlY3Rpb24ge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICYubWlkZGxlIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJi5ib3R0b20ge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRvIHN0YWNrIHNlY3Rpb25zIG9mIGEgbWVkaWEgb2JqZWN0LiBBcHBseSB0aGlzIHRvIHRoZSBzZWN0aW9uIGVsZW1lbnRzLCBub3QgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3Qtc3RhY2sge1xuICBwYWRkaW5nOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZztcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBpbWcge1xuICAgIHdpZHRoOiAkbWVkaWFvYmplY3QtaW1hZ2Utd2lkdGgtc3RhY2tlZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1tZWRpYS1vYmplY3Qge1xuICAubWVkaWEtb2JqZWN0IHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3QtY29udGFpbmVyO1xuICB9XG5cbiAgLm1lZGlhLW9iamVjdC1zZWN0aW9uIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc2VjdGlvbjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG9yYml0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBhY3RpdmUgY29sb3IgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlhbWV0ZXIgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtZGlhbWV0ZXI6IDEuMnJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgbWFyZ2luIGJldHdlZW4gT3JiaXQncyBidWxsZXRzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWJ1bGxldC1tYXJnaW46IDAuMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlzdGFuY2UgZnJvbSBzbGlkZSByZWdpb24gZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDogMC44cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIGZyb20gT3JiaXQncyBidWxsZXRzIHRvIHdoYXRldmVyIGNvbnRlbnQgbWF5IGx1cmsgYmVsb3cgaXQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIENvbG9yXG4kb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kOiByZ2JhKCRibGFjaywgMC41KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjb250cm9scyB3aGVuIGhvdmVyZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGZvciBPcmJpdCdzIGNvbnRyb2xzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgei1pbmRleCBmb3IgT3JiaXQncyBjb250cm9scy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTAgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIG91dGVyIE9yYml0IHdyYXBwZXIuIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5uZXIgT3JiaXQgc2xpZGUgY29udGFpbmVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY29udGFpbmVyYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDsgLy8gUHJldmVudCBGT1VDIGJ5IG5vdCBzaG93aW5nIHVudGlsIEpTIHNldHMgaGVpZ2h0XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5kaXZpZHVhbCBzbGlkZXMgb2YgYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtc2xpZGVgIGNsYXNzLlxuQG1peGluIG9yYml0LXNsaWRlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLm5vLW1vdGlvbnVpIHtcbiAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gb3JiaXQtZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc2xpZGUgY29udGFpbmluZyBhbiBpbWFnZS4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LWltYWdlYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBvcmJpdCBzbGlkZSBjYXB0aW9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY2FwdGlvbmAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogJG9yYml0LWNhcHRpb24tcGFkZGluZztcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kO1xuICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kKTtcbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIHRoZSBuZXh0L3ByZXZpb3VzIGJ1dHRvbnMgaW4gYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBgLm9yYml0LW5leHRgIGFuZCBgLm9yYml0LXByZXZpb3VzYCBjbGFzc2VzIGluIHRoZSBkZWZhdWx0IENTUy5cbkBtaXhpbiBvcmJpdC1jb250cm9sIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBAaW5jbHVkZSB2ZXJ0aWNhbC1jZW50ZXI7XG4gIHotaW5kZXg6ICRvcmJpdC1jb250cm9sLXppbmRleDtcbiAgcGFkZGluZzogJG9yYml0LWNvbnRyb2wtcGFkZGluZztcbiAgY29sb3I6ICR3aGl0ZTtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWNvbnRyb2wtYmFja2dyb3VuZC1ob3ZlcjtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1wcmV2aW91c2AgY2xhc3MuXG5AbWl4aW4gb3JiaXQtcHJldmlvdXMge1xuICAjeyRnbG9iYWwtbGVmdH06IDA7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIE9yYml0IG5leHQgYnV0dG9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtbmV4dGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtbmV4dCB7XG4gICN7JGdsb2JhbC1sZWZ0fTogYXV0bztcbiAgI3skZ2xvYmFsLXJpZ2h0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNvbnRhaW5lciBvZiBPcmJpdCBidWxsZXRzLiAvLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1idWxsZXRzYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1idWxsZXRzIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDtcbiAgbWFyZ2luLWJvdHRvbTogJG9yYml0LWJ1bGxldC1tYXJnaW4tYm90dG9tO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgYnV0dG9uIHtcbiAgICB3aWR0aDogJG9yYml0LWJ1bGxldC1kaWFtZXRlcjtcbiAgICBoZWlnaHQ6ICRvcmJpdC1idWxsZXQtZGlhbWV0ZXI7XG4gICAgbWFyZ2luOiAkb3JiaXQtYnVsbGV0LW1hcmdpbjtcblxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU7XG4gICAgfVxuXG4gICAgJi5pcy1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tb3JiaXQge1xuICAub3JiaXQge1xuICAgIEBpbmNsdWRlIG9yYml0LXdyYXBwZXI7XG4gIH1cblxuICAub3JiaXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jb250YWluZXI7XG4gIH1cblxuICAub3JiaXQtc2xpZGUge1xuICAgIEBpbmNsdWRlIG9yYml0LXNsaWRlO1xuICB9XG5cbiAgLm9yYml0LWZpZ3VyZSB7XG4gICAgQGluY2x1ZGUgb3JiaXQtZmlndXJlO1xuICB9XG5cbiAgLm9yYml0LWltYWdlIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1pbWFnZTtcbiAgfVxuXG4gIC5vcmJpdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jYXB0aW9uO1xuICB9XG5cbiAgJW9yYml0LWNvbnRyb2wge1xuICAgIEBpbmNsdWRlIG9yYml0LWNvbnRyb2w7XG4gIH1cblxuICAub3JiaXQtcHJldmlvdXMge1xuICAgIEBleHRlbmQgJW9yYml0LWNvbnRyb2w7XG4gICAgQGluY2x1ZGUgb3JiaXQtcHJldmlvdXM7XG4gIH1cblxuICAub3JiaXQtbmV4dCB7XG4gICAgQGV4dGVuZCAlb3JiaXQtY29udHJvbDtcbiAgICBAaW5jbHVkZSBvcmJpdC1uZXh0O1xuICB9XG5cbiAgLm9yYml0LWJ1bGxldHMge1xuICAgIEBpbmNsdWRlIG9yYml0LWJ1bGxldHM7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCByZXNwb25zaXZlLWVtYmVkXG4vLy8vXG5cbi8vLyBNYXJnaW4gYmVsb3cgYSByZXNwb25zaXZlIGVtYmVkIGNvbnRhaW5lci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXNwb25zaXZlLWVtYmVkLW1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDE2KSAhZGVmYXVsdDtcblxuLy8vIEFzcGVjdCByYXRpb3MgdXNlZCB0byBkZXRlcm1pbmUgcGFkZGluZy1ib3R0b20gb2YgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXJzLlxuLy8vIEB0eXBlIE1hcFxuJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zOiAoXG4gIGRlZmF1bHQ6IDQgYnkgMyxcbiAgd2lkZXNjcmVlbjogMTYgYnkgOSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd8TGlzdH0gJHJhdGlvIFtkZWZhdWx0XSAtIFJhdGlvIG9mIHRoZSBjb250YWluZXIuIENhbiBiZSBhIGtleSBmcm9tIHRoZSBgJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zYCBtYXAgb3IgYSBsaXN0IGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbkBtaXhpbiByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCkge1xuICBAaWYgdHlwZS1vZigkcmF0aW8pID09ICdzdHJpbmcnIHtcbiAgICAkcmF0aW86IG1hcC1nZXQoJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zLCAkcmF0aW8pO1xuICB9XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tO1xuICBwYWRkaW5nLWJvdHRvbTogcmF0aW8tdG8tcGVyY2VudGFnZSgkcmF0aW8pO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkIHtcbiAgLnJlc3BvbnNpdmUtZW1iZWQsXG4gIC5mbGV4LXZpZGVvIHtcbiAgICBAaW5jbHVkZSByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCk7XG5cbiAgICAkcmF0aW9zOiBtYXAtcmVtb3ZlKCRyZXNwb25zaXZlLWVtYmVkLXJhdGlvcyxkZWZhdWx0KTtcblxuICAgIEBlYWNoICRuYW1lLCAkcmF0aW8gaW4gJHJhdGlvcyB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHJhdGlvLXRvLXBlcmNlbnRhZ2UoJHJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0YWJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IG1hcmdpbiBvZiB0aGUgdGFiIGJhci5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGNvbG9yIG9mIHRhYiBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEFjdGl2ZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kLWFjdGl2ZTogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBBY3RpdmUgZm9udCBjb2xvciBvZiB0YWIgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIHRhYiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItaXRlbS1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvbiBob3ZlciBmb3IgaXRlbXMgaW4gYSBNZW51LlxuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBvZiBhIHRhYiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlclxuJHRhYi1pdGVtLXBhZGRpbmc6IDEuMjVyZW0gMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItY29udGVudC1ib3JkZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byBhIGA8dWw+YC5cbkBtaXhpbiB0YWJzLWNvbnRhaW5lciAoXG4gICRtYXJnaW46ICR0YWItbWFyZ2luLFxuICAkYmFja2dyb3VuZDogJHRhYi1iYWNrZ3JvdW5kLFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIG1hcmdpbjogJG1hcmdpbjtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRhaW5lciB0byBoYXZlIHZlcnRpY2FsIHRhYnMuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGFpbmVyKClgLlxuQG1peGluIHRhYnMtY29udGFpbmVyLXZlcnRpY2FsIHtcbiAgPiBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgbGlua3Mgd2l0aGluIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byB0aGUgYDxsaT5gIGVsZW1lbnRzIGluc2lkZSBhIHRhYiBjb250YWluZXIuXG5AbWl4aW4gdGFicy10aXRsZSAoXG4gICRwYWRkaW5nOiAkdGFiLWl0ZW0tcGFkZGluZyxcbiAgJGZvbnQtc2l6ZTogJHRhYi1pdGVtLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkdGFiLWNvbG9yLFxuICAkY29sb3ItYWN0aXZlOiAkdGFiLWFjdGl2ZS1jb2xvcixcbiAgJGJhY2tncm91bmQtaG92ZXI6ICR0YWItaXRlbS1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkYmFja2dyb3VuZC1hY3RpdmU6ICR0YWItYmFja2dyb3VuZC1hY3RpdmVcbikge1xuICBmbG9hdDogI3skZ2xvYmFsLWxlZnR9O1xuXG4gID4gYSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGNvbG9yO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZC1ob3ZlcjtcbiAgICAgIGNvbG9yOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6IC0xNCUpO1xuICAgIH1cblxuICAgICY6Zm9jdXMsXG4gICAgJlthcmlhLXNlbGVjdGVkPSd0cnVlJ10ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtYWN0aXZlO1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgdGhhdCBzdXJyb3VuZHMgYSB0YWIgZ3JvdXAncyBjb250ZW50IHBhbmVzLlxuQG1peGluIHRhYnMtY29udGVudCAoXG4gICRiYWNrZ3JvdW5kOiAkdGFiLWNvbnRlbnQtYmFja2dyb3VuZCxcbiAgJGNvbG9yOiAkdGFiLWNvbnRlbnQtY29sb3IsXG4gICRib3JkZXItY29sb3I6ICR0YWItY29udGVudC1ib3JkZXJcbikge1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBib3JkZXItdG9wOiAwO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRjb2xvcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRlbnQgY29udGFpbmVyIHRvIGhhdmUgYSB2ZXJ0aWNhbCBzdHlsZSwgYnkgc2hpZnRpbmcgdGhlIGJvcmRlciBhcm91bmQuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGVudCgpYC5cbkBtaXhpbiB0YWJzLWNvbnRlbnQtdmVydGljYWwgKFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBpbmRpdmlkdWFsIHRhYiBjb250ZW50IHBhbmVsIHdpdGhpbiB0aGUgdGFiIGNvbnRlbnQgY29udGFpbmVyLlxuQG1peGluIHRhYnMtcGFuZWwgKFxuICAkcGFkZGluZzogJHRhYi1jb250ZW50LXBhZGRpbmdcbikge1xuICBkaXNwbGF5OiBub25lO1xuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmLmlzLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGFicyB7XG4gIC50YWJzIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsXG4gIC50YWJzLnZlcnRpY2FsIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lci12ZXJ0aWNhbDtcbiAgfVxuXG4gIC8vIFNpbXBsZVxuICAudGFicy5zaW1wbGUge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcmltYXJ5IGNvbG9yXG4gIC50YWJzLnByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuXG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJHByaW1hcnktY29sb3IpO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCRwcmltYXJ5LWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudGFicy10aXRsZSB7XG4gICAgQGluY2x1ZGUgdGFicy10aXRsZTtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudDtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQudmVydGljYWwge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudC12ZXJ0aWNhbDtcbiAgfVxuXG4gIC50YWJzLXBhbmVsIHtcbiAgICBAaW5jbHVkZSB0YWJzLXBhbmVsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGh1bWJuYWlsXG4vLy8vXG5cbi8vLyBCb3JkZXIgYXJvdW5kIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kdGh1bWJuYWlsLWJvcmRlcjogNHB4IHNvbGlkICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGh1bWJuYWlsLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyB1bmRlciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIFNoYWRvd1xuJHRodW1ibmFpbC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKCRibGFjaywgMC4yKSAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgdW5kZXIgdGh1bWJuYWlsIGltYWdlcy5cbi8vLyBAdHlwZSBTaGFkb3dcbiR0aHVtYm5haWwtc2hhZG93LWhvdmVyOiAwIDAgNnB4IDFweCByZ2JhKCRwcmltYXJ5LWNvbG9yLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wcnRpZXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHRodW1ibmFpbC10cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGh1bWJuYWlsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHRodW1ibmFpbCBzdHlsZXMgdG8gYW4gZWxlbWVudC5cbkBtaXhpbiB0aHVtYm5haWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tO1xuXG4gIGJvcmRlcjogJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtcmFkaXVzO1xuICBib3gtc2hhZG93OiAkdGh1bWJuYWlsLXNoYWRvdztcblxuICBsaW5lLWhlaWdodDogMDtcbn1cblxuQG1peGluIHRodW1ibmFpbC1saW5rIHtcbiAgdHJhbnNpdGlvbjogJHRodW1ibmFpbC10cmFuc2l0aW9uO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6ICR0aHVtYm5haWwtc2hhZG93LWhvdmVyO1xuICB9XG5cbiAgaW1hZ2Uge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGh1bWJuYWlsIHtcbiAgLnRodW1ibmFpbCB7XG4gICAgQGluY2x1ZGUgdGh1bWJuYWlsO1xuICB9XG5cbiAgYS50aHVtYm5haWwge1xuICAgIEBpbmNsdWRlIHRodW1ibmFpbC1saW5rO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbWVudVxuLy8vL1xuXG4vLy8gTWFyZ2luIG9mIGEgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW1hcmdpbjogMCAhZGVmYXVsdDtcblxuLy8vIExlZnQtaGFuZCBtYXJnaW4gb2YgYSBuZXN0ZWQgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3IgaXRlbXMgaW4gYSBwaWxsIG1lbnUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIG1hcmdpbiBmb3IgaXRlbXMgaW4gYSBzaW1wbGUgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRtZW51LWl0ZW0tY29sb3ItYWN0aXZlOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGl2ZSB0ZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmU6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgYW4gYWN0aXZlIG1lbnUgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBiZXR3ZWVuIGFuIGljb24gYW5kIHRleHQgaW4gYSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pY29uLXNwYWNpbmc6IDAuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IHN0YXRlLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgYWN0aXZlYCB3aXRoIGBpcy1hY3RpdmVgLiBcbi8vLyBCdXQgcGxlYXNlIG5vdGUgdGhhdCBgYWN0aXZlYCB3aWxsIGJlIHJlbW92ZWQgaW4gdXBjb21pbmcgdmVyc2lvbnMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IGNlbnRlcmVkLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgLm1lbnUtY2VudGVyZWQgPiAubWVudWAgd2l0aCBgLm1lbnUuYWxpZ24tY2VudGVyYC4gXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgYG1lbnUtY2VudGVyZWRgIHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHVzaW5nIGBpY29uLSpgIGNsYXNzZXMgd2l0aG91dCBgLmljb25zYCBjbGFzc2VzXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgdGhpcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1pY29ucy1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIENyZWF0ZXMgdGhlIGJhc2Ugc3R5bGVzIGZvciBhIE1lbnUuXG5AbWl4aW4gbWVudS1iYXNlIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICBsaSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICB9XG5cbiAgYSxcbiAgLmJ1dHRvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LWl0ZW1zLXBhZGRpbmc7XG4gIH1cblxuICAvLyBSZXNldCBzdHlsZXMgb2YgaW5uZXIgZWxlbWVudHNcbiAgaW5wdXQsXG4gIHNlbGVjdCxcbiAgYSxcbiAgYnV0dG9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG4vLy8gRXhwYW5kcyB0aGUgaXRlbXMgb2YgYSBNZW51LCBzbyBlYWNoIGl0ZW0gaXMgdGhlIHNhbWUgd2lkdGguXG5AbWl4aW4gbWVudS1leHBhbmQge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBsaSB7XG4gICAgICBmbGV4OiAxIDEgMHB4OyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIHplcm8tdW5pdFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWxpZ24gbWVudSBpdGVtcy5cbkBtaXhpbiBtZW51LWFsaWduKCRhbGlnbm1lbnQpIHtcbiAgQGlmICRhbGlnbm1lbnQgPT0gbGVmdCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGFsaWdubWVudCA9PSByaWdodCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLnZlcnRpY2FsIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcblxuICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICB0ZXh0LWFsaWduOiAkZ2xvYmFsLWxlZnQ7XG4gICAgICB9XG5cbiAgICAgICYudmVydGljYWwge1xuICAgICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkYWxpZ25tZW50ID09IGNlbnRlciB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgIC5zdWJtZW51IGxpIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGRpcmVjdGlvbiBvZiBhIE1lbnUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyIFtob3Jpem9udGFsXSAtIERpcmVjdGlvbiBvZiB0aGUgTWVudS4gQ2FuIGJlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLlxuQG1peGluIG1lbnUtZGlyZWN0aW9uKCRkaXI6IGhvcml6b250YWwpIHtcbiAgQGlmICRkaXIgPT0gaG9yaXpvbnRhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBtZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2ltcGxlIE1lbnUsIHdoaWNoIGhhcyBubyBwYWRkaW5nIG9yIGhvdmVyIHN0YXRlLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpciBbJGdsb2JhbC1sZWZ0XSAtIERpcmVjdGlvbiBvZiB0aGUgbWVudS4gVGhpcyBlZmZlY3RzIHRoZSBzaWRlIG9mIHRoZSBgPGxpPmAgdGhhdCByZWNlaXZlcyB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIFskbWVudS1zaW1wbGUtbWFyZ2luXSAtIFRoZSBtYXJnaW4gdG8gYXBwbHkgdG8gZWFjaCBgPGxpPmAuXG5AbWl4aW4gbWVudS1zaW1wbGUoJGRpcjogJGdsb2JhbC1sZWZ0LCAkbWFyZ2luOiAkbWVudS1zaW1wbGUtbWFyZ2luKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICBsaSArIGxpIHtcbiAgICBtYXJnaW4tI3skZGlyfTogJG1hcmdpbjtcbiAgfVxuXG4gIGEge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG5lc3RlZCBNZW51LCBieSBhZGRpbmcgYG1hcmdpbi1sZWZ0YCB0byB0aGUgbWVudS5cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkbWFyZ2luIFskbWVudS1uZXN0ZWQtbWFyZ2luXSAtIExlbmd0aCBvZiB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG5lc3RlZC1hbGlnbm1lbnQgW2xlZnRdIC0gQWxpZ25tZW50IG9mIHRoZSBuZXN0ZWQgY2xhc3NcbkBtaXhpbiBtZW51LW5lc3RlZChcbiAgJG1hcmdpbjogJG1lbnUtbmVzdGVkLW1hcmdpbixcbiAgJG5lc3RlZC1hbGlnbm1lbnQ6IGxlZnRcbikge1xuICBAaWYgJG5lc3RlZC1hbGlnbm1lbnQgPT0gcmlnaHQge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkbWFyZ2luO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIH1cbiAgQGVsc2Uge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRtYXJnaW47XG4gIH1cblxufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGljb25zIGluIG1lbnVzLlxuQG1peGluIG1lbnUtaWNvbnMoKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGEge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIGltZyxcbiAgICBpLFxuICAgIHN2ZyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICArIHNwYW4ge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBwb3NpdGlvbiBjbGFzc2VzIGZvciBpY29ucyB3aXRoaW4gYSBtZW51LlxuQG1peGluIG1lbnUtaWNvbi1wb3NpdGlvbigkcG9zaXRpb246IGxlZnQsICRzcGFjaW5nOiAkbWVudS1pY29uLXNwYWNpbmcpIHtcbiAgQGlmICRwb3NpdGlvbiA9PSBsZWZ0IHtcbiAgICBsaSBhIHtcbiAgICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgaW1nLFxuICAgICAgaSxcbiAgICAgIHN2ZyB7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRzcGFjaW5nO1xuXG4gICAgICAgIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgbGkgYSB7XG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG8gJHNwYWNpbmc7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmc7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICRwb3NpdGlvbiA9PSBib3R0b20ge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICBpbWcsXG4gICAgICBpLFxuICAgICAgc3ZnIHtcbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1hcmdpbjogJHNwYWNpbmcgYXV0byAwO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWVudS10ZXh0IHtcbiAgcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG5cbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuQG1peGluIG1lbnUtc3RhdGUtYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZSwgKCRtZW51LWl0ZW0tY29sb3ItYWN0aXZlLCAkbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmUpKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tbWVudSB7XG4gIC5tZW51IHtcbiAgICBAaW5jbHVkZSBtZW51LWJhc2U7XG5cbiAgICAvLyBEZWZhdWx0IG9yaWVudGF0aW9uOiBob3Jpem9udGFsXG4gICAgJiwgJi5ob3Jpem9udGFsIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgIH1cblxuICAgIC8vIFZlcnRpY2FsIG9yaWVudGF0aW9uIG1vZGlmaWVyXG4gICAgJi52ZXJ0aWNhbCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWRpcmVjdGlvbih2ZXJ0aWNhbCk7XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBtb2RpZmllciBmb3IgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlXG4gICAgJi5zaW1wbGUge1xuICAgICAgQGluY2x1ZGUgbWVudS1zaW1wbGU7XG4gICAgfVxuXG4gICAgLy8gQnJlYWtwb2ludCBzcGVjaWZpYyB2ZXJzaW9uc1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoJHNtYWxsOiBmYWxzZSkge1xuICAgICAgJi4jeyQtemYtc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgICAgfVxuXG4gICAgICAmLiN7JC16Zi1zaXplfS12ZXJ0aWNhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWV4cGFuZDtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tc2ltcGxlIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmVzdGluZ1xuICAgICYubmVzdGVkIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkO1xuICAgIH1cblxuICAgIC8vIEljb24gQmFzZSBTdHlsZXNcbiAgICAmLmljb25zIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbnM7XG4gICAgfVxuXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LWljb25zLWJhY2stY29tcGF0IHtcbiAgICAgICYuaWNvbi10b3AsXG4gICAgICAmLmljb24tcmlnaHQsXG4gICAgICAmLmljb24tYm90dG9tLFxuICAgICAgJi5pY29uLWxlZnQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWljb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEljb24gTGVmdFxuICAgICYuaWNvbi1sZWZ0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihsZWZ0KTtcbiAgICB9XG5cbiAgICAvLyBJY29uIFJpZ2h0XG4gICAgJi5pY29uLXJpZ2h0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihyaWdodCk7XG4gICAgfVxuXG4gICAgLy8gSWNvbiBUb3BcbiAgICAmLmljb24tdG9wIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbih0b3ApO1xuICAgIH1cblxuICAgIC8vIEljb24gQm90dG9tXG4gICAgJi5pY29uLWJvdHRvbSB7XG4gICAgICBAaW5jbHVkZSBtZW51LWljb24tcG9zaXRpb24oYm90dG9tKTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAuaXMtYWN0aXZlID4gYSB7XG4gICAgICBAaW5jbHVkZSBtZW51LXN0YXRlLWFjdGl2ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LXN0YXRlLWJhY2stY29tcGF0IHtcbiAgICAgIC5hY3RpdmUgPiBhIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1zdGF0ZS1hY3RpdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gbGVmdFxuICAgICYuYWxpZ24tI3skZ2xvYmFsLWxlZnR9IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24obGVmdCk7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gcmlnaHRcbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihyaWdodCk7XG5cbiAgICAgIC5uZXN0ZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkbmVzdGVkLWFsaWdubWVudDogcmlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsaWduIGNlbnRlclxuICAgICYuYWxpZ24tY2VudGVyIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24oY2VudGVyKTtcbiAgICB9XG5cbiAgICAubWVudS10ZXh0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtdGV4dDtcbiAgICB9XG4gIH1cblxuICBAaWYgJG1lbnUtY2VudGVyZWQtYmFjay1jb21wYXQge1xuICAgIC5tZW51LWNlbnRlcmVkIHtcbiAgICAgID4gLm1lbnUge1xuICAgICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihjZW50ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFByZXZlbnQgRk9VQyB3aGVuIHVzaW5nIHRoZSBSZXNwb25zaXZlIE1lbnUgcGx1Z2luXG4gIC5uby1qcyBbZGF0YS1yZXNwb25zaXZlLW1lbnVdIHVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCJAbWl4aW4gZm91bmRhdGlvbi1tZW51LWljb24ge1xuICAubWVudS1pY29uIHtcbiAgICBAaW5jbHVkZSBoYW1idXJnZXIoJGNvbG9yOiAkdGl0bGViYXItaWNvbi1jb2xvciwgJGNvbG9yLWhvdmVyOiAkdGl0bGViYXItaWNvbi1jb2xvci1ob3Zlcik7XG4gIH1cblxuICAubWVudS1pY29uLmRhcmsge1xuICAgIEBpbmNsdWRlIGhhbWJ1cmdlcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb24tbWVudVxuLy8vL1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IG5lc3RlZCBtYXJnaW5cbi8vLyBAdHlwZSBOdW1iZXJcbiRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBzdWJtZW51IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc6ICRhY2NvcmRpb25tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGlmIGFjY29yZGlvbiBtZW51cyBoYXZlIHRoZSBkZWZhdWx0IGFycm93IHN0eWxlcy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYWNjb3JkaW9ubWVudS1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1pdGVtLWJhY2tncm91bmQ6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gYm9yZGVyLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1ib3JkZXI6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gcGFkZGluZy5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIExpc3RcbiRhY2NvcmRpb24tc3VibWVudS10b2dnbGUtYm9yZGVyOiAkYWNjb3JkaW9ubWVudS1ib3JkZXIgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IHN1Ym1lbnUgdG9nZ2xlIGJhY2tncm91bmQgd2lkdGguXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDogNDBweCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgc3VibWVudSB0b2dnbGUgYmFja2dyb3VuZCBoZWlnaHQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBhcnJvdyBzaXplIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kYWNjb3JkaW9ubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbkBtaXhpbiB6Zi1hY2NvcmRpb24tbWVudS1sZWZ0LXJpZ2h0LWFycm93cyB7XG4gIC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRhY2NvcmRpb25tZW51LWFycm93LXNpemUsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbWFyZ2luLXRvcDogLTEgKiAoJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgI3skZ2xvYmFsLXJpZ2h0fTogMXJlbTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLWxlZnQgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCA+IGE6OmFmdGVyIHtcbiAgICByaWdodDogMXJlbTtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodCAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDFyZW07XG4gIH1cbn1cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbi1tZW51IHtcblxuICAuYWNjb3JkaW9uLW1lbnUge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgICBib3JkZXItdG9wOiAkYWNjb3JkaW9ubWVudS1ib3JkZXI7XG4gICAgICAgIGJvcmRlci1yaWdodDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgICBib3JkZXItbGVmdDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgfVxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBAaWYgJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kO1xuICAgICAgfVxuICAgICAgcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgYSB7XG4gICAgICBwYWRkaW5nOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkKCRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW4sIHJpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtYXJyb3dzIHtcbiAgICAgIEBpbmNsdWRlIHpmLWFjY29yZGlvbi1tZW51LWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50W2FyaWEtZXhwYW5kZWQ9J3RydWUnXSA+IGE6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgbGkge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmhhcy1zdWJtZW51LXRvZ2dsZSA+IGEge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDtcbiAgfVxuXG4gIC8vIFN1Ym1lbnUgdG9nZ2xlXG4gIC5zdWJtZW51LXRvZ2dsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICAjeyRnbG9iYWwtcmlnaHR9OiAwO1xuXG4gICAgd2lkdGg6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuICAgIGhlaWdodDogJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtaGVpZ2h0O1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogJGFjY29yZGlvbi1zdWJtZW51LXRvZ2dsZS1ib3JkZXI7XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgYXJyb3cgdG8gdGhlIHRvZ2dsZVxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSg2cHgsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcblxuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJvdGF0ZSB0aGUgYXJyb3cgd2hlbiBtZW51IGlzIG9wZW5cbiAgLnN1Ym1lbnUtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9J3RydWUnXTo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGVZKC0xKTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xuICB9XG5cbiAgLnN1Ym1lbnUtdG9nZ2xlLXRleHQge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQtaW52aXNpYmxlO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZHJpbGxkb3duXG4vLy8vXG5cbi8vLyBUcmFuc2l0aW9uIHByb3BlcnR5IHRvIHVzZSBmb3IgYW5pbWF0aW5nIG1lbnVzLlxuLy8vIEB0eXBlIFRyYW5zaXRpb25cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhciAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYXJyb3dzIHRvIGRyaWxsZG93biBpdGVtcyB3aXRoIHN1Ym1lbnVzLCBhcyB3ZWxsIGFzIHRoZSBiYWNrIGJ1dHRvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZHJpbGxkb3duLWFycm93czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgZHJpbGxkb3duIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyaWxsZG93bi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBtZW51IGl0ZW0gcGFkZGluZyBpbiB0aGUgc3VibWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nOiAkZHJpbGxkb3duLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBkcmlsbGRvd24gc3VibWVudXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBhcnJvdyBjb2xvciBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIGFycm93IHNpemUgaWYgYXJyb3cgaXMgdXNlZC5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCA+IGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJpbGxkb3duLWFycm93LXNpemUsICRkcmlsbGRvd24tYXJyb3ctY29sb3IsICRnbG9iYWwtcmlnaHQpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcmlsbGRvd24tYXJyb3ctc2l6ZTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgfVxuICB9XG5cbiAgJi5hbGlnbi1sZWZ0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgcmlnaHQpO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLXJpZ2h0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgbGVmdCk7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMXJlbTtcbiAgfVxuXG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyaWxsZG93bi1tZW51IHtcbiAgLy8gQXBwbGllZCB0byB0aGUgTWVudSBjb250YWluZXJcbiAgLmlzLWRyaWxsZG93biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBsaSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmLmFuaW1hdGUtaGVpZ2h0IHtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSB0b3AgbGV2ZWwgPHVsPlxuICAuZHJpbGxkb3duIHtcbiAgICBhIHtcbiAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRkcmlsbGRvd24tYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAvLyBBcHBsaWVkIHRvIHN1Ym1lbnUgPHVsPnNcbiAgICAuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgI3skZ2xvYmFsLWxlZnR9OiAxMDAlO1xuICAgICAgei1pbmRleDogLTE7XG5cbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogJGRyaWxsZG93bi1zdWJtZW51LWJhY2tncm91bmQ7XG4gICAgICB0cmFuc2l0aW9uOiAkZHJpbGxkb3duLXRyYW5zaXRpb247XG5cbiAgICAgICYuaXMtYWN0aXZlIHtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChpZigkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09IGx0ciwgLTEwMCUsIDEwMCUpKTtcbiAgICAgIH1cblxuICAgICAgJi5pcy1jbG9zaW5nIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gbHRyLCAxMDAlLCAtMTAwJSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJtZW51IGl0ZW0gcGFkZGluZ1xuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgQGluY2x1ZGUgbWVudS1uZXN0ZWQoJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAuZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMge1xuICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICBAaWYgJGRyaWxsZG93bi1hcnJvd3Mge1xuICAgICAgQGluY2x1ZGUgemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuanMtZHJpbGxkb3duLWJhY2sgPiBhOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyaWxsZG93bi1hcnJvdy1zaXplLCAkZHJpbGxkb3duLWFycm93LWNvbG9yLCAkZ2xvYmFsLWxlZnQpO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwLjc1cmVtOyAvLyBDcmVhdGVzIHNwYWNlIGJldHdlZW4gdGhlIGFycm93IGFuZCB0aGUgdGV4dFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duLW1lbnVcbi8vLy9cblxuLy8vIEVuYWJsZXMgYXJyb3dzIGZvciBpdGVtcyB3aXRoIGRyb3Bkb3duIG1lbnVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBkcm9wZG93biBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3I6ICRhbmNob3ItY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgc2l6ZSBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIExlbmd0aFxuJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgcGFkZGluZyBmb3IgYWxpZ25pbmcgdGhlIGFycm93IGNvcnJlY3RseS5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYXJyb3ctcGFkZGluZzogMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gTWluaW11bSB3aWR0aCBvZiBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0b3AgbGV2ZWwgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIGRyb3Bkb3ducy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyb3Bkb3dubWVudS1zdWJtZW51LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3dubWVudS1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3Igc3ViLW1lbnUgaXRlbXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGRyb3Bkb3dubWVudS1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGZvciBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3dubWVudS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vIEJvcmRlciB3aWR0aCBmb3IgZHJvcGRvd24gc3ViLW1lbnVzLlxuLy8gVXNlZCB0byBhZGp1c3QgdG9wIG1hcmdpbiBvZiBhIHN1Yi1tZW51IGlmIGEgYm9yZGVyIGlzIHVzZWQuXG4vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYm9yZGVyLXdpZHRoOiBudGgoJGRyb3Bkb3dubWVudS1ib3JkZXIsIDEpO1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuQG1peGluIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgPiBhOjphZnRlciB7XG4gICAgI3skZ2xvYmFsLXJpZ2h0fTogMTRweDtcbiAgfVxuXG4gICYub3BlbnMtbGVmdCA+IGE6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplLCAkZHJvcGRvd25tZW51LWFycm93LWNvbG9yLCBsZWZ0KTtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiA1cHg7XG4gIH1cblxuICAmLm9wZW5zLXJpZ2h0ID4gYTo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJvcGRvd25tZW51LWFycm93LXNpemUsICRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3IsIHJpZ2h0KTtcbiAgfVxufVxuXG5AbWl4aW4gZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oJGRpcjogaG9yaXpvbnRhbCkge1xuICBAaWYgJGRpciA9PSBob3Jpem9udGFsIHtcbiAgICA+IGxpLm9wZW5zLWxlZnQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gbGkub3BlbnMtcmlnaHQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYSB7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tcXVhbGlmeWluZy1lbGVtZW50c1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctI3skZ2xvYmFsLXJpZ2h0fTogJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgZG93bik7XG4gICAgICAgICN7JGdsb2JhbC1yaWdodH06IDVweDtcbiAgICAgICAgI3skZ2xvYmFsLWxlZnR9OiBhdXRvO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqICgkZHJvcGRvd25tZW51LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgPiBsaSB7XG4gICAgICAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1sZWZ0IHtcbiAgICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1yaWdodCB7XG4gICAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmICRkcm9wZG93bm1lbnUtYXJyb3dzIHtcbiAgICAgICAgQGluY2x1ZGUgemYtZHJvcGRvd24tbGVmdC1yaWdodC1hcnJvd3M7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBkcm9wZG93bi1tZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyb3Bkb3duLW1lbnUge1xuICAuZHJvcGRvd24ubWVudSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oaG9yaXpvbnRhbCk7XG5cbiAgICBhIHtcbiAgICAgIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbVxuICAgID4gbGkgPiBhIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDtcbiAgICAgIHBhZGRpbmc6ICRkcm9wZG93bm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbSBhY3RpdmUgc3RhdGVcbiAgICA+IGxpLmlzLWFjdGl2ZSA+IGEge1xuICAgICAgYmFja2dyb3VuZDogJGRyb3Bkb3duLW1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiAkZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAubm8tanMgJiB1bCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkZHJvcGRvd25tZW51LW5lc3RlZC1tYXJnaW4pO1xuICAgIH1cblxuICAgICYudmVydGljYWwge1xuICAgICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24odmVydGljYWwpO1xuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgICAgICAgICYuI3skc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBkcm9wZG93bi1tZW51LWRpcmVjdGlvbihob3Jpem9udGFsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLiN7JHNpemV9LXZlcnRpY2FsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGRyb3Bkb3duLW1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFsaWduLXJpZ2h0IHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51LmZpcnN0LXN1YiB7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmlzLWRyb3Bkb3duLW1lbnUudmVydGljYWwge1xuICAgIHdpZHRoOiAxMDBweDtcblxuICAgICYuYWxpZ24tcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgYTo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICAjeyRnbG9iYWwtcmlnaHR9OiA1cHg7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTtcbiAgICB9XG5cbiAgICAmLm9wZW5zLWlubmVyID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuXG4gICAgICB0b3A6IDEwMCU7XG4gICAgICBAaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYub3BlbnMtbGVmdCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAmLm9wZW5zLXJpZ2h0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgICN7JGdsb2JhbC1sZWZ0fTogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBtaW4td2lkdGg6ICRkcm9wZG93bm1lbnUtbWluLXdpZHRoO1xuXG4gICAgYm9yZGVyOiAkZHJvcGRvd25tZW51LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kOiAkZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDtcblxuICAgIC5kcm9wZG93biAmIGEge1xuICAgICAgcGFkZGluZzogJGRyb3Bkb3dubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50IHtcbiAgICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICAgIEBpbmNsdWRlIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAodHlwZS1vZigkZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCkgPT0gJ251bWJlcicpIHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgbWFyZ2luLXRvcDogKC0kZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiBsaSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvLyBbVE9ET10gQ3V0IGJhY2sgc3BlY2lmaWNpdHlcbiAgICAvLyY6bm90KC5qcy1kcm9wZG93bi1ub2hvdmVyKSA+IC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudDpob3ZlciA+ICYsIC8vIHdoeSBpcyB0aGlzIGxpbmUgbmVlZGVkPyBPcGVuaW5nIGlzIGhhbmRsZWQgYnkgSlMgYW5kIHRoaXMgY2F1c2VzIHNvbWUgdWdseSBmbGlja2VyaW5nIHdoZW4gdGhlIHN1YiBpcyByZS1wb3NpdGlvbmVkIGF1dG9tYXRpY2FsbHkuLi5cbiAgICAmLmpzLWRyb3Bkb3duLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBvZmYtY2FudmFzXG4vLy8vXG5cbi8vLyBXaWR0aCBtYXAgb2YgYSBsZWZ0L3JpZ2h0IG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgTWFwXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gIHNtYWxsOiAyNTBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgbWFwIG9mIGEgdG9wL2JvdHRvbSBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE1hcFxuJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKFxuICBzbWFsbDogMjUwcHgsXG4pICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyBmb3IgdGhlIG9mZi1jYW52YXMgb3ZlcmxhcCBwYW5lbC5cbi8vLyBAdHlwZSBTaGFkb3dcbiRvZmZjYW52YXMtc2hhZG93OiAwIDAgMTBweCByZ2JhKCRibGFjaywgMC43KSAhZGVmYXVsdDtcblxuLy8vIElubmVyIGJveCBzaGFkb3cgc2l6ZSBmb3IgdGhlIG9mZi1jYW52YXMgcHVzaCBwYW5lbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vLyBJbm5lciBib3ggc2hhZG93IGNvbG9yIGZvciB0aGUgb2ZmLWNhbnZhcyBwdXNoIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1jb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIGNvbnRlbnQgb3ZlcmxheS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXg6IDExICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIHBhbmVsIHdpdGggdGhlIGBwdXNoYCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy1wdXNoLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBaLWluZGV4IG9mIGFuIG9mZi1jYW52YXMgcGFuZWwgd2l0aCB0aGUgYG92ZXJsYXBgIHRyYW5zaXRpb24uXG4vLy8gQHR5cGUgTnVtYmVyXG4kb2ZmY2FudmFzLW92ZXJsYXAtemluZGV4OiAxMyAhZGVmYXVsdDtcblxuLy8vIFotaW5kZXggb2YgYW4gb2ZmLWNhbnZhcyBwYW5lbCB1c2luZyB0aGUgYHJldmVhbC1mb3ItKmAgY2xhc3NlcyBvciBtaXhpbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtcmV2ZWFsLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBMZW5ndGggb2YgdGhlIGFuaW1hdGlvbiBvbiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cyAhZGVmYXVsdDtcblxuLy8vIFRpbWluZyBmdW5jdGlvbiBvZiB0aGUgYW5pbWF0aW9uIG9uIGFuIG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgS2V5d29yZFxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLXRpbWluZzogZWFzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYSByZXZlYWxlZCBvZmYtY2FudmFzIHdpbGwgYmUgZml4ZWQtcG9zaXRpb24sIGFuZCBzY3JvbGwgd2l0aCB0aGUgc2NyZWVuLlxuLy8vIEB0eXBlIEJvb2xcbiRvZmZjYW52YXMtZml4ZWQtcmV2ZWFsOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIG92ZXJsYXkgdGhhdCBhcHBlYXJzIHdoZW4gYW4gb2ZmLWNhbnZhcyBwYW5lbCBpcyBvcGVuLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWV4aXQtYmFja2dyb3VuZDogcmdiYSgkd2hpdGUsIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gQ1NTIGNsYXNzIHVzZWQgZm9yIHRoZSBtYWluIGNvbnRlbnQgYXJlYS4gVGhlIG9mZi1jYW52YXMgbWl4aW5zIHVzZSB0aGlzIHRvIHRhcmdldCB0aGUgcGFnZSBjb250ZW50LlxuJG1haW5jb250ZW50LWNsYXNzOiAnb2ZmLWNhbnZhcy1jb250ZW50JyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzZWxpbmUgc3R5bGVzIGZvciBvZmYtY2FudmFzLiBUaGlzIENTUyBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBvdGhlciBwaWVjZXMgd29yay5cbkBtaXhpbiBvZmYtY2FudmFzLWJhc2ljcyB7XG5cbiAgLy8vIFRyYW5zZm9ybSBkZXByZWNhdGVkIHNpemUgc2V0dGluZ3MgaW50byBtYXAgJiBzaG93IHdhcm5pbmdcbiAgQGlmIHZhcmlhYmxlLWV4aXN0cyhvZmZjYW52YXMtc2l6ZSkge1xuICAgICRvZmZjYW52YXMtc2l6ZXM6IChzbWFsbDogJG9mZmNhbnZhcy1zaXplLCBtZWRpdW06ICRvZmZjYW52YXMtc2l6ZSkgIWdsb2JhbDtcbiAgICBAd2FybiAnJG9mZmNhbnZhcy1zaXplIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCB1c2VkIGFueW1vcmUhIFBsZWFzZSB1cGRhdGUgeW91ciBzZXR0aW5ncyBhbmQgdXNlIHRoZSBtYXAgJG9mZmNhbnZhcy1zaXplcyBpbnN0ZWFkJztcbiAgfVxuICBAaWYgdmFyaWFibGUtZXhpc3RzKG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSB7XG4gICAgJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKHNtYWxsOiAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUsIG1lZGl1bTogJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSAhZ2xvYmFsO1xuICAgIEB3YXJuICckb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHVzZWQgYW55bW9yZSEgUGxlYXNlIHVwZGF0ZSB5b3VyIHNldHRpbmdzIGFuZCB1c2UgdGhlIG1hcCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzIGluc3RlYWQnO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHRoZSB6LWluZGV4ZXMgYW5kIGluY3JlYXNlIHRoZW0gZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBvdmVybGF5J3Mgei1pbmRleCBpcyBuZXcgc2luY2UgdjYuNCBhbmQgbWF5IGJlIGlkZW50aWNhbCB0byB0aGUgdXNlciBjdXN0b20gc2V0dGluZ3Mgb2YgdGhlIHB1c2ggei1pbmRleC5cbiAgQGlmICRvZmZjYW52YXMtcHVzaC16aW5kZXggPD0gJG9mZmNhbnZhcy1vdmVybGF5LXppbmRleCB7ICRvZmZjYW52YXMtcHVzaC16aW5kZXg6ICRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXggPD0gJG9mZmNhbnZhcy1wdXNoLXppbmRleCB7ICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXg6ICRvZmZjYW52YXMtcHVzaC16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCA8PSAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4IHsgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4ICsgMSAhZ2xvYmFsOyB9XG5cbiAgLy8gSGlkZXMgb3ZlcmZsb3cgb24gYm9keSB3aGVuIGFuIG9mZi1jYW52YXMgcGFuZWwgaXMgb3Blbi5cbiAgLmlzLW9mZi1jYW52YXMtb3BlbiB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgb3ZlcmxheSAoZ2VuZXJhdGVkIGJ5IEphdmFTY3JpcHQpXG4gIC5qcy1vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkb2ZmY2FudmFzLXRyYW5zaXRpb24tbGVuZ3RoICRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmcsIHZpc2liaWxpdHkgJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuXG4gICAgYmFja2dyb3VuZDogJG9mZmNhbnZhcy1leGl0LWJhY2tncm91bmQ7XG5cbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLmlzLXZpc2libGUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgJi5pcy1jbG9zYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgJi5pcy1vdmVybGF5LWFic29sdXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG5cbiAgICAmLmlzLW92ZXJsYXktZml4ZWQge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRzIGJhc2ljIHN0eWxlcyBmb3IgYW4gb2ZmLWNhbnZhcyB3cmFwcGVyLlxuQG1peGluIG9mZi1jYW52YXMtd3JhcHBlcigpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1iYXNlKFxuICAkYmFja2dyb3VuZDogJG9mZmNhbnZhcy1iYWNrZ3JvdW5kLFxuICAkdHJhbnNpdGlvbjogJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nLFxuICAkZml4ZWQ6IHRydWVcbikge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG5cbiAgQGlmICRmaXhlZCA9PSB0cnVlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgb2ZmLWNhbnZhcyB6LWluZGV4LlxuICB6LWluZGV4OiAkb2ZmY2FudmFzLXB1c2gtemluZGV4O1xuXG4gIC8vIEluY3JlYXNlIENTUyBzcGVjaWZpY2l0eVxuICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1wdXNoLXppbmRleDtcbiAgfVxuXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuXG4gIC8vIEhpZGUgaW5hY3RpdmUgb2ZmLWNhbnZhcyB3aXRoaW4gdGhlIGNvbnRlbnQgdGhhdCBoYXZlIHRoZSBzYW1lIHBvc2l0aW9uXG4gICYuaXMtY2xvc2VkIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBPdmVybGFwIG9ubHkgc3R5bGVzLlxuICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDtcblxuICAgICYuaXMtb3BlbiB7XG4gICAgICBib3gtc2hhZG93OiAkb2ZmY2FudmFzLXNoYWRvdztcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHRyYW5zZm9ybSB0byAwIHRvIHNob3cgYW4gb2ZmLWNhbnZhcyBwYW5lbC5cbiAgJi5pcy1vcGVuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgdG8gcG9zaXRpb24gYW4gb2ZmLWNhbnZhcyBwYW5lbCB0byB0aGUgbGVmdC9yaWdodC90b3AvYm90dG9tLlxuQG1peGluIG9mZi1jYW52YXMtcG9zaXRpb24oXG4gICRwb3NpdGlvbjogbGVmdCxcbiAgJG9yaWVudGF0aW9uOiBob3Jpem9udGFsLFxuICAkc2l6ZXM6IGlmKCRvcmllbnRhdGlvbiA9PSBob3Jpem9udGFsLCAkb2ZmY2FudmFzLXNpemVzLCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzKVxuKSB7XG4gIEBpZiAkcG9zaXRpb24gPT0gbGVmdCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgd2lkdGg6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcblxuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICB3aWR0aDogJHNpemU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgcG9zaXRpb24gZm9yIG5lc3RlZCBvZmYtY2FudmFzIGVsZW1lbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9IC5vZmYtY2FudmFzLnBvc2l0aW9uLSN7JHBvc2l0aW9ufSB7XG5cbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICYuaXMtdHJhbnNpdGlvbi1vdmVybGFwLmlzLW9wZW4ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBvcGVuIHBvc2l0aW9uIGZvciB0aGUgY29udGVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30uaXMtb3Blbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIHBvc2l0aW9uIGZvciBuZXN0ZWQgb2ZmLWNhbnZhcyBlbGVtZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfSAub2ZmLWNhbnZhcy5wb3NpdGlvbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcC5pcy1vcGVuIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgb3BlbiBwb3NpdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9LmlzLW9wZW4tI3skcG9zaXRpb259IHtcbiAgICAgICYuaGFzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmICRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemUgaXMgc2V0LCBhZGQgaW5uZXIgYm94LXNoYWRvdy5cbiAgLy8gVGhpcyBtaW1pY3MgdGhlIG9mZi1jYW52YXMgcGFuZWwgaGF2aW5nIGEgbG93ZXIgei1pbmRleCwgd2l0aG91dCBoYXZpbmcgdG8gaGF2ZSBvbmUuXG4gIEBpZiAkb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1zaXplIHtcbiAgICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICBAaWYgJHBvc2l0aW9uID09IGxlZnQge1xuICAgICAgICBAaW5jbHVkZSBpbm5lci1zaWRlLXNoYWRvdyhyaWdodCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHJpZ2h0IHtcbiAgICAgICAgQGluY2x1ZGUgaW5uZXItc2lkZS1zaGFkb3cobGVmdCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KGJvdHRvbSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KHRvcCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbi8vLyBTZXRzIHRoZSBzdHlsZXMgZm9yIHRoZSBjb250ZW50IGNvbnRhaW5lci5cbkBtaXhpbiBvZmYtY2FudmFzLWNvbnRlbnQoKSB7XG4gIHRyYW5zZm9ybTogbm9uZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEJpbmQgdG8gaGFzLXRyYW5zaXRpb24tWCBjbGFzcyB0byBwcmV2ZW50IHRyYW5zaXRpb24gZm9yIHRyYW5zZm9ybTpub25lXG4gICYuaGFzLXRyYW5zaXRpb24tb3ZlcmxhcCxcbiAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIHNjb3BlIHVudGlsIHRoZSBlbGVtZW50IGlzIGNsb3NlZCAobWFrZXMgc3VyZSB0cmFuc2l0aW9uZW5kIGdldHMgdHJpZ2dlcmVkKVxuICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB9XG5cbiAgLy8gQ29uc2lkZXIgZWxlbWVudCAmIGNvbnRlbnQsIG5lc3RlZCBpbiBhbm90aGVyIGNvbnRlbnRcbiAgLm9mZi1jYW52YXMuaXMtb3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRoYXQgcmV2ZWFsIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1yZXZlYWwoXG4kcG9zaXRpb246IGxlZnQsXG4kemluZGV4OiAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsXG4kY29udGVudDogJG1haW5jb250ZW50LWNsYXNzLFxuJGJyZWFrcG9pbnQ6IHNtYWxsXG4pIHtcbiAgdHJhbnNmb3JtOiBub25lO1xuICB6LWluZGV4OiAkemluZGV4O1xuICB0cmFuc2l0aW9uOiBub25lO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXG4gIEBpZiBub3QgJG9mZmNhbnZhcy1maXhlZC1yZXZlYWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5jbG9zZS1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBDb25zaWRlciByZXZlYWxlZCBlbGVtZW50IGlzIG5lc3RlZCBpbiBjb250ZW50XG4gIC4jeyRtYWluY29udGVudC1jbGFzc30gJiB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgQGF0LXJvb3QgLiN7JGNvbnRlbnR9Lmhhcy1yZXZlYWwtI3skcG9zaXRpb259IHtcbiAgICBtYXJnaW4tI3skcG9zaXRpb259OiAtemYtZ2V0LWJwLXZhbCgkb2ZmY2FudmFzLXNpemVzLCAkYnJlYWtwb2ludCk7XG4gIH1cblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAocHJpb3IgdG8gdjYuNClcbiAgJiB+IC4jeyRjb250ZW50fSB7XG4gICAgbWFyZ2luLSN7JHBvc2l0aW9ufTogLXpmLWdldC1icC12YWwoJG9mZmNhbnZhcy1zaXplcywgJGJyZWFrcG9pbnQpO1xuICB9XG59XG5cbi8vLyBPdmVycmlkZXMgdGhlIG9mZi1jYW52YXMgc3R5bGVzXG5AbWl4aW4gaW4tY2FudmFzKCkge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiBhdXRvO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcblxuICAvLyBJbmNyZWFzZSBDU1Mgc3BlY2lmaWNpdHlcbiAgJi5wb3NpdGlvbi1sZWZ0LFxuICAmLnBvc2l0aW9uLXJpZ2h0LFxuICAmLnBvc2l0aW9uLXRvcCxcbiAgJi5wb3NpdGlvbi1ib3R0b20ge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmNsb3NlLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1vZmYtY2FudmFzIHtcbiAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNpY3M7XG5cbiAgLy8gT2ZmLWNhbnZhcyB3cmFwcGVyXG4gIC5vZmYtY2FudmFzLXdyYXBwZXIge1xuICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtd3JhcHBlcjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgY29udGFpbmVyXG4gIC5vZmYtY2FudmFzIHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWJhc2U7XG5cbiAgICAvLyBGb3JjZSBwb3NpdGlvbiBhYnNvbHV0ZSBmb3IgbmVzdGVkIG9mZi1jYW52YXMgYmVjYXVzZSBmaXhlZCBkb2Vzbid0IHdvcmsgZm9yIHB1c2ggdHJhbnNpdGlvbiB3aXRoaW4gdGhlIHRyYW5zZm9ybSBzY29wZS5cbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9ICYge1xuICAgICAgLy8gTk9URTogc2luY2Ugb3ZlcmxhcCB0cmFuc2l0aW9uIGlzIGN1cnJlbnRseSBmb3JjZWQgaWYgbmVzdGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgcG9zaXRpb24gYWJzb2x1dGUgdW50aWwgbmVzdGVkIHB1c2ggdHJhbnNpdGlvbiBpcyBzdXBwb3J0ZWQuXG4gICAgICAvLyBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBjb250YWluZXIgd2l0aCBhYnNvbHV0ZSBwb3NpdGlvblxuICAub2ZmLWNhbnZhcy1hYnNvbHV0ZSB7XG4gICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNlKCRmaXhlZDogZmFsc2UpO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBwb3NpdGlvbiBjbGFzc2VzXG4gIC5wb3NpdGlvbi1sZWZ0ICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihsZWZ0LCAgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi1yaWdodCAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihyaWdodCwgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi10b3AgICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbih0b3AsICAgIHZlcnRpY2FsKTsgfVxuICAucG9zaXRpb24tYm90dG9tICB7IEBpbmNsdWRlIG9mZi1jYW52YXMtcG9zaXRpb24oYm90dG9tLCB2ZXJ0aWNhbCk7IH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWNvbnRlbnQ7XG4gIH1cblxuICAvLyBSZXZlYWwgb2ZmLWNhbnZhcyBwYW5lbCBvbiBsYXJnZXIgc2NyZWVuc1xuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgIEBpZiAkbmFtZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKGxlZnQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tcmlnaHQucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwocmlnaHQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tdG9wLnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKHRvcCwgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4LCAkbWFpbmNvbnRlbnQtY2xhc3MsICRuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wb3NpdGlvbi1ib3R0b20ucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwoYm90dG9tLCAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsICRtYWluY29udGVudC1jbGFzcywgJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW92ZSBpbi1jYW52YXMgZm9yIGxhcmdlciBzY3JlZW5zXG4gIEBlYWNoICRuYW1lLCAkdmFsdWUgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgQGlmICRuYW1lICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgLm9mZi1jYW52YXMuaW4tY2FudmFzLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgaW4tY2FudmFzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tc3RpY2t5IHtcbiAgLnN0aWNreS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5zdGlja3kge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAuc3RpY2t5LmlzLXN0dWNrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogNTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuaXMtYXQtdG9wIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgLnN0aWNreS5pcy1hbmNob3JlZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGl0bGUtYmFyXG4vLy8vXG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgV2VpZ2h0XG4kdGl0bGViYXItdGV4dC1mb250LXdlaWdodDogYm9sZCAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIG1lbnUgaWNvbnMgaW5zaWRlIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgbWVudSBpY29ucyBpbnNpZGUgYSB0aXRsZSBiYXIgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1pY29uLWNvbG9yLWhvdmVyOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gdGhlIG1lbnUgaWNvbiBhbmQgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItaWNvbi1zcGFjaW5nOiAwLjI1cmVtICFkZWZhdWx0O1xuXG5AbWl4aW4gZm91bmRhdGlvbi10aXRsZS1iYXIge1xuICAudGl0bGUtYmFyIHtcbiAgICBwYWRkaW5nOiAkdGl0bGViYXItcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkdGl0bGViYXItYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRpdGxlYmFyLWNvbG9yO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgfVxuXG4gICAgLm1lbnUtaWNvbiB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkdGl0bGViYXItaWNvbi1zcGFjaW5nO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICR0aXRsZWJhci1pY29uLXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgLnRpdGxlLWJhci1sZWZ0LFxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG5cbiAgICAudGl0bGUtYmFyLXJpZ2h0IHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRpdGxlLWJhci1sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnRpdGxlLWJhci10aXRsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC13ZWlnaHQ6ICR0aXRsZWJhci10ZXh0LWZvbnQtd2VpZ2h0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdG9wLWJhclxuLy8vL1xuXG4vLy8gUGFkZGluZyBmb3IgdGhlIHRvcCBiYXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXBhZGRpbmc6IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0b3AgYmFyLiBUaGlzIGNvbG9yIGFsc28gY2FzY2FkZXMgdG8gbWVudXMgd2l0aGluIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBzdWJtZW51cyB3aXRoaW4gdGhlIHRvcCBiYXIuIFVzZWZ1bGwgaWYgJHRvcGJhci1iYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZDogJHRvcGJhci1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBmb3IgdGhlIHRvcCBiYXIgdGl0bGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwICFkZWZhdWx0O1xuXG4vLy8gTWF4aW11bSB3aWR0aCBvZiBgPGlucHV0PmAgZWxlbWVudHMgaW5zaWRlIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHRvcCBiYXIgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0b3BiYXItdW5zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSB0b3AgYmFyIGNvbnRhaW5lci5cbkBtaXhpbiB0b3AtYmFyLWNvbnRhaW5lciB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9XG5cbiAgcGFkZGluZzogJHRvcGJhci1wYWRkaW5nO1xuXG4gICYsXG4gIHVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4gIH1cblxuICAvLyBDaGVjayBpZiAkdG9wYmFyLWJhY2tncm91bmQgaXMgZGlmZmVybnQgZnJvbSAkdG9wYmFyLWJhY2tncm91bmQtc3VibWVudVxuICBAaWYgKCR0b3BiYXItYmFja2dyb3VuZCAhPSAkdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZCkge1xuICAgIHVsIHVsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RyYWluIHdpZHRoIG9mIGlucHV0cyBieSBkZWZhdWx0IHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gYXJyYW5nZVxuICBpbnB1dCB7XG4gICAgbWF4LXdpZHRoOiAkdG9wYmFyLWlucHV0LXdpZHRoO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAxcmVtO1xuICB9XG5cbiAgLy8gVGhlIGFib3ZlIHN0eWxlcyBzaG91bGRuJ3QgYXBwbHkgdG8gaW5wdXQgZ3JvdXAgZmllbGRzXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gIH1cblxuICBpbnB1dC5idXR0b24geyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4vLy8gTWFrZXMgc2VjdGlvbnMgb2YgYSB0b3AgYmFyIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuQG1peGluIHRvcC1iYXItc3RhY2tlZCB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgIC8vIFN1Yi1zZWN0aW9uc1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBTdWItc2VjdGlvbnNcbiAgICAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gVW5kb2VzIHRoZSBDU1MgYXBwbGllZCBieSB0aGUgYHRvcC1iYXItc3RhY2tlZCgpYCBtaXhpbi5cbkBtaXhpbiB0b3AtYmFyLXVuc3RhY2sge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcblxuICAgIC50b3AtYmFyLWxlZnQge1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRvcC1iYXIge1xuICAvLyBUb3AgYmFyIGNvbnRhaW5lclxuICAudG9wLWJhciB7XG4gICAgQGluY2x1ZGUgdG9wLWJhci1jb250YWluZXI7XG5cbiAgICAvLyBTdGFjayBvbiBzbWFsbCBzY3JlZW5zIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0b3BiYXItdW5zdGFjay1icmVha3BvaW50KSB7XG4gICAgICBAaW5jbHVkZSB0b3AtYmFyLXVuc3RhY2s7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2xhc3NlcyBmb3Igc3RhY2tpbmcgb24gZWFjaCBzY3JlZW4gc2l6ZSAoZGVmaW5lZCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzKVxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgJi5zdGFja2VkLWZvci0jeyRzaXplfSB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBkb3duKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3ViLXNlY3Rpb25zXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgbWFyZ2luOiAkdG9wYmFyLXRpdGxlLXNwYWNpbmc7XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgcGFkZGluZzogJHRvcGJhci10aXRsZS1zcGFjaW5nO1xuXG4gICAgICAubWVudS1pY29uIHtcbiAgICAgICAgYm90dG9tOiAycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG5cbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZmxvYXRcbi8vLy9cblxuQG1peGluIGZvdW5kYXRpb24tZmxvYXQtY2xhc3NlcyB7XG4gIC5mbG9hdC1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmZsb2F0LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5mbG9hdC1jZW50ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5jbGVhcmZpeCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH1cbn1cbiIsIkBmdW5jdGlvbiAtemYtZmxleC1qdXN0aWZ5KCR0ZXh0LWRpcmVjdGlvbil7XG4gICQtemYtZmxleC1qdXN0aWZ5OiAoXG4gICAgJ2xlZnQnOiBpZigkdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBmbGV4LWVuZCwgZmxleC1zdGFydCksXG4gICAgJ3JpZ2h0JzogaWYoJHRleHQtZGlyZWN0aW9uID09IHJ0bCwgZmxleC1zdGFydCwgZmxleC1lbmQpLFxuICAgICdjZW50ZXInOiBjZW50ZXIsXG4gICAgJ2p1c3RpZnknOiBzcGFjZS1iZXR3ZWVuLFxuICAgICdzcGFjZWQnOiBzcGFjZS1hcm91bmQsXG4gICk7XG5cbiAgQHJldHVybiAkLXpmLWZsZXgtanVzdGlmeTtcbn1cblxuXG4kLXpmLWZsZXgtYWxpZ246IChcbiAgJ3RvcCc6IGZsZXgtc3RhcnQsXG4gICdib3R0b20nOiBmbGV4LWVuZCxcbiAgJ21pZGRsZSc6IGNlbnRlcixcbiAgJ3N0cmV0Y2gnOiBzdHJldGNoLFxuKTtcblxuJC16Zi1mbGV4LWRpcmVjdGlvbjogKFxuICAncm93Jzogcm93LFxuICAncm93LXJldmVyc2UnOiByb3ctcmV2ZXJzZSxcbiAgJ2NvbHVtbic6IGNvbHVtbixcbiAgJ2NvbHVtbi1yZXZlcnNlJzogY29sdW1uLXJldmVyc2UsXG4pO1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGJ5IGFkZGluZyBgZGlzcGxheTogZmxleGAgdG8gdGhlIGVsZW1lbnQuXG5AbWl4aW4gZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbnMgdGhlIGl0ZW1zIHdpdGhpbiBhIGZsZXggY29udGFpbmVyLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeCBbbnVsbF0gLSBIb3Jpem9udGFsIGFsaWdubWVudCB0byB1c2UuIENhbiBiZSBgbGVmdGAsIGByaWdodGAsIGBjZW50ZXJgLCBganVzdGlmeWAsIG9yIGBzcGFjZWRgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgaG9yaXpvbnRhbCBhbGlnbm1lbnQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeSBbbnVsbF0gLSBWZXJ0aWNhbCBhbGlnbm1lbnQgdG8gdXNlLiBDYW4gYmUgYHRvcGAsIGBib3R0b21gLCBgbWlkZGxlYCwgb3IgYHN0cmV0Y2hgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgdmVydGljYWwgYWxpZ25tZW50LlxuQG1peGluIGZsZXgtYWxpZ24oJHg6IG51bGwsICR5OiBudWxsKSB7XG4gIEBpZiAkeCB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCQtemYtZmxleC1qdXN0aWZ5LCAkeCkge1xuICAgICAgJHg6IG1hcC1nZXQoJC16Zi1mbGV4LWp1c3RpZnksICR4KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHdhcm4gJ2ZsZXgtZ3JpZC1yb3ctYWxpZ24oKTogI3skeH0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGhvcml6b250YWwgYWxpZ25tZW50LiBVc2UgbGVmdCwgcmlnaHQsIGNlbnRlciwganVzdGlmeSwgb3Igc3BhY2VkLic7XG4gICAgfVxuICB9XG5cbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtcm93LWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB2ZXJ0aWNhbCBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAganVzdGlmeS1jb250ZW50OiAkeDtcbiAgYWxpZ24taXRlbXM6ICR5O1xufVxuXG4vLy8gVmVydGljYWxseSBhbGlnbiBhIHNpbmdsZSBjb2x1bW4gd2l0aGluIGEgZmxleCByb3cuIEFwcGx5IHRoaXMgbWl4aW4gdG8gYSBmbGV4IGNvbHVtbi5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHkgW251bGxdIC0gVmVydGljYWwgYWxpZ25tZW50IHRvIHVzZS4gQ2FuIGJlIGB0b3BgLCBgYm90dG9tYCwgYG1pZGRsZWAsIG9yIGBzdHJldGNoYC4gT3IsIHNldCBpdCB0byBgbnVsbGAgKHRoZSBkZWZhdWx0KSB0byBub3Qgc2V0IHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiBmbGV4LWFsaWduLXNlbGYoJHk6IG51bGwpIHtcbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtY29sdW1uLWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAgYWxpZ24tc2VsZjogJHk7XG59XG5cbi8vLyBDaGFuZ2VzIHRoZSBzb3VyY2Ugb3JkZXIgb2YgYSBmbGV4IGNoaWxkLiBDaGlsZHJlbiB3aXRoIGxvd2VyIG51bWJlcnMgYXBwZWFyIGZpcnN0IGluIHRoZSBsYXlvdXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcmRlciBbMF0gLSBPcmRlciBudW1iZXIgdG8gYXBwbHkuXG5AbWl4aW4gZmxleC1vcmRlcigkb3JkZXI6IDApIHtcbiAgb3JkZXI6ICRvcmRlcjtcbn1cblxuLy8vIENoYW5nZSBmbGV4LWRpcmVjdGlvblxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpcmVjdGlvbiBbcm93XSAtIEZsZXggZGlyZWN0aW9uIHRvIHVzZS4gQ2FuIGJlXG4vLy8gICAtIHJvdyAoZGVmYXVsdCk6IHNhbWUgYXMgdGV4dCBkaXJlY3Rpb25cbi8vLyAgIC0gcm93LXJldmVyc2U6IG9wcG9zaXRlIHRvIHRleHQgZGlyZWN0aW9uXG4vLy8gICAtIGNvbHVtbjogc2FtZSBhcyByb3cgYnV0IHRvcCB0byBib3R0b21cbi8vLyAgIC0gY29sdW1uLXJldmVyc2U6IHNhbWUgYXMgcm93LXJldmVyc2UgdG9wIHRvIGJvdHRvbVxuQG1peGluIGZsZXgtZGlyZWN0aW9uKCRkaXJlY3Rpb246IHJvdykge1xuICBmbGV4LWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBGbGV4Ym94IFV0aWxpdGllc1xuLy8vL1xuLy9cbi8vLyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgY291bnQgb2Ygc291cmNlIG9yZGVyaW5nYFxuLy8vIEB0eXBlIE51bWJlclxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2ICFkZWZhdWx0O1xuXG4vLy8gUXVpY2tseSBkaXNhYmxlL2VuYWJsZSBSZXNwb25zaXZlIGJyZWFrcG9pbnRzIGZvciBWYW5pbGxhIEZsZXggSGVscGVycy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzOiB0cnVlICFkZWZhdWx0O1xuXG5AbWl4aW4gZmxleC1oZWxwZXJzIHtcbiAgLmZsZXgtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBmbGV4O1xuICB9XG5cbiAgLmZsZXgtY2hpbGQtYXV0byB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gIH1cblxuICAuZmxleC1jaGlsZC1ncm93IHtcbiAgICBmbGV4OiAxIDAgYXV0bztcbiAgfVxuXG4gIC5mbGV4LWNoaWxkLXNocmluayB7XG4gICAgZmxleDogMCAxIGF1dG87XG4gIH1cblxuICBAZWFjaCAkZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtZGlyZWN0aW9uIHtcbiAgICAuZmxleC1kaXItI3skZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzKSB7XG4gICAgLy8gTG9vcCB0aHJvdWdoIFJlc3BvbnNpdmUgQnJlYWtwb2ludHNcbiAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jb250YWluZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jaGlsZC1hdXRvIHtcbiAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC4jeyRzaXplfS1mbGV4LWNoaWxkLWdyb3cge1xuICAgICAgICAgICAgZmxleDogMSAwIGF1dG87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLiN7JHNpemV9LWZsZXgtY2hpbGQtc2hyaW5rIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEBlYWNoICRkaXIsICRwcm9wIGluICQtemYtZmxleC1kaXJlY3Rpb24ge1xuICAgICAgICAgICAgLiN7JHNpemV9LWZsZXgtZGlyLSN7JGRpcn0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZsZXgtY2xhc3NlcyB7XG4gIC8vIEhvcml6b250YWwgYWxpZ25tZW50IHVzaW5nIGp1c3RpZnktY29udGVudFxuICBAZWFjaCAkaGRpciwgJHByb3AgaW4gJC16Zi1mbGV4LWp1c3RpZnkge1xuICAgIC5hbGlnbi0jeyRoZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR4OiAkaGRpcik7XG4gICAgfVxuICB9XG4gIFxuICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBTcGVjaWZpY2FsbHkgZm9yIFZlcnRpY2FsIE1lbnVcbiAgQGVhY2ggJGhkaXIsICRwcm9wIGluIG1hcC1yZW1vdmUoJC16Zi1mbGV4LWp1c3RpZnksICdqdXN0aWZ5JywgJ3NwYWNlZCcpIHtcbiAgICAuYWxpZ24tI3skaGRpcn0ge1xuICAgICAgJi52ZXJ0aWNhbCB7XG4gICAgICAgICYubWVudSA+IGxpID4gYSB7XG4gICAgICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogJGhkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWwgYWxpZ25tZW50IHVzaW5nIGFsaWduLWl0ZW1zIGFuZCBhbGlnbi1zZWxmXG4gIEBlYWNoICR2ZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtYWxpZ24ge1xuICAgIC5hbGlnbi0jeyR2ZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR5OiAkdmRpcik7XG4gICAgfVxuXG4gICAgLmFsaWduLXNlbGYtI3skdmRpcn0ge1xuICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbi1zZWxmKCR5OiAkdmRpcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VudHJhbCBhbGlnbm1lbnQgb2YgY29udGVudFxuICAuYWxpZ24tY2VudGVyLW1pZGRsZSB7XG4gICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogY2VudGVyLCAkeTogbWlkZGxlKTtcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAvLyBTb3VyY2Ugb3JkZXJpbmdcbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZmxleC1zb3VyY2Utb3JkZXJpbmctY291bnQge1xuICAgICAgLiN7JC16Zi1zaXplfS1vcmRlci0jeyRpfSB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtb3JkZXIoJGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbmlsbGEgRmxleGJveCBIZWxwZXJzXG4gIEBpbmNsdWRlIGZsZXgtaGVscGVycztcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3IoJHNpemUpIHtcbiAgJHNpemU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkc2l6ZSk7XG4gIC8vIE1heCB2YWx1ZSBpcyAwLjJweCB1bmRlciB0aGUgbmV4dCBicmVha3BvaW50ICgwLjAyIC8gMTYgPSAwLjAwMTI1KS5cbiAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMTMxM1xuICAkc2l6ZTogLXpmLWJwLXRvLWVtKCRzaXplKSAtIC4wMDEyNTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIGRvd24pIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgd2l0aGluIGEgY2VydGFpbiBicmVha3BvaW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3Itb25seSgkc2l6ZSkge1xuICAkbG93ZXItYm91bmQtc2l6ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKTtcbiAgJHVwcGVyLWJvdW5kLXNpemU6IC16Zi1tYXAtbmV4dCgkYnJlYWtwb2ludHMsICRzaXplKTtcblxuICAvLyBtb3JlIG9mdGVuIHRoYW4gbm90IHRoaXMgd2lsbCBiZSBjb3JyZWN0LCBqdXN0IG9uZSB0aW1lIHJvdW5kIHRoZSBsb29wIGl0IHdvbid0IHNvIHNldCBpbiBzY29wZSBoZXJlXG4gICRsb3dlci1ib3VuZDogLXpmLWJwLXRvLWVtKCRsb3dlci1ib3VuZC1zaXplKSAtIC4wMDEyNTtcbiAgLy8gdGVzdCBhY3R1YWwgbG93ZXItYm91bmQtc2l6ZSwgaWYgMCBzZXQgaXQgdG8gMGVtXG4gIEBpZiBzdHJpcC11bml0KCRsb3dlci1ib3VuZC1zaXplKSA9PSAwIHtcbiAgICAkbG93ZXItYm91bmQ6IC16Zi1icC10by1lbSgkbG93ZXItYm91bmQtc2l6ZSk7XG4gIH1cblxuICBAaWYgJHVwcGVyLWJvdW5kLXNpemUgPT0gbnVsbCB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGxvd2VyLWJvdW5kKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAkdXBwZXItYm91bmQ6IC16Zi1icC10by1lbSgkdXBwZXItYm91bmQtc2l6ZSk7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbG93ZXItYm91bmQpLCBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR1cHBlci1ib3VuZCkge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vLyBTaG93IGFuIGVsZW1lbnQgYnkgZGVmYXVsdCwgYW5kIGhpZGUgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gaGlkZS1mb3IoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLy8gU2hvdyBhbiBlbGVtZW50IGJ5IGRlZmF1bHQsIGFuZCBoaWRlIGl0IGFib3ZlIGEgY2VydGFpbiBzY3JlZW4gc2l6ZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzaXplIC0gQnJlYWtwb2ludCB0byB1c2UuICoqTXVzdCBiZSBhIGJyZWFrcG9pbnQgZGVmaW5lZCBpbiBgJGJyZWFrcG9pbnRzYC4qKlxuQG1peGluIGhpZGUtZm9yLW9ubHkoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBvbmx5KSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXZpc2liaWxpdHktY2xhc3NlcyB7XG4gIC8vIEJhc2ljIGhpZGluZyBjbGFzc2VzXG4gIC5oaWRlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaW52aXNpYmxlIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBSZXNwb25zaXZlIHZpc2liaWxpdHkgY2xhc3Nlc1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJHNpemUgIT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgLmhpZGUtZm9yLSN7JHNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgaGlkZS1mb3IoJHNpemUpO1xuICAgICAgfVxuXG4gICAgICAuc2hvdy1mb3ItI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBzaG93LWZvcigkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhpZGUtZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgaGlkZS1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuXG4gICAgLnNob3ctZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgc2hvdy1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2NyZWVuIHJlYWRlciB2aXNpYmlsaXR5IGNsYXNzZXNcbiAgLy8gTmVlZCBhIFwiaGlkZS1mb3Itc3JcIiBjbGFzcz8gQWRkIGFyaWEtaGlkZGVuPSd0cnVlJyB0byB0aGUgZWxlbWVudFxuICAuc2hvdy1mb3Itc3IsXG4gIC5zaG93LW9uLWZvY3VzIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZTtcbiAgfVxuXG4gIC8vIE9ubHkgZGlzcGxheSB0aGUgZWxlbWVudCB3aGVuIGl0J3MgZm9jdXNlZFxuICAuc2hvdy1vbi1mb2N1cyB7XG4gICAgJjphY3RpdmUsXG4gICAgJjpmb2N1cyB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZS1vZmY7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFuZHNjYXBlIGFuZCBwb3J0cmFpdCB2aXNpYmlsaXR5XG4gIC5zaG93LWZvci1sYW5kc2NhcGUsXG4gIC5oaWRlLWZvci1wb3J0cmFpdCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQocG9ydHJhaXQpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAuaGlkZS1mb3ItbGFuZHNjYXBlLFxuICAuc2hvdy1mb3ItcG9ydHJhaXQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChwb3J0cmFpdCkge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbiIsIiN0b2FzdC1jb250YWluZXIge1xuXG4gIHotaW5kZXg6IDEwMDAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuXG4gIHBhZGRpbmc6IDguNXZoIDAgMCAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICBkaXYudG9hc3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuXG4gICAgJi50b2FzdC10ZW1wbGF0ZSB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgc3Bhbi5tZXNzYWdlIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG5cbiAgICAgIHotaW5kZXg6IDEwMDAxO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYm94LXNoYWRvdzogMnB4IDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7XG5cbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MjYyNjI7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmI2YjZiO1xuICAgICAgcGFkZGluZzogLjNlbSAuNmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAvL29wYWNpdHk6IC45O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogLjQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufSIsIi5iYWNrZ3JvdW5kIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwMDAwO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU1LCA1NSwgNTUsIDAuNik7XG5cbiAgLm1vZGFsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHdpZHRoOiA4MCU7XG5cbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LWhlaWdodDogODAlO1xuICAgIG1heC13aWR0aDogbnRoKG50aCgkYnJlYWtwb2ludHMsIDQpLCAyKTtcblxuICAgICYuc21hbGwtbWFyZ2luIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICB3aWR0aDogOTUlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50cyB7XG4gICAgICAmLm1heC0je250aCgkc2l6ZSwgMSl9IHtcbiAgICAgICAgbWF4LXdpZHRoOiBudGgoJHNpemUsIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gICAgfVxuXG4gICAgLmNvbnRlbnQtY29udGFpbmVyIHtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAubG9hZGVyIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jbG9zZSB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIC8vY29sb3I6ICNhYWE7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIC8vY29sb3I6IGJsYWNrO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuXG4gICAgICAuYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwLjZlbSAwLjhlbTtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jaG9vc2UtZGlhbG9nLXZhbHVlLXJvd3tcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgcGFkZGluZy10b3A6IDAuNWVtO1xuICAgICAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXRvcDogMC4zcmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgfVxuXG4gICAgLy9BZGRpdGlvbmFsIGNsYXNzZXNcbiAgICAmLm5vLXRpdGxlIHtcbiAgICAgIC50aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iLCJAaW1wb3J0IFwibGliL2NvcmVTZXR0aW5nc1wiO1xuQGltcG9ydCBcImZvdW5kYXRpb25TZXR0aW5nc1wiO1xuXG4kZGVmYXVsdFRoZW1lVmFsdWVzOiAoXG4gICAgICAgIGNsYXNzOiBcIlwiLFxuICAvL3RoZW1lQ29sb3I6ICMzODM4MzgsXG4gICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgIG5hdkJhclRleHRDb2xvcjogaW5oZXJpdCxcbiAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNjYWNhY2EsXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYsXG4gICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgaGlnaGxpZ2h0OiAjRDU2QjUyLFxuICAgICAgICB0ZXh0Q29sb3JPbmU6ICNiY2JiYmIsXG4gICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICBjb2xvclR3bzogIzNCM0IzQixcbiAgICAgICAgY29sb3JUaHJlZTogI0ZGRixcbiAgICAgICAgYnV0dG9uQm9yZGVyOiBub25lLFxuICAgICAgICBidXR0b25Db2xvcjogd2hpdGUsXG4pO1xuXG4kdGhlbWVzOiAoXG4gICAgICAgIGJsYWNrOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmxhY2ssXG4gICAgICAgICAgLy90aGVtZUNvbG9yOiAjMDAwMDAwLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiBpbmhlcml0LFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6ICNENTZCNTIsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yT25lOiAjYmNiYmJiLFxuICAgICAgICAgICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICAgICAgICAgIGNvbG9yVHdvOiAjM0IzQjNCLFxuICAgICAgICAgICAgICAgIGNvbG9yVGhyZWU6ICNGRkYsXG4gICAgICAgICAgICAgICAgYnV0dG9uQm9yZGVyOiAxcHggc29saWQgYmxhY2ssXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29sb3I6IGJsYWNrLFxuICAgICAgICApLFxuICAgICAgICByZWQ6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiByZWQsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmMDAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM4NzAwMTUsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2I3MWMxYSxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmx1ZTooXG4gICAgICAgICAgICAgICAgY2xhc3M6IGJsdWUsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzJjNThhZSxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMxYTMwNjIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzY3M0FCNyxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZ3JlZW46KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBncmVlbixcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzAwMzYxMyxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBwaW5rOihcbiAgICAgICAgICAgICAgICBjbGFzczogcGluayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzcwMzc0YSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBkYXJrOiAoXG4gICAgICAgICAgICAgICAgY2xhc3M6IGRhcmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzM3MzczNyxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM5YjliOWIsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwXG4gICAgICAgIClcbik7XG5cbiR0aGVtZXM6IChcbiAgICAgICAgcmVkOihcbiAgICAgICAgICAgICAgICBjbGFzczogcmVkLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjAwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjODcwMDE1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNiNzFjMWEsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsdWU6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibHVlLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMyYzU4YWUsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMWEzMDYyLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICM2NzNBQjcsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGdyZWVuOihcbiAgICAgICAgICAgICAgICBjbGFzczogZ3JlZW4sXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMwMDM2MTMsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgcGluazooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHBpbmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM3MDM3NGEsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmxhY2s6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibGFjayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgIzAwMDAwMCxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzRlNGU0ZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjY2FjYWNhLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdDooXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIG5hdmJhckNvbG9yOiByZ2JhKDAsIDIwNSwgMCwgMC41KSwgLy9UT0RPIGJlbnV0emVuXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDAsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNmZWZlZmUsXG4gICAgICAgICksXG4gICAgICAgIGRhcms6IChcbiAgICAgICAgICAgICAgICBjbGFzczogZGFyayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzRiNGI0YixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDBcbiAgICAgICAgKVxuKTtcblxuJHRoZW1lczogbWFwLW1lcmdlKCR0aGVtZXMsIChkYXJrOiAoXG4gICAgICAgIGNsYXNzOiBkYXJrLFxuICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgIGxpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgIHRleHRDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpbmtCb3JkZXJCb3R0b206IDFweCBzb2xpZCAjZmZmZmZmLFxuICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMFxuKSkpO1xuXG5AZnVuY3Rpb24gcmVjdXJzaXZlLW1hcC1tZXJnZSgkcGFyZW50LW1hcCwgJGNoaWxkLW1hcCkge1xuICAkcmVzdWx0OiAkcGFyZW50LW1hcDtcbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRjaGlsZC1tYXAge1xuICAgIEBpZiAobm90IG1hcC1oYXMta2V5KCRyZXN1bHQsICRrZXkpKSBvciAodHlwZS1vZihtYXAtZ2V0KCRyZXN1bHQsICRrZXkpKSAhPSB0eXBlLW9mKCR2YWx1ZSkpIG9yIChub3QgKHR5cGUtb2YobWFwLWdldCgkcmVzdWx0LCAka2V5KSkgPT0gbWFwIGFuZCB0eXBlLW9mKCR2YWx1ZSkgPT0gbWFwKSkge1xuICAgICAgJHJlc3VsdDogbWFwLW1lcmdlKCRyZXN1bHQsICgka2V5OiAkdmFsdWUpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRyZXN1bHQ6IG1hcC1tZXJnZSgkcmVzdWx0LCAoJGtleTogbm9uLWRlc3RydWN0aXZlLW1hcC1tZXJnZShtYXAtZ2V0KCRyZXN1bHQsICRrZXkpLCAkdmFsdWUpKSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuQGVhY2ggJHRoZW1lLCAkdmFsdWVzIGluICR0aGVtZXMge1xuICAkdGhlbWVNYXAgOiByZWN1cnNpdmUtbWFwLW1lcmdlKCRkZWZhdWx0VGhlbWVWYWx1ZXMsICR2YWx1ZXMpO1xuICAkdGhlbWVzOiBtYXAtbWVyZ2UoJHRoZW1lcywgKCR0aGVtZTogJHRoZW1lTWFwKSlcbn1cblxuJGJyZWFrcG9pbnRzOiAoXG4gICAgICAgIHNtYWxsOiAwLFxuICAgICAgICBzbWVkaXVtOiA0MDBweCxcbiAgICAgICAgbWVkaXVtOiA2NDBweCxcbiAgICAgICAgbGFyZ2U6IDEwMjRweCxcbiAgICAgICAgeGxhcmdlOiAxMjAwcHgsXG4gICAgICAgIHh4bGFyZ2U6IDE0NDBweCxcbik7XG5cbiRtYXJnaW5zOiAoXG4gICAgICAgIHNtYWxsOiAwLjYyNXJlbSxcbiAgLy9zbWVkaXVtOiAwLjYyNXJlbSxcbiAgICAgICAgbWVkaXVtOiAwLjkzNzVyZW0sXG4gIC8vbGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94bGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94eGxhcmdlOiAwLjkzNzVyZW0sXG4pO1xuXG4kcm90YXRpb25EZWdyZWVzOiAoOTAgMTgwIDI3MCAzNjApO1xuJGFuaW1hdGlvbkR1cmF0aW9uOiAuMjVzO1xuXG4vLyRkZWdyZWVNYXRyaXg6IChcbi8vICAgICAgICAvLzA6bWF0cml4KDEsIDAsIDAsIDEsIDAsIDApLFxuLy8gICAgICAgIDA6cm90YXRlKDBkZWcpLFxuLy8gICAgICAgIDkwOm1hdHJpeCgwLCAxLCAtMSwgMCwgMCwgMCksXG4vLyAgICAgICAgMTgwOm1hdHJpeCgtMSwgMCwgMCwgLTEsIDAsIDApLFxuLy8gICAgICAgIDI3MDptYXRyaXgoMCwgLTEsIDEsIDAsIDAsIDApLFxuLy8gICAgICAgIC8vMzYwOm1hdHJpeCgwLjk5OTk5LCAwLCAwLCAwLjk5OTk5LCAwLCAwKSxcbi8vICAgICAgICAvLzQ1MDptYXRyaXgoMCwgMSwgLTEsIDAsIDAsIDApLFxuLy8gICAgICAgICAgMzYwOnJvdGF0ZSgzNjBkZWcpLFxuLy8gICAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuLy8pO1xuJGRlZ3JlZU1hdHJpeDogKFxuICAgICAgICAwOnJvdGF0ZSgwZGVnKSxcbiAgICAgICAgOTA6cm90YXRlKDkwZGVnKSxcbiAgICAgICAgMTgwOnJvdGF0ZSgxODBkZWcpLFxuICAgICAgICAyNzA6cm90YXRlKDI3MGRlZyksXG4gICAgICAgIDM2MDpyb3RhdGUoMzYwZGVnKSxcbiAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuKTsiLCIkaW52YWxpZEJveFNoYWRvdzogMCAwIDJweCAycHggI2ZmNjc3NjtcbiRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjogcmdiKDIzMCwgMjMwLCAyMzApO1xuJGlucHV0Qm9yZGVyQm90dG9tOiBzb2xpZCAxcHggIzYyNjI2MjtcblxubGFiZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sXG4gIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sXG4gIFt0eXBlPSdjb2xvciddLCB0ZXh0YXJlYSwgaW5wdXRbdHlwZT0ndGV4dCddLCBpbnB1dDpub3QoW3R5cGVdKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAyLjQzNzVyZW07XG4gICAgcGFkZGluZzogMC41cmVtO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogJGlucHV0Qm9yZGVyQm90dG9tO1xuICAgIG91dGxpbmU6IDA7XG4gICAgbWFyZ2luOiAwIDAgMTVweDtcblxuICAgICY6aW52YWxpZCB7XG4gICAgICBib3gtc2hhZG93OiAkaW52YWxpZEJveFNoYWRvdztcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1ib3R0b206ICRpbnB1dEJvcmRlckJvdHRvbTtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG5cbiAgICAgICY6aW52YWxpZCB7XG4gICAgICAgIGJveC1zaGFkb3c6ICRpbnZhbGlkQm94U2hhZG93O1xuICAgICAgfVxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzLCAmLm5vdEVtcHR5Om5vdCg6Zm9jdXMpLCAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIH4gc3BhbiB7XG4gICAgICAgIHRvcDogLTExcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgfiBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIGJvdHRvbTogMTBweDtcbiAgICAgIHRvcDogN3B4O1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcbiAgICAgIGNvbG9yOiAjNjI2MjYyO1xuICAgIH1cbiAgfVxuXG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IDEwcmVtO1xuICAgIC8vYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMzYsIDEzNiwgMTM2LCAwLjMxKTtcbiAgICAvL2JveC1zaGFkb3c6IDAgMCAzcHggMnB4IGhzbGEoMCwgMCUsIDUzJSwgLjMxKSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICB9XG5cbiAgW3R5cGU9XCJjaGVja2JveFwiXS5iZWZvcmUtdGV4dCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ+Zm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuJG5hdkNvbG9yQmxhY2s6ICMwMDAgIWRlZmF1bHQ7XG4kbmF2Qm9yZGVyQ29sb3JCbGFjazogIzdGN0Y3RiAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kQmxhY2s6ICNmZmYgIWRlZmF1bHQ7XG5cbiRuYXZDb2xvcldoaXRlOiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yV2hpdGU6ICMxZTFjMWMgIWRlZmF1bHQ7XG4kbmF2QmFja2dyb3VuZFdoaXRlOiAjMDAwICFkZWZhdWx0O1xuXG4kbmF2Q29sb3JEZWZhdWx0OiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yRGVmYXVsdDogIzFlMWMxYyAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kRGVmYXVsdDogIzAwMCAhZGVmYXVsdDtcblxuJG5hdkJhY2tncm91bmRXaXRoSW1hZ2U6IHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG5uYXYudG9wLWJhciB7XG4gIHotaW5kZXg6IDE7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmREZWZhdWx0O1xuICBjb2xvcjogJG5hdkNvbG9yRGVmYXVsdDtcbiAgc3Ryb2tlOiAkbmF2Q29sb3JEZWZhdWx0O1xuICBwYWRkaW5nOiAwO1xuXG4gICY6bm90KC53aXRoLWltYWdlKSB7XG5cbiAgICBAZWFjaCAkYnJlYWtwb2ludCwgJHZhbHVlIGluICRtYXJnaW5zIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0kdmFsdWU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLSR2YWx1ZTtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgKyAjezIqJHZhbHVlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgPiBzcGFuIHtcbiAgICA+IHNwYW4ge1xuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYmFjay1idXR0b24ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDAuNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgfVxuXG4gICAgICAmLmhpZGRlbiB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudG9wLWJhci10aXRsZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgIH1cblxuICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHotaW5kZXg6IDg5OTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgLm1lbnUtaWNvbiB7XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvckRlZmF1bHQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JEZWZhdWx0LCAwIDE0cHggMCAkbmF2Q29sb3JEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5tZW51LWljb24ge1xuICAgICAgICAvL25vaW5zcGVjdGlvbiBDc3NJbnZhbGlkUHJvcGVydHlWYWx1ZVxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLXdlYmtpdC1iYXNlbGluZS1taWRkbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIC8vcmlnaHQ6IC0xMDAlO1xuICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41cztcbiAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluLW91dDtcblxuICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkbmF2Qm9yZGVyQ29sb3JEZWZhdWx0O1xuICAgICAgICAvL3BhZGRpbmc6IDAuMnJlbTtcbiAgICAgICAgcGFkZGluZzogNC41cmVtIDEuNjVyZW0gMHJlbSAyLjc1cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgICAgICByaWdodDogLTEwMDAlOyAvL2bDvHIga2xlaW5lIEJpbGRzY2hpcm1lLCB0YXVjaHQgZXMgcmVjaHRzIHdpZWRlciBhdWYsIGZhbGxzIG51ciAxMDAlXG5cbiAgICAgICAgbGkge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4xNXJlbTtcblxuICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJi5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuXG4gICAgICAgICAgICB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICAgICAgdG9wOiBhdXRvO1xuXG4gICAgICAgICAgICAgID4gbGksID4gLmNsb3NlLWxpc3RlbmVyIHtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgID4gYTphZnRlciB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgICAgICBib3JkZXI6IDZweCBpbnNldDtcbiAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZmZmZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgcmlnaHQ6IDVweDtcbiAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAgICAgKyBzcGFuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgICAgICAgICAmLnNtZWRpdW0ge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAmLm1lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAgICYubGFyZ2Uge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYubmV2ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmFsd2F5cyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5uYXZiYXItbWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiBpbml0aWFsO1xuXG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIHotaW5kZXg6IDkwMDA7XG5cbiAgICAgIGEge1xuICAgICAgICBpbWcgKyBzcGFuIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuXG4gICAgICAgICYuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQge1xuICAgICAgICAgIHotaW5kZXg6IDkwMDE7XG4gICAgICAgIH1cblxuICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5uZXZlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubWVudSwgJi5tZW51IHtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgei1pbmRleDogMTAwO1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIC8vdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC42OHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOm5vdCguaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQpIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNjhyZW07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuaW1nIGEge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEuOHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkgPiB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICBtaW4td2lkdGg6IDA7XG5cbiAgICAgICAgICBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkub3BlbnMtcmlnaHQgPiBhIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgcmlnaHQ6IDAuMXJlbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc3VibWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgJi53aXRoLWltYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdpdGhJbWFnZTtcblxuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cywgYmFja2dyb3VuZCAwLjBzO1xuICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuXG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMsIGJhY2tncm91bmQgMC4wcztcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICAgIH1cblxuICAgIC5iYWNrZ3JvdW5kLWltZyB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLSR2YWx1ZTtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0kdmFsdWU7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtaW4td2lkdGg6IDIuNSokdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IHNwYW4ge1xuICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcblxuICAgICAgPiBzcGFuID4gc3BhbiB7XG4gICAgICAgIC8vQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIC8vICBAaW5jbHVkZSBicmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgICAgIC8vICAgIHBhZGRpbmctbGVmdDogJHZhbHVlO1xuICAgICAgICAvL3BhZGRpbmctcmlnaHQ6IDIqJHZhbHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIC8vfVxuICAgICAgICAvL31cbiAgICAgIH1cblxuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICB9XG5cbiAgICAgIC50b3AtYmFyLXRpdGxlIHtcblxuICAgICAgfVxuXG4gICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyLWNvbnRhaW5lciB7XG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgei1pbmRleDogOTEwMDtcbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG5cbiAgICAgIH1cblxuICAgICAgLm5hdmJhci1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5jb2xvci1ibGFjayB7XG4gICAgICBjb2xvcjogJG5hdkNvbG9yQmxhY2s7XG4gICAgICBzdHJva2U6ICRuYXZDb2xvckJsYWNrO1xuXG4gICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG5hdkJvcmRlckNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgICAubWVudS1pY29uOjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JCbGFjaywgMCAxNHB4IDAgJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgY29sb3I6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgc3Ryb2tlOiAkbmF2Q29sb3JXaGl0ZTtcblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICAgIC5oaWRkZW4tbWVudSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRuYXZCb3JkZXJDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgLm1lbnUtaWNvbjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgN3B4IDAgJG5hdkNvbG9yV2hpdGUsIDAgMTRweCAwICRuYXZDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5zdWJtZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnNvbGlkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kRGVmYXVsdDtcblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgLy9iYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICAgIH1cblxuICAgICAgICAudG9wLWJhci10aXRsZSB7XG5cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyIHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItbWVudS12aXNpYmxlIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuXG4gICAgICAgIH1cblxuICAgICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2Qm9yZGVyQ29sb3JCbGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLW1lbnUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5jb2xvci1ibGFjayB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kQmxhY2s7XG4gICAgICB9XG5cbiAgICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyNsb2dvIHtcbi8vICBtYXgtd2lkdGg6IDJyZW07XG4vLyAgdHJhbnNpdGlvbjogbm9uZTtcbi8vfVxuXG4ubWVudSwgLmRyb3Bkb3duLm1lbnUge1xuICBhIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtO1xuICB9XG59XG5cbi5kcm9wZG93bi5tZW51IC5hY2NvcmRpb24tbWVudSAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50Om5vdCguaGFzLXN1Ym1lbnUtdG9nZ2xlKSxcbiNuYXZiYXItbWVudS1oaWRkZW4gLmFjY29yZGlvbi1tZW51IC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4ge1xuICBhIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIHJpZ2h0OiAwLjFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwgYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLm1lbnUuaXMtYWNjb3JkaW9uLXN1Ym1lbnUge1xuICBtYXJnaW4tbGVmdDogMC43cmVtO1xufVxuXG4ubWVudSB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgdHJhbnNpdGlvbjogMC4yNXM7XG4gIC8vb3ZlcmZsb3cteTpoaWRkZW47XG59XG5cblxuI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUgYnV0dG9uIHtcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XG59XG5cbi5kcm9wZG93bi5tZW51ID4gbGkuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50IHtcbiAgLy8+IGE6YWZ0ZXIge1xuICAvLyAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAvL31cblxuICA+IHVsLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cblxuI25hdmJhci1mcmFnbWVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubG9nbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAubG9nby1pbWcge1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICAgIG1heC13aWR0aDogMi4zNXJlbTtcbiAgfVxufVxuIiwiJGJvcmRlci1jb2xvcjogI0U2RTZFNjtcblxuLnRhYi1mcmFnbWVudCB7XG4gIC50YWItbmFtZXMge1xuICAgIC50YWItYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIHBhZGRpbmc6IDAuM3JlbTtcblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWItY29udGVudCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xuICAgIC50YWItc2l0ZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnRhYi1idXR0b24tdGVtcGxhdGUsIC50YWItc2l0ZS10ZW1wbGF0ZXtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmJvcmRlci1ib3R0b20ge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICB9XG59IiwiLmFscGhhYmV0aWMtbGlzdHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1jb250YWluZXJ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1zaWRlYWxwaGFiZXR7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIC5hbHBoYWJldC1zY3JvbGwtdG8ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgaGVpZ2h0OiAzLjglO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pe1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi53aW5kb3ctY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2IxYjFiMTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjdXJzb3I6IGdyYWI7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMTByZW07XG4gIG1pbi1oZWlnaHQ6IDNyZW07XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB6LWluZGV4OiAxMDAwO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgJi5hY3RpdmUtd2luZG93e1xuICAgIHotaW5kZXg6IDExMDA7XG4gIH1cblxuICAud2luZG93LXJlc2l6ZSB7XG4gICAgJHJlc2l6ZVdpZHRoOiA0cHg7XG5cbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICYuZWRnZSB7XG4gICAgICB3aWR0aDogJHJlc2l6ZVdpZHRoO1xuICAgICAgaGVpZ2h0OiAkcmVzaXplV2lkdGg7XG5cbiAgICAgICYubnd7XG4gICAgICAgIGN1cnNvcjogbnctcmVzaXplO1xuICAgICAgfVxuICAgICAgJi5uZXtcbiAgICAgICAgY3Vyc29yOiBuZS1yZXNpemU7XG4gICAgICB9XG4gICAgICAmLnN3e1xuICAgICAgICBjdXJzb3I6IHN3LXJlc2l6ZTtcbiAgICAgIH1cbiAgICAgICYuc2V7XG4gICAgICAgIGN1cnNvcjogc2UtcmVzaXplO1xuICAgICAgfVxuICAgIH1cbiAgICAmLmJvdHRvbSwgJi50b3B7XG4gICAgICBjdXJzb3I6IG5zLXJlc2l6ZTtcbiAgICAgIGhlaWdodDogJHJlc2l6ZVdpZHRoO1xuICAgIH1cbiAgICAmLmxlZnQsICYucmlnaHR7XG4gICAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICAgIHdpZHRoOiAkcmVzaXplV2lkdGg7XG4gICAgfVxuICB9XG5cbiAgI3RpdGxlIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAvL21hcmdpbjogMCAwIDAuNXJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMnJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAvL2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYjZiNmI2O1xuICB9XG5cbiAgI3RpdGxlLWJ1dHRvbnMge1xuICAgIC50aXRsZS1idXR0b24ge1xuICAgICAgbWF4LWhlaWdodDogMXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgJi5tb3Zpbmcge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gIH1cblxuICAmLm1pbmltaXplZCB7XG4gICAgcGFkZGluZzogMC4ycmVtO1xuICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiBmaXQtY29udGVudDtcbiAgICAud2luZG93IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxle1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAjdGl0bGUtYnV0dG9ucyAudGl0bGUtYnV0dG9uLmhpZGUtbWluaW1pemVke1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmLm1heGltaXplZCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLW1heGltaXplZHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5wb3B1cCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLXBvcHVwe1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAud2luZG93IHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBjdXJzb3I6IGluaXRpYWw7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8vbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgLy9tYXgtd2lkdGg6IGZpdC1jb250ZW50O1xuICB9XG59IiwiQGltcG9ydCBcInRvYXN0XCI7XG5AaW1wb3J0IFwiZGlhbG9nXCI7XG5AaW1wb3J0IFwiZm9ybVwiO1xuQGltcG9ydCBcIm5hdmJhclwiO1xuQGltcG9ydCBcInN3aXBlRnJhZ21lbnRcIjtcbkBpbXBvcnQgXCJ0YWJiZWRGcmFnbWVudFwiO1xuQGltcG9ydCBcImFscGhhYmV0aWNMaXN0XCI7XG5AaW1wb3J0IFwiYWJzdHJhY3RXaW5kb3dcIjtcblxuLm1heC1oZWlnaHQtMTAwe1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm92ZXJmbG93LWhpZGRlbntcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn0iLCIkcmlnaHRzOiBbYWRtaW4sIGxvZ2dlZEluLCBsb2dnZWRPdXQsIG9ubGluZSwgb2ZmbGluZSwgZGVmYXVsdCBdO1xuXG5ib2R5IHtcbiAgQGVhY2ggJHJpZ2h0IGluICRyaWdodHMge1xuICAgICY6bm90KC5hY2Nlc3MtI3skcmlnaHR9KSAuYWNjZXNzLSN7JHJpZ2h0fSB7XG4gICAgICBkaXNwbGF5OiBub25lXG4gICAgfVxuICB9XG59XG4iLCIuc2hhcmUtaWNvbiB7XG4gIHdpZHRoOiAxLjVyZW07XG4gIG1heC13aWR0aDogMS41cmVtO1xuICBtYXJnaW46IDAuMXJlbTtcblxuICBzdmd7XG4gICAgd2lkdGg6IDEuNXJlbTtcbiAgICBtYXgtd2lkdGg6IDEuNXJlbTtcbiAgfVxufVxuIiwiLy9AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3VuZGF0aW9uXCI7XG5cbiosIDphZnRlciwgOmJlZm9yZSB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG5cbmh0bWwge1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAvL2ZvbnQtc2l6ZTogMThweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbn1cblxuLm1heC1oZWlnaHQge1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBiYWNrZ3JvdW5kOiAjZmVmZWZlO1xuICBjb2xvcjogIzBhMGEwYTtcbn1cblxuZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogI2Q4ZDhkOCBzb2xpZCAxcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRvcC1iYXIgLnRvcC1iYXItdGl0bGUgc3Ryb25nIHtcbiAgLy9tYXJnaW4tdG9wOiA3cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLyptYXJnaW4tbGVmdDogOHB4OyovXG59XG5cbm5hdi50b3AtYmFyIHtcblxuICBjb2xvcjogI0ZGRjtcbiAgLy9iYWNrZ3JvdW5kOiAjM0Y1MUI1O1xuICAvL2JhY2tncm91bmQ6IHJlZDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDJweCA5cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgNHB4IDJweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgcGFkZGluZzogMC42cmVtO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuYnV0dG9uLmJ1dHRvbiwgYS5idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIC8vYmFja2dyb3VuZC1jb2xvcjogcmVkO1xuICAmLmRpc2FibGVkLCAmLmRpc2FibGVkOmhvdmVyLCAmLmRpc2FibGVkOmZvY3VzIHtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6IHJlZDtcbiAgfVxuICAmOmZvY3VzLCAmOmhvdmVyIHtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICNlMDAwMDA7XG4gIH1cbn1cblxuLmZpbGwtbWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAmLnZlcnRpY2FsIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG4gIC5ncm93IHtcbiAgICBmbGV4OiAxO1xuICB9XG59XG5cbi5mbGV4LWNlbnRlciB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvL2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICBkaXNwbGF5OiBmbGV4O1xuICAvL21hcmdpbjogYXV0bztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgPiAqIHtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG59XG5cbi5tZW51IGEsIC5kcm9wZG93bi5tZW51IGEge1xuICBwYWRkaW5nOiAuNHJlbSAuNXJlbVxufVxuXG5zdmcgcGF0aCB7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuZGl2Lm1haW5Db250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGZsZXg6IDE7XG4gIG1hcmdpbjogMC41cmVtO1xuICA+IC5yb3csICNtYWluLWNvbnRlbnQsICNzaXRlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICAvL2xlZnQ6IC42MjVyZW07XG4gICAgcmlnaHQ6IDA7XG4gICAgLy9yaWdodDogLjYyNXJlbTtcbiAgfVxufVxuXG4uaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ucmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG5cbiNsb2dvLWltZyB7XG4gIG1heC1oZWlnaHQ6IDIuMnJlbTtcbn1cblxuYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuYS5oaWRkZW4tbGluayB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmxhYmVsIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYWxpZ24tcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLnZpZXctcGFuZWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubG9hZGVyIHtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICYuaW5saW5lIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHRvcDogaW5pdGlhbDtcbiAgICBwb3NpdGlvbjogaW5pdGlhbDtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IGluaXRpYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gICYuc21hbGwgI3NwaW5uZXIge1xuXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpO1xuICB9XG5cbiAgI3NwaW5uZXIge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgc3Ryb2tlOiAjYjcxYzFhO1xuICAgIHN0cm9rZS13aWR0aDogM3B4O1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJTtcbiAgICBhbmltYXRpb246IGxpbmUgMS42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlLCByb3RhdGUgMS42cyBsaW5lYXIgaW5maW5pdGU7XG4gIH1cbn1cblxuQGtleWZyYW1lcyByb3RhdGUge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDUwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGxpbmUge1xuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgODUuOTY0O1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogNjUuOTczLCAyMS45OTExO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDg1Ljk2NDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTY1Ljk3MztcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIH1cbn1cblxuI3ByaW50LWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uYWN0aW9uLWJ1dHRvbiB7XG4gIG1heC1oZWlnaHQ6IDEuN3JlbTtcbiAgbWFyZ2luLWxlZnQ6IDAuNHJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjRyZW07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICRob3ZlckNvbG9yRGFyaztcbiAgfVxufVxuXG4udmNlbnRlci1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgLy9kaXNwbGF5OiBmbGV4O1xuICAvL2p1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvL2ZsZXgtd3JhcDogd3JhcDtcblxuICAudmNlbnRlciB7XG4gICAgLy9kaXNwbGF5OiBmbGV4O1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG59XG5cbi5tYXgtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cblxuaW5wdXQsIGJ1dHRvbiB7XG4gIGxldHRlci1zcGFjaW5nOiAxcHggIWltcG9ydGFudDtcbn1cblxuLm5vLXBhZGRpbmcge1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbi5jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtZWRpYSBwcmludCB7XG4gIG5hdiwgLm1haW5Db250YWluZXIsIGZvb3RlciwgI3N0eWxlcyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gICNwcmludC1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbi5vdmVyZmxvdy15LWF1dG8ge1xuICBvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7XG59XG5cbi5yb3cubm8tYWZ0ZXI6YWZ0ZXIge1xuICBjb250ZW50OiBpbml0aWFsO1xufVxuXG4ubWFyZ2luLWJvdHRvbSB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSkge1xuICAgIG1hcmdpbi1ib3R0b206IDJyZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzcmVtO1xuICB9XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cmVtO1xuICB9XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoeGxhcmdlKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNXJlbTtcbiAgfVxufVxuXG4uZm9udC1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC43ZW07XG59XG5cbi5ib3JkZXItYm90dG9tIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRwcm90b3R5cGUtYm9yZGVyLWNvbG9yO1xufVxuXG4uYm9yZGVyLXJpZ2h0IHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG59XG5cbi5ib3JkZXItbGVmdCB7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG59XG5cbmltZy5sb2dvIHtcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDEuMXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5hbGlnbi1jZW50ZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbmhyLnNlcGFyYXRvciB7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuXG4uYnV0dG9uLWxpbmUge1xuICBkaXNwbGF5OiBmbGV4O1xuICAuYnV0dG9uIHtcbiAgICBmbGV4OiAxO1xuICAgIG1hcmdpbi1sZWZ0OiAxcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAxcHg7XG4gICAgcGFkZGluZzogMC41cmVtIDAuNzdyZW07XG4gIH1cbn1cblxuLnNtYWxsLXNtYWxsIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgZm9udC1zaXplOiBzbWFsbDtcbiAgfVxufVxuXG5zZWxlY3Qge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjNyZW07XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubm8tdHJhbnNpdGlvbiB7XG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbn1cblxuaW1nLmFjdGlvbi1pbWFnZSB7XG4gIG1heC1oZWlnaHQ6IDEuNHJlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5pbWcuYmFjay1idXR0b24ge1xuICBtYXgtaGVpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xufVxuXG4ubm8tbWFyZ2luLWJvdHRvbSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4iLCJcbiRob3ZlckNvbG9yOiAjZjJmMmYyO1xuJGhvdmVyQ29sb3JEYXJrOiAjZThlOGU4O1xuXG4kdGhlbWVzOiAoXG4gICAgICAgIHJlZDooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHJlZCxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjZmYwMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzg3MDAxNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjYjcxYzFhLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBibHVlOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmx1ZSxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMmM1OGFlLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzFhMzA2MixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjNjczQUI3LFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBncmVlbjooXG4gICAgICAgICAgICAgICAgY2xhc3M6IGdyZWVuLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMwMDgwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMDAzNjEzLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDgwMDAsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIHBpbms6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBwaW5rLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjY5YjQsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjNzAzNzRhLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNmZjY5YjQsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsYWNrOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmxhY2ssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMzNTM1MzUsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDAsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGRhcms6IChcbiAgICAgICAgICAgICAgICBjbGFzczogZGFyayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzRiNGI0YixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDBcbiAgICAgICAgKVxuKTsiLCIvL0BpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuLnNldHRpbmdzLWNvbnRhaW5lciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIHBhZGRpbmc6IDAuM3JlbTtcblxuICAjc2V0dGluZ3MtZnJhZ21lbnRzLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG4gICAgfVxuXG4gICAgI3NldHRpbmdzLWZyYWdtZW50cyB7XG4gICAgICA+ICoge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4uc3dpdGNoIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogaW5pdGlhbDtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICBmb250LXNpemU6IDAuNmVtO1xuICB9XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgZm9udC1zaXplOiAwLjdlbTtcbiAgfVxuXG4gIGlucHV0IHtcblxuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAmOmNoZWNrZWQgKyAuc2xpZGVyIHtcbiAgICAgIC8vYmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMztcbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuNWVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzICsgLnNsaWRlciB7XG4gICAgICAvL2JveC1zaGFkb3c6IDAgMCAxcHggIzIxOTZGMztcbiAgICB9XG4gIH1cblxuICAuc2xpZGVyIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogM2VtO1xuICAgIGhlaWdodDogMS41ZW07XG4gICAgYm9yZGVyLXJhZGl1czogMS41ZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYztcbiAgICB0cmFuc2l0aW9uOiAuNHM7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBtYXJnaW4tdG9wOiAwO1xuXG4gICAgJjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGhlaWdodDogMS4xZW07XG4gICAgICB3aWR0aDogMS4xZW07XG4gICAgICBsZWZ0OiAwLjE1ZW07XG4gICAgICBib3R0b206IDAuMTVlbTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgdHJhbnNpdGlvbjogLjRzO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIH1cbiAgfVxuXG4gIGltZywgc3ZnIHtcbiAgICB3aWR0aDogMS40ZW07XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xuXG4gICAgcGF0aCB7XG4gICAgICBzdHJva2UtY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICB9XG59XG5cbmxhYmVsIHtcbiAgZm9udC1zaXplOiAxZW0gIWltcG9ydGFudDtcblxufVxuXG4uc2V0dGluZy1yb3c6bm90KC5oaWRkZW4pIHtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAuNXJlbSAwLjRyZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgd2lkdGg6IDEwMCU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogcmdiYSgxOTUsIDE5NSwgMTk1LCAwLjEzKTtcblxuICA+ICoge1xuICAgIGZsZXg6IDE7XG4gIH1cblxuICBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5cbiIsIi56Zi1ncmVlbiB7XG4gIGNvbG9yOiAjNjhiNjA0XG59XG5cbi5jb2x1bW46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSwgLmNvbHVtbnM6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIGZsb2F0OiBsZWZ0XG59XG5cbmlucHV0W3R5cGU9Y2hlY2tCb3hdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiAxLjVyZW07XG4gIHdpZHRoOiAxMDAlXG59XG5cblt0eXBlPXN1Ym1pdF0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzlweDtcbiAgaGVpZ2h0OiAyLjQzNzVyZW07XG4gIHBhZGRpbmc6IDhweDtcbiAgcGFkZGluZzogLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjYWNhY2E7XG4gIG1hcmdpbjogMCAwIDE2cHg7XG4gIG1hcmdpbjogMCAwIDFyZW07XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICMwYTBhMGE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCBoc2xhKDAsIDAlLCA0JSwgLjEpO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IC41cywgYm9yZGVyLWNvbG9yIC4yNXMgZWFzZS1pbi1vdXQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lXG59XG5cbmZvcm0gdWwgbGkge1xuICBjb2xvcjogcmVkO1xuICBmb250LXNpemU6IDEyLjhweDtcbiAgZm9udC1zaXplOiAuOHJlbVxufVxuXG4uYnV0dG9uLWRyb3Bkb3duOmFmdGVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjMDAwIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6IC40ZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAuNGVtO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiAwO1xuICB3aWR0aDogMDtcbiAgcmlnaHQ6IDFlbVxufVxuXG4uYnV0dG9uLWRyb3Bkb3duIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy1yaWdodDogMmVtXG59XG5cbi5idXR0b24tZHJvcGRvd24ub3BlbjphZnRlciB7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzAwMDtcbiAgdG9wOiAwXG59XG5cbmEudWktZGF0ZXBpY2tlci1uZXh0LCBhLnVpLWRhdGVwaWNrZXItcHJldiB7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50XG59XG5cbmRpdi5jb250YWluZXIgYS5uYXZiYXItYnJhbmQgPiBpbWcge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbi1yaWdodDogNHB4XG59XG5cbnVsLm1lbnUucGxhaW4gbGkuYWN0aXZlIGEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkO1xuICBjb2xvcjogIzAwMFxufVxuXG51bC5tZW51LnBsYWluIGxpIGEge1xuICBjb2xvcjogIzAwMFxufVxuXG51bC5tZW51LnBsYWluIGxpIGE6aG92ZXIge1xuICBjb2xvcjogIzUyNTI1MlxufVxuXG51bC5zdWJtZW51IHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiY2JjYmM7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYmNiY2JjO1xuICBtYXJnaW4tbGVmdDogMTBweFxufVxuXG4jY29va2llLWNvbXBsaWFuY2Uge1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCAwO1xuICBwYWRkaW5nOiAwLjNyZW0gMDtcbiAgI2Nsb3NlLWNvb2tpZS1tc2cge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgIHBhZGRpbmc6IDAuNHJlbSAwLjhyZW07XG4gIH1cbn1cblxuLm1lbnUtY29udGFpbmVyIC5idXR0b25cbntcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAyMCB7XG4gICRmYWN0b3I6ICRpLzIwO1xuICAkdmFsdWU6IHBlcmNlbnRhZ2UoJGZhY3Rvcik7XG4gIC5oZWlnaHQtI3skZmFjdG9yKjEwMH0ge1xuICAgIGhlaWdodDogJHZhbHVlO1xuICB9XG4gIC5tYXgtaGVpZ2h0LSN7JGZhY3RvcioxMDB9IHtcbiAgICBtYXgtaGVpZ2h0OiAkdmFsdWU7XG4gIH1cbiAgLndpZHRoLSN7JGZhY3RvcioxMDB9IHtcbiAgICB3aWR0aDogJHZhbHVlO1xuICB9XG4gIC5tYXgtd2lkdGgtI3skZmFjdG9yKjEwMH0ge1xuICAgIG1heC13aWR0aDogJHZhbHVlO1xuICB9XG59XG5cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59IiwiKiB7XG4gIC8vdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuMjVzIGVhc2Utb3V0LCBjb2xvciAuMjVzIGVhc2Utb3V0O1xuICB0cmFuc2l0aW9uOiAuMjVzIGVhc2Utb3V0LCBjb2xvciAuMjVzIGVhc2Utb3V0O1xufVxuXG5AbWl4aW4gZGVmaW5lVGhlbWUoJHRoZW1lKSB7XG4gIGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKTtcbiAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpO1xuXG4gICNjb29raWUtY29tcGxpYW5jZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0VGhlbWVDb2xvcik7XG4gICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBuYXZCYXJUZXh0Q29sb3IpO1xuICAgIGEubGluayB7XG4gICAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0NvbG9yKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaWdodExpbmtDb2xvcik7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaWdodExpbmtIb3ZlckNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0hvdmVyQ29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBhLmxpbmsge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpbmtDb2xvcik7XG4gICAgYm9yZGVyLWJvdHRvbTogbWFwLWdldCgkdGhlbWUsIGxpbmtCb3JkZXJCb3R0b20pO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaW5rSG92ZXJDb2xvcik7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlua0hvdmVyQ29sb3IpO1xuICAgIH1cbiAgfVxuICAubG9hZGVyICNzcGlubmVyIHtcbiAgICBzdHJva2U6IG1hcC1nZXQoJHRoZW1lLCBzcGlubmVyQ29sb3IpO1xuICB9XG5cbiAgbmF2LnRvcC1iYXIge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbmF2QmFyVGV4dENvbG9yKTtcbiAgICBiYWNrZ3JvdW5kOiBtYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvcik7XG4gIH1cbiAgLnRvcC1iYXIge1xuICAgIHVsIHtcbiAgICAgIGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKSAhaW1wb3J0YW50O1xuICAgICAgYSB7XG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbmF2QmFyVGV4dENvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYnV0dG9uLmJ1dHRvbiwgYS5idXR0b24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICAmLmRpc2FibGVkLCAmLmRpc2FibGVkOmhvdmVyLCAmLmRpc2FibGVkOmZvY3VzLCAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICB9XG4gIH1cbiAgLnN3aXRjaCB7XG4gICAgaW5wdXQge1xuICAgICAgJjpjaGVja2VkICsgLnNsaWRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICAgIH1cbiAgICAgICY6Zm9jdXMgKyAuc2xpZGVyIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDFweCBtYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxhYmVsIHtcbiAgICBjb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gIH1cbiAgLmJhY2tncm91bmQgLm1vZGFsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuICB9XG5cbiAgc3ZnIHtcbiAgICAuZmlsbC1jb2xvciwgJi5maWxsLWNvbG9ye1xuICAgICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgIH1cbiAgICAuZmlsbC1iYWNrZ3JvdW5kLCAmLmZpbGwtYmFja2dyb3VuZHtcbiAgICAgIGZpbGw6ICNmZWZlZmU7XG4gICAgfVxuICB9XG5cbiAgLy9Gb3Jtc1xuICBsYWJlbCB7XG4gICAgW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sIFt0eXBlPSdjb2xvciddLCB0ZXh0YXJlYSwgaW5wdXRbdHlwZT10ZXh0XSwgaW5wdXQ6bm90KFt0eXBlXSkge1xuICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgICBiYWNrZ3JvdW5kOiAje21hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKX07XG4gICAgICBjb2xvcjoje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAgICAgfVxuICAgICAgJjpmb2N1cywgJi5ub3RFbXB0eTpub3QoOmZvY3VzKSB7XG4gICAgICAgIH4gc3BhbiB7XG4gICAgICAgICAgY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB+IHNwYW4ge1xuICAgICAgICBjb2xvcjogI3thZGp1c3RfY29sb3IoIG1hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpLCAkYWxwaGE6IC0wLjM1KX07XG4gICAgICB9XG4gICAgfVxuICAgIHRleHRhcmVhIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAzcHggMnB4IGhzbGEoMCwgMCUsIDUzJSwgLjMxKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICBpbnB1dC5ub3RFbXB0eTppbnZhbGlkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAje2FkanVzdF9jb2xvciggbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpLCAkYWxwaGE6IC0wLjM1KX07XG4gIH1cbn1cblxuYm9keSB7XG4gIEBlYWNoICR0aGVtZSwgJHZhbHVlcyBpbiAkdGhlbWVzIHtcbiAgICBAaWYgKG1hcC1nZXQoJHZhbHVlcywgY2xhc3MpID09IFwiXCIpIHtcbiAgICAgIEBpbmNsdWRlIGRlZmluZVRoZW1lKCR2YWx1ZXMpXG4gICAgfSBAZWxzZSB7XG4gICAgICAmLiN7bWFwLWdldCgkdmFsdWVzLCBjbGFzcyl9IHtcbiAgICAgICAgQGluY2x1ZGUgZGVmaW5lVGhlbWUoJHZhbHVlcylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIkBrZXlmcmFtZXMgdHV0b3JpYWxQb2ludGVyIHtcbiAgMCUge1xuICAgIHRvcDogMjUlO1xuICB9XG4gIDEwMCUge1xuICAgIHRvcDogNzUlO1xuICB9XG59XG5cbi50dXRvcmlhbC1ibGFua2V0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG5cbiAgei1pbmRleDogOTAwMTtcbiAgYmFja2dyb3VuZDogcmdiYSg1NSwgNTUsIDU1LCAwLjUxKTtcbn1cblxuLnR1dG9yaWFsIHtcbiAgLnR1dG9yaWFsLWJsYW5rZXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLnR1dG9yaWFsLXRleHQge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcblxuICAgICoge1xuICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuXG4gICYuc3RlcC0xIHtcbiAgICAjbGV2ZWwge1xuICAgICAgLnNlZ21lbnQtcm93IHtcbiAgICAgICAgcG9zaXRpb246IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5zZWdtZW50LXBhcmVudDpudGgtY2hpbGQoMyksIC5zZWdtZW50LXBhcmVudDpudGgtY2hpbGQoMykucm90YXRpbmcge1xuICAgICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtMSB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgfVxuXG4gICYuc3RlcC0yIHtcbiAgICAjbGV2ZWwge1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC50dXRvcmlhbC10ZXh0IC5zdGVwLTIge1xuICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gIH1cblxuICAmLnN0ZXAtMyB7XG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtMyB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC50b3AtYmFyIHtcbiAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuaGVscC1hY3Rpb24ge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAvL3otaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgYm94LXNoYWRvdzogMCAwIDEwcHggNXB4ICNmZmY7XG4gICAgfVxuICB9XG5cbiAgJi5zdGVwLTQge1xuICAgIC50dXRvcmlhbC10ZXh0IC5zdGVwLTQge1xuICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAjbGV2ZWwge1xuICAgICAgLnNlZ21lbnQtcm93IHtcbiAgICAgICAgcG9zaXRpb246IGluaGVyaXQ7XG5cbiAgICAgICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAuc2VnbWVudC1wYXJlbnQubGF5ZXItMiwgPiAuc2VnbWVudC1wYXJlbnQubGF5ZXItMi5yb3RhdGluZyB7XG4gICAgICAgICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgICAgICN0dXRvcmlhbC1wb2ludGVyIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDAuNmVtO1xuICAgICAgICAgICAgICBoZWlnaHQ6IDAuNmVtO1xuICAgICAgICAgICAgICAvL2JhY2tncm91bmQ6IHJlZDtcblxuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgICAgICAgICAgICAgbGVmdDogNzUlO1xuICAgICAgICAgICAgICAvL3JpZ2h0OiA1MCU7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgdG9wOiA3NSU7XG4gICAgICAgICAgICAgIC8vYm90dG9tOiA1MCU7XG4gICAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogdHV0b3JpYWxQb2ludGVyIDJzIGluZmluaXRlO1xuICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuI3R1dG9yaWFsLXNpdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAjdHV0b3JpYWwtMSwgI3R1dG9yaWFsLTIsICN0dXRvcmlhbC0ze1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAwLjdyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICB9XG5cbiAgI3R1dG9yaWFsLTIgLmhlbHAtYWN0aW9ue1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDAuM3JlbTtcbiAgfVxuICAjdHV0b3JpYWwtMyAudHV0b3JpYWwtd3JhcHBlcntcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgI3R1dG9yaWFsLXBvaW50ZXIge1xuICAgICAgd2lkdGg6IDAuNmVtO1xuICAgICAgaGVpZ2h0OiAwLjZlbTtcblxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gICAgICBsZWZ0OiA3NSU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDc1JTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblxuICAgICAgYW5pbWF0aW9uOiB0dXRvcmlhbFBvaW50ZXIgMnMgaW5maW5pdGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIkBtaXhpbiBhZGRUaGVtZURlZmluaXRpb24oJHRoZW1lKSB7XG4gICN0dXRvcmlhbC1wb2ludGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAje21hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKX07XG4gIH1cblxuICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lciB7XG4gICAgJi5pbi1tYWluLW1lbnUge1xuICAgICAgYmFja2dyb3VuZDogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9O1xuICAgICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgICB9XG4gIH1cbiAgLnNlZ21lbnQuc2VnbWVudC1wYXJlbnQge1xuICAgIGJvcmRlci1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yMil9O1xuXG4gICAgJi5sYXllci0yIHtcbiAgICAgIGJvcmRlci1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgfVxuICB9XG5cbiAgI3NpdGUgPiA6bm90KC53b24pIC5zZWdtZW50LmxvY2tlZCB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGJvcmRlci1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgbGlnaHRUaGVtZUNvbG9yKX07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvcil9ICFpbXBvcnRhbnQ7XG5cbiAgICA+IC5jaGlsZC1jb250YWluZXIgPiAuc2VnbWVudC1sZWFmIHtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgICAgLy9ib3JkZXItY29sb3I6ICAje21hcC1nZXQoJHRoZW1lLCBsaWdodFRoZW1lQ29sb3IpfTtcbiAgICAgIC8vYmFja2dyb3VuZC1jb2xvcjoje21hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKX0gIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbiAgLnNlZ21lbnQ6bm90KC5zZWdtZW50LXJvdyk6bm90KC5zZWdtZW50LXRyaWFuZ2xlKSB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTs7XG5cbiAgICAgICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgICAgICA+IC5zZWdtZW50IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTs7XG5cbiAgICAgICAgICAgIEBmb3IgJGogZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICAgICAgICAgJGFuaW1hdGlvbk5hbWU6ICgobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRqKS0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSszNjApJTM2MCk7XG4gICAgICAgICAgICAgIEBpZiAkYW5pbWF0aW9uTmFtZT09MCB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGlvbk5hbWU6IDM2MDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICYucm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRqKX0ge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLy5zZXR0aW5nLXJvd3tcbiAgLy8gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAgI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gIC8vICAmOm5vdCguaGlkZGVuKTpmaXJzdC1jaGlsZHtcbiAgLy8gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgLy8gIH1cbiAgLy99XG59XG5cbmJvZHkge1xuICBAZWFjaCAkdGhlbWUsICR2YWx1ZXMgaW4gJHRoZW1lcyB7XG4gICAgQGlmIChtYXAtZ2V0KCR2YWx1ZXMsIGNsYXNzKSA9PSAnJykge1xuICAgICAgQGluY2x1ZGUgYWRkVGhlbWVEZWZpbml0aW9uKCR2YWx1ZXMpXG4gICAgfSBAZWxzZSB7XG4gICAgICAmLiN7bWFwLWdldCgkdmFsdWVzLCBjbGFzcyl9IHtcbiAgICAgICAgQGluY2x1ZGUgYWRkVGhlbWVEZWZpbml0aW9uKCR2YWx1ZXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kZWZhdWx0IHtcbiAgICAvL2JhY2tncm91bmQ6ICMwNzA3NmQ7XG4gICAgYmFja2dyb3VuZDogIzBmMGY0OTtcbiAgICAvL2JhY2tncm91bmQ6ICMxYzFjNDQ7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgICoge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgICAvL2JhY2tncm91bmQ6IHVybCgnLi4vaW1nL2JhY2tncm91bmQucG5nJyk7XG4gICAgLy9iYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIC8vYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuXG4gICAgI2xldmVsLW51bWJlci1jb250YWluZXIge1xuICAgICAgJi5pbi1tYWluLW1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnNlZ21lbnQuc2VnbWVudC1wYXJlbnQge1xuICAgICAgJjpub3QoLmxheWVyLTIpIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDA1ZDA3O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwOSwgMjU1LCAxMjcsIDAuMikgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLy9iYWNrZ3JvdW5kOiByZ2JhKDkwLCAxNjQsIDYxLCAxKSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgICNzaXRlID4gOm5vdCgud29uKSAuc2VnbWVudC5sb2NrZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQyZmY0YSAhaW1wb3J0YW50O1xuXG4gICAgICA+IC5jaGlsZC1jb250YWluZXIgPiAuc2VnbWVudC1sZWFmIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRhcmsge1xuICAgIC5zd2l0Y2gge1xuICAgICAgaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IGJsYWNrO1xuICAgICAgfVxuXG4gICAgICAuc2xpZGVyIHtcbiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggd2hpdGU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkLmxheWVyLTIge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNTY1NjU2O1xuICAgIH1cblxuICAgIC5tb2RhbCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgfVxuICB9XG5cbiAgJi5ibGFjayB7XG4gICAgI3NpdGUgPiA6bm90KC53b24pIC5zZWdtZW50LmxvY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWQ5ZDlkICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6ICM2ZTZlNmUgIWltcG9ydGFudDtcblxuICAgICAgPiAuY2hpbGQtY29udGFpbmVyID4gLnNlZ21lbnQtbGVhZiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI2xvZ28ge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JleTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB9XG4gIH1cblxuICAvLy5zZXR0aW5nLXJvdzpub3QoLmhpZGRlbikge1xuICAvLyAgbGluZS1oZWlnaHQ6IDE7XG4gIC8vICBwYWRkaW5nLXRvcDogMC41ZW07XG4gIC8vICBwYWRkaW5nLWJvdHRvbTogMC41ZW07XG4gIC8vICB3aWR0aDogMTAwJTtcbiAgLy8gIGN1cnNvcjogcG9pbnRlcjtcbiAgLy8gIGJhY2tncm91bmQ6IHJnYmEoMTk1LCAxOTUsIDE5NSwgMC4xMyk7XG4gIC8vICAvL2Rpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLy99XG59XG4iLCIvL0BpbXBvcnQgXCJsaWIvX3JvdGF0ZS5zY3NzXCI7XG5AaW1wb3J0IFwibGliL19zaGFyZS5zY3NzXCI7XG4vL0BpbXBvcnQgXCJsaWIvX3RhYnMuc2Nzc1wiO1xuQGltcG9ydCBcImxpYi9fY29yZS5zY3NzXCI7XG4vL0BpbXBvcnQgXCJsaWIvX2ZsYXNoTWVzc2VuZ2VyLnNjc3NcIjtcbi8vQGltcG9ydCBcImxpYi9fZnJhbWV3b3JrLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3NldHRpbmdzU2l0ZS5zY3NzXCI7XG5AaW1wb3J0IFwibGliL19zdHlsZS5zY3NzXCI7XG5AaW1wb3J0IFwibGliL190aGVtZS5zY3NzXCI7XG5AaW1wb3J0IFwidHV0b3JpYWxcIjtcbkBpbXBvcnQgXCJ3b3Jkcm90YXRvclRoZW1lXCI7XG5cblxuJHRleHQtc2hhZG93OiAwIDAuMnJlbSAwLjJyZW0gIzQ2NDY0NiwgMC42cmVtIDAuOHJlbSAwLjRyZW0gIzAwMDAwMDkwO1xuXG4ubm8tdHJhbnNpdGlvbntcbiAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAqIHtcbiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy9BY3Rpb25CYXJcbm5hdi50b3AtYmFyLnRpdGxlLWJhciB7XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjZyZW0gMDtcbn1cblxuI2xvZ28ge1xuICBtYXgtd2lkdGg6IDJyZW07XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbiNhY3Rpb24tYmFyIC50b3AtYmFyLXJpZ2h0IC5tZW51IC5hY3Rpb24uaW1nIGEge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICBpbWcge1xuICAgIG1heC1oZWlnaHQ6IDEuOHJlbTtcbiAgfVxufVxuXG4ubWVudSwgLmRyb3Bkb3duLm1lbnUge1xuICBhIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtO1xuICB9XG59XG5cbi5yZWxhdGl2ZS1sZXZlbC1udW1iZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgI2xldmVsLW51bWJlci1jb250YWluZXIge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB9XG59XG5cbi8vYm9keS5kZWZhdWx0IC53b24gLmxldmVsLWNvdW50ZXIge1xuLy8gIHRyYW5zaXRpb24tZHVyYXRpb246IDFzO1xuLy8gIGJhY2tncm91bmQ6ICMwNmJkMDY7XG4vLyAgYm9yZGVyLWNvbG9yOiAjYzEwMDAwO1xuLy8gIC8vPiBhIHtcbi8vICAvLyAgY29sb3I6IGJsYWNrO1xuLy8gIC8vfVxuLy99XG5cbiNsZXZlbC1udW1iZXItY29udGFpbmVyLCAubGV2ZWwtY291bnRlciB7XG4gIHotaW5kZXg6IDE7XG4gIC8vdHJhbnNpdGlvbjogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpO1xuICBib3JkZXI6IDNweCBzb2xpZCB3aGl0ZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAvL3Zpc2liaWxpdHk6IGhpZGRlbjtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcblxuXG4gIGhlaWdodDogNDBweDtcbiAgd2lkdGg6IDQwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAmLmxldmVsLWNvdW50ZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50O1xuICAgIGZvbnQtc2l6ZTogMS44cmVtO1xuXG4gICAgJi5udW0tMTAge1xuICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgfVxuXG4gICAgJi5udW0tMTAwIHtcbiAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgIH1cblxuICAgICYubnVtLTEwMDAge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgIH1cbiAgfVxuXG4gICYuaW4tbWFpbi1tZW51IHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItY29sb3I6IGJsYWNrO1xuXG4gICAgaGVpZ2h0OiAxZW07XG4gICAgd2lkdGg6IDFlbTtcbiAgICBtaW4taGVpZ2h0OiAxZW07XG4gICAgbWluLXdpZHRoOiAxZW07XG4gICAgbWF4LWhlaWdodDogMWVtO1xuICAgIG1heC13aWR0aDogMWVtO1xuICB9XG5cbiAgYSB7XG4gICAgd2lkdGg6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgfVxuXG4gICNsZXZlbC1udW1iZXIsIGEge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxufVxuXG4kY29pblRvd2VyRGltZW5zaW9uOiAyOHB4O1xuLy9jb2luIGVsZW1lbnRcbi5jb2luLWNvdW50ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAxLjZyZW07XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgfVxuXG4gIDphZnRlciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9pbWcvY29pblRvd2VyLnBuZycpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogJGNvaW5Ub3dlckRpbWVuc2lvbiAkY29pblRvd2VyRGltZW5zaW9uO1xuICAgIHdpZHRoOiAkY29pblRvd2VyRGltZW5zaW9uO1xuICAgIGhlaWdodDogJGNvaW5Ub3dlckRpbWVuc2lvbjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxufVxuXG4jY29pbi1jb250YWluZXIge1xuICBsaW5lLWhlaWdodDogMTtcblxuICAuY29pbiB7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICBtYXgtd2lkdGg6IDIwcHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSkge1xuICAgICAgbWF4LXdpZHRoOiAyNXB4O1xuICAgIH1cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgbWF4LXdpZHRoOiAzMHB4O1xuICAgIH1cbiAgfVxufVxuXG4vL1NlZ21lbnRzXG5cbkBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgJHN0YXJ0RGVncmVlOiAoKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkrMjcwKSUzNjApO1xuXG4gIEBrZXlmcmFtZXMgcm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX0ge1xuICAgIDAlIHtcbiAgICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3skc3RhcnREZWdyZWV9ZGVnKTtcbiAgICAgIHRyYW5zZm9ybTogI3ttYXAtZ2V0KCRkZWdyZWVNYXRyaXgsICRzdGFydERlZ3JlZSl9O1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKX07XG4gICAgfVxuICB9XG4gIEBrZXlmcmFtZXMgcm90YXRlLXJldmVyc2UtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyhudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKSs5MH1kZWcpO1xuICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSs5MCl9XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyRzdGFydERlZ3JlZSs5MH1kZWcpO1xuICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgJHN0YXJ0RGVncmVlKzkwKX07XG4gICAgfVxuICB9XG59XG5cbi5zZWdtZW50Om5vdCguc2VnbWVudC1yb3cpOm5vdCguc2VnbWVudC10cmlhbmdsZSkge1xuICAmLnJvdGF0aW5nIHtcbiAgICB6LWluZGV4OiAxMCAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9O1xuICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRhbmltYXRpb25EdXJhdGlvbjtcbiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0jezQ1MC0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX07XG4gICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRhbmltYXRpb25EdXJhdGlvbjtcbiAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcblxuICAgICAgICAgICAgQGZvciAkaiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKSs5MDtcbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0jeyRhbmltYXRpb25OYW1lfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucmV2ZXJzZSB7XG4gICAgICAgICAgLy9hbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3sobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSklMzYwKzkwfTtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfTtcblxuICAgICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgICA+IC5zZWdtZW50IHtcbiAgICAgICAgICAgICAgLy9hbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3szNjAtIChudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpJTM2MCl9O1xuICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3soNTQwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKSUzNjArOTB9O1xuICAgICAgICAgICAgICBAZm9yICRqIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAgICAgICAgICAgJGFuaW1hdGlvbk5hbWU6ICgobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRqKS0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSszNjApJTM2MCkrOTA7XG4gICAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3soJGFuaW1hdGlvbk5hbWUrOTApJTM2MCs5MH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJjpub3QoLnJvdGF0aW5nKSB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogI3ttYXAtZ2V0KCRkZWdyZWVNYXRyaXgsIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpfTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjezM2MC0gbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX1kZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgMzYwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKX07XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICAgICAgQGZvciAkaiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKTtcbiAgICAgICAgICAgICAgQGlmICRhbmltYXRpb25OYW1lPT0wIHtcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogMzYwO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyRhbmltYXRpb25OYW1lfWRlZyk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgJGFuaW1hdGlvbk5hbWUpfTtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICAgICAgICAgICAmLnJvdGF0aW5nIHtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtI3skYW5pbWF0aW9uTmFtZX07XG4gICAgICAgICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRhbmltYXRpb25EdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgICAgICAgICAgICAmLnJldmVyc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLXJldmVyc2UtI3skYW5pbWF0aW9uTmFtZX07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiNsZXZlbCB7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0cmFuc2l0aW9uOiBub25lO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgLy93aWR0aDogMTAwJTtcblxuICAqIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbn1cblxuLnNlZ21lbnQge1xuXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdoaXRlLXNwYWNlOiBpbml0aWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB6LWluZGV4OiAxO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogMDtcblxuICAmLnNlZ21lbnQtcm93IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJi5zZWdtZW50LWNvbHVtbiB7XG4gICAgcGFkZGluZy10b3A6IDRweDtcblxuICAgID4gLmNoaWxkLWNvbnRhaW5lciA+IC5zZWdtZW50IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJi5zZWdtZW50LWxlYWYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiAxZW07XG4gICAgcGFkZGluZzogMC44ZW07XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZy10b3A6IDEwMCU7XG4gICAgfVxuXG4gICAgLmxlYWYtZWxlbWVudCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG5cbiAgICAgIC8vdGV4dC1zaGFkb3c6ICR0ZXh0LXNoYWRvdztcblxuICAgIH1cbiAgfVxuXG4gICYuc2VnbWVudC1wYXJlbnQge1xuICAgIGJvcmRlcjogc29saWQgMXB4ICNhOWE5YTk7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHBhZGRpbmc6IDFweDtcblxuICAgICYubGF5ZXItMiB7XG4gICAgICBib3JkZXI6IHNvbGlkIDNweCAjMDAwMDAwO1xuICAgIH1cbiAgfVxuXG4gICYuc2VnbWVudC10cmlhbmdsZSB7XG4gICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgID4gLnNlZ21lbnQtcGFyZW50IHtcbiAgICAgICAgLy9ib3JkZXI6IHNvbGlkIDNweCAjMDAwMDAwO1xuICAgICAgICAvL3Bvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy9Xb24tc2NyZWVuXG4jc2l0ZSA+IDpub3QoLndvbikge1xuICAuc2hvdy13aGVuLXdvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4ubGV2ZWwtY29udGFpbmVyIHtcbiAgLy9mbGV4OiAxO1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuXG4ud29uIHtcbiAgLmxldmVsLWNvbnRhaW5lciB7XG4gICAgLy9oZWlnaHQ6IDYwJTtcbiAgfVxuXG4gIC5zaG93LXdoZW4td29uIHtcbiAgICAvL3Zpc2liaWxpdHk6IGluaXRpYWw7XG4gIH1cblxuICAuc2hvdy13aGlsZS1wbGF5aW5nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgI3dvbi10ZXh0IHtcbiAgICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xuICB9XG5cbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuI2NvbnRpbnVlLWJ1dHRvbiB7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAuNmVtO1xuICB9XG59XG5cbiNwbGF5LWJ1dHRvbiB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuXG4jaGVscC1idXR0b24ge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAuNGVtIDAuNGVtO1xuICBtYXgtd2lkdGg6IDNlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtIGRvd24pIHtcbiAgICBwYWRkaW5nOiAwLjJlbSAwLjJlbTtcbiAgICBtYXgtd2lkdGg6IDJlbTtcbiAgfVxufVxuXG4ubGluZS1oZWlnaHQtMSB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG5ib2R5IHtcbiAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbiNzaXRlIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbmRpdi5tYWluQ29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuXG59XG5cbi8vI2ltZy1zb3VuZDpiZWZvcmUge1xuLy8gIGNvbnRlbnQ6IFwiXCI7XG4vLyAgbWF4LXdpZHRoOiAxLjRlbTtcbi8vICBiYWNrZ3JvdW5kOiB1cmwoJy4uL2ltZy9zcGVha2VyLnN2ZycpXG4vL31cblxuLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuI3NoYXJlLWJ1dHRvbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgc3ZnIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWF4LXdpZHRoOiAxLjVyZW07XG4gIH1cbn1cblxuc3ZnIHtcbiAgY29sb3I6IGJsYWNrO1xuXG4gIC5maWxsLWJhY2tncm91bmQge1xuICAgIGZpbGw6IHdoaXRlO1xuICB9XG59XG4iLCJAa2V5ZnJhbWVzIGp1bXAtYW5pbWF0aW9uIHtcbiAgMCUge1xuICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3skc3RhcnREZWdyZWV9ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgyKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5qdW1wLWFuaW1hdGlvbiB7XG4gIGFuaW1hdGlvbi1uYW1lOiBqdW1wLWFuaW1hdGlvbjtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBub25lO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG59XG5cbiRkZWc6IDEwZGVnO1xuXG5Aa2V5ZnJhbWVzIHNoYWtlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDMzJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLSRkZWcpO1xuICB9XG4gIDY2JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoJGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbn1cblxuLnNoYWtlIC5sZWFmLWVsZW1lbnQge1xuXG4gIC8qIFN0YXJ0IHRoZSBzaGFrZSBhbmltYXRpb24gYW5kIG1ha2UgdGhlIGFuaW1hdGlvbiBsYXN0IGZvciAwLjUgc2Vjb25kcyAqL1xuICBhbmltYXRpb246IHNoYWtlIDAuMTVzO1xuXG4gIC8qIFdoZW4gdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZCwgc3RhcnQgYWdhaW4gKi9cbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG59IiwibmF2LnRvcC1iYXIge1xuICBwYWRkaW5nOiAwO1xuXG4gIEBlYWNoICRicmVha3BvaW50LCAkdmFsdWUgaW4gJG1hcmdpbnMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJHZhbHVlO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtJHZhbHVlO1xuICAgICAgLy93aWR0aDogY2FsYygxMDAlICsgI3s0KiR2YWx1ZX0pO1xuICAgICAgLy9tYXgtd2lkdGg6IGNhbGMoMTAwJSArICN7NCokdmFsdWV9KTtcbiAgICB9XG4gIH1cblxuICAmLndpdGgtaW1hZ2UgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgPiAuZ3JpZC1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIC8vcGFkZGluZy1yaWdodDogMDtcblxuICAgID4gLmdyaWQtcGFkZGluZy14IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgPiAuc21hbGwtMTJ7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICB1bCA+IGxpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAmLmxldmVsLWNvdW50ZXIge1xuICAgICAgbWFyZ2luLXRvcDogMC4ycmVtO1xuICAgIH1cbiAgfVxuXG59XG4iLCJcbi8vIEJsdWVcbi8vJHByaW1hcnlDb2xvcjogIzQyNzA4MTtcbi8vJHNlY29uZGFyeUNvbG9yOiAjNGQ1NzVhO1xuLy8kYWNjZW50Q29sb3I6ICNlM2FiNmU7XG4vLyR0ZXh0Q29sb3I6IHdoaXRlO1xuLy8kc3ZnQ29sb3I6IGJsYWNrO1xuXG4gLy9CbHVlIGRpZmZlcmVudCBBY2NlbnRcbiRwcmltYXJ5Q29sb3I6ICM0MjcwODE7XG4kc2Vjb25kYXJ5Q29sb3I6ICM0ZDU3NWE7XG4kYWNjZW50Q29sb3I6ICNkM2U3ZWI7XG4kdGV4dENvbG9yOiB3aGl0ZTtcbiRzdmdDb2xvcjogYmxhY2s7XG5cbi8vIEJsYXUgSW52ZXJzXG4vLyRwcmltYXJ5Q29sb3I6ICM0ZDU3NWE7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzQyNzA4MTtcbi8vJGFjY2VudENvbG9yOiAjZTNhYjZlO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiBibGFjaztcblxuLy8gR3LDvG5cbi8vJHByaW1hcnlDb2xvcjogIzZiODc3ODtcbi8vJHNlY29uZGFyeUNvbG9yOiAjMDEyZjI1O1xuLy8kYWNjZW50Q29sb3I6ICNjMmNlY2E7XG4vLyR0ZXh0Q29sb3I6IHdoaXRlO1xuLy8kc3ZnQ29sb3I6IGJsYWNrO1xuXG4vLyBHcsO8biAyXG4vLyRwcmltYXJ5Q29sb3I6ICMyMzRjNDI7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzAxMmYyNTtcbi8vJGFjY2VudENvbG9yOiAjYjhhY2FhO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiBibGFjaztcblxuLy8gR3LDvG4gaW52ZXJzXG4vLyRwcmltYXJ5Q29sb3I6ICMwMTJmMjU7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzIzNGM0Mjtcbi8vJGFjY2VudENvbG9yOiAjYjhhY2FhO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiB3aGl0ZTtcblxuLy8gR3LDvG4gaW52ZXJzIGFuZGVyZSBBY2NlbnRcbi8vJHByaW1hcnlDb2xvcjogIzAxMmYyNTtcbi8vJHNlY29uZGFyeUNvbG9yOiAjMjM0YzQyO1xuLy8kYWNjZW50Q29sb3I6ICM2Yjg3Nzg7XG4vLyR0ZXh0Q29sb3I6IHdoaXRlO1xuLy8kc3ZnQ29sb3I6IHdoaXRlO1xuXG5ib2R5LnRoZW1lLWJsdWV7XG4gIGJhY2tncm91bmQ6ICRwcmltYXJ5Q29sb3I7XG4gIGNvbG9yOiAkdGV4dENvbG9yO1xuXG4gIGxhYmVse1xuICAgIGNvbG9yOiAkdGV4dENvbG9yO1xuICB9XG5cbiAgLnRvYXN0IC5tZXNzYWdle1xuICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnlDb2xvcjtcbiAgfVxuXG4gIG5hdi50b3AtYmFyLCBuYXYudG9wLWJhci53aXRoLWltYWdlLCBuYXYudG9wLWJhci53aXRoLWltYWdlLnNvbGlke1xuICAgIGJhY2tncm91bmQ6ICRzZWNvbmRhcnlDb2xvcjtcbiAgfVxuXG4gIC5idXR0b257XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUNvbG9yO1xuICB9XG5cbiAgLnN3aXRjaCBpbnB1dDpjaGVja2VkICsgLnNsaWRlcntcbiAgICBiYWNrZ3JvdW5kOiAkYWNjZW50Q29sb3I7XG4gIH1cbiAgI2xldmVsLW51bWJlci1jb250YWluZXJ7XG4gICAgYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjtcbiAgfVxuICBzdmcge1xuICAgIGNvbG9yOiAkc3ZnQ29sb3I7XG4gIH1cblxuICB1bC5tZW51IGxpIGEge1xuICAgIGNvbG9yOiAkdGV4dENvbG9yO1xuICB9XG5cbiAgYXtcbiAgICBjb2xvcjogJGFjY2VudENvbG9yO1xuICAgICYuaGlkZGVuLWxpbmt7XG4gICAgICBjb2xvcjogJHRleHRDb2xvcjtcbiAgICB9XG4gIH1cblxuICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkIHtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICRhY2NlbnRDb2xvcjtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnlDb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwMzA7XG4gICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiAjODFhY2I1O1xuICB9XG5cbiAgI3R1dG9yaWFsLXBvaW50ZXJ7XG4gICAgYmFja2dyb3VuZDogJGFjY2VudENvbG9yO1xuICB9XG5cbn1cbiIsIkBpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuLy9TZXR0aW5ncyBuYWNoIGZvdW5kYXRpb24gZsO8ciBtaXhpbnMgaW4gc2V0dGluZ3NcbkBpbXBvcnQgXCJzZXR0aW5nc1wiO1xuXG4vL0luY2x1ZGUgZm91bmRhdGlvbiBiZWZvcmUgb3RoZXIgc3R5bGVzLCBzbyB0aGF0IG90aGVyIG9uZSBjYW4gb3ZlcnJpZGUgZm91bmRhdGlvblxuQGluY2x1ZGUgZm91bmRhdGlvbi1ldmVyeXRoaW5nO1xuXG4vL0Zyb20gZnJhbWV3b3JrXG5AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMvY29yZG92YS1zaXRlc1wiO1xuQGltcG9ydCBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzLXVzZXItbWFuYWdlbWVudC9jb3Jkb3ZhLXNpdGVzLXVzZXItbWFuYWdlbWVudFwiO1xuXG4vL0FuZGVyZXMgbmFjaCBTZXR0aW5ncywgZGFtaXQgU2V0dGluZ3MgYmVyZWl0cyBhbmdld2VuZGV0IHdlcmRlblxuQGltcG9ydCBcIndvcmRSb3RhdG9yXCI7XG5AaW1wb3J0IFwiYW5pbWF0aW9uc1wiO1xuQGltcG9ydCBcIm5hdmJhck92ZXJyaWRlXCI7XG5AaW1wb3J0IFwidGhlbWVCbHVlXCI7XG5cbi50cmFuc2xhdGlvbnt9XG5cbkBrZXlmcmFtZXMgcm90YXRlIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7XG4gIH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1MGRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBsaW5lIHtcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDg1Ljk2NDtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgfVxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDY1Ljk3MywgMjEuOTkxMTtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCA4NS45NjQ7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC02NS45NzM7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICB9XG59XG5cbmh0bWwsIGJvZHkge1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xuICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBub25lO1xufVxuXG5cbmEsIGE6aG92ZXIge1xuICBjb2xvcjogI2ZmY2EwMDtcbn1cblxuI3NpdGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy9vdmVyZmxvdzogYXV0bztcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgLy9kaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5yaWdodCB7XG4gIGZsb2F0OiByaWdodFxufVxuXG4uZ3JvdyB7XG4gIGZsZXg6IDE7XG59XG5cbi5sb2FkZXIge1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogNTAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgJi5vdmVybGF5IHtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxOTIsIDE5MiwgMTkyLCAwLjUpO1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICB6LWluZGV4OiAxMDAwMDtcblxuICAgIHN2ZyB7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICAmLmlubGluZSB7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgICB0b3A6IGluaXRpYWw7XG4gICAgcG9zaXRpb246IGluaXRpYWw7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IGluaXRpYWw7XG4gICAgdHJhbnNmb3JtOiBpbml0aWFsO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cblxuICAmLnNtYWxsIC5zcGlubmVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XG4gIH1cblxuICAuc3Bpbm5lciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAvL3N0cm9rZTogI2I3MWMxYTtcbiAgICBzdHJva2U6ICMwMDA7XG4gICAgc3Ryb2tlLXdpZHRoOiAzcHg7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xuICAgIGFuaW1hdGlvbjogbGluZSAxLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUsIHJvdGF0ZSAxLjZzIGxpbmVhciBpbmZpbml0ZTtcbiAgfVxufVxuXG4ub3ZlcmZsb3ctYXV0byB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm92ZXJmbG93LWhpZGRlbntcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmhlaWdodC0xMDAge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vL1ZpZXdJbmZsYXRlclxuLmluamVjdGVkLXNwYW4ge1xufVxuXG4udmVydGljYWwtbWlkZGxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnZlcnRpY2FsLWJvdHRvbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBlbmQ7XG59XG5cbi5ob3Jpem9udGFsLWNlbnRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4ud2lkdGgtMTAwIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbkBmb3IgJGkgZnJvbSAxIHRocm91Z2ggNiB7XG4gIGgjeyRpfS5pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG5pbWcuYmFjay1idXR0b24ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1heC1oZWlnaHQ6IDEuMXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNjVyZW07XG59XG5cbmEuaGlkZGVuLWxpbmsge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuI21haW4tY29udGVudC1jb250YWluZXIge1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2lkdGg6IDEwMCU7XG5cbiAgPiAuZ3JpZC14e1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDAuNXJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIH1cblxuICAjbWFpbi1jb250ZW50IHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuXG5ib2R5e1xuICAvL2JhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9iYWNrZ3JvdW5kLnBuZ1wiKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */ \ No newline at end of file +/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fYnJlYWtwb2ludC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19yZXZlYWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdmVuZG9yL25vcm1hbGl6ZS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9fZ2xvYmFsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX2ZvdW5kYXRpb25TZXR0aW5ncy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy91dGlsL19taXhpbnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX3RleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fdW5pdC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2xhYmVsLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19oZWxwLXRleHQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19maWVsZHNldC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9mb3Jtcy9fc2VsZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2Zvcm1zL19lcnJvci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy90eXBvZ3JhcGh5L19iYXNlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX2hlbHBlcnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdHlwb2dyYXBoeS9fYWxpZ25tZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3R5cG9ncmFwaHkvX3ByaW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NsYXNzZXMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZ3V0dGVycy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL3h5LWdyaWQvX2NlbGwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fbWF0aC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy94eS1ncmlkL19sYXlvdXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fY29sbGFwc2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fcG9zaXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MveHktZ3JpZC9fZnJhbWUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnV0dG9uLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2J1dHRvbi1ncm91cC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jbG9zZS1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbGFiZWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fcHJvZ3Jlc3MtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3NsaWRlci5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zd2l0Y2guc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fY29sb3Iuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYmFkZ2Uuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYnJlYWRjcnVtYnMuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fY2FsbG91dC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19jYXJkLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3BhZ2luYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdG9vbHRpcC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19hY2NvcmRpb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVkaWEtb2JqZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX29yYml0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGFicy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL190aHVtYm5haWwuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fbWVudS5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19tZW51LWljb24uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fYWNjb3JkaW9uLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZHJpbGxkb3duLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX2Ryb3Bkb3duLW1lbnUuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fb2ZmLWNhbnZhcy5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19zdGlja3kuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fdGl0bGUtYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3RvcC1iYXIuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvY29tcG9uZW50cy9fZmxvYXQuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvdXRpbC9fZmxleC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZvdW5kYXRpb24tc2l0ZXMvc2Nzcy9jb21wb25lbnRzL19mbGV4LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2NvbXBvbmVudHMvX3Zpc2liaWxpdHkuc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fdG9hc3Quc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fZGlhbG9nLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvX3NldHRpbmdzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Zvcm0uc2NzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9jb3Jkb3ZhLXNpdGVzL3NyYy9jbGllbnQvc2Nzcy9fbmF2YmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX3RhYmJlZEZyYWdtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2FscGhhYmV0aWNMaXN0LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2Fic3RyYWN0V2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9zcmMvY2xpZW50L3Njc3MvX2ltYWdlU2VsZWN0aW9uRWxlbWVudC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMvc3JjL2NsaWVudC9zY3NzL19pbmRleC5zY3NzIiwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMtdXNlci1tYW5hZ2VtZW50L3NyYy9jbGllbnQvc2Nzcy9fcmlnaHRzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19zaGFyZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2xpYi9fY29yZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL2xpYi9fY29yZVNldHRpbmdzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL19zZXR0aW5nc1NpdGUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9saWIvX3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3MvbGliL190aGVtZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL190dXRvcmlhbC5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL193b3Jkcm90YXRvclRoZW1lLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY2xpZW50L3Nhc3Mvd29yZFJvdGF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9fYW5pbWF0aW9ucy5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL19uYXZiYXJPdmVycmlkZS5zY3NzIiwid2VicGFjazovLy4vc3JjL2NsaWVudC9zYXNzL190aGVtZUJsdWUuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jbGllbnQvc2Fzcy9pbmRleC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdMUSwyQ0NuSU4saURBQ0UsVUFBVyxDQUNYLFNBQVUsQ0FDVixhQUFjLENBQ2YsQ0NoREQsMkVBQUEsQ0FBNEUsS0FTMUUsZ0JBQWlCLENBQ2pCLDZCQUE4QixDQUMvQixLQVFDLFFBQVMsQ0FDVixHQU1DLGFBQWMsQ0FDZCxlQUFnQixDQUNqQixHQVNDLDhCQUF1QixDQUF2QixzQkFBdUIsQ0FDdkIsUUFBUyxDQUNULGdCQUFpQixDQUNsQixJQU1DLGdDQUFpQyxDQUNqQyxhQUFjLENBQ2YsRUFRQyw0QkFBNkIsQ0FDOUIsWUFNQyxrQkFBbUIsQ0FDbkIseUJBQTBCLENBQzFCLHdDQUFpQixDQUFqQixnQ0FB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QixDU3JCakIsMEJUcUJpQixDU2xCZix5RVRtWWlELENTbllqRCxpRVRtWWlELENTbllqRCx5RFRtWWlELENTbllqRCxpRlRtWTRELENTalkvRCxnQkFJQyx3QlRXZ0IsQ1NWaEIsa0JUMlgrQixDUzFYaEMsbUJBSUMsWUFBYSxDQUNkLGlCQUdDLFdBQVksQ0FDWixxQkFBc0IsQ0FDdkIsdUJBRUMsYUFBYyxDQUNkLGdCQUFpQixDQUNsQiw4QkNyQ0Msb0JWOEJrQixDVTdCbEIsd0JBQStELENBRS9ELHlEQUNFLGFWMEJnQixDVTNCbEIsZ0RBQ0UsYVYwQmdCLENVM0JsQixvREFDRSxhVjBCZ0IsQ1UzQmxCLHFEQUNFLGFWMEJnQixDVTNCbEIsMkNBQ0UsYVYwQmdCLENVekJqQixrQkEwQkMsYVZEZ0IsQ1VFakIsWUFyQkgsWUFBYSxDQUNiLGlCQUFnQyxDQUNoQyxrQlA4QnVELENPNUJ2RCxnQlA0QnVELENPM0J2RCxnQlY2QnVCLENVNUJ2QixhVmFvQixDVU1wQix1QkFJSSxhQUFjLENBQ2Ysb0VDZ0tELFFBQVMsQ0FDVCxTQUFVLENBQ1gsRUFJQyxrQlh6RjBCLENXMkYxQixpQkFBa0IsQ0FDbEIsZVg3RnNCLENXOEZ0QixpQ1g1RnlDLENXNkYxQyxLQUtDLGlCQUFrQixDQUNsQixtQkFBb0IsQ0FDckIsU0FLQyxnQlhuTHFCLENXb0xyQixtQkFBb0IsQ2J0THRCLE1hMkxFLGFYbkhpQixDV29IakIsbUJBQW9CLENBQ3JCLDBDQVNDLDhEWDFNcUUsQ1cyTXJFLGlCWHZKc0IsQ1d3SnRCLGtCWHZNeUIsQ1d3TXpCLGFYdkprQixDV3dKbEIsaUNYbklzQyxDV3lIeEMsa0hBYUksYUFBYyxDQUNkLGFYeE5lLENXeU5oQixPQVlPLGdCUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLGlCUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLG1CUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLGtCUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLG1CUjNONkMsQ1F1TzdDLGVYcExXLENXNExYLFlBQWEsQ0FPYixtQlhsTWlCLENXbUtyQixPQUlJLGNSM042QyxDUXVPN0MsZVhwTFcsQ1c0TFgsWUFBYSxDQU9iLG1CWGxNaUIsQ0pvQ3JCLDJDZStIQSxPQUlJLGNSM042QyxDUXVOakQsT0FJSSxnQlIzTjZDLENRdU5qRCxPQUlJLG1CUjNONkMsQ1F1TmpELE9BSUksbUJSM042QyxDUXVOakQsT0FJSSxpQlIzTjZDLENRdU5qRCxPQUlJLGNSM042QyxDUXdQaEQsQ2J4UlAsRWErUkUsbUJBQW9CLENBQ3BCLGFYalJvQixDV2tScEIsb0JYNUt5QixDVzhLekIsY0FBZSxDQUxqQixnQkFTSSxhWG5MMkQsQ1cwSy9ELE1BZ0JJLFFBQVMsQ2JqVWIsR2F1VUUsVUFBVyxDQUVYLGVSdFJxRCxDUXVSckQsUUFBUyxDQUNULG1CWC9MeUIsQ1dpTXpCLFlBQWEsQ0FDYixjQUFlLENBQ2YsK0JYdFNpQixDV3VTakIsYUFBYyxDQUNmLFNBTUMsa0JYek4wQixDVzBOMUIsMkJYeE15QixDV3lNekIsZVg1TnNCLENXNk52QixHQUlDLGlCQUFrQixDQUNuQixHQUlDLG1CWGxOc0IsQ1dtTnRCLG9CWHJOa0IsQ1dzTm5CLEdBSUMsbUJYeE5zQixDV3lOdkIsd0JBS0csbUJYN04yQixDVzhOM0IsZUFBZ0IsQ0FDakIsR0FLRCxrQlhuT3lCLENXa08zQixNQUlJLG1CWHBPOEIsQ1dxTzlCLGdCWHJVbUIsQ1dzVXBCLFdBS0QsZVhsUTBCLENXbVExQixvQ1I5VXFELENRK1VyRCw2Qlh6VmlCLENXc1ZuQix3QkFNSSxlWHhRb0IsQ1d5UXBCLGFYNVZhLENXNlZkLGlCQWNELGdDWDFXVyxDVzJXWCxXQUFZLENBQ1osb0JBQXFCLENBQ3RCLE9BSUMsUUFBUyxDQUNWLElBV0MsUUFBUyxDQUNULHdCUmpYUyxDUW1YVCx3QlhuWWdCLENXcVlo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LENBQUcsYUFDSixDQUFHLFVBaENlLENBQUksV0g5RDNCLGtCR3lGSCxDSHpGRyxvQkd5RkgsQ0h6RkcsZ0JHeUZILENIekZHLFlHeUZILENBQUMsYUhyRkksa0JHcUZMLENIckZLLHFCR3FGTCxDSHJGSyxpQkdxRkwsQ0hyRkssYUdxRkwsQ0FBQyxjSC9FRyxVR3dDQyxDQUFJLGdCSHBDSCxVR29DRCxDQUFJLHlQSHBCRix1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLG9DbkJzSGtCLHFSbUJ2SDVCLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsMkNuQmdIeUMsdVFtQmxIbEMsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CZ0h5Qyx5UG1CbEhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLCtNQVkyQyxrQkc2QzNDLENIN0MyQyxxQkc2QzNDLENIN0MyQyxpQkc2QzNDLENIN0MyQyxhRzZDM0MsQ0FBQyxpQkg5QmdCLGNJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsZUlzRGQsQ0FBbUQsaUJKdERyQyxTSXNEZCxDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsZUlzRGYsQ0FBbUQsa0JKdERwQyxVSXNEZixDQUFtRCxvQ3ZCb0NuQixzQm1COUdiLGtCR2tEdEIsQ0hsRHNCLG9CR2tEdEIsQ0hsRHNCLGdCR2tEdEIsQ0hsRHNCLFlHa0R0QixDQUFDLFVBdkNJLENBQUksK1BITmtDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLHdCSHZDdUIsVUdBbkIsQ0FBSSxtQkhTVSxjSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxTSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxTSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxTSXNEaEIsQ0FBbUQsb0JKdERsQyxlSXNEakIsQ0FBbUQsb0JKdERsQyxlSXNEakIsQ0FBbUQsb0JKdERsQyxVSXNEakIsQ0FBbUQsQ0puRHRELDJDbkJrRnlDLHFCbUJ6R3BCLGtCR2tEckIsQ0hsRHFCLG9CR2tEckIsQ0hsRHFCLGdCR2tEckIsQ0hsRHFCLFlHa0RyQixDQUFDLFVBdkNJLENBQUksa1BITmtDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLHVCSHZDc0IsVUdBbEIsQ0FBSSxrQkhTUyxjSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsU0lzRGYsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsU0lzRGYsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsU0lzRGYsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxlSXNEaEIsQ0FBbUQsbUJKdERuQyxVSXNEaEIsQ0FBbUQsQ0puRHRELDJDbkJrRnlDLG9CbUJ6R3JCLGtCR2tEcEIsQ0hsRG9CLG9CR2tEcEIsQ0hsRG9CLGdCR2tEcEIsQ0hsRG9CLFlHa0RwQixDQUFDLFVBdkNJLENBQUkscU9ITmtDLGtCRzZDM0MsQ0g3QzJDLHFCRzZDM0MsQ0g3QzJDLGlCRzZDM0MsQ0g3QzJDLGFHNkMzQyxDQUFDLHNCSHZDcUIsVUdBakIsQ0FBSSxpQkhTUSxjSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsU0lzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsU0lzRGQsQ0FBbUQsaUJKdERyQyxlSXNEZCxDQUFtRCxpQkp0RHJDLGVJc0RkLENBQW1ELGlCSnREckMsU0lzRGQsQ0FBbUQsa0JKdERwQyxlSXNEZixDQUFtRCxrQkp0RHBDLGVJc0RmLENBQW1ELGtCSnREcEMsVUlzRGYsQ0FBbUQsQ0puRHRELGtDQUs4QixVQUMxQixDQUFJLGtDQUlzQixXQUN6QixDQUFJLGVBOEJBLG9CQ3ZHb0IsQ0FBaUMscUJBQWpDLENBQWlDLDJDcEJnSnJCLGVtQnpDaEMscUJDdkdvQixDQUFpQyxzQkFBakMsQ0FBaUMsQ0RzSWxFLHFCQTNCUSwwQkc3QnVDLENBQWdELG1CRnJFaEUsQ0FBaUMsb0JBQWpDLENBQWlDLDJDcEJ1SW5CLHFCbUJyQ3JDLDJCRzdCdUMsQ0FBZ0Qsb0JGckVoRSxDQUFpQyxxQkFBakMsQ0FBaUMsQ0QyRzFELHFCQXJDQSxVRzdCRyxDQUFJLHVCSGlDTCxVR2pDQyxDQUFJLHdCSHlDRiw4Qkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYseUJHYm9DLENBQWdELHdCSGFwRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYseUJHYm9DLENBQWdELHdCSGFwRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLCtCR2JvQyxDQUFnRCx3QkhhcEYseUJHYm9DLENBQWdELHlCSGFuRiwrQkdibUMsQ0FBZ0QseUJIYW5GLCtCR2JtQyxDQUFnRCx5QkhhbkYsMEJHYm1DLENBQWdELG9DdEJ1RXhELDZCbUJ0RXpCLFVHN0JMLENBQUksK0JIaUNHLFVHakNQLENBQUksMEJIeUNBLDhCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRix5Qkdia0MsQ0FBZ0QsMEJIYWxGLCtCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRix5Qkdia0MsQ0FBZ0QsMEJIYWxGLCtCR2JrQyxDQUFnRCwwQkhhbEYsK0JHYmtDLENBQWdELDBCSGFsRix5Qkdia0MsQ0FBZ0QsMkJIYWpGLCtCR2JpQyxDQUFnRCwyQkhhakYsK0JHYmlDLENBQWdELDJCSGFqRiwwQkdiaUMsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMscUJtQmpFdkMsVUc3QkcsQ0FBSSx1QkhpQ0wsVUdqQ0MsQ0FBSSx3Qkh5Q0YsK0JHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCw0QkhDbEYsVUc3QkosQ0FBSSw4QkhpQ0UsVUdqQ04sQ0FBSSx5Qkh5Q0QsK0JHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDBCR2JtQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDBCR2JtQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDBCR2JtQyxDQUFnRCwwQkhhbEYsZ0NHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLDJCR2JrQyxDQUFnRCxDSGU3RiwyQ25CbUQyQywyQm1CakVqQyxVRzdCSCxDQUFJLDZCSGlDQyxVR2pDTCxDQUFJLHdCSHlDRiwrQkdib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLGdDR2JvQyxDQUFnRCx3QkhhcEYsMEJHYm9DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLGdDR2JtQyxDQUFnRCx5QkhhbkYsMkJHYm1DLENBQWdELENIZTdGLGdDQWlEYyxxQkM5SWlCLENBQWlDLG9CQUFqQyxDQUFpQywyQ3BCZ0pyQixnQ21CRjdCLHNCQzlJaUIsQ0FBaUMscUJBQWpDLENBQWlDLENEZ0poRSwyQ0FMWSxxQkMzSW1CLENBQWlDLG9CQUFqQyxDQUFpQywyQ3BCZ0pyQiwyQ21CTC9CLHNCQzNJbUIsQ0FBaUMscUJBQWpDLENBQWlDLENEc0poRSxzQkFHTSxxQkN6SnlCLENBQWlDLG9CQUFqQyxDQUFpQywyQ3BCZ0pyQixzQm1CU3JDLHNCQ3pKeUIsQ0FBaUMscUJBQWpDLENBQWlDLENEMkpoRSxrQkszSk0sVURpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELGVEaUhELENBQW1ELGtCQ2pIbEQsU0RpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELGVEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxXRGlIRCxDQUFtRCxvQ3ZCb0NuQixvQndCckovQixVRGlIRCxDQUFtRCxvQkNqSGxELFNEaUhELENBQW1ELG9CQ2pIbEQsZURpSEQsQ0FBbUQsb0JDakhsRCxTRGlIRCxDQUFtRCxvQkNqSGxELFNEaUhELENBQW1ELG9CQ2pIbEQsZURpSEQsQ0FBbUQsb0JDakhsRCxlRGlIRCxDQUFtRCxvQkNqSGxELFdEaUhELENBQW1ELENDL0cxRCwyQ3hCOEk2QyxtQndCaEpyQyxVRGlIRCxDQUFtRCxtQkNqSGxELFNEaUhELENBQW1ELG1CQ2pIbEQsZURpSEQsQ0FBbUQsbUJDakhsRCxTRGlIRCxDQUFtRCxtQkNqSGxELFNEaUhELENBQW1ELG1CQ2pIbEQsZURpSEQsQ0FBbUQsbUJDakhsRCxlRGlIRCxDQUFtRCxtQkNqSGxELFdEaUhELENBQW1ELENDL0cxRCwyQ3hCOEk2QyxrQndCaEpyQyxVRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxTRGlIRCxDQUFtRCxrQkNqSGxELFNEaUhELENBQW1ELGtCQ2pIbEQsZURpSEQsQ0FBbUQsa0JDakhsRCxlRGlIRCxDQUFtRCxrQkNqSGxELFdEaUhELENBQW1ELENDL0cxRCxnQ0FGUSwwQkY4RXVDLENBQWdELGdDRTlFdkYseUJGOEV1QyxDQUFnRCxnQ0U5RXZGLCtCRjhFdUMsQ0FBZ0QsZ0NFOUV2Rix5QkY4RXVDLENBQWdELGdDRTlFdkYseUJGOEV1QyxDQUFnRCxnQ0U5RXZGLCtCRjhFdUMsQ0FBZ0QsZ0NFOUV2RiwrQkY4RXVDLENBQWdELGdDRTlFdkYsMkJGOEV1QyxDQUFnRCxvQ3RCdUV4RCxrQ3dCckovQiwwQkY4RXVDLENBQWdELGtDRTlFdkYseUJGOEV1QyxDQUFnRCxrQ0U5RXZGLCtCRjhFdUMsQ0FBZ0Qsa0NFOUV2Rix5QkY4RXVDLENBQWdELGtDRTlFdkYseUJGOEV1QyxDQUFnRCxrQ0U5RXZGLCtCRjhFdUMsQ0FBZ0Qsa0NFOUV2RiwrQkY4RXVDLENBQWdELGtDRTlFdkYsMkJGOEV1QyxDQUFnRCxDRTVFL0YsMkN4QjhJNkMsZ0N3QmhKckMsMkJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsZ0NGOEV1QyxDQUFnRCxnQ0U5RXZGLDRCRjhFdUMsQ0FBZ0QsaUNFOUV2RiwyQkY4RXVDLENBQWdELGlDRTlFdkYsMEJGOEV1QyxDQUFnRCxpQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsaUNFOUV2RiwwQkY4RXVDLENBQWdELGlDRTlFdkYsMEJGOEV1QyxDQUFnRCxpQ0U5RXZGLGdDRjhFdUMsQ0FBZ0QsaUNFOUV2RixnQ0Y4RXVDLENBQWdELGlDRTlFdkYsNEJGOEV1QyxDQUFnRCxDRTVFL0YsMkN4QjhJNkMsZ0N3QmhKckMsMkJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsMEJGOEV1QyxDQUFnRCxnQ0U5RXZGLDBCRjhFdUMsQ0FBZ0QsZ0NFOUV2RixnQ0Y4RXVDLENBQWdELGdDRTlFdkYsZ0NGOEV1QyxDQUFnRCxnQ0U5RXZGLDRCRjhFdUMsQ0FBZ0QsQ0U1RS9GLHVCTHFNeUIsY005TUssQ0FBQyxhQUFELENBQUMsNkJBR3JCLGNBRXNCLENBQUMsYUFBRCxDQUFDLGdDQXNCZCxjRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsVUY2RmIsQ0FBbUQsb0N2Qm9DbkIsa0N5QmpJbEIsY0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLFNGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLFNGNkZkLENBQW1ELGtDRTdGckMsZUY2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLFNGNkZkLENBQW1ELG1DRTdGcEMsZUY2RmYsQ0FBbUQsbUNFN0ZwQyxlRjZGZixDQUFtRCxtQ0U3RnBDLFVGNkZmLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyxpQ3lCNUh6QixjRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsU0Y2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsU0Y2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsU0Y2RmIsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsVUY2RmQsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGdDeUI1SDFCLGNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxnQ0U3RnZDLGVGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxTRjZGWixDQUFtRCxpQ0U3RnRDLGVGNkZiLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxVRjZGYixDQUFtRCxDRTNGaEQsd0JOdUxnQixjTTdLSSxDQUFDLGFBQUQsQ0FBQyw4QkFHckIsZUFFd0IsQ0FBQyxjQUFELENBQUMsb0N6QmdISSx5Qm1Ca0RaLGNNOU1HLENBQUMsYUFBRCxDQUFDLCtCQUdyQixjQUVzQixDQUFDLGFBQUQsQ0FBQyxDQUU3QixvQ3pCcUptQyxrQ3lCMUlwQixjRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLG9DeUJqSWxCLGNGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxTRjZGZCxDQUFtRCxvQ0U3RnJDLGVGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxTRjZGZCxDQUFtRCxvQ0U3RnJDLGVGNkZkLENBQW1ELG9DRTdGckMsZUY2RmQsQ0FBbUQsb0NFN0ZyQyxTRjZGZCxDQUFtRCxxQ0U3RnBDLGVGNkZmLENBQW1ELHFDRTdGcEMsZUY2RmYsQ0FBbUQscUNFN0ZwQyxVRjZGZixDQUFtRCxDRTNGaEQsb0N6QitINkIsbUN5QjFJbkIsY0ZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLFNGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLFNGc0diLENBQW1ELG1DRXRHdEMsZUZzR2IsQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLFNGc0diLENBQW1ELG9DRXRHckMsZUZzR2QsQ0FBbUQsb0NFdEdyQyxlRnNHZCxDQUFtRCxvQ0V0R3JDLFVGc0dkLENBQW1ELENFcEdoRCxvQ3pCd0k2QixrQ3lCMUlwQixjRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd2QyxlRnNHWixDQUFtRCxrQ0V0R3ZDLGVGc0daLENBQW1ELGtDRXRHdkMsU0ZzR1osQ0FBbUQsbUNFdEd0QyxlRnNHYixDQUFtRCxtQ0V0R3RDLGVGc0diLENBQW1ELG1DRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLDBCbUJ3RFgsY003S0UsQ0FBQyxhQUFELENBQUMsZ0NBR3JCLGVBRXdCLENBQUMsY0FBRCxDQUFDLENBRS9CLDJDekJ5R3lDLHdCbUJ1RG5CLGNNOU1JLENBQUMsYUFBRCxDQUFDLDhCQUdyQixjQUVzQixDQUFDLGFBQUQsQ0FBQyxDQUU3QiwyQ3pCZ0p5QyxpQ3lCckkxQixjRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsU0ZzR1osQ0FBbUQsaUNFdEd2QyxlRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsU0ZzR1osQ0FBbUQsaUNFdEd2QyxlRnNHWixDQUFtRCxpQ0V0R3ZDLGVGc0daLENBQW1ELGlDRXRHdkMsU0ZzR1osQ0FBbUQsa0NFdEd0QyxlRnNHYixDQUFtRCxrQ0V0R3RDLGVGc0diLENBQW1ELGtDRXRHdEMsVUZzR2IsQ0FBbUQsQ0VwR2hELG9DekJ3STZCLG1DeUJqSWxCLGNGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxTRjZGZCxDQUFtRCxtQ0U3RnJDLGVGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxTRjZGZCxDQUFtRCxtQ0U3RnJDLGVGNkZkLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxTRjZGZCxDQUFtRCxvQ0U3RnBDLGVGNkZmLENBQW1ELG9DRTdGcEMsZUY2RmYsQ0FBbUQsb0NFN0ZwQyxVRjZGZixDQUFtRCxDRTNGaEQsMkN6QjBIbUMsa0N5QjVIekIsY0Y2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLFNGNkZiLENBQW1ELGtDRTdGdEMsZUY2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLFNGNkZiLENBQW1ELGtDRTdGdEMsZUY2RmIsQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLFNGNkZiLENBQW1ELG1DRTdGckMsZUY2RmQsQ0FBbUQsbUNFN0ZyQyxlRjZGZCxDQUFtRCxtQ0U3RnJDLFVGNkZkLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyxpQ3lCNUgxQixjRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z2QyxlRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsU0Y2RlosQ0FBbUQsaUNFN0Z2QyxlRjZGWixDQUFtRCxpQ0U3RnZDLGVGNkZaLENBQW1ELGlDRTdGdkMsU0Y2RlosQ0FBbUQsa0NFN0Z0QyxlRjZGYixDQUFtRCxrQ0U3RnRDLGVGNkZiLENBQW1ELGtDRTdGdEMsVUY2RmIsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLHlCbUI2RGxCLGNNN0tHLENBQUMsYUFBRCxDQUFDLCtCQUdyQixlQUV3QixDQUFDLGNBQUQsQ0FBQyxDQUUvQiwyQ3pCeUd5Qyx1Qm1CdURwQixjTTlNSyxDQUFDLGFBQUQsQ0FBQyw2QkFHckIsY0FFc0IsQ0FBQyxhQUFELENBQUMsQ0FFN0IsMkN6QmdKeUMsZ0N5QnJJMUIsY0ZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLFNGc0daLENBQW1ELGdDRXRHdkMsZUZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLFNGc0daLENBQW1ELGdDRXRHdkMsZUZzR1osQ0FBbUQsZ0NFdEd2QyxlRnNHWixDQUFtRCxnQ0V0R3ZDLFNGc0daLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxlRnNHYixDQUFtRCxpQ0V0R3RDLFVGc0diLENBQW1ELENFcEdoRCxvQ3pCd0k2QixrQ3lCaklsQixjRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsa0NFN0ZyQyxlRjZGZCxDQUFtRCxrQ0U3RnJDLGVGNkZkLENBQW1ELGtDRTdGckMsU0Y2RmQsQ0FBbUQsbUNFN0ZwQyxlRjZGZixDQUFtRCxtQ0U3RnBDLGVGNkZmLENBQW1ELG1DRTdGcEMsVUY2RmYsQ0FBbUQsQ0UzRmhELDJDekIwSG1DLGlDeUJySXpCLGNGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxTRnNHYixDQUFtRCxpQ0V0R3RDLGVGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxTRnNHYixDQUFtRCxpQ0V0R3RDLGVGc0diLENBQW1ELGlDRXRHdEMsZUZzR2IsQ0FBbUQsaUNFdEd0QyxTRnNHYixDQUFtRCxrQ0V0R3JDLGVGc0dkLENBQW1ELGtDRXRHckMsZUZzR2QsQ0FBbUQsa0NFdEdyQyxVRnNHZCxDQUFtRCxDRXBHaEQsMkN6Qm1JbUMsZ0N5QjVIMUIsY0Y2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGdDRTdGdkMsZUY2RlosQ0FBbUQsZ0NFN0Z2QyxlRjZGWixDQUFtRCxnQ0U3RnZDLFNGNkZaLENBQW1ELGlDRTdGdEMsZUY2RmIsQ0FBbUQsaUNFN0Z0QyxlRjZGYixDQUFtRCxpQ0U3RnRDLFVGNkZiLENBQW1ELENFM0ZoRCwyQ3pCMEhtQyx3Qm1CNkRuQixjTTdLSSxDQUFDLGFBQUQsQ0FBQyw4QkFHckIsZUFFd0IsQ0FBQyxjQUFELENBQUMsQ0FFL0IsZ0JOb0xjLGNPdk1XLENBQUMsK0JQMk1LLDhCTzNNTixDQUFDLGdCUHVNWixvQk92TVcsQ0FBQywrQlAyTUssb0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxxQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssK0JPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxxQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSywrQk8zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUsscUNPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLCtCTzNNTixDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0scUNPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxxQ08zTVAsQ0FBQyxvQzFCaUlTLGtCbUJzRW5CLGNPdk1TLENBQUMsaUNQMk1PLDhCTzNNUixDQUFDLGtCUHVNVixvQk92TVMsQ0FBQyxpQ1AyTU8sb0NPM01SLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxxQ08zTVIsQ0FBQyxrQlB1TVYsZU92TVMsQ0FBQyxpQ1AyTU8sK0JPM01SLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxxQ08zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixlT3ZNUyxDQUFDLGlDUDJNTywrQk8zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHFDTzNNUixDQUFDLGtCUHVNVixxQk92TVMsQ0FBQyxpQ1AyTU8scUNPM01SLENBQUMsa0JQdU1WLGVPdk1TLENBQUMsaUNQMk1PLCtCTzNNUixDQUFDLG1CUHVNVCxxQk92TVEsQ0FBQyxrQ1AyTVEscUNPM01ULENBQUMsbUJQdU1ULHFCT3ZNUSxDQUFDLGtDUDJNUSxxQ08zTVQsQ0FBQyxDUDZNMUIsMkNuQmpGeUMsaUJtQjJFMUIsY092TVUsQ0FBQyxnQ1AyTU0sK0JPM01QLENBQUMsaUJQdU1YLG9CT3ZNVSxDQUFDLGdDUDJNTSxxQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxlT3ZNVSxDQUFDLGdDUDJNTSxnQ08zTVAsQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLGVPdk1VLENBQUMsZ0NQMk1NLGdDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsaUJQdU1YLHFCT3ZNVSxDQUFDLGdDUDJNTSxzQ08zTVAsQ0FBQyxpQlB1TVgsZU92TVUsQ0FBQyxnQ1AyTU0sZ0NPM01QLENBQUMsa0JQdU1WLHFCT3ZNUyxDQUFDLGlDUDJNTyxzQ08zTVIsQ0FBQyxrQlB1TVYscUJPdk1TLENBQUMsaUNQMk1PLHNDTzNNUixDQUFDLENQNk0xQiwyQ25CakZ5QyxnQm1CMkUzQixjT3ZNVyxDQUFDLCtCUDJNSywrQk8zTU4sQ0FBQyxnQlB1TVosb0JPdk1XLENBQUMsK0JQMk1LLHFDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUssc0NPM01OLENBQUMsZ0JQdU1aLGVPdk1XLENBQUMsK0JQMk1LLGdDTzNNTixDQUFDLGdCUHVNWixxQk92TVcsQ0FBQywrQlAyTUssc0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVosZU92TVcsQ0FBQywrQlAyTUssZ0NPM01OLENBQUMsZ0JQdU1aLHFCT3ZNVyxDQUFDLCtCUDJNSyxzQ08zTU4sQ0FBQyxnQlB1TVoscUJPdk1XLENBQUMsK0JQMk1LLHNDTzNNTixDQUFDLGdCUHVNWixlT3ZNVyxDQUFDLCtCUDJNSyxnQ08zTU4sQ0FBQyxpQlB1TVgscUJPdk1VLENBQUMsZ0NQMk1NLHNDTzNNUCxDQUFDLGlCUHVNWCxxQk92TVUsQ0FBQyxnQ1AyTU0sc0NPM01QLENBQUMsQ1A2TTFCLFFBekpxQixtQkV0RWpCLENGc0VpQixvQkV0RWpCLENGc0VpQixtQkV0RWpCLENGc0VpQixZRXRFakIsQ0FBSSwyQkFGVSxDQUVWLDRCQUZVLENBRVYsK0JBRlUsQ0FFViwyQkFGVSxDQUVWLHVCQUZVLENBQU0sY0ZxUHBCLFdHOUlNLENBQUksZUFDSSxDQUFJLGNIaUpsQixXR3ZNQyxDQUFJLGdCSDJNSCxXRzNNRCxDQUFJLHlQSHlORix1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLG9DbkJ2SGtCLHFSbUJzSDVCLHVCQUNNLENBRE4sNEJBQ00sQ0FETixlQUNNLENBQUksQ0FDakIsMkNuQjdIeUMsdVFtQjJIbEMsdUJBQ00sQ0FETiw0QkFDTSxDQUROLGVBQ00sQ0FBSSxDQUNqQiwyQ25CN0h5Qyx5UG1CMkhsQyx1QkFDTSxDQUROLDRCQUNNLENBRE4sZUFDTSxDQUFJLENBQ2pCLCtNQVcyQyxrQkcvTDNDLENIK0wyQyxxQkcvTDNDLENIK0wyQyxpQkcvTDNDLENIK0wyQyxhRy9MM0MsQ0FBQyxpQkg4TVUsZUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxXSXRMVCxDQUFtRCxvQ3ZCb0NuQixzQm1COEhuQixrQkcxTGhCLENIMExnQixvQkcxTGhCLENIMExnQixnQkcxTGhCLENIMExnQixZRzFMaEIsQ0FBQyxXQXZDSSxDQUFJLCtQSHNPa0Msa0JHL0wzQyxDSCtMMkMscUJHL0wzQyxDSCtMMkMsaUJHL0wzQyxDSCtMMkMsYUcvTDNDLENBQUMsd0JIcU1pQixXRzVPYixDQUFJLG1CSHFQSSxlSXRMVixDQUFtRCxtQkpzTHpDLGdCSXRMVixDQUFtRCxtQkpzTHpDLFVJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsVUl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxnQkl0TFYsQ0FBbUQsbUJKc0x6QyxVSXRMVixDQUFtRCxvQkpzTHhDLGdCSXRMWCxDQUFtRCxvQkpzTHhDLGdCSXRMWCxDQUFtRCxvQkpzTHhDLFdJdExYLENBQW1ELENKeUxwRCwyQ25CMUp1QyxxQm1CbUkxQixrQkcxTGYsQ0gwTGUsb0JHMUxmLENIMExlLGdCRzFMZixDSDBMZSxZRzFMZixDQUFDLFdBdkNJLENBQUksa1BIc09rQyxrQkcvTDNDLENIK0wyQyxxQkcvTDNDLENIK0wyQyxpQkcvTDNDLENIK0wyQyxhRy9MM0MsQ0FBQyx1QkhxTWdCLFdHNU9aLENBQUksa0JIcVBHLGVJdExULENBQW1ELGtCSnNMMUMsZ0JJdExULENBQW1ELGtCSnNMMUMsVUl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxnQkl0TFQsQ0FBbUQsa0JKc0wxQyxVSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFVJdExULENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsZ0JJdExWLENBQW1ELG1CSnNMekMsV0l0TFYsQ0FBbUQsQ0p5THBELDJDbkIxSnVDLG9CbUJtSTNCLGtCRzFMZCxDSDBMYyxvQkcxTGQsQ0gwTGMsZ0JHMUxkLENIMExjLFlHMUxkLENBQUMsV0F2Q0ksQ0FBSSxxT0hzT2tDLGtCRy9MM0MsQ0grTDJDLHFCRy9MM0MsQ0grTDJDLGlCRy9MM0MsQ0grTDJDLGFHL0wzQyxDQUFDLHNCSHFNZSxXRzVPWCxDQUFJLGlCSHFQRSxlSXRMUixDQUFtRCxpQkpzTDNDLGdCSXRMUixDQUFtRCxpQkpzTDNDLFVJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsZ0JJdExSLENBQW1ELGlCSnNMM0MsVUl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxnQkl0TFIsQ0FBbUQsaUJKc0wzQyxVSXRMUixDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLGdCSXRMVCxDQUFtRCxrQkpzTDFDLFdJdExULENBQW1ELENKeUxwRCxnQ0FTWSxtQkNuVGUsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLGdDbUJtSzNCLG9CQ25UZSxDQUFpQyx1QkFBakMsQ0FBaUMsQ0RxVDlELHNCQUdNLG1CQ3hUdUIsQ0FBaUMsc0JBQWpDLENBQWlDLDJDcEJnSnJCLHNCbUJ3S25DLG9CQ3hUdUIsQ0FBaUMsdUJBQWpDLENBQWlDLENEMFQ5RCxlQW5OUyxtQkN2R29CLENBQWlDLHNCQUFqQyxDQUFpQywyQ3BCZ0pyQixlbUJ6Q2hDLG9CQ3ZHb0IsQ0FBaUMsdUJBQWpDLENBQWlDLENEc0lsRSxxQkEzQlEsMkJHN0J1QyxDQUFnRCxrQkZyRWhFLENBQWlDLHFCQUFqQyxDQUFpQywyQ3BCdUluQixxQm1CckNyQyw0Qkc3QnVDLENBQWdELG1CRnJFaEUsQ0FBaUMsc0JBQWpDLENBQWlDLENEMkcxRCxxQkFyQ0EsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsK0JHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCxvQ3RCdUV4RCw2Qm1CdEV6QixXRzdCTCxDQUFJLCtCSGlDRyxXR2pDUCxDQUFJLDBCSHlDQSwrQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDJCSGFqRixnQ0diaUMsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsMkJHYmlDLENBQWdELENIZTdGLDJDbkJtRDJDLHFCbUJqRXZDLFdHN0JHLENBQUksdUJIaUNMLFdHakNDLENBQUksd0JIeUNGLGdDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiw0QkdibUMsQ0FBZ0QsNEJIQ2xGLFdHN0JKLENBQUksOEJIaUNFLFdHakNOLENBQUkseUJIeUNELGdDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFu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REksc0JBQ0osQ0FESSxtQkFDSixDQUFPLFlBeUJrQixDQUFLLENSa1h0Qyx5QkFLZSxXQUNSLENBQUksb0NuQi9Pc0IsaUNtQmtQUixXQUNoQixDQUFJLENBQ2IsMkNuQnpQdUMsZ0NtQnVQZixXQUNmLENBQUksQ0FDYiwyQ25CelB1QywrQm1CdVBoQixXQUNkLENBQUksQ0FDYixlQWxTTyxtQkN2R29CLENBQWlDLHNCQUFqQyxDQUFpQywyQ3BCZ0pyQixlbUJ6Q2hDLG9CQ3ZHb0IsQ0FBaUMsdUJBQWpDLENBQWlDLENEc0lsRSxxQkEzQlEsMkJHN0J1QyxDQUFnRCxrQkZyRWhFLENBQWlDLHFCQUFqQyxDQUFpQywyQ3BCdUluQixxQm1CckNyQyw0Qkc3QnVDLENBQWdELG1CRnJFaEUsQ0FBaUMsc0JBQWpDLENBQWlDLENEMkcxRCxxQkFyQ0EsV0c3QkcsQ0FBSSx1QkhpQ0wsV0dqQ0MsQ0FBSSx3Qkh5Q0YsK0JHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx3QkhhcEYsZ0NHYm9DLENBQWdELHdCSGFwRixnQ0dib0MsQ0FBZ0Qsd0JIYXBGLDBCR2JvQyxDQUFnRCx5QkhhbkYsZ0NHYm1DLENBQWdELHlCSGFuRixnQ0dibUMsQ0FBZ0QseUJIYW5GLDJCR2JtQyxDQUFnRCxvQ3RCdUV4RCw2Qm1CdEV6QixXRzdCTCxDQUFJLCtCSGlDRyxXR2pDUCxDQUFJLDBCSHlDQSwrQkdia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDBCSGFsRixnQ0dia0MsQ0FBZ0QsMEJIYWxGLGdDR2JrQyxDQUFnRCwwQkhhbEYsMEJHYmtDLENBQWdELDJCSGFqRixnQ0diaUMsQ0FBZ0QsMkJIYWpGLGdDR2JpQyxDQUFnRCwyQkhhakYsMkJHYmlDLENBQWdELENIZTdGLDJDbkJtRDJDLHFCbUJqRXZDLFdHN0JHLENBQUksdUJIaUNMLFdHakNDLENBQUksd0JIeUNGLGdDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0Qsd0JIYXBGLGlDR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRiwyQkdib0MsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiw0QkdibUMsQ0FBZ0QsNEJIQ2xGLFdHN0JKLENBQUksOEJIaUNFLFdHakNOLENBQUkseUJIeUNELGdDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QseUJIYW5GLGlDR2JtQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRiwyQkdibUMsQ0FBZ0QsMEJIYWxGLGlDR2JrQyxDQUFnRCwwQkhhbEYsaUNHYmtDLENBQWdELDBCSGFsRiw0Qkdia0MsQ0FBZ0QsQ0hlN0YsMkNuQm1EMkMsMkJtQmpFakMsV0c3QkgsQ0FBSSw2QkhpQ0MsV0dqQ0wsQ0FBSSx3Qkh5Q0YsZ0NHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx3QkhhcEYsaUNHYm9DLENBQWdELHdCSGFwRixpQ0dib0MsQ0FBZ0Qsd0JIYXBGLDJCR2JvQyxDQUFnRCx5QkhhbkYsaUNHYm1DLENBQWdELHlCSGFuRixpQ0dibUMsQ0FBZ0QseUJIYW5GLDRCR2JtQyxDQUFnRCxDSGU3RiwwQkFrVHdCLDRCUTVZ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LDZCc0Q1ckJ0QyxrQkFDUSxDQURSLHFCQUNRLENBRFIsaUJBQ1EsQ0FEUixhQUNRLENBQUEsWUFDUCxxQkMvSU0sQ0FBQSxhQUNSLHNCQUdRLENBQUEsY0FDUixhQUdVLENBQUEsaUJBQ0ssQ0FBQSxnQkFDRCxDQUFBLG1DdERzSmQsYUFDVSxDQUFBLFdBQ0EsQ0FBQSxvQkFHRyxDQUhILHlCQUdHLENBSEgsWUFHRyxDQUFFLDJCQUNaLENBRFksZUFDWixDQURZLGdCQUNaLENBRFksT0FDUCxDQUFFLGlCQUlWLFVBQ1EsQ0FBQSxZQUNSLHNCdURwTDhDLEN2RG9MOUMsa0N1RHBMOEMsQ3ZEb0w5QyxtQnVEcEw4QyxDdkRvTDlDLDBCdURwTDhDLENBQUEsYUN3RTdDLG9CRHZFZ0QsQ0N1RWhELGdDRHZFZ0QsQ0N1RWhELGlCRHZFZ0QsQ0N1RWhELHdCRHZFZ0QsQ0FBQSxjQ3VFaEQsdUJEdEVVLENDc0VWLDhCRHRFVSxDQ3NFVixvQkR0RVUsQ0NzRVYsc0JEdEVVLENBQUEsZUNzRVYsd0JEckVXLENDcUVYLHFDRHJFVyxDQ3FFWCxxQkRyRVcsQ0NxRVgsNkJEckVXLENBQUEsY0NxRVgsb0NEcEVVLENDb0VWLHdCRHBFVSxDQ29FViw0QkRwRVUsQ0FBQSwrQkM2RVEsc0JEakYyQixDQ2lGM0Isa0NEakYyQixDQ2lGM0IsbUJEakYyQixDQ2lGM0IsMEJEakYyQixDQUFBLGdDQ2lGM0Isb0JEaEY4QixDQ2dGOUIsZ0NEaEY4QixDQ2dGOUIsaUJEaEY4QixDQ2dGOUIsd0JEaEY4QixDQUFBLGlDQ2dGOUIsdUJEL0VSLENDK0VRLDhCRC9FUixDQytFUSxvQkQvRVIsQ0MrRVEsc0JEL0VSLENBQUEsV0NpRkwsdUJEdkVBLENDdUVBLDhCRHZFQSxDQ3VFQSxvQkR2RUEsQ0N1RUEsc0JEdkVBLENBQUEsZ0JDZ0ZKLDZCRGhGSSxDQ2dGSix5QkRoRkksQ0NnRkoscUJEaEZJLENBQUEsY0M4RUwscUJEN0VRLENDNkVSLDRCRDdFUSxDQzZFUixrQkQ3RVEsQ0M2RVIsb0JEN0VRLENBQUEsbUJDK0VQLDJCRC9FTyxDQytFUCx1QkQvRU8sQ0MrRVAsbUJEL0VPLENBQUEsY0M2RVIsd0JENUVRLENDNEVSLDBCRDVFUSxDQzRFUixxQkQ1RVEsQ0M0RVIsa0JENUVRLENBQUEsbUJDOEVQLHlCRDlFTyxDQzhFUCwwQkQ5RU8sQ0M4RVAsaUJEOUVPLENBQUEsZUM0RVIseUJEM0VTLENDMkVULDJCRDNFUyxDQzJFVCxzQkQzRVMsQ0MyRVQsbUJEM0VTLENBQUEsb0JDNkVSLDBCRDdFUSxDQzZFUiwyQkQ3RVEsQ0M2RVIsa0JEN0VRLENBQUEscUJDaUZSLHVCRDlGUyxDQzhGVCw4QkQ5RlMsQ0M4RlQsb0JEOUZTLENDOEZULHNCRDlGUyxDQUFBLHdCQVlGLENBWkUsMEJBWUYsQ0FaRSxxQkFZRixDQVpFLGtCQVlGLENBQUEsNEJDd0ZPLENEeEZQLHlCQ3dGTyxDRHhGUCxvQkN3Rk8sQ0FBQSxlQUNoQiwyQkQzQkQsQ0MyQkMsZUQzQkQsQ0MyQkMsZ0JEM0JELENDMkJDLE9EM0JJLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsb0M3RHdFeUIsaUI2RHZFcEMsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxpQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsaUJBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxpQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGlCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsQ0FBQywyQzdEbUU4QixnQjZEbEUxQywyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGdCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxnQkFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGdCQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZ0JBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxDQUFDLDJDN0RtRThCLGU2RGxFMUMsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLGVBQ1gsMkJEaENKLENDZ0NJLGVEaENKLENDZ0NJLGdCRGhDSixDQ2dDSSxPRGhDQyxDQytCVSxlQUNYLDJCRGhDSixDQ2dDSSxlRGhDSixDQ2dDSSxnQkRoQ0osQ0NnQ0ksT0RoQ0MsQ0MrQlUsZUFDWCwyQkRoQ0osQ0NnQ0ksZURoQ0osQ0NnQ0ksZ0JEaENKLENDZ0NJLE9EaENDLENDK0JVLENBQUMsZ0JBNUZoQixtQkRZUyxDQ1pULG9CRFlTLENDWlQsbUJEWVMsQ0NaVCxZRFlTLENBQUEsaUJDVlIsa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLGlCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxtQkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEsY0FDUCw2QkRWTSxDQ1VOLDRCRFZNLENDVU4sMEJEVk0sQ0NVTixzQkRWTSxDQ1VOLGtCRFZNLENBQUEsc0JDYUwsNkJEWmEsQ0NZYiw2QkRaYSxDQ1liLGtDRFphLENDWWIsOEJEWmEsQ0NZYiwwQkRaYSxDQUFBLGlCQ1liLDJCRFhRLENDV1IsNEJEWFEsQ0NXUiw2QkRYUSxDQ1dSLHlCRFhRLENDV1IscUJEWFEsQ0FBQSx5QkNXUiwyQkRWZ0IsQ0NVaEIsNkJEVmdCLENDVWhCLHFDRFZnQixDQ1VoQixpQ0RWZ0IsQ0NVaEIsNkJEVmdCLENBQUEsb0M1RDZKc0Isd0I2RHpJaEMsbUJEZkMsQ0NlRCxvQkRmQyxDQ2VELG1CRGZDLENDZUQsWURmQyxDQUFBLHlCQ2lCQSxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEseUJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLDJCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSxzQkFDUCw2QkRyQ0YsQ0NxQ0UsNEJEckNGLENDcUNFLDBCRHJDRixDQ3FDRSxzQkRyQ0YsQ0NxQ0Usa0JEckNGLENBQUEsOEJDd0NHLDZCRHZDSyxDQ3VDTCw2QkR2Q0ssQ0N1Q0wsa0NEdkNLLENDdUNMLDhCRHZDSyxDQ3VDTCwwQkR2Q0ssQ0FBQSx5QkN1Q0wsMkJEdENBLENDc0NBLDRCRHRDQSxDQ3NDQSw2QkR0Q0EsQ0NzQ0EseUJEdENBLENDc0NBLHFCRHRDQSxDQUFBLGlDQ3NDQSwyQkRyQ1EsQ0NxQ1IsNkJEckNRLENDcUNSLHFDRHJDUSxDQ3FDUixpQ0RyQ1EsQ0NxQ1IsNkJEckNRLENBQUEsQ0FBYywyQzVEd0pjLHVCNkRwSXRDLG1CRGZDLENDZUQsb0JEZkMsQ0NlRCxtQkRmQyxDQ2VELFlEZkMsQ0FBQSx3QkNpQkEsa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLHdCQUNQLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSwwQkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEscUJBQ1AsNkJEckNGLENDcUNFLDRCRHJDRixDQ3FDRSwwQkRyQ0YsQ0NxQ0Usc0JEckNGLENDcUNFLGtCRHJDRixDQUFBLDZCQ3dDRyw2QkR2Q0ssQ0N1Q0wsNkJEdkNLLENDdUNMLGtDRHZDSyxDQ3VDTCw4QkR2Q0ssQ0N1Q0wsMEJEdkNLLENBQUEsd0JDdUNMLDJCRHRDQSxDQ3NDQSw0QkR0Q0EsQ0NzQ0EsNkJEdENBLENDc0NBLHlCRHRDQSxDQ3NDQSxxQkR0Q0EsQ0FBQSxnQ0NzQ0EsMkJEckNRLENDcUNSLDZCRHJDUSxDQ3FDUixxQ0RyQ1EsQ0NxQ1IsaUNEckNRLENDcUNSLDZCRHJDUSxDQUFBLENBQWMsMkM1RHdKYyxzQjZEcEl0QyxtQkRmQyxDQ2VELG9CRGZDLENDZUQsbUJEZkMsQ0NlRCxZRGZDLENBQUEsdUJDaUJBLGtCQUdPLENBSFAscUJBR08sQ0FIUCxpQkFHTyxDQUhQLGFBR08sQ0FBQSx1QkFDUCxrQkFHTyxDQUhQLHFCQUdPLENBSFAsaUJBR08sQ0FIUCxhQUdPLENBQUEseUJBQ1Asa0JBR08sQ0FIUCxxQkFHTyxDQUhQLGlCQUdPLENBSFAsYUFHTyxDQUFBLG9CQUNQLDZCRHJDRixDQ3FDRSw0QkRyQ0YsQ0NxQ0UsMEJEckNGLENDcUNFLHNCRHJDRixDQ3FDRSxrQkRyQ0YsQ0FBQSw0QkN3Q0csNkJEdkNLLENDdUNMLDZCRHZDSyxDQ3VDTCxrQ0R2Q0ssQ0N1Q0wsOEJEdkNLLENDdUNMLDBCRHZDSyxDQUFBLHVCQ3VDTCwyQkR0Q0EsQ0NzQ0EsNEJEdENBLENDc0NBLDZCRHRDQSxDQ3NDQSx5QkR0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LFNBTVAsUUFOTyxDQUFBLGFBU1AsWUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFBLFVBTVAsU0FOTyxDQUFBLGNBU1AsYUFUTyxDQUFBLFdBQ1IsVUFEUSxDQUFBLGVBR1AsY0FITyxDQUFB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QUNDLENBQUEsY0FDSCxDQUFBLHVCQUdILDRCQUNLLENBREwsd0JBQ0ssQ0FETCxvQkFDSyxDQUFBLGlCQUdiLDZCQUNjLENBRGQscUJBQ2MsQ0FBQSxXQUVKLENBQUEsZ0JBQ00sQ0FBQSw0QkFDSSxDQURKLHdCQUNJLENBREosb0JBQ0ksQ0FBQSw2RkFDNkQsQ0FEN0QscUZBQzZELENBQUEsZUFDaEYsYUFJUyxDQUFBLGlCQUNYLGVBRVcsQ0FBQSxZQUNYLFdBR1MsQ0FBQSxRQUNULFlBR1UsQ0FBQSxpQkFDVixtQkFPVSxDQVBWLG9CQU9VLENBUFYsbUJBT1UsQ0FQVixZQU9VLENBQUEsd0JBQ0ksQ0FESiwwQkFDSSxDQURKLHFCQUNJLENBREosa0JBQ0ksQ0FBQSxpQkFDZCxtQkFHVSxDQUhWLG9CQUdVLENBSFYsbUJBR1UsQ0FIVixZQUdVLENBQUEscUJBQ0ksQ0FESix1QkFDSSxDQURKLGtCQUNJLENBREosZUFDSSxDQUFBLG1CQUNkLG1CQUdVLENBSFYsb0JBR1UsQ0FIVixtQkFHVSxDQUhWLFlBR1UsQ0FBQSx1QkFDUSxDQURSLDhCQUNRLENBRFIsb0JBQ1EsQ0FEUixzQkFDUSxDQUFBLFdBQ2xCLFVBR1EsQ0FBQSxVQUlMLG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxVQURULG9CQUNTLENBQUEsVUFEVCxvQkFDUyxDQUFBLFVBRFQsb0JBQ1MsQ0FBQSxnQlg4TFYsY1d6TE8sQ0FBQSxpQkFDSSxDQUFBLG1CQUNFLENBQUEscUJBQ0MsQ0FBQSxjWHRDaEIsYVcwQ1EsQ0FBQSx3QkFDUixhQUdXLENBQUEsVUFDSCxDQUFBLGdDQUVMLGFBQ1UsQ0FBQSxpQkFDRSxDQUFBLG9CQUNHLENBQUEsc0NBR2pCLGFBQ2EsQ0FBRSxnQkFDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBicmVha3BvaW50c1xuLy8vL1xuXG4vLy8gQSBsaXN0IG9mIG5hbWVkIGJyZWFrcG9pbnRzLiBZb3UgY2FuIHVzZSB0aGVzZSB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0byBxdWlja2x5IGNyZWF0ZSBtZWRpYSBxdWVyaWVzLlxuLy8vIEB0eXBlIE1hcFxuJGJyZWFrcG9pbnRzOiAoXG4gIHNtYWxsOiAwLFxuICBtZWRpdW06IDY0MHB4LFxuICBsYXJnZTogMTAyNHB4LFxuICB4bGFyZ2U6IDEyMDBweCxcbiAgeHhsYXJnZTogMTQ0MHB4LFxuKSAhZGVmYXVsdDtcblxuLy8vIEEgbGlzdCBvZiBuYW1lZCBIaURQSSBicmVha3BvaW50cy4gWW91IGNhbiB1c2UgdGhlc2Ugd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gcXVpY2tseSBjcmVhdGUgbWVkaWEgcXVlcmllcyBmb3IgcmVzb2x1dGlvbnMuXG4vLy8gVmFsdWVzIG11c3QgcmVwcmVzZW50IHRoZSBkZXZpY2UgcGl4ZWxzIC8gd2ViIHBpeGVscyByYXRpb24gYW5kIGJlIHVuaXRsZXNzIG9yIGluIERQUFguXG4vLy8gQHR5cGUgTWFwXG4kYnJlYWtwb2ludHMtaGlkcGk6IChcbiAgaGlkcGktMTogMSxcbiAgaGlkcGktMS01OiAxLjUsXG4gIGhpZHBpLTI6IDIsXG4gIHJldGluYTogMixcbiAgaGlkcGktMzogM1xuKSAhZGVmYXVsdDtcblxuLy8vIFRoZSBsYXJnZXN0IG5hbWVkIGJyZWFrcG9pbnQgaW4gd2hpY2ggdG8gaW5jbHVkZSBwcmludCBhcyBhIG1lZGlhIHR5cGVcbi8vLyBAdHlwZSBLZXl3b3JkXG4kcHJpbnQtYnJlYWtwb2ludDogbGFyZ2UgIWRlZmF1bHQ7XG5cbiQtemYtemVyby1icmVha3BvaW50OiBzbWFsbCAhZGVmYXVsdDtcblxuJC16Zi1icmVha3BvaW50cy1rZXlzOiBtYXAtdG8tbGlzdCgkYnJlYWtwb2ludHMsICdrZXlzJyk7XG5cbkBpZiBudGgobWFwLXZhbHVlcygkYnJlYWtwb2ludHMpLCAxKSAhPSAwIHtcbiAgQGVycm9yICdUaGUgZmlyc3Qga2V5IGluIHRoZSAkYnJlYWtwb2ludHMgbWFwIG11c3QgaGF2ZSBhIHZhbHVlIG9mIFwiMFwiLic7XG59XG5AZWxzZSB7XG4gICQtemYtemVyby1icmVha3BvaW50OiBudGgobWFwLWtleXMoJGJyZWFrcG9pbnRzKSwgMSk7XG59XG5cbi8vLyBBbGwgb2YgdGhlIG5hbWVzIGluIHRoaXMgbGlzdCB3aWxsIGJlIG91dHB1dCBhcyBjbGFzc2VzIGluIHlvdXIgQ1NTLCBsaWtlIGAuc21hbGwtMTJgLCBgLm1lZGl1bS02YCwgYW5kIHNvIG9uLiBFYWNoIHZhbHVlIGluIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgaW4gdGhlIGAkYnJlYWtwb2ludHNgIG1hcC5cbi8vLyBAdHlwZSBMaXN0XG4kYnJlYWtwb2ludC1jbGFzc2VzOiAoc21hbGwgbWVkaXVtIGxhcmdlKSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyBhIG1lZGlhIHF1ZXJ5IHN0cmluZyBtYXRjaGluZyB0aGUgaW5wdXQgdmFsdWUuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdG8gc2VlIHdoYXQgdGhlIHBvc3NpYmxlIGlucHV0cyBhcmUuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkdmFsIFtzbWFsbF0gLSBCcmVha3BvaW50IG5hbWUsIG9yIHB4LCByZW0sIG9yIGVtIHZhbHVlIHRvIHByb2Nlc3MuXG5AZnVuY3Rpb24gYnJlYWtwb2ludCgkdmFsOiAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAvLyBXZWIgc3RhbmRhcmQgUGl4ZWxzIHBlciBpbmNoLiAoMWRkcHggLyAkc3RkLXdlYi1kcGkpID0gMWRwaVxuICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy12YWx1ZXMtMy8jYWJzb2x1dGUtbGVuZ3Roc1xuICAkc3RkLXdlYi1kcGk6IDk2O1xuXG4gIC8vIFNpemUgb3Iga2V5d29yZFxuICAkYnA6IG50aCgkdmFsLCAxKTtcbiAgLy8gVmFsdWUgb2YgdGhlIGZvbGxvd2luZyBicmVha3BvaW50XG4gICRicC1uZXh0OiBudWxsO1xuICAvLyBWYWx1ZSBmb3IgbWF4LXdpZHRoIG1lZGlhIHF1ZXJpZXNcbiAgJGJwLW1pbjogbnVsbDtcbiAgLy8gVmFsdWUgZm9yIG1pbi13aWR0aCBtZWRpYSBxdWVyaWVzXG4gICRicC1tYXg6IG51bGw7XG4gIC8vIERpcmVjdGlvbiBvZiBtZWRpYSBxdWVyeSAodXAsIGRvd24sIG9yIG9ubHkpXG4gICRkaXI6IGlmKGxlbmd0aCgkdmFsKSA+IDEsIG50aCgkdmFsLCAyKSwgdXApO1xuICAvLyBJZiBuYW1lZCwgbmFtZSBvZiB0aGUgYnJlYWtwb2ludFxuICAkbmFtZTogbnVsbDtcbiAgLy8gSWYgdGhlIGJyZWFrcG9pbnQgaXMgYSBIaURQSSBicmVha3BvaW50XG4gICRoaWRwaTogZmFsc2U7XG5cbiAgLy8gT3JpZW50YXRpb24gbWVkaWEgcXVlcmllcyBoYXZlIGEgdW5pcXVlIHN5bnRheFxuICBAaWYgJGJwID09ICdsYW5kc2NhcGUnIG9yICRicCA9PSAncG9ydHJhaXQnIHtcbiAgICBAcmV0dXJuICcob3JpZW50YXRpb246ICN7JGJwfSknO1xuICB9XG5cbiAgLy8gSWYgYSBicmVha3BvaW50IG5hbWUgaXMgZ2l2ZW4sIGdldCBpdHMgdmFsdWUgZnJvbSB0aGUgJGJyZWFrcG9pbnRzLyRicmVha3BvaW50cy1oaWRwaSBtYXAuXG4gIEBpZiB0eXBlLW9mKCRicCkgPT0gJ3N0cmluZycge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRicCkge1xuICAgICAgJG5hbWU6ICRicDtcbiAgICAgICRicDogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgICAgICRicC1uZXh0OiAtemYtbWFwLW5leHQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gICAgfVxuICAgIEBlbHNlIGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cy1oaWRwaSwgJGJwKSB7XG4gICAgICAkbmFtZTogJGJwO1xuICAgICAgJGJwOiBtYXAtZ2V0KCRicmVha3BvaW50cy1oaWRwaSwgJG5hbWUpO1xuICAgICAgJGJwLW5leHQ6IC16Zi1tYXAtbmV4dC1udW1iZXIoJGJyZWFrcG9pbnRzLWhpZHBpLCAkYnApO1xuICAgICAgJGhpZHBpOiB0cnVlO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkYnA6IDA7XG4gICAgICBAd2FybiAnYnJlYWtwb2ludCgpOiBcIiN7JHZhbH1cIiBpcyBub3QgZGVmaW5lZCBpbiB5b3VyIGAkYnJlYWtwb2ludHNgIG9yIGAkYnJlYWtwb2ludHMtaGlkcGlgIHNldHRpbmcuJztcbiAgICB9XG4gIH1cblxuICBAaWYgbm90ICRuYW1lIGFuZCAkZGlyID09ICdvbmx5JyB7XG4gICAgQHdhcm4gJ2JyZWFrcG9pbnQoKTogT25seSBuYW1lZCBtZWRpYSBxdWVyaWVzIGNhbiBoYXZlIGFuIGBvbmx5YCByYW5nZS4nO1xuICAgIEByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE9ubHkgJ29ubHknIGFuZCAndXAnIGhhdmUgYSBtaW4gbGltaXQuXG4gIEBpZiAkZGlyID09ICdvbmx5JyBvciAkZGlyID09ICd1cCcge1xuICAgICRicC1taW46IGlmKCRoaWRwaSwgc3RyaXAtdW5pdCgkYnApLCAtemYtYnAtdG8tZW0oJGJwKSk7XG4gIH1cbiAgLy8gT25seSAnb25seScgYW5kICdkb3duJyBoYXZlIGEgbWF4IGxpbWl0LlxuICBAaWYgJGRpciA9PSAnb25seScgb3IgJGRpciA9PSAnZG93bicge1xuICAgIC8vIElmIHRoZSBicmVha3BvaW50IGlzIGEgdmFsdWUsIHVzZSBpdCBhcyBtYXggbGltaXQuXG4gICAgQGlmIG5vdCAkbmFtZSB7XG4gICAgICAkYnAtbWF4OiBpZigkaGlkcGksIHN0cmlwLXVuaXQoJGJwKSwgLXpmLWJwLXRvLWVtKCRicCkpO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgYnJlYWtwb2ludCBpcyBuYW1lZCwgdGhlIG1heCBsaW1pdCBpcyB0aGUgZm9sbG93aW5nIGJyZWFrcG9pbnQgLSAxcHguXG4gICAgQGVsc2UgaWYgJGJwLW5leHQge1xuICAgICAgLy8gTWF4IHZhbHVlIGlzIDAuMnB4IHVuZGVyIHRoZSBuZXh0IGJyZWFrcG9pbnQgKDAuMDIgLyAxNiA9IDAuMDAxMjUpLlxuICAgICAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTEzMTNcbiAgICAgICRicC1tYXg6IGlmKCRoaWRwaSwgJGJwLW5leHQgLSAoMS8kc3RkLXdlYi1kcGkpLCAtemYtYnAtdG8tZW0oJGJwLW5leHQpIC0gMC4wMDEyNSk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdGhlIG1lZGlhIHF1ZXJ5IHN0cmluZyBmcm9tIG1pbiBhbmQgbWF4IGxpbWl0cy5cbiAgQGlmICRoaWRwaSB7XG4gICAgLy8gR2VuZXJhdGUgdmFsdWVzIGluIERQSSBpbnN0ZWFkIG9mIERQUFggZm9yIGFuIElFOS0xMS9PcGVyYSBtaW5pIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gU2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9Y3NzLW1lZGlhLXJlc29sdXRpb25cbiAgICAkYnAtbWluLWRwaTogaWYoJGJwLW1pbiwgJGJwLW1pbiAqICRzdGQtd2ViLWRwaSAqIDFkcGksICRicC1taW4pO1xuICAgICRicC1tYXgtZHBpOiBpZigkYnAtbWF4LCAkYnAtbWF4ICogJHN0ZC13ZWItZHBpICogMWRwaSwgJGJwLW1heCk7XG4gICAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICAgIC16Zi1icC1qb2luKCRicC1taW4sICRicC1tYXgsICctd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW8nLCAnLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvJyksXG4gICAgICAtemYtYnAtam9pbigkYnAtbWluLWRwaSwgJGJwLW1heC1kcGksICdtaW4tcmVzb2x1dGlvbicsICdtYXgtcmVzb2x1dGlvbicpLFxuICAgICAgJywgJyk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gLXpmLWJwLWpvaW4oJGJwLW1pbiwgJGJwLW1heCk7XG4gIH1cbn1cblxuLy8vIFdyYXBzIGEgbWVkaWEgcXVlcnkgYXJvdW5kIHRoZSBjb250ZW50IHlvdSBwdXQgaW5zaWRlIHRoZSBtaXhpbi4gVGhpcyBtaXhpbiBhY2NlcHRzIGEgbnVtYmVyIG9mIHZhbHVlczpcbi8vLyAgLSBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIHRoZSBtaXhpbiB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBgJGJyZWFrcG9pbnRzYCBhbmQgYCRicmVha3BvaW50cy1oaWRwaWAgbWFwcywgYW5kIHVzZSBhIG1lZGlhIHF1ZXJ5IHRoZXJlLlxuLy8vICAtIElmIGEgcGl4ZWwgdmFsdWUgaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBlbSB2YWx1ZSB1c2luZyBgJGdsb2JhbC1mb250LXNpemVgIGFzIHRoZSBiYXNlLlxuLy8vICAtIElmIGEgcmVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHVuaXQgd2lsbCBiZSBjaGFuZ2VkIHRvIGVtLlxuLy8vICAtIElmIGFuIGVtIHZhbHVlIGlzIHBhc3NlZCwgdGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBhcy1pcy5cbi8vL1xuLy8vIElmIG11bHRpcGxlIHZhbHVlcyBhcmUgcGFzc2VkLCB0aGUgbWl4aW4gd2lsbCBnZW5lcmF0ZSBhIG1lZGlhIHF1ZXJ5IGZvciBlYWNoIG9mIHRoZW0gYXMgZGVzY3JpYmVkIGFib3ZlLlxuLy8vIFNpbmNlIHRoZSBjb250ZW50IGlzIGR1cGxpY2F0ZWQgZm9yIGVhY2ggYnJlYWtwb2ludCwgdGhpcyBtaXhpbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcHJvcGVydGllcyB0aGF0XG4vLy8gY2hhbmdlIGFjcm9zcyBicmVha3BvaW50cy5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICR2YWx1ZXMuLi4gLSBCcmVha3BvaW50IG5hbWUgb3IgcHgvcmVtL2VtIHZhbHVlIHRvIHByb2Nlc3MuXG4vLy9cbi8vLyBAb3V0cHV0IElmIHRoZSBicmVha3BvaW50IGlzIFwiMHB4IGFuZCBsYXJnZXJcIiwgb3V0cHV0cyB0aGUgY29udGVudCBhcy1pcy4gT3RoZXJ3aXNlLCBvdXRwdXRzIHRoZSBjb250ZW50IHdyYXBwZWQgaW4gYSBtZWRpYSBxdWVyeS5cbkBtaXhpbiBicmVha3BvaW50KCR2YWx1ZXMuLi4pIHtcbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHZhbHVlcykge1xuICAgICR2YWx1ZTogbnRoKCR2YWx1ZXMsICRpKTtcbiAgICAkc3RyOiBicmVha3BvaW50KCR2YWx1ZSk7XG4gICAgJGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsIG50aCgkdmFsdWUsIDEpKTtcbiAgICAkcGJwOiBpbmRleCgkLXpmLWJyZWFrcG9pbnRzLWtleXMsICRwcmludC1icmVha3BvaW50KTtcbiAgICAvLyBEaXJlY3Rpb24gb2YgbWVkaWEgcXVlcnkgKHVwLCBkb3duLCBvciBvbmx5KVxuICAgICRkaXI6IGlmKGxlbmd0aCgkdmFsdWUpID4gMSwgbnRoKCR2YWx1ZSwgMiksIHVwKTtcblxuICAgICRvbGQtemYtc2l6ZTogbnVsbDtcblxuICAgIC8vIE1ha2UgYnJlYWtwb2ludCBzaXplIGF2YWlsYWJsZSBhcyBhIHZhcmlhYmxlXG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6IG50aCgkdmFsdWUsIDEpICFnbG9iYWw7IC8vIGdldCB0aGUgZmlyc3QgdmFsdWUgdG8gYWNjb3VudCBmb3IgYG9ubHlgIGFuZCBgZG93bmAga2V5d29yZHNcblxuICAgIC8vIElmICRzdHIgaXMgc3RpbGwgYW4gZW1wdHkgc3RyaW5nLCBubyBtZWRpYSBxdWVyeSBpcyBuZWVkZWRcbiAgICBAaWYgJHN0ciA9PSAnJyB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHdyYXAgdGhlIGNvbnRlbnQgaW4gYSBtZWRpYSBxdWVyeVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIEZvciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHByaW50LWJyZWFrcG9pbnQsIGFkZCBwcmludCB0byB0aGUgbWVkaWEgdHlwZXNcbiAgICAgIC8vIGdlbmVyYXRlIHByaW50IGlmIHRoZSBicmVha3BvaW50IGFmZmVjdHMgdGhlIHByaW50LWJyZWFrcG9pbnQgKG9yIHNtYWxsZXIpLlxuICAgICAgLy8gVGhpcyBtZWFucyB0aGUgY3VycmVudCBjb25kaXRpb24gb25seSBuZWVkcyB0byBiZSBleHRlbmRlZCBzbyAnZG93bicgYWx3YXlzIGdlbmVyYXRlcyBwcmludC5cbiAgICAgIEBpZiAkYnAgIT0gbnVsbCBhbmQgKCRicCA8PSAkcGJwIG9yICRkaXIgPT0gZG93bikge1xuICAgICAgICBAbWVkaWEgcHJpbnQsIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgI3skc3RyfSB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkLXpmLXNpemU6ICRvbGQtemYtc2l6ZSAhZ2xvYmFsO1xuICB9XG59XG5cbi8vLyBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludHMgbWFwIHRvIGEgVVJMLWVuY29kZWQgc3RyaW5nLCBsaWtlIHRoaXM6IGBrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMmAuIFRoZSB2YWx1ZSBpcyB0aGVuIGRyb3BwZWQgaW50byB0aGUgQ1NTIGZvciBhIHNwZWNpYWwgYDxtZXRhPmAgdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHQuIFRoaXMgaXMgaG93IHdlIHRyYW5zZmVyIHZhbHVlcyBmcm9tIFNhc3MgdG8gSmF2YVNjcmlwdCwgc28gdGhleSBjYW4gYmUgZGVmaW5lZCBpbiBvbmUgcGxhY2UuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byBjb252ZXJ0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbWFwJ3MgY29udGVudHMuXG5AZnVuY3Rpb24gLXpmLWJwLXNlcmlhbGl6ZSgkbWFwKSB7XG4gICRzdHI6ICcnO1xuICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcCB7XG4gICAgJHN0cjogJHN0ciArICRrZXkgKyAnPScgKyAtemYtYnAtdG8tZW0oJHZhbHVlKSArICcmJztcbiAgfVxuICAkc3RyOiBzdHItc2xpY2UoJHN0ciwgMSwgLTIpO1xuXG4gIEByZXR1cm4gJHN0cjtcbn1cblxuLy8vIEZpbmQgdGhlIG5leHQga2V5IGluIGEgbWFwLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtNYXB9ICRtYXAgLSBNYXAgdG8gdHJhdmVyc2UuXG4vLy8gQHBhcmFtIHtNaXhlZH0gJGtleSAtIEtleSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtNaXhlZH0gVGhlIHZhbHVlIGZvciB0aGUga2V5IGFmdGVyIGAka2V5YCwgaWYgYCRrZXlgIHdhcyBmb3VuZC4gSWYgYCRrZXlgIHdhcyBub3QgZm91bmQsIG9yIGAka2V5YCB3YXMgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIG1hcCwgcmV0dXJucyBgbnVsbGAuXG5AZnVuY3Rpb24gLXpmLW1hcC1uZXh0KCRtYXAsICRrZXkpIHtcblxuICAvLyBTdG9yZSB0aGUga2V5cyBvZiB0aGUgbWFwIGFzIGEgbGlzdFxuICAkdmFsdWVzOiBtYXAta2V5cygkbWFwKTtcblxuICAkaTogMDtcblxuICAvLyBJZiB0aGUgS2V5IEV4aXN0cywgR2V0IHRoZSBpbmRleCBvZiB0aGUga2V5IHdpdGhpbiB0aGUgbWFwIGFuZCBhZGQgMSB0byBpdCBmb3IgdGhlIG5leHQgYnJlYWtwb2ludCBpbiB0aGUgbWFwXG4gIEBpZiAobWFwLWhhcy1rZXkoJG1hcCwgJGtleSkpIHtcbiAgICAkaTogaW5kZXgoJHZhbHVlcywgJGtleSkgKyAxO1xuICB9XG5cbiAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBvciBpdCdzIHRoZSBsYXN0IGtleSBpbiB0aGUgbWFwLCByZXR1cm4gbnVsbFxuICBAaWYgKCRpID4gbGVuZ3RoKCRtYXApIG9yICRpID09IDApIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbHVlXG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgbnRoKCR2YWx1ZXMsICRpKSk7XG4gIH1cblxufVxuXG4vLy8gRmluZCB0aGUgbmV4dCBudW1iZXIgaW4gYSBtYXAuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge01hcH0gJG1hcCAtIE1hcCB0byB0cmF2ZXJzZS5cbi8vLyBAcGFyYW0ge01peGVkfSAkbnVtYmVyIC0gTnVtYmVyIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge01peGVkfSBUaGUgbnVtYmVyIGZvbGxvd2luZyBgJG51bWJlcmAsIGlmIGAkbnVtYmVyYCB3YXMgZm91bmQuIElmIGAkbnVtYmVyYCB3YXMgbm90IGZvdW5kLCBvciBgJG51bWJlcmAgd2FzIHRoZSBiaWdnZXN0IG51bWJlciBpbiB0aGUgbWFwLCByZXR1cm5zIGBudWxsYC5cbkBmdW5jdGlvbiAtemYtbWFwLW5leHQtbnVtYmVyKCRtYXAsICRudW1iZXIpIHtcblxuICAkbmV4dF9udW1iZXI6IG51bGw7XG5cbiAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgIEBpZiB0eXBlLW9mKCR2KSA9PSAnbnVtYmVyJyBhbmQgJHYgPiAkbnVtYmVyIGFuZCAoJG5leHRfbnVtYmVyID09IG51bGwgb3IgJHYgPCAkbmV4dF9udW1iZXIpIHtcbiAgICAgICRuZXh0X251bWJlcjogJHY7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmV4dF9udW1iZXI7XG59XG5cbi8vLyBSZXR1cm4gYSBsaXN0IG9mIG91ciBuYW1lZCBicmVha3BvaW50cyBsZXNzIHRoYW4gJGtleS4gVXNlZnVsIGZvciBkZWFsaW5nIHdpdGhcbi8vLyByZXNwb25zaXZlIGd1dHRlcnMgZm9yIHRoZSBncmlkLlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRrZXkgLSBLZXkgdG8gdXNlIGFzIGxhc3QgYnJlYWtwb2ludC5cbi8vL1xuLy8vIEByZXR1cm5zIHtBcnJheX0gVGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgdXAgdG8gYW5kLiBJZiAka2V5IGlzIGF1dG8sIHJldHVybnMgYnJlYWtwb2ludHMgYWJvdmUgdGhlIHplcm9cbkBmdW5jdGlvbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCRrZXkpIHtcbiAgJGxpc3Q6ICgpO1xuICAkZm91bmRfa2V5OiBmYWxzZTtcblxuICBAZWFjaCAkbmFtZSBpbiAkLXpmLWJyZWFrcG9pbnRzLWtleXMge1xuICAgIEBpZiAoJG5hbWUgPT0gJGtleSkge1xuICAgICAgJGZvdW5kX2tleTogdHJ1ZTtcbiAgICB9XG4gICAgQGlmIG5vdCAkZm91bmRfa2V5IHtcbiAgICAgICRsaXN0OiBhcHBlbmQoJGxpc3QsICRuYW1lKTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiAkbGlzdDtcbn1cblxuLy8vIFJldHVybiBhIGxpc3Qgb2Ygb3VyIG5hbWVkIGJyZWFrcG9pbnRzIGxlc3MgdGhhbiAka2V5LiBVc2VmdWwgZm9yIGRlYWxpbmcgd2l0aFxuLy8vIHJlc3BvbnNpdmUgZ3V0dGVycyBmb3IgdGhlIGdyaWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgLSBhIG5hbWVkIG9yIG5vbi1uYW1lZCBicmVha3BvaW50LlxuLy8vXG4vLy8gQHJldHVybnMge0FycmF5fSBUaGUgbGlzdCBvZiBicmVha3BvaW50cyB1cCB0byBhbmQuIElmICRrZXkgaXMgYXV0bywgcmV0dXJucyBicmVha3BvaW50cyBhYm92ZSB0aGUgemVyb1xuQGZ1bmN0aW9uIC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgJGxhc3Q6ICQtemYtemVyby1icmVha3BvaW50O1xuICAkZm91bmQ6IGZhbHNlO1xuXG4gICR2YWx1ZTogdW5pdGxlc3MtY2FsYygkYnJlYWtwb2ludCwgMXB4KTtcbiAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgIEBpZiBub3QgJGZvdW5kIHtcbiAgICAgIEBpZiB1bml0bGVzcy1jYWxjKCR2YWwpID4gJHZhbHVlIHtcbiAgICAgICAgJGZvdW5kOiB0cnVlO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRsYXN0OiAka2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxhc3Q7XG59XG5cbi8vLyBHZXQgYSB2YWx1ZSBmb3IgYSBicmVha3BvaW50IGZyb20gYSByZXNwb25zaXZlIGNvbmZpZyBtYXAgb3Igc2luZ2xlIHZhbHVlLlxuLy8vIC0gSWYgdGhlIGNvbmZpZyBpcyBhIHNpbmdsZSB2YWx1ZSwgcmV0dXJuIGl0IHJlZ2FyZGxlc3Mgb2YgYCR2YWx1ZWAuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBoYXMgdGhlIGtleSBgJHZhbHVlYCwgdGhlIGV4YWN0IGJyZWFrcG9pbnQgdmFsdWUgaXMgcmV0dXJuZWQuXG4vLy8gLSBJZiB0aGUgY29uZmlnIGlzIGEgbWFwIGFuZCBkb2VzICpub3QqIGhhdmUgdGhlIGJyZWFrcG9pbnQsIHRoZSB2YWx1ZSBtYXRjaGluZyB0aGUgbmV4dCBsb3dlc3QgYnJlYWtwb2ludCBpbiB0aGUgY29uZmlnIG1hcCBpcyByZXR1cm5lZC5cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIFJlc3BvbnNpdmUgY29uZmlnIG1hcCBvciBzaW5nbGUgdmFsdWUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgLSBCcmVha3BvaW50IG5hbWUgdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TWl4ZWR9IFRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUuXG5AZnVuY3Rpb24gLXpmLWdldC1icC12YWwoJG1hcCwgJHZhbHVlKSB7XG4gIC8vIElmIHRoZSBnaXZlbiBtYXAgaXMgYSBzaW5nbGUgdmFsdWUsIHJldHVybiBpdFxuICBAaWYgdHlwZS1vZigkbWFwKSA9PSAnbnVtYmVyJyB7XG4gICAgQHJldHVybiAkbWFwO1xuICB9XG5cblxuICAvLyBDaGVjayBpZiB0aGUgYnJlYWtwb2ludCBuYW1lIGV4aXN0cyBnbG9iYWxseVxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJHZhbHVlKSB7XG4gICAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgICAkdmFsdWU6IC16Zi1jbG9zZXN0LW5hbWVkLWJyZWFrcG9pbnQoJHZhbHVlKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIEByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgaWYgdGhlIGJyZWFrcG9pbnQgbmFtZSBleGlzdHMgaW4gdGhlIGxvY2FsIGNvbmZpZyBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJG1hcCwgJHZhbHVlKSB7XG4gICAgLy8gSWYgaXQgZG9lcywganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gICAgQHJldHVybiBtYXAtZ2V0KCRtYXAsICR2YWx1ZSk7XG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCBmaW5kIHRoZSBuZXh0IGxvd2VzdCBicmVha3BvaW50IGFuZCByZXR1cm4gdGhhdCB2YWx1ZVxuICBAZWxzZSB7XG4gICAgJGFuY2hvcjogbnVsbDtcbiAgICAkZm91bmQ6IGZhbHNlO1xuXG4gICAgQGVhY2ggJGtleSwgJHZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgQGlmIG5vdCAkZm91bmQge1xuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG1hcCwgJGtleSkge1xuICAgICAgICAgICRhbmNob3I6ICRrZXk7XG4gICAgICAgIH1cbiAgICAgICAgQGlmICRrZXkgPT0gJHZhbHVlIHtcbiAgICAgICAgICAkZm91bmQ6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuIG1hcC1nZXQoJG1hcCwgJGFuY2hvcik7XG4gIH1cbn1cblxuLy8vIFJldHVybiB0aGUgYmVzdCBicmVha3BvaW50IHRvIHVzZSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxpbmcgY29udGV4dC4gSXQgcmV0dXJucyBpbiBvcmRlcjpcbi8vLyAxLiB0aGUgZ2l2ZW4gYCR2YWx1ZWAgYXJndW1lbnQgaWYgaXQgaXMgbm90IG51bGwuXG4vLy8gMi4gdGhlIGdsb2JhbCBicmVha3BvaW50IGNvbnRleHQgYCQtemYtc2l6ZWAgaWYgaXQgaXMgbm90IG51bGwgKGxpa2UgaWYgY2FsbGVkIGluc2lkZSB0aGVuIGBicmVha3BvaW50KClgIG1peGluKVxuLy8vIDMuIHRoZSBnaXZlbiBgJGRlZmF1bHRgIGFyZ3VtZW50LlxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkdmFsdWUgW251bGxdIC0gQnJlYWtwb2ludCB0byB1c2UgaW4gcHJpb3JpdHkgaWYgbm9uLW51bGwuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGVmYXVsdCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBieSBkZWZhdWx0IGlmIG5vIG90aGVyIHZhbHVlIGNhbiBiZSB1c2VkLlxuLy8vXG4vLy8gQHJldHVybiB7S2V5d29yZH0gVGhlIHJlc29sdmVkIGJyZWFrcG9pbnQuXG5AZnVuY3Rpb24gLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkdmFsdWU6IG51bGwsICRkZWZhdWx0OiBudWxsKSB7XG4gIEBpZiAoJHZhbHVlICE9IG51bGwpIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuICBAZWxzZSBpZiAodmFyaWFibGUtZXhpc3RzKC16Zi1zaXplKSBhbmQgdHlwZS1vZigkLXpmLXNpemUpICE9ICdudW1iZXInKSBhbmQgJC16Zi1zaXplICE9IG51bGwge1xuICAgIEByZXR1cm4gJC16Zi1zaXplO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuICRkZWZhdWx0O1xuICB9XG59XG5cbi8vLyBSZXR1cm4gbWVkaWEgcXVlcnkgc3RyaW5nIGZyb20gdGhlIGdpdmVuIG1pbiBhbmQvb3IgbWF4IGxpbWl0cy5cbi8vLyBJZiBhIGxpbWl0IGlzIGVxdWFsIHRvIGBudWxsYCBvciBgMGAsIGl0IGlzIGlnbm9yZWQuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF0gLSBNaW4gbWVkaWEgcXVlcnkgbGltaXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXggWzBdIC0gTWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWluLW5hbWUgWydtaW4td2lkdGgnXSAtIE5hbWUgb2YgdGhlIG1pbiBtZWRpYSBxdWVyeSBsaW1pdC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGRlbGltaXRlciBbJ21heC13aWR0aCddIC0gTmFtZSBvZiB0aGUgbWF4IG1lZGlhIHF1ZXJ5IGxpbWl0LlxuLy8vXG4vLy8gQHJldHVybnMge1N0cmluZ30gTWVkaWEgUXVlcnkgc3RyaW5nLlxuQGZ1bmN0aW9uIC16Zi1icC1qb2luKFxuICAkbWluOiAwLFxuICAkbWF4OiAwLFxuICAkbWluLW5hbWU6ICdtaW4td2lkdGgnLFxuICAkbWF4LW5hbWU6ICdtYXgtd2lkdGgnXG4pIHtcbiAgQHJldHVybiB6Zi1zdHItam9pbihcbiAgICBpZigkbWluIGFuZCAkbWluID4gMCwgJygjeyRtaW4tbmFtZX06ICN7JG1pbn0pJywgbnVsbCksXG4gICAgaWYoJG1heCBhbmQgJG1heCA+IDAsICcoI3skbWF4LW5hbWV9OiAjeyRtYXh9KScsIG51bGwpLFxuICAgICcgYW5kICcpO1xufVxuXG4kc21hbGwtdXA6ICcnO1xuJHNtYWxsLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCBzbWFsbCkge1xuICAkc21hbGwtdXA6IHNjcmVlbjtcbiAgJHNtYWxsLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KHNtYWxsIG9ubHkpfScpO1xufVxuXG4kbWVkaXVtLXVwOiAnJztcbiRtZWRpdW0tb25seTogJyc7XG5cbkBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsIG1lZGl1bSkge1xuICAkbWVkaXVtLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChtZWRpdW0pfScpO1xuICAkbWVkaXVtLW9ubHk6IHVucXVvdGUoJ3NjcmVlbiBhbmQgI3ticmVha3BvaW50KG1lZGl1bSBvbmx5KX0nKTtcbn1cblxuJGxhcmdlLXVwOiAnJztcbiRsYXJnZS1vbmx5OiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgbGFyZ2UpIHtcbiAgJGxhcmdlLXVwOiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSl9Jyk7XG4gICRsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludChsYXJnZSBvbmx5KX0nKTtcbn1cblxuJHhsYXJnZS11cDogJyc7XG4keGxhcmdlLW9ubHk6ICcnO1xuXG5AaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCB4bGFyZ2UpIHtcbiAgJHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeGxhcmdlKX0nKTtcbiAgJHhsYXJnZS1vbmx5OiB1bnF1b3RlKCdzY3JlZW4gYW5kICN7YnJlYWtwb2ludCh4bGFyZ2Ugb25seSl9Jyk7XG59XG5cbiR4eGxhcmdlLXVwOiAnJztcblxuQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgeHhsYXJnZSkge1xuICAkeHhsYXJnZS11cDogdW5xdW90ZSgnc2NyZWVuIGFuZCAje2JyZWFrcG9pbnQoeHhsYXJnZSl9Jyk7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgcmV2ZWFsXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSBtb2RhbC5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHdpZHRoIG9mIGEgbW9kYWwsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtd2lkdGg6IDYwMHB4ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXhpbXVtIHdpZHRoIG9mIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLW1heC13aWR0aDogJGdsb2JhbC13aWR0aCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgYXJvdW5kIGEgbW9kYWwuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcmV2ZWFsLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHotaW5kZXggZm9yIG1vZGFscy4gVGhlIG92ZXJsYXkgdXNlcyB0aGlzIHZhbHVlLCB3aGlsZSB0aGUgbW9kYWwgaXRzZWxmIHVzZXMgdGhpcyB2YWx1ZSBwbHVzIG9uZS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXZlYWwtemluZGV4OiAxMDA1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBtb2RhbCBvdmVybGF5cy5cbi8vLyBAdHlwZSBDb2xvclxuJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjQ1KSAhZGVmYXVsdDtcblxuXG4vLyBQbGFjZWhvbGRlciBzZWxlY3RvciBmb3IgbWVkaXVtLWFuZC11cCBtb2RhbHNcbi8vIFByZXZlbnRzIGR1cGxpY2F0ZSBDU1Mgd2hlbiBkZWZpbmluZyBtdWx0aXBsZSBSZXZlYWwgc2l6ZXNcbi8vIFRoaXMgc2hvdWxkIGJlIGluIHRoZSBzYW1lIGJyZWFrcG9pbnQgdGhlbiBgQG1peGluIHJldmVhbC1tb2RhbC13aWR0aGBcbkBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICVyZXZlYWwtY2VudGVyZWQge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gIH1cbn1cblxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbW9kYWwgb3ZlcmxheS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgb3ZlcmxheS5cbkBtaXhpbiByZXZlYWwtb3ZlcmxheSgkYmFja2dyb3VuZDogJHJldmVhbC1vdmVybGF5LWJhY2tncm91bmQpIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICRyZXZlYWwtemluZGV4O1xuXG4gIGRpc3BsYXk6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4vLy8gQWRkcyBiYXNlIHN0eWxlcyBmb3IgYSBtb2RhbC5cbkBtaXhpbiByZXZlYWwtbW9kYWwtYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgei1pbmRleDogJHJldmVhbC16aW5kZXggKyAxO1xuICAvLyBXb3JrYXJvdW5kIGFuZHJvaWQgYnJvd3NlciB6LWluZGV4IGJ1Z1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHJldmVhbC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJHJldmVhbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyZXZlYWwtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcmV2ZWFsLWJhY2tncm91bmQ7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHJvd3MgZG9uJ3QgaGF2ZSBhIG1pbi13aWR0aCBvbiB0aGVtXG4gIC5jb2x1bW4ge1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxuXG4gIC8vIFN0cmlwIG1hcmdpbnMgZnJvbSB0aGUgbGFzdCBpdGVtIGluIHRoZSBtb2RhbFxuICA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vLyBBZGp1c3RzIHRoZSB3aWR0aCBvZiBhIG1vZGFsLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkd2lkdGggLSBXaWR0aCBvZiB0aGUgbW9kYWwuIEdlbmVyYWxseSBhIHBlcmNlbnRhZ2UuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRtYXgtd2lkdGggWyRyZXZlYWwtbWF4LXdpZHRoXSAtIE1heGltdW0gd2lkdGggb2YgdGhlIG1vZGFsLlxuQG1peGluIHJldmVhbC1tb2RhbC13aWR0aChcbiAgJHdpZHRoOiAkcmV2ZWFsLXdpZHRoLFxuICAkbWF4LXdpZHRoOiAkcmV2ZWFsLW1heC13aWR0aFxuKSB7XG4gIC8vIEV4dGVuZHMgbXVzdCBiZSBtYWRlIG91dHNpZGUgb2YgYnJlYWtwb2ludHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlciBTYXNzIHZlcnNpb25zIChsaWJzYXNzIHYzLjUpXG4gIEBleHRlbmQgJXJldmVhbC1jZW50ZXJlZDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICB3aWR0aDogJHdpZHRoO1xuICAgIG1heC13aWR0aDogJG1heC13aWR0aDtcbiAgfVxufVxuXG4vLy8gQ3JlYXRlcyBhIGZ1bGwtc2NyZWVuIG1vZGFsLCB3aGljaCBzdHJldGNoZXMgdGhlIGZ1bGwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgd2luZG93LlxuQG1peGluIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuIHtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgYm9yZGVyOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXZlYWwge1xuXG4gIC8vLyBEaXNhYmxlcyB0aGUgc2Nyb2xsIHdoZW4gUmV2ZWFsIGlzIHNob3duIHRvIHByZXZlbnQgdGhlIGJhY2tncm91bmQgZnJvbSBzaGlmdGluZ1xuICBodG1sLmlzLXJldmVhbC1vcGVuIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuXG4gICAgJi56Zi1oYXMtc2Nyb2xsIHtcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICB9XG5cbiAgICBib2R5IHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcmxheVxuICAucmV2ZWFsLW92ZXJsYXkge1xuICAgIEBpbmNsdWRlIHJldmVhbC1vdmVybGF5O1xuICB9XG5cbiAgLy8gTW9kYWwgY29udGFpbmVyXG4gIC5yZXZlYWwge1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1iYXNlO1xuICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgkcmV2ZWFsLXdpZHRoKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAxMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIC8vIFJlbW92ZSBwYWRkaW5nXG4gICAgJi5jb2xsYXBzZSB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8vIFNpemluZyBjbGFzc2VzXG4gICAgJi50aW55ICB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCgzMCUpOyB9XG4gICAgJi5zbWFsbCB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg1MCUpOyB9XG4gICAgJi5sYXJnZSB7IEBpbmNsdWRlIHJldmVhbC1tb2RhbC13aWR0aCg5MCUpOyB9XG5cbiAgICAvLyBGdWxsLXNjcmVlbiBtb2RlXG4gICAgJi5mdWxsIHtcbiAgICAgIEBpbmNsdWRlIHJldmVhbC1tb2RhbC1mdWxsc2NyZWVuO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJC16Zi16ZXJvLWJyZWFrcG9pbnQgb25seSkge1xuICAgICAgQGluY2x1ZGUgcmV2ZWFsLW1vZGFsLWZ1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgJi53aXRob3V0LW92ZXJsYXkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGZvdW5kYXRpb24tbm9ybWFsaXplKCkge1xuICAvKiEgbm9ybWFsaXplLmNzcyB2OC4wLjAgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG5cbiAgLy8gRG9jdW1lbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuXG4gIGh0bWwge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG4gIH1cblxuICAvLyBTZWN0aW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2Vycy5cblxuICBib2R5IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gIC8vIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIG1hcmdpbjogMC42N2VtIDA7XG4gIH1cblxuICAvLyBHcm91cGluZyBjb250ZW50XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAgLy8gMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG5cbiAgaHIge1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvLyAxXG4gICAgaGVpZ2h0OiAwOyAvLyAxXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIDJcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cblxuICBwcmUge1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMWVtOyAvLyAyXG4gIH1cblxuICAvLyBUZXh0LWxldmVsIHNlbWFudGljc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cblxuICBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBDaHJvbWUgNTctXG4gIC8vIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG5cbiAgYWJiclt0aXRsZV0ge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7IC8vIDFcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLy8gMlxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cblxuICBiLFxuICBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIH1cblxuICAvLyAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICAvLyAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgY29kZSxcbiAga2JkLFxuICBzYW1wIHtcbiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8vIDFcbiAgICBmb250LXNpemU6IDFlbTsgLy8gMlxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG5cbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogODAlO1xuICB9XG5cbiAgLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gIC8vIGFsbCBicm93c2Vycy5cblxuICBzdWIsXG4gIHN1cCB7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgYm90dG9tOiAtMC4yNWVtO1xuICB9XG5cbiAgc3VwIHtcbiAgICB0b3A6IC0wLjVlbTtcbiAgfVxuXG4gIC8vIEVtYmVkZGVkIGNvbnRlbnRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuXG4gIGltZyB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gRm9ybXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAgLy8gMi4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gRmlyZWZveCBhbmQgU2FmYXJpLlxuXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDsgLy8gMVxuICAgIGZvbnQtc2l6ZTogMTAwJTsgLy8gMVxuICAgIGxpbmUtaGVpZ2h0OiAxLjE1OyAvLyAxXG4gICAgbWFyZ2luOiAwOyAvLyAyXG4gIH1cblxuICAvLyBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAgLy8gMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cblxuICBidXR0b24sXG4gIGlucHV0IHsgLy8gMVxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gIC8vIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cblxuICBidXR0b24sXG4gIHNlbGVjdCB7IC8vIDFcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG5cbiAgYnV0dG9uLFxuICBbdHlwZT1cImJ1dHRvblwiXSxcbiAgW3R5cGU9XCJyZXNldFwiXSxcbiAgW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG4gIFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuICBbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAvLyBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG5cbiAgYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuICBbdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJyZXNldFwiXTotbW96LWZvY3VzcmluZyxcbiAgW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbiAgfVxuXG4gIC8vIENvcnJlY3QgdGhlIHBhZGRpbmcgaW4gRmlyZWZveC5cblxuICBmaWVsZHNldCB7XG4gICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAgLy8gMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICAvLyAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gIC8vICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuXG4gIGxlZ2VuZCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxuICAgIGNvbG9yOiBpbmhlcml0OyAvLyAyXG4gICAgZGlzcGxheTogdGFibGU7IC8vIDFcbiAgICBtYXgtd2lkdGg6IDEwMCU7IC8vIDFcbiAgICBwYWRkaW5nOiAwOyAvLyAzXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLy8gMVxuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cblxuICBwcm9ncmVzcyB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSAxMCsuXG5cbiAgdGV4dGFyZWEge1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gIC8vIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cblxuICBbdHlwZT1cImNoZWNrYm94XCJdLFxuICBbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gICAgcGFkZGluZzogMDsgLy8gMlxuICB9XG5cbiAgLy8gQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuXG4gIFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICBbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLy8gMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuXG4gIFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLy8gMVxuICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyAvLyAyXG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG5cbiAgW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgfVxuXG4gIC8vIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gIC8vIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cblxuICA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMVxuICAgIGZvbnQ6IGluaGVyaXQ7IC8vIDJcbiAgfVxuXG4gIC8vIEludGVyYWN0aXZlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUgMTArLCBhbmQgRmlyZWZveC5cblxuICBkZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC8vIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy5cblxuICBzdW1tYXJ5IHtcbiAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gIH1cblxuICAvLyBNaXNjXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuXG4gIHRlbXBsYXRlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG5cbiAgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8gc2Fzcy1saW50OmRpc2FibGUgbm8tY29sb3ItbGl0ZXJhbHMsIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcblxuLy8vL1xuLy8vIEBncm91cCBnbG9iYWxcbi8vLy9cblxuQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8vIEZvbnQgc2l6ZSBhdHRyaWJ1dGUgYXBwbGllZCB0byBgPGh0bWw+YCBhbmQgYDxib2R5PmAuIFdlIHVzZSAxMDAlIGJ5IGRlZmF1bHQgc28gdGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSB1c2VyJ3MgYnJvd3NlciBzZXR0aW5ncy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHdpZHRoIG9mIHlvdXIgc2l0ZS4gVXNlZCBieSB0aGUgZ3JpZCB0byBkZXRlcm1pbmUgcm93IHdpZHRoLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC13aWR0aDogcmVtLWNhbGMoMTIwMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBhbGwgdHlwZS4gYCRnbG9iYWwtbGluZWhlaWdodGAgaXMgMjRweCB3aGlsZSBgJGdsb2JhbC1mb250LXNpemVgIGlzIDE2cHhcbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbGluZWhlaWdodDogMS41ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3JzIHVzZWQgZm9yIGJ1dHRvbnMsIGNhbGxvdXRzLCBsaW5rcywgZXRjLiBUaGVyZSBtdXN0IGFsd2F5cyBiZSBhIGNvbG9yIGNhbGxlZCBgcHJpbWFyeWAuXG4vLy8gQHR5cGUgTWFwXG4kZm91bmRhdGlvbi1wYWxldHRlOiAoXG4gIHByaW1hcnk6ICMxNzc5YmEsXG4gIHNlY29uZGFyeTogIzc2NzY3NixcbiAgc3VjY2VzczogIzNhZGI3NixcbiAgd2FybmluZzogI2ZmYWUwMCxcbiAgYWxlcnQ6ICNjYzRiMzcsXG4pICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgbGlnaHQgZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGxpZ2h0LWdyYXk6ICNlNmU2ZTYgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciB1c2VkIGZvciBtZWRpdW0gZ3JheSBVSSBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJG1lZGl1bS1ncmF5OiAjY2FjYWNhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgZGFyayBncmF5IFVJIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kZGFyay1ncmF5OiAjOGE4YThhICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdXNlZCBmb3IgYmxhY2sgdWkgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRibGFjazogIzBhMGEwYSAhZGVmYXVsdDtcblxuLy8vIENvbG9yIHVzZWQgZm9yIHdoaXRlIHVpIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kd2hpdGU6ICNmZWZlZmUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIENvbG9yXG4kYm9keS1mb250LWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0YWNrIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIExpc3RcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG5cbi8vLyBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBhbnRpYWxpYXNlZCB0eXBlLCB1c2luZyB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGFuZCBgLW1vei1vc3gtZm9udC1zbW9vdGhpbmdgIENTUyBwcm9wZXJ0aWVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRib2R5LWFudGlhbGlhc2VkOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIG1hcmdpbiBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgcGFkZGluZyBvbiBjb21wb25lbnRzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIHBvc2l0aW9uaW5nIG9uIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLXBvc2l0aW9uOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIG5vcm1hbCB0eXBlLlxuLy8vIEB0eXBlIEtleXdvcmQgfCBOdW1iZXJcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIGZvbnQgd2VpZ2h0IHVzZWQgZm9yIGJvbGQgdHlwZS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kZ2xvYmFsLXdlaWdodC1ib2xkOiBib2xkICFkZWZhdWx0O1xuXG4vLy8gR2xvYmFsIHZhbHVlIHVzZWQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSBib3JkZXIgcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGdsb2JhbC1yYWRpdXM6IDAgIWRlZmF1bHQ7XG5cbi8vLyBHbG9iYWwgdmFsdWUgdXNlZCBmb3IgYWxsIG1lbnUgc3R5bGVzLiBDYW4gYmUgb3ZlcndyaXR0ZW4gYXQgaW5kaXZpZHVhbCBtZW51IGNvbXBvbmVudCBsZXZlbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRnbG9iYWwtbWVudS1wYWRkaW5nOiAwLjdyZW0gMXJlbSAhZGVmYXVsdDtcblxuLy8vIEdsb2JhbCB2YWx1ZSB1c2VkIGZvciBhbGwgbWVudSBzdHlsZXMuIE5lc3RlZCBtYXJnaW4gZm9yIHN1Ym1lbnUuXG4kZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFNldHMgdGhlIHRleHQgZGlyZWN0aW9uIG9mIHRoZSBDU1MuIENhbiBiZSBlaXRoZXIgYGx0cmAgb3IgYHJ0bGAuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGdsb2JhbC10ZXh0LWRpcmVjdGlvbjogbHRyICFkZWZhdWx0O1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGZvciBjb21wb25lbnRzIHRoYXQgc3VwcG9ydCBpdC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZ2xvYmFsLWZsZXhib3g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVkIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMgZm9yIHByb3RvdHlwZXMgaWYgYXBwbGljYWJsZVxuLy8vIEB0eXBlIEJvb2xlYW5cbiRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBjdXJzb3IncyB2YWx1ZSwgYGF1dG9gIGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBLZXl3b3JkXG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG8gIWRlZmF1bHQ7XG5cbkBpZiBub3QgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICBAZXJyb3IgJ0luICRmb3VuZGF0aW9uLXBhbGV0dGUsIHlvdSBtdXN0IGhhdmUgYSBjb2xvciBuYW1lZCBcInByaW1hcnlcIi4nO1xufVxuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgdGV4dCBkaXJlY3Rpb25cbiRnbG9iYWwtbGVmdDogaWYoJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSBydGwsIHJpZ2h0LCBsZWZ0KTtcbiRnbG9iYWwtcmlnaHQ6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBsZWZ0LCByaWdodCk7XG5cbi8vIEludGVybmFsIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIGZsZXgganVzdGlmeWluZyBvcHRpb25zXG4kLXpmLWZsZXgtanVzdGlmeTogLXpmLWZsZXgtanVzdGlmeSgkZ2xvYmFsLXRleHQtZGlyZWN0aW9uKTtcblxuLy8vIEdsb2JhbCB0b2xlcmFuY2UgZm9yIGNvbG9yIHBpY2sgY29udHJhc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwICFkZWZhdWx0O1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBmb3IgY29sb3JzXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWdsb2JhbC1zdHlsZXMge1xuICBAaW5jbHVkZSBmb3VuZGF0aW9uLW5vcm1hbGl6ZTtcblxuICAvLyBUaGVzZSBzdHlsZXMgYXJlIGFwcGxpZWQgdG8gYSA8bWV0YT4gdGFnLCB3aGljaCBpcyByZWFkIGJ5IHRoZSBGb3VuZGF0aW9uIEphdmFTY3JpcHRcbiAgLmZvdW5kYXRpb24tbXEge1xuICAgIGZvbnQtZmFtaWx5OiAnI3stemYtYnAtc2VyaWFsaXplKCRicmVha3BvaW50cyl9JztcbiAgfVxuXG4gIGh0bWwge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIFNldCBib3gtc2l6aW5nIGdsb2JhbGx5IHRvIGhhbmRsZSBwYWRkaW5nIGFuZCBib3JkZXIgd2lkdGhzXG4gICosXG4gICo6OmJlZm9yZSxcbiAgKjo6YWZ0ZXIge1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gIH1cblxuICAvLyBEZWZhdWx0IGJvZHkgc3R5bGVzXG4gIGJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZDtcblxuICAgIGZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseTtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4gICAgY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG5cbiAgICBAaWYgKCRib2R5LWFudGlhbGlhc2VkKSB7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICAvLyBHZXQgcmlkIG9mIGdhcCB1bmRlciBpbWFnZXMgYnkgbWFraW5nIHRoZW0gZGlzcGxheTogaW5saW5lLWJsb2NrOyBieSBkZWZhdWx0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAvLyBHcmlkIGRlZmF1bHRzIHRvIGdldCBpbWFnZXMgYW5kIGVtYmVkcyB0byB3b3JrIHByb3Blcmx5XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIHRha2VzIG9uIGhlaWdodCBhdXRvbWF0aWNhbGx5XG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogNTBweDtcbiAgICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgfVxuXG4gIC8vIE1ha2Ugc2VsZWN0IGVsZW1lbnRzIGFyZSAxMDAlIHdpZHRoIGJ5IGRlZmF1bHRcbiAgc2VsZWN0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgLy8gU3R5bGVzIEdvb2dsZSBNYXBzIGFuZCBNYXBRdWVzdCBlbWJlZHMgcHJvcGVybHlcbiAgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1pZHNcbiAgLm1hcF9jYW52YXMsXG4gIC5tcWEtZGlzcGxheSB7XG4gICAgaW1nLFxuICAgIGVtYmVkLFxuICAgIG9iamVjdCB7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAvLyBSZXNldCA8YnV0dG9uPiBzdHlsZXMgY3JlYXRlZCBieSBtb3N0IGJyb3dzZXJzXG4gIGJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY3Vyc29yOiAkZ2xvYmFsLWJ1dHRvbi1jdXJzb3I7XG4gIH1cblxuICAvLyBQcmV2ZW50IHRleHQgb3ZlcmZsb3cgb24gcHJlXG4gIHByZSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAvLyBNYWtlIHJlc2V0IGluaGVyaXQgZm9udC1mYW1pbHkgaW5zdGVhZCBvZiBzZXR0aW5ncyBzYW5zLXNlcmlmXG4gIGJ1dHRvbixcbiAgaW5wdXQsXG4gIG9wdGdyb3VwLFxuICBzZWxlY3QsXG4gIHRleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGNsYXNzZXMgdG8gc2hvdy9oaWRlIGVsZW1lbnRzIGluIEphdmFTY3JpcHRcbiAgLmlzLXZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaXMtaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8vICBGb3VuZGF0aW9uIGZvciBTaXRlcyBTZXR0aW5nc1xuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gIFRhYmxlIG9mIENvbnRlbnRzOlxuLy9cbi8vICAgMS4gR2xvYmFsXG4vLyAgIDIuIEJyZWFrcG9pbnRzXG4vLyAgIDMuIFRoZSBHcmlkXG4vLyAgIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gICA1LiBUeXBvZ3JhcGh5IEhlbHBlcnNcbi8vICAgNi4gQWJpZGVcbi8vICAgNy4gQWNjb3JkaW9uXG4vLyAgIDguIEFjY29yZGlvbiBNZW51XG4vLyAgIDkuIEJhZGdlXG4vLyAgMTAuIEJyZWFkY3J1bWJzXG4vLyAgMTEuIEJ1dHRvblxuLy8gIDEyLiBCdXR0b24gR3JvdXBcbi8vICAxMy4gQ2FsbG91dFxuLy8gIDE0LiBDYXJkXG4vLyAgMTUuIENsb3NlIEJ1dHRvblxuLy8gIDE2LiBEcmlsbGRvd25cbi8vICAxNy4gRHJvcGRvd25cbi8vICAxOC4gRHJvcGRvd24gTWVudVxuLy8gIDE5LiBGbGV4Ym94IFV0aWxpdGllc1xuLy8gIDIwLiBGb3Jtc1xuLy8gIDIxLiBMYWJlbFxuLy8gIDIyLiBNZWRpYSBPYmplY3Rcbi8vICAyMy4gTWVudVxuLy8gIDI0LiBNZXRlclxuLy8gIDI1LiBPZmYtY2FudmFzXG4vLyAgMjYuIE9yYml0XG4vLyAgMjcuIFBhZ2luYXRpb25cbi8vICAyOC4gUHJvZ3Jlc3MgQmFyXG4vLyAgMjkuIFByb3RvdHlwZSBBcnJvd1xuLy8gIDMwLiBQcm90b3R5cGUgQm9yZGVyLUJveFxuLy8gIDMxLiBQcm90b3R5cGUgQm9yZGVyLU5vbmVcbi8vICAzMi4gUHJvdG90eXBlIEJvcmRlcmVkXG4vLyAgMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAgMzQuIFByb3RvdHlwZSBGb250LVN0eWxpbmdcbi8vICAzNS4gUHJvdG90eXBlIExpc3QtU3R5bGUtVHlwZVxuLy8gIDM2LiBQcm90b3R5cGUgT3ZlcmZsb3dcbi8vICAzNy4gUHJvdG90eXBlIFBvc2l0aW9uXG4vLyAgMzguIFByb3RvdHlwZSBSb3VuZGVkXG4vLyAgMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vICA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gIDQxLiBQcm90b3R5cGUgU2l6aW5nXG4vLyAgNDIuIFByb3RvdHlwZSBTcGFjaW5nXG4vLyAgNDMuIFByb3RvdHlwZSBUZXh0LURlY29yYXRpb25cbi8vICA0NC4gUHJvdG90eXBlIFRleHQtVHJhbnNmb3JtYXRpb25cbi8vICA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAgNDYuIFJlc3BvbnNpdmUgRW1iZWRcbi8vICA0Ny4gUmV2ZWFsXG4vLyAgNDguIFNsaWRlclxuLy8gIDQ5LiBTd2l0Y2hcbi8vICA1MC4gVGFibGVcbi8vICA1MS4gVGFic1xuLy8gIDUyLiBUaHVtYm5haWxcbi8vICA1My4gVGl0bGUgQmFyXG4vLyAgNTQuIFRvb2x0aXBcbi8vICA1NS4gVG9wIEJhclxuLy8gIDU2LiBYeSBHcmlkXG5cbi8vQGltcG9ydCAndXRpbC91dGlsJztcblxuLy8gMS4gR2xvYmFsXG4vLyAtLS0tLS0tLS1cblxuJGdsb2JhbC1mb250LXNpemU6IDEwMCU7XG4kZ2xvYmFsLXdpZHRoOiByZW0tY2FsYygxMjAwKTtcbiRnbG9iYWwtbGluZWhlaWdodDogMS41O1xuJGZvdW5kYXRpb24tcGFsZXR0ZTogKFxuICAgICAgICBwcmltYXJ5OiAjMTc3OWJhLFxuICAgICAgICBzZWNvbmRhcnk6ICM3Njc2NzYsXG4gICAgICAgIHN1Y2Nlc3M6ICMzYWRiNzYsXG4gICAgICAgIHdhcm5pbmc6ICNmZmFlMDAsXG4gICAgICAgIGFsZXJ0OiAjY2M0YjM3LFxuKTtcbiRsaWdodC1ncmF5OiAjZTZlNmU2O1xuJG1lZGl1bS1ncmF5OiAjY2FjYWNhO1xuJGRhcmstZ3JheTogIzhhOGE4YTtcbiRibGFjazogIzBhMGEwYTtcbiR3aGl0ZTogI2ZlZmVmZTtcbiRib2R5LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRib2R5LWZvbnQtY29sb3I6ICRibGFjaztcbiRib2R5LWZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4kYm9keS1hbnRpYWxpYXNlZDogdHJ1ZTtcbiRnbG9iYWwtbWFyZ2luOiAxcmVtO1xuJGdsb2JhbC1wYWRkaW5nOiAxcmVtO1xuJGdsb2JhbC1wb3NpdGlvbjogMXJlbTtcbiRnbG9iYWwtd2VpZ2h0LW5vcm1hbDogbm9ybWFsO1xuJGdsb2JhbC13ZWlnaHQtYm9sZDogYm9sZDtcbiRnbG9iYWwtcmFkaXVzOiAwO1xuJGdsb2JhbC1tZW51LXBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW46IDFyZW07XG4kZ2xvYmFsLXRleHQtZGlyZWN0aW9uOiBsdHI7XG4kZ2xvYmFsLWZsZXhib3g6IHRydWU7XG4kZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50czogZmFsc2U7XG4kZ2xvYmFsLWJ1dHRvbi1jdXJzb3I6IGF1dG87XG4kZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlOiAwO1xuJHByaW50LXRyYW5zcGFyZW50LWJhY2tncm91bmRzOiB0cnVlO1xuXG5AaW5jbHVkZSBhZGQtZm91bmRhdGlvbi1jb2xvcnM7XG4kcHJpbnQtaHJlZnM6IHRydWU7XG5cbi8vIDIuIEJyZWFrcG9pbnRzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kYnJlYWtwb2ludHM6IChcbiAgICAgICAgc21hbGw6IDAsXG4gICAgICAgIHNtZWRpdW06IDQwMHB4LFxuICAgICAgICBtZWRpdW06IDY0MHB4LFxuICAgICAgICBsYXJnZTogMTAyNHB4LFxuICAgICAgICB4bGFyZ2U6IDEyMDBweCxcbiAgICAgICAgeHhsYXJnZTogMTQ0MHB4LFxuKTtcbiRwcmludC1icmVha3BvaW50OiBsYXJnZTtcbiRicmVha3BvaW50LWNsYXNzZXM6IChzbWFsbCBzbWVkaXVtIG1lZGl1bSBsYXJnZSk7XG5cbi8vIDMuIFRoZSBHcmlkXG4vLyAtLS0tLS0tLS0tLVxuXG4kZ3JpZC1yb3ctd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW4tY291bnQ6IDEyO1xuJGdyaWQtY29sdW1uLWd1dHRlcjogKFxuICAgICAgICBzbWFsbDogMjBweCxcbiAgICAgICAgbWVkaXVtOiAzMHB4LFxuKTtcbiRncmlkLWNvbHVtbi1hbGlnbi1lZGdlOiB0cnVlO1xuJGdyaWQtY29sdW1uLWFsaWFzOiAnY29sdW1ucyc7XG4kYmxvY2stZ3JpZC1tYXg6IDg7XG5cbi8vIDQuIEJhc2UgVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRoZWFkZXItZm9udC1mYW1pbHk6ICRib2R5LWZvbnQtZmFtaWx5O1xuJGhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGhlYWRlci1mb250LXN0eWxlOiBub3JtYWw7XG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiRoZWFkZXItY29sb3I6IGluaGVyaXQ7XG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJGhlYWRlci1zdHlsZXM6IChcbiAgICAgICAgc21hbGw6IChcbiAgICAgICAgICAgICAgICAnaDEnOiAoJ2ZvbnQtc2l6ZSc6IDI0KSxcbiAgICAgICAgICAgICAgICAnaDInOiAoJ2ZvbnQtc2l6ZSc6IDIwKSxcbiAgICAgICAgICAgICAgICAnaDMnOiAoJ2ZvbnQtc2l6ZSc6IDE5KSxcbiAgICAgICAgICAgICAgICAnaDQnOiAoJ2ZvbnQtc2l6ZSc6IDE4KSxcbiAgICAgICAgICAgICAgICAnaDUnOiAoJ2ZvbnQtc2l6ZSc6IDE3KSxcbiAgICAgICAgICAgICAgICAnaDYnOiAoJ2ZvbnQtc2l6ZSc6IDE2KSxcbiAgICAgICAgKSxcbiAgICAgICAgbWVkaXVtOiAoXG4gICAgICAgICAgICAgICAgJ2gxJzogKCdmb250LXNpemUnOiA0OCksXG4gICAgICAgICAgICAgICAgJ2gyJzogKCdmb250LXNpemUnOiA0MCksXG4gICAgICAgICAgICAgICAgJ2gzJzogKCdmb250LXNpemUnOiAzMSksXG4gICAgICAgICAgICAgICAgJ2g0JzogKCdmb250LXNpemUnOiAyNSksXG4gICAgICAgICAgICAgICAgJ2g1JzogKCdmb250LXNpemUnOiAyMCksXG4gICAgICAgICAgICAgICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICAgICAgICksXG4pO1xuJGhlYWRlci10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuJHNtYWxsLWZvbnQtc2l6ZTogODAlO1xuJGhlYWRlci1zbWFsbC1mb250LWNvbG9yOiAkbWVkaXVtLWdyYXk7XG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNjtcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRwYXJhZ3JhcGgtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcbiRjb2RlLWNvbG9yOiAkYmxhY2s7XG4kY29kZS1mb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTtcbiRjb2RlLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjb2RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjb2RlLXBhZGRpbmc6IHJlbS1jYWxjKDIgNSAxKTtcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJGFuY2hvci1jb2xvci1ob3Zlcjogc2NhbGUtY29sb3IoJGFuY2hvci1jb2xvciwgJGxpZ2h0bmVzczogLTE0JSk7XG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyOiBub25lO1xuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoO1xuJGhyLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRoci1tYXJnaW46IHJlbS1jYWxjKDIwKSBhdXRvO1xuJGxpc3QtbGluZWhlaWdodDogJHBhcmFncmFwaC1saW5laGVpZ2h0O1xuJGxpc3QtbWFyZ2luLWJvdHRvbTogJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tO1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiRsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlO1xuJGxpc3Qtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW07XG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbTtcbiRkZWZubGlzdC10ZXJtLXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b206IDAuM3JlbTtcbiRibG9ja3F1b3RlLWNvbG9yOiAkZGFyay1ncmF5O1xuJGJsb2NrcXVvdGUtcGFkZGluZzogcmVtLWNhbGMoOSAyMCAwIDE5KTtcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGNpdGUtY29sb3I6ICRkYXJrLWdyYXk7XG4kY2l0ZS1wc2V1ZG8tY29udGVudDogJ1xcMjAxNCBcXDAwMjAnO1xuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlO1xuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrO1xuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRrZXlzdHJva2UtcGFkZGluZzogcmVtLWNhbGMoMiA0IDApO1xuJGtleXN0cm9rZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGFiYnItdW5kZXJsaW5lOiAxcHggZG90dGVkICRibGFjaztcblxuLy8gNS4gVHlwb2dyYXBoeSBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjU7XG4kbGVhZC1saW5laGVpZ2h0OiAxLjY7XG4kc3ViaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNDtcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXk7XG4kc3ViaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kc3ViaGVhZGVyLW1hcmdpbi10b3A6IDAuMnJlbTtcbiRzdWJoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuJHN0YXQtZm9udC1zaXplOiAyLjVyZW07XG5cbi8vIDYuIEFiaWRlXG4vLyAtLS0tLS0tLVxuXG4kYWJpZGUtaW5wdXRzOiB0cnVlO1xuJGFiaWRlLWxhYmVsczogdHJ1ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCk7XG4kZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpO1xuJGlucHV0LWVycm9yLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJGlucHV0LWVycm9yLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuXG4vLyA3LiBBY2NvcmRpb25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kYWNjb3JkaW9uLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlO1xuJGFjY29yZGlvbi10aXRsZS1mb250LXNpemU6IHJlbS1jYWxjKDEyKTtcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlcjogJGxpZ2h0LWdyYXk7XG4kYWNjb3JkaW9uLWl0ZW0tcGFkZGluZzogMS4yNXJlbSAxcmVtO1xuJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRhY2NvcmRpb24tY29udGVudC1ib3JkZXI6IDFweCBzb2xpZCAkbGlnaHQtZ3JheTtcbiRhY2NvcmRpb24tY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA4LiBBY2NvcmRpb24gTWVudVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cblxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG4kYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luOiAkZ2xvYmFsLW1lbnUtbmVzdGVkLW1hcmdpbjtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiRhY2NvcmRpb25tZW51LWFycm93czogdHJ1ZTtcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRhY2NvcmRpb25tZW51LWl0ZW0tYmFja2dyb3VuZDogbnVsbDtcbiRhY2NvcmRpb25tZW51LWJvcmRlcjogbnVsbDtcbiRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLWJhY2tncm91bmQ6IG51bGw7XG4kYWNjb3JkaW9uLXN1Ym1lbnUtdG9nZ2xlLWJvcmRlcjogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtd2lkdGg6IDQwcHg7XG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyA5LiBCYWRnZVxuLy8gLS0tLS0tLS1cblxuJGJhZGdlLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJhZGdlLWNvbG9yOiAkd2hpdGU7XG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2s7XG4kYmFkZ2UtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRiYWRnZS1wYWRkaW5nOiAwLjNlbTtcbiRiYWRnZS1taW53aWR0aDogMi4xZW07XG4kYmFkZ2UtZm9udC1zaXplOiAwLjZyZW07XG5cbi8vIDEwLiBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiRicmVhZGNydW1icy1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwO1xuJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplOiByZW0tY2FsYygxMSk7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjogJHByaW1hcnktY29sb3I7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50OiAkYmxhY2s7XG4kYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtO1xuJGJyZWFkY3J1bWJzLWl0ZW0tdXBwZXJjYXNlOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiB0cnVlO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJztcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLXJ0bDogJ1xcXFwnO1xuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWNvbG9yOiAkbWVkaXVtLWdyYXk7XG5cbi8vIDExLiBCdXR0b25cbi8vIC0tLS0tLS0tLS1cblxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdDtcbiRidXR0b24tcGFkZGluZzogMC44NWVtIDFlbTtcbiRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gMDtcbiRidXR0b24tZmlsbDogc29saWQ7XG4kYnV0dG9uLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyOiBzY2FsZS1jb2xvcigkYnV0dG9uLWJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xNSUpO1xuJGJ1dHRvbi1jb2xvcjogJHdoaXRlO1xuJGJ1dHRvbi1jb2xvci1hbHQ6ICRibGFjaztcbiRidXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiRidXR0b24taG9sbG93LWJvcmRlci13aWR0aDogMXB4O1xuJGJ1dHRvbi1zaXplczogKFxuICAgICAgICB0aW55OiAwLjZyZW0sXG4gICAgICAgIHNtYWxsOiAwLjc1cmVtLFxuICAgICAgICBkZWZhdWx0OiAwLjlyZW0sXG4gICAgICAgIGxhcmdlOiAxLjI1cmVtLFxuKTtcbiRidXR0b24tcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlci1saWdodG5lc3M6IC0yMCU7XG4kYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3M6IC01MCU7XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0O1xuJGJ1dHRvbi1yZXNwb25zaXZlLWV4cGFuZGVkOiBmYWxzZTtcblxuLy8gMTIuIEJ1dHRvbiBHcm91cFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kYnV0dG9uZ3JvdXAtbWFyZ2luOiAxcmVtO1xuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweDtcbiRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcjogJy5idXR0b24nO1xuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDY7XG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWU7XG5cbi8vIDEzLiBDYWxsb3V0XG4vLyAtLS0tLS0tLS0tLVxuXG4kY2FsbG91dC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FsbG91dC1iYWNrZ3JvdW5kLWZhZGU6IDg1JTtcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KTtcbiRjYWxsb3V0LW1hcmdpbjogMCAwIDFyZW0gMDtcbiRjYWxsb3V0LXBhZGRpbmc6IDFyZW07XG4kY2FsbG91dC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhbGxvdXQtZm9udC1jb2xvci1hbHQ6ICRib2R5LWJhY2tncm91bmQ7XG4kY2FsbG91dC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGNhbGxvdXQtbGluay10aW50OiAzMCU7XG5cbi8vIDE0LiBDYXJkXG4vLyAtLS0tLS0tLVxuXG4kY2FyZC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kY2FyZC1mb250LWNvbG9yOiAkYm9keS1mb250LWNvbG9yO1xuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5O1xuJGNhcmQtc2hhZG93OiBub25lO1xuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmc7XG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcblxuLy8gMTUuIENsb3NlIEJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kY2xvc2VidXR0b24tcG9zaXRpb246IHJpZ2h0IHRvcDtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbDogKFxuICAgICAgICBzbWFsbDogMC42NnJlbSxcbiAgICAgICAgbWVkaXVtOiAxcmVtLFxuKTtcbiRjbG9zZWJ1dHRvbi1vZmZzZXQtdmVydGljYWw6IChcbiAgICAgICAgc21hbGw6IDAuMzNlbSxcbiAgICAgICAgbWVkaXVtOiAwLjVyZW0sXG4pO1xuJGNsb3NlYnV0dG9uLXNpemU6IChcbiAgICAgICAgc21hbGw6IDEuNWVtLFxuICAgICAgICBtZWRpdW06IDJlbSxcbik7XG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMTtcbiRjbG9zZWJ1dHRvbi1jb2xvcjogJGRhcmstZ3JheTtcbiRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjogJGJsYWNrO1xuXG4vLyAxNi4gRHJpbGxkb3duXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhcjtcbiRkcmlsbGRvd24tYXJyb3dzOiB0cnVlO1xuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcmlsbGRvd24tbmVzdGVkLW1hcmdpbjogMDtcbiRkcmlsbGRvd24tYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyaWxsZG93bi1zdWJtZW51LXBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4O1xuXG4vLyAxNy4gRHJvcGRvd25cbi8vIC0tLS0tLS0tLS0tLVxuXG4kZHJvcGRvd24tcGFkZGluZzogMXJlbTtcbiRkcm9wZG93bi1iYWNrZ3JvdW5kOiAkYm9keS1iYWNrZ3JvdW5kO1xuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1mb250LXNpemU6IDFyZW07XG4kZHJvcGRvd24td2lkdGg6IDMwMHB4O1xuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZHJvcGRvd24tc2l6ZXM6IChcbiAgICAgICAgdGlueTogMTAwcHgsXG4gICAgICAgIHNtYWxsOiAyMDBweCxcbiAgICAgICAgbGFyZ2U6IDQwMHB4LFxuKTtcblxuLy8gMTguIERyb3Bkb3duIE1lbnVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlO1xuJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvcjogJGFuY2hvci1jb2xvcjtcbiRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTogNnB4O1xuJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nOiAxLjVyZW07XG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHg7XG4kZHJvcGRvd25tZW51LWJhY2tncm91bmQ6IG51bGw7XG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDogJHdoaXRlO1xuJGRyb3Bkb3dubWVudS1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRkcm9wZG93bm1lbnUtbmVzdGVkLW1hcmdpbjogMDtcbiRkcm9wZG93bm1lbnUtc3VibWVudS1wYWRkaW5nOiAkZHJvcGRvd25tZW51LXBhZGRpbmc7XG4kZHJvcGRvd25tZW51LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRkcm9wZG93bi1tZW51LWl0ZW0tY29sb3ItYWN0aXZlOiBnZXQtY29sb3IocHJpbWFyeSk7XG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudDtcblxuLy8gMTkuIEZsZXhib3ggVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2O1xuJGZsZXhib3gtcmVzcG9uc2l2ZS1icmVha3BvaW50czogdHJ1ZTtcblxuLy8gMjAuIEZvcm1zXG4vLyAtLS0tLS0tLS1cblxuJGZpZWxkc2V0LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRmaWVsZHNldC1wYWRkaW5nOiByZW0tY2FsYygyMCk7XG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKTtcbiRsZWdlbmQtcGFkZGluZzogcmVtLWNhbGMoMCAzKTtcbiRmb3JtLXNwYWNpbmc6IHJlbS1jYWxjKDE2KTtcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrO1xuJGhlbHB0ZXh0LWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpO1xuJGhlbHB0ZXh0LWZvbnQtc3R5bGU6IGl0YWxpYztcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjaztcbiRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDogJGxpZ2h0LWdyYXk7XG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1wcmVmaXgtcGFkZGluZzogMXJlbTtcbiRmb3JtLWxhYmVsLWNvbG9yOiAkYmxhY2s7XG4kZm9ybS1sYWJlbC1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kZm9ybS1sYWJlbC1saW5lLWhlaWdodDogMS44O1xuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5O1xuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJGlucHV0LWNvbG9yOiAkYmxhY2s7XG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcbiRpbnB1dC1mb250LWZhbWlseTogaW5oZXJpdDtcbiRpbnB1dC1mb250LXNpemU6IHJlbS1jYWxjKDE2KTtcbiRpbnB1dC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsO1xuJGlucHV0LWxpbmUtaGVpZ2h0OiAkZ2xvYmFsLWxpbmVoZWlnaHQ7XG4kaW5wdXQtYmFja2dyb3VuZDogJHdoaXRlO1xuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZTtcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheTtcbiRpbnB1dC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXk7XG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMjtcbiRpbnB1dC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKCRibGFjaywgMC4xKTtcbiRpbnB1dC1zaGFkb3ctZm9jdXM6IDAgMCA1cHggJG1lZGl1bS1ncmF5O1xuJGlucHV0LWN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7XG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7XG4kaW5wdXQtbnVtYmVyLXNwaW5uZXJzOiB0cnVlO1xuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kZm9ybS1idXR0b24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gMjEuIExhYmVsXG4vLyAtLS0tLS0tLS1cblxuJGxhYmVsLWJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuJGxhYmVsLWNvbG9yOiAkd2hpdGU7XG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2s7XG4kbGFiZWwtcGFsZXR0ZTogJGZvdW5kYXRpb24tcGFsZXR0ZTtcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbTtcbiRsYWJlbC1wYWRkaW5nOiAwLjMzMzMzcmVtIDAuNXJlbTtcbiRsYWJlbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyMi4gTWVkaWEgT2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG5cbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlO1xuXG4vLyAyMy4gTWVudVxuLy8gLS0tLS0tLS1cblxuJG1lbnUtbWFyZ2luOiAwO1xuJG1lbnUtbmVzdGVkLW1hcmdpbjogJGdsb2JhbC1tZW51LW5lc3RlZC1tYXJnaW47XG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZztcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW07XG4kbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogJHdoaXRlO1xuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpO1xuJG1lbnUtaWNvbi1zcGFjaW5nOiAwLjI1cmVtO1xuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWU7XG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZTtcbiRtZW51LWljb25zLWJhY2stY29tcGF0OiB0cnVlO1xuXG4vLyAyNC4gTWV0ZXJcbi8vIC0tLS0tLS0tLVxuXG4kbWV0ZXItaGVpZ2h0OiAxcmVtO1xuJG1ldGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kbWV0ZXItYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5O1xuJG1ldGVyLWZpbGwtZ29vZDogJHN1Y2Nlc3MtY29sb3I7XG4kbWV0ZXItZmlsbC1tZWRpdW06ICR3YXJuaW5nLWNvbG9yO1xuJG1ldGVyLWZpbGwtYmFkOiAkYWxlcnQtY29sb3I7XG5cbi8vIDI1LiBPZmYtY2FudmFzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzOiAoXG4gICAgICAgIHNtYWxsOiAyNTBweCxcbik7XG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5O1xuJG9mZmNhbnZhcy1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoJGJsYWNrLCAwLjcpO1xuJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZTogMjBweDtcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LWNvbG9yOiByZ2JhKCRibGFjaywgMC4yNSk7XG4kb2ZmY2FudmFzLW92ZXJsYXktemluZGV4OiAxMTtcbiRvZmZjYW52YXMtcHVzaC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDogMTM7XG4kb2ZmY2FudmFzLXJldmVhbC16aW5kZXg6IDEyO1xuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cztcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmc6IGVhc2U7XG4kb2ZmY2FudmFzLWZpeGVkLXJldmVhbDogdHJ1ZTtcbiRvZmZjYW52YXMtZXhpdC1iYWNrZ3JvdW5kOiByZ2JhKCR3aGl0ZSwgMC4yNSk7XG4kbWFpbmNvbnRlbnQtY2xhc3M6ICdvZmYtY2FudmFzLWNvbnRlbnQnO1xuXG4vLyAyNi4gT3JiaXRcbi8vIC0tLS0tLS0tLVxuXG4kb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU6ICRkYXJrLWdyYXk7XG4kb3JiaXQtYnVsbGV0LWRpYW1ldGVyOiAxLjJyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbjogMC4xcmVtO1xuJG9yYml0LWJ1bGxldC1tYXJnaW4tdG9wOiAwLjhyZW07XG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbTtcbiRvcmJpdC1jYXB0aW9uLWJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpO1xuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbTtcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTA7XG5cbi8vIDI3LiBQYWdpbmF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4kcGFnaW5hdGlvbi1mb250LXNpemU6IHJlbS1jYWxjKDE0KTtcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvcjogJGJsYWNrO1xuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKTtcbiRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZzogcmVtLWNhbGMoMSk7XG4kcGFnaW5hdGlvbi1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheTtcbiRwYWdpbmF0aW9uLWl0ZW0tYmFja2dyb3VuZC1jdXJyZW50OiAkcHJpbWFyeS1jb2xvcjtcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlO1xuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5O1xuJHBhZ2luYXRpb24tZWxsaXBzaXMtY29sb3I6ICRibGFjaztcbiRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtczogZmFsc2U7XG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZTtcbiRwYWdpbmF0aW9uLWFycm93czogdHJ1ZTtcblxuLy8gMjguIFByb2dyZXNzIEJhclxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvZ3Jlc3MtaGVpZ2h0OiAxcmVtO1xuJHByb2dyZXNzLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRwcm9ncmVzcy1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm9ncmVzcy1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuXG4vLyAyOS4gUHJvdG90eXBlIEFycm93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtYXJyb3ctZGlyZWN0aW9uczogKFxuICAgICAgICBkb3duLFxuICAgICAgICB1cCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnRcbik7XG4kcHJvdG90eXBlLWFycm93LXNpemU6IDAuNDM3NXJlbTtcbiRwcm90b3R5cGUtYXJyb3ctY29sb3I6ICRibGFjaztcblxuLy8gMzAuIFByb3RvdHlwZSBCb3JkZXItQm94XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1ib3JkZXItYm94LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzEuIFByb3RvdHlwZSBCb3JkZXItTm9uZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlci1ub25lLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcblxuLy8gMzIuIFByb3RvdHlwZSBCb3JkZXJlZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLWJvcmRlcmVkLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtYm9yZGVyLXdpZHRoOiByZW0tY2FsYygxKTtcbiRwcm90b3R5cGUtYm9yZGVyLXR5cGU6IHNvbGlkO1xuJHByb3RvdHlwZS1ib3JkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcblxuLy8gMzMuIFByb3RvdHlwZSBEaXNwbGF5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kaXNwbGF5LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtZGlzcGxheTogKFxuICAgICAgICBpbmxpbmUsXG4gICAgICAgIGlubGluZS1ibG9jayxcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHRhYmxlLFxuICAgICAgICB0YWJsZS1jZWxsXG4pO1xuXG4vLyAzNC4gUHJvdG90eXBlIEZvbnQtU3R5bGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1mb250LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtd2lkZS1sZXR0ZXItc3BhY2luZzogcmVtLWNhbGMoNCk7XG4kcHJvdG90eXBlLWZvbnQtbm9ybWFsOiAkZ2xvYmFsLXdlaWdodC1ub3JtYWw7XG4kcHJvdG90eXBlLWZvbnQtYm9sZDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcblxuLy8gMzUuIFByb3RvdHlwZSBMaXN0LVN0eWxlLVR5cGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtbGlzdC1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXN0eWxlLXR5cGUtdW5vcmRlcmVkOiAoXG4gICAgICAgIGRpc2MsXG4gICAgICAgIGNpcmNsZSxcbiAgICAgICAgc3F1YXJlXG4pO1xuJHByb3RvdHlwZS1zdHlsZS10eXBlLW9yZGVyZWQ6IChcbiAgICAgICAgZGVjaW1hbCxcbiAgICAgICAgbG93ZXItYWxwaGEsXG4gICAgICAgIGxvd2VyLWxhdGluLFxuICAgICAgICBsb3dlci1yb21hbixcbiAgICAgICAgdXBwZXItYWxwaGEsXG4gICAgICAgIHVwcGVyLWxhdGluLFxuICAgICAgICB1cHBlci1yb21hblxuKTtcblxuLy8gMzYuIFByb3RvdHlwZSBPdmVyZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLW92ZXJmbG93LWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtb3ZlcmZsb3c6IChcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgaGlkZGVuLFxuICAgICAgICBzY3JvbGxcbik7XG5cbi8vIDM3LiBQcm90b3R5cGUgUG9zaXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1wb3NpdGlvbi1icmVha3BvaW50czogJGdsb2JhbC1wcm90b3R5cGUtYnJlYWtwb2ludHM7XG4kcHJvdG90eXBlLXBvc2l0aW9uOiAoXG4gICAgICAgIHN0YXRpYyxcbiAgICAgICAgcmVsYXRpdmUsXG4gICAgICAgIGFic29sdXRlLFxuICAgICAgICBmaXhlZFxuKTtcbiRwcm90b3R5cGUtcG9zaXRpb24tei1pbmRleDogOTc1O1xuXG4vLyAzOC4gUHJvdG90eXBlIFJvdW5kZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXJvdW5kZWQtYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3JkZXItcmFkaXVzOiByZW0tY2FsYygzKTtcblxuLy8gMzkuIFByb3RvdHlwZSBTZXBhcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtc2VwYXJhdG9yLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtc2VwYXJhdG9yLWFsaWduOiBjZW50ZXI7XG4kcHJvdG90eXBlLXNlcGFyYXRvci1oZWlnaHQ6IHJlbS1jYWxjKDIpO1xuJHByb3RvdHlwZS1zZXBhcmF0b3Itd2lkdGg6IDNyZW07XG4kcHJvdG90eXBlLXNlcGFyYXRvci1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRwcm90b3R5cGUtc2VwYXJhdG9yLW1hcmdpbi10b3A6ICRnbG9iYWwtbWFyZ2luO1xuXG4vLyA0MC4gUHJvdG90eXBlIFNoYWRvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaGFkb3ctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1ib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIC4xNiksXG4wIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpO1xuXG4vLyA0MS4gUHJvdG90eXBlIFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1zaXppbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zaXppbmc6IChcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuKTtcbiRwcm90b3R5cGUtc2l6ZXM6IChcbiAgICAgICAgMjU6IDI1JSxcbiAgICAgICAgNTA6IDUwJSxcbiAgICAgICAgNzU6IDc1JSxcbiAgICAgICAgMTAwOiAxMDAlXG4pO1xuXG4vLyA0Mi4gUHJvdG90eXBlIFNwYWNpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcHJvdG90eXBlLXNwYWNpbmctYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS1zcGFjZXJzLWNvdW50OiAzO1xuXG4vLyA0My4gUHJvdG90eXBlIFRleHQtRGVjb3JhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJHByb3RvdHlwZS1kZWNvcmF0aW9uLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1kZWNvcmF0aW9uOiAoXG4gICAgICAgIG92ZXJsaW5lLFxuICAgICAgICB1bmRlcmxpbmUsXG4gICAgICAgIGxpbmUtdGhyb3VnaCxcbik7XG5cbi8vIDQ0LiBQcm90b3R5cGUgVGV4dC1UcmFuc2Zvcm1hdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdHJhbnNmb3JtYXRpb24tYnJlYWtwb2ludHM6ICRnbG9iYWwtcHJvdG90eXBlLWJyZWFrcG9pbnRzO1xuJHByb3RvdHlwZS10ZXh0LXRyYW5zZm9ybWF0aW9uOiAoXG4gICAgICAgIGxvd2VyY2FzZSxcbiAgICAgICAgdXBwZXJjYXNlLFxuICAgICAgICBjYXBpdGFsaXplXG4pO1xuXG4vLyA0NS4gUHJvdG90eXBlIFRleHQtVXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRwcm90b3R5cGUtdXRpbGl0aWVzLWJyZWFrcG9pbnRzOiAkZ2xvYmFsLXByb3RvdHlwZS1icmVha3BvaW50cztcbiRwcm90b3R5cGUtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cbi8vIDQ2LiBSZXNwb25zaXZlIEVtYmVkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4kcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tOiByZW0tY2FsYygxNik7XG4kcmVzcG9uc2l2ZS1lbWJlZC1yYXRpb3M6IChcbiAgICAgICAgZGVmYXVsdDogNCBieSAzLFxuICAgICAgICB3aWRlc2NyZWVuOiAxNiBieSA5LFxuKTtcblxuLy8gNDcuIFJldmVhbFxuLy8gLS0tLS0tLS0tLVxuXG4kcmV2ZWFsLWJhY2tncm91bmQ6ICR3aGl0ZTtcbiRyZXZlYWwtd2lkdGg6IDYwMHB4O1xuJHJldmVhbC1tYXgtd2lkdGg6ICRnbG9iYWwtd2lkdGg7XG4kcmV2ZWFsLXBhZGRpbmc6ICRnbG9iYWwtcGFkZGluZztcbiRyZXZlYWwtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5O1xuJHJldmVhbC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHJldmVhbC16aW5kZXg6IDEwMDU7XG4kcmV2ZWFsLW92ZXJsYXktYmFja2dyb3VuZDogcmdiYSgkYmxhY2ssIDAuNDUpO1xuXG4vLyA0OC4gU2xpZGVyXG4vLyAtLS0tLS0tLS0tXG5cbiRzbGlkZXItd2lkdGgtdmVydGljYWw6IDAuNXJlbTtcbiRzbGlkZXItdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4kc2xpZGVyLWhlaWdodDogMC41cmVtO1xuJHNsaWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiRzbGlkZXItZmlsbC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXk7XG4kc2xpZGVyLWhhbmRsZS1oZWlnaHQ6IDEuNHJlbTtcbiRzbGlkZXItaGFuZGxlLXdpZHRoOiAxLjRyZW07XG4kc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvcjtcbiRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDogMC4yNTtcbiRzbGlkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNDkuIFN3aXRjaFxuLy8gLS0tLS0tLS0tLVxuXG4kc3dpdGNoLWJhY2tncm91bmQ6ICRtZWRpdW0tZ3JheTtcbiRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU6ICRwcmltYXJ5LWNvbG9yO1xuJHN3aXRjaC1oZWlnaHQ6IDJyZW07XG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW07XG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbTtcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW07XG4kc3dpdGNoLXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4kc3dpdGNoLW1hcmdpbjogJGdsb2JhbC1tYXJnaW47XG4kc3dpdGNoLXBhZGRsZS1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kc3dpdGNoLXBhZGRsZS1vZmZzZXQ6IDAuMjVyZW07XG4kc3dpdGNoLXBhZGRsZS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0O1xuXG4vLyA1MC4gVGFibGVcbi8vIC0tLS0tLS0tLVxuXG4kdGFibGUtYmFja2dyb3VuZDogJHdoaXRlO1xuJHRhYmxlLWNvbG9yLXNjYWxlOiA1JTtcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1wYWRkaW5nOiByZW0tY2FsYyg4IDEwIDEwKTtcbiR0YWJsZS1ob3Zlci1zY2FsZTogMiU7XG4kdGFibGUtcm93LWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1ob3Zlci1zY2FsZSk7XG4kdGFibGUtcm93LXN0cmlwZS1ob3ZlcjogZGFya2VuKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUgKyAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWlzLXN0cmlwZWQ6IHRydWU7XG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKTtcbiR0YWJsZS1zdHJpcGU6IGV2ZW47XG4kdGFibGUtaGVhZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlIC8gMik7XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWZvb3QtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSk7XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpO1xuJHRhYmxlLWhlYWQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWJsZS1mb290LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3I7XG4kc2hvdy1oZWFkZXItZm9yLXN0YWNrZWQ6IGZhbHNlO1xuJHRhYmxlLXN0YWNrLWJyZWFrcG9pbnQ6IG1lZGl1bTtcblxuLy8gNTEuIFRhYnNcbi8vIC0tLS0tLS0tXG5cbiR0YWItbWFyZ2luOiAwO1xuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcbiR0YWItYmFja2dyb3VuZC1hY3RpdmU6ICRsaWdodC1ncmF5O1xuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1xuJHRhYi1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpO1xuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZTtcbiR0YWItaXRlbS1wYWRkaW5nOiAxLjI1cmVtIDEuNXJlbTtcbiR0YWItY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGU7XG4kdGFiLWNvbnRlbnQtYm9yZGVyOiAkbGlnaHQtZ3JheTtcbiR0YWItY29udGVudC1jb2xvcjogJGJvZHktZm9udC1jb2xvcjtcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtO1xuXG4vLyA1Mi4gVGh1bWJuYWlsXG4vLyAtLS0tLS0tLS0tLS0tXG5cbiR0aHVtYm5haWwtYm9yZGVyOiA0cHggc29saWQgJHdoaXRlO1xuJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbjtcbiR0aHVtYm5haWwtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgkYmxhY2ssIDAuMik7XG4kdGh1bWJuYWlsLXNoYWRvdy1ob3ZlcjogMCAwIDZweCAxcHggcmdiYSgkcHJpbWFyeS1jb2xvciwgMC41KTtcbiR0aHVtYm5haWwtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyMDBtcyBlYXNlLW91dDtcbiR0aHVtYm5haWwtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTMuIFRpdGxlIEJhclxuLy8gLS0tLS0tLS0tLS0tLVxuXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrO1xuJHRpdGxlYmFyLWNvbG9yOiAkd2hpdGU7XG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtO1xuJHRpdGxlYmFyLXRleHQtZm9udC13ZWlnaHQ6IGJvbGQ7XG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlO1xuJHRpdGxlYmFyLWljb24tY29sb3ItaG92ZXI6ICRtZWRpdW0tZ3JheTtcbiR0aXRsZWJhci1pY29uLXNwYWNpbmc6IDAuMjVyZW07XG5cbi8vIDU0LiBUb29sdGlwXG4vLyAtLS0tLS0tLS0tLVxuXG4kaGFzLXRpcC1jdXJzb3I6IGhlbHA7XG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheTtcbiR0b29sdGlwLWJhY2tncm91bmQtY29sb3I6ICRibGFjaztcbiR0b29sdGlwLWNvbG9yOiAkd2hpdGU7XG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtO1xuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbTtcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbTtcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2O1xuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuLy8gNTUuIFRvcCBCYXJcbi8vIC0tLS0tLS0tLS0tXG5cbiR0b3BiYXItcGFkZGluZzogMC41cmVtO1xuJHRvcGJhci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheTtcbiR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwO1xuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHg7XG4kdG9wYmFyLXVuc3RhY2stYnJlYWtwb2ludDogbWVkaXVtO1xuXG4vLyA1Ni4gWHkgR3JpZFxuLy8gLS0tLS0tLS0tLS1cblxuJHh5LWdyaWQ6IHRydWU7XG4kZ3JpZC1jb250YWluZXI6ICRnbG9iYWwtd2lkdGg7XG4kZ3JpZC1jb2x1bW5zOiAxMjtcbiRncmlkLW1hcmdpbi1ndXR0ZXJzOiAoXG4gICAgICAgIHNtYWxsOiAyMHB4LFxuICAgICAgICBtZWRpdW06IDMwcHhcbik7XG4kZ3JpZC1wYWRkaW5nLWd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzO1xuJGdyaWQtY29udGFpbmVyLXBhZGRpbmc6ICRncmlkLXBhZGRpbmctZ3V0dGVycztcbiRncmlkLWNvbnRhaW5lci1tYXg6ICRnbG9iYWwtd2lkdGg7XG4keHktYmxvY2stZ3JpZC1tYXg6IDg7XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIENyZWF0ZXMgYW4gaW5uZXIgYm94LXNoYWRvdyBmb3Igb25seSBvbmUgc2lkZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2lkZSAtIFNpZGUgdGhlIHNoYWRvdyBpcyBzdXBwb3NlZCB0byBhcHBlYXIuIENhbiBiZSBgdG9wYCwgYGxlZnRgLCBgcmlnaHRgIG9yIGBib3R0b21gLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkc2l6ZSAtIFdpZHRoIGZvciB0aGUgdGFyZ2V0IHNpZGUuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIC0gQ29sb3Igb2YgdGhlIHNoYWRvdy5cbkBtaXhpbiBpbm5lci1zaWRlLXNoYWRvdyhcbiAgJHNpZGU6IGJvdHRvbSxcbiAgJHNpemU6IDIwcHgsXG4gICRjb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpXG4pIHtcblxuICAkaGVscGVyOiByb3VuZCgkc2l6ZSAqIDAuNjUpO1xuXG4gIEBpZiAoJHNpZGUgPT0gdG9wKSB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAkaGVscGVyICRzaXplICgtMSkqJGhlbHBlciAkY29sb3I7XG4gIH0gQGVsc2UgaWYgKCRzaWRlID09IGxlZnQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAkaGVscGVyIDAgJHNpemUgKC0xKSokaGVscGVyICRjb2xvcjtcbiAgfSBAZWxzZSBpZiAoJHNpZGUgPT0gcmlnaHQpIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAoLTEpKiRoZWxwZXIgMCAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9IEBlbHNlIGlmICgkc2lkZSA9PSBib3R0b20pIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwICgtMSkqJGhlbHBlciAkc2l6ZSAoLTEpKiRoZWxwZXIgJGNvbG9yO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgQ1NTIHRyaWFuZ2xlLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZHJvcGRvd24gYXJyb3dzLCBkcm9wZG93biBwaXBzLCBhbmQgbW9yZS4gVXNlIHRoaXMgbWl4aW4gaW5zaWRlIGEgYCY6OmJlZm9yZWAgb3IgYCY6OmFmdGVyYCBzZWxlY3RvciwgdG8gYXR0YWNoIHRoZSB0cmlhbmdsZSB0byBhbiBleGlzdGluZyBlbGVtZW50LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0cmlhbmdsZS1zaXplIC0gV2lkdGggb2YgdGhlIHRyaWFuZ2xlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICR0cmlhbmdsZS1jb2xvciAtIENvbG9yIG9mIHRoZSB0cmlhbmdsZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICR0cmlhbmdsZS1kaXJlY3Rpb24gLSBEaXJlY3Rpb24gdGhlIHRyaWFuZ2xlIHBvaW50cy4gQ2FuIGJlIGB1cGAsIGByaWdodGAsIGBkb3duYCwgb3IgYGxlZnRgLlxuQG1peGluIGNzcy10cmlhbmdsZShcbiAgJHRyaWFuZ2xlLXNpemUsXG4gICR0cmlhbmdsZS1jb2xvcixcbiAgJHRyaWFuZ2xlLWRpcmVjdGlvblxuKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuXG4gIGJvcmRlcjogaW5zZXQgJHRyaWFuZ2xlLXNpemU7XG5cbiAgY29udGVudDogJyc7XG5cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IGRvd24pIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJHRyaWFuZ2xlLWNvbG9yIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG4gIEBpZiAoJHRyaWFuZ2xlLWRpcmVjdGlvbiA9PSB1cCkge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3I7XG4gIH1cbiAgQGlmICgkdHJpYW5nbGUtZGlyZWN0aW9uID09IHJpZ2h0KSB7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICR0cmlhbmdsZS1jb2xvcjtcbiAgfVxuICBAaWYgKCR0cmlhbmdsZS1kaXJlY3Rpb24gPT0gbGVmdCkge1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1yaWdodC1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAkdHJpYW5nbGUtY29sb3IgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBtZW51IGljb24gd2l0aCBhIHNldCB3aWR0aCwgaGVpZ2h0LCBudW1iZXIgb2YgYmFycywgYW5kIGNvbG9ycy4gVGhlIG1peGluIHVzZXMgdGhlIGhlaWdodCBvZiB0aGUgaWNvbiBhbmQgdGhlIHdlaWdodCBvZiB0aGUgYmFycyB0byBkZXRlcm1pbmUgc3BhY2luZy4gPGRpdiBjbGFzcz1cImRvY3MtZXhhbXBsZS1idXJnZXJcIj48L2Rpdj5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIGljb24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yLWhvdmVyIFskZGFyay1ncmF5XSAtIENvbG9yIHRvIHVzZSB3aGVuIHRoZSBpY29uIGlzIGhvdmVyZWQgb3Zlci5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFsyMHB4XSAtIFdpZHRoIG9mIHRoZSBpY29uLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkaGVpZ2h0IFsxNnB4XSAtIEhlaWdodCBvZiB0aGUgaWNvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdlaWdodCBbMnB4XSAtIEhlaWdodCBvZiBpbmRpdmlkdWFsIGJhcnMgaW4gdGhlIGljb24uXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXJzIFszXSAtIE51bWJlciBvZiBiYXJzIGluIHRoZSBpY29uLlxuQG1peGluIGhhbWJ1cmdlcihcbiAgJGNvbG9yOiAkYmxhY2ssXG4gICRjb2xvci1ob3ZlcjogJGRhcmstZ3JheSxcbiAgJHdpZHRoOiAyMHB4LFxuICAkaGVpZ2h0OiAxNnB4LFxuICAkd2VpZ2h0OiAycHgsXG4gICRiYXJzOiAzXG4pIHtcbiAgLy8gYm94LXNoYWRvdyBDU1Mgb3V0cHV0XG4gICRzaGFkb3c6ICgpO1xuICAkaG92ZXItc2hhZG93OiAoKTtcblxuICAvLyBTcGFjaW5nIGJldHdlZW4gYmFycyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGljb24gYW5kIHRoZSB3ZWlnaHQgb2YgZWFjaCBiYXJcbiAgJHNwYWNpbmc6ICgkaGVpZ2h0IC0gKCR3ZWlnaHQgKiAkYmFycykpIC8gKCRiYXJzIC0gMSk7XG5cbiAgQGlmIHVuaXQoJHNwYWNpbmcpID09ICdweCcge1xuICAgICRzcGFjaW5nOiBmbG9vcigkc3BhY2luZyk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAkb2Zmc2V0OiAoJHdlaWdodCArICRzcGFjaW5nKSAqICgkaSAtIDEpO1xuICAgICRzaGFkb3c6IGFwcGVuZCgkc2hhZG93LCAwICRvZmZzZXQgMCAkY29sb3IsIGNvbW1hKTtcbiAgfVxuXG4gIC8vIEljb24gY29udGFpbmVyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogJHdpZHRoO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBJY29uIGJhcnNcbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogJHdlaWdodDtcblxuICAgIGJhY2tncm91bmQ6ICRjb2xvcjtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93O1xuXG4gICAgY29udGVudDogJyc7XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZVxuICBAaWYgJGNvbG9yLWhvdmVyIHtcbiAgICAvLyBHZW5lcmF0ZSBDU1NcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRiYXJzIHtcbiAgICAgICRvZmZzZXQ6ICgkd2VpZ2h0ICsgJHNwYWNpbmcpICogKCRpIC0gMSk7XG4gICAgICAkaG92ZXItc2hhZG93OiBhcHBlbmQoJGhvdmVyLXNoYWRvdywgMCAkb2Zmc2V0IDAgJGNvbG9yLWhvdmVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhvdmVyO1xuICAgICAgYm94LXNoYWRvdzogJGhvdmVyLXNoYWRvdztcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgYSBkb3dud2FyZC1mYWNpbmcgdHJpYW5nbGUgYXMgYSBiYWNrZ3JvdW5kIGltYWdlIHRvIGFuIGVsZW1lbnQuIFRoZSBpbWFnZSBpcyBmb3JtYXR0ZWQgYXMgYW4gU1ZHLCBtYWtpbmcgaXQgZWFzeSB0byBjaGFuZ2UgdGhlIGNvbG9yLiBCZWNhdXNlIEludGVybmV0IEV4cGxvcmVyIGRvZXNuJ3Qgc3VwcG9ydCBlbmNvZGVkIFNWR3MgYXMgYmFja2dyb3VuZCBpbWFnZXMsIGEgUE5HIGZhbGxiYWNrIGlzIGFsc28gaW5jbHVkZWQuXG4vLy8gVGhlcmUgYXJlIHR3byBQTkcgZmFsbGJhY2tzOiBhIGJsYWNrIHRyaWFuZ2xlIGFuZCBhIHdoaXRlIHRyaWFuZ2xlLiBUaGUgb25lIHVzZWQgZGVwZW5kcyBvbiB0aGUgbGlnaHRuZXNzIG9mIHRoZSBpbnB1dCBjb2xvci5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciBbJGJsYWNrXSAtIENvbG9yIHRvIHVzZSBmb3IgdGhlIHRyaWFuZ2xlLlxuQG1peGluIGJhY2tncm91bmQtdHJpYW5nbGUoJGNvbG9yOiAkYmxhY2spIHtcbiAgJHJnYjogJ3JnYiUyOCN7cm91bmQocmVkKCRjb2xvcikpfSwgI3tyb3VuZChncmVlbigkY29sb3IpKX0sICN7cm91bmQoYmx1ZSgkY29sb3IpKX0lMjknO1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2ZXJzaW9uPScxLjEnIHdpZHRoPSczMicgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDMyIDI0Jz48cG9seWdvbiBwb2ludHM9JzAsMCAzMiwwIDE2LDI0JyBzdHlsZT0nZmlsbDogI3skcmdifSc+PC9wb2x5Z29uPjwvc3ZnPlwiKTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjBcXDApIHtcbiAgICBAaWYgbGlnaHRuZXNzKCRjb2xvcikgPCA2MCUge1xuICAgICAgLy8gV2hpdGUgdHJpYW5nbGVcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFZQ0FZQUFBQ2JVLzgwQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJcEpSRUZVZU5yRWtja05nREFNQkJmUmtFdDBPYlJCQmRzR1hVRGdtUWZLNFhoSDJtOGN6UUFBeTI3UjN0c3c0UWZlMng4dU9PNm9ZTGI2R2xPb3IzR0Yrc3dVUkFPbVVKK1J3dEVKczlXdlRHRVl4QlhxSTFNUUFaaENmVVFLUnpETVZqK1R3ckFJVjZqdlNVRWtZQXIxTFNrY3lUQmIvVitLWWZYN3hBZXVzcTNzTER0R0gza0VHQUNQV0lmbE5aZmhSUUFBQUFCSlJVNUVya0pnZ2c9PScpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAvLyBCbGFjayB0cmlhbmdsZVxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQVlDQVlBQUFDYlUvODBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQU1CSlJFRlVlTnJFbGxzT2hDQU1SVnN6QzlJbHpVN0tDbVZIVEpzb01XWU1VdHB5djlCZ2J1WFFCNVpTZGdCWVlZNHljZ0Jpdms4S1lGc1FNZk1pVFRCUDRvM25VekNLek9hYkxKYkx5Mi9nMzFldkdrQWdpblI0L1plZ0tINXFYM2JKQ3NjQTN0MHgza2dPNXRRRnloaEZmNTB4UnFGTGJ5TVVOSlF6Z3lqR1Mvd2dDcHZLcWtSQnB1V3JFNFY5ZCsxRTRkUFVYcUlnMTA3U1FPRS8yRFJReE13VER5Z0lJblZERVQ5VDNsQ29qLzZqL1ZDbUdqWk9sMmxLcFo4QUF3RFFQN3pJaW1ER0ZRQUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBcHBsaWVzIHRoZSBtaWNybyBjbGVhcmZpeCBoYWNrIHBvcHVsYXJpemVkIGJ5IE5pY29sYXMgR2FsbGFnaGVyLiBJbmNsdWRlIHRoaXMgbWl4aW4gb24gYSBjb250YWluZXIgaWYgaXRzIGNoaWxkcmVuIGFyZSBhbGwgZmxvYXRlZCwgdG8gZ2l2ZSB0aGUgY29udGFpbmVyIGEgcHJvcGVyIGhlaWdodC5cbi8vLyBUaGUgY2xlYXJmaXggaXMgYXVnbWVudGVkIHdpdGggc3BlY2lmaWMgc3R5bGVzIHRvIHByZXZlbnQgYm9yZGVycyBpbiBmbGV4Ym94IGVudmlyb25tZW50c1xuLy8vIEBsaW5rIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrLyBNaWNybyBDbGVhcmZpeCBIYWNrXG4vLy8gQGxpbmsgaHR0cDovL2RhbmlzYWRlc2lnbmVyLmNvbS9ibG9nL2ZsZXhib3gtY2xlYXItZml4LXBzZXVkby1lbGVtZW50cy8gRmxleGJveCBmaXhcbkBtaXhpbiBjbGVhcmZpeCB7XG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6ICcgJztcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleC1iYXNpczogMDtcbiAgICAgIG9yZGVyOiAxO1xuICAgIH1cbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG4vLy8gQWRkcyBDU1MgZm9yIGEgXCJxdWFudGl0eSBxdWVyeVwiIHNlbGVjdG9yIHRoYXQgYXV0b21hdGljYWxseSBzaXplcyBlbGVtZW50cyBiYXNlZCBvbiBob3cgbWFueSB0aGVyZSBhcmUgaW5zaWRlIGEgY29udGFpbmVyLlxuLy8vIEBsaW5rIGh0dHA6Ly9hbGlzdGFwYXJ0LmNvbS9hcnRpY2xlL3F1YW50aXR5LXF1ZXJpZXMtZm9yLWNzcyBRdWFudGl0eSBRdWVyaWVzIGZvciBDU1Ncbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWF4IC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gZGV0ZWN0LiBUaGUgaGlnaGVyIHRoaXMgbnVtYmVyIGlzLCB0aGUgbW9yZSBDU1MgdGhhdCdzIHJlcXVpcmVkIHRvIGNvdmVyIGVhY2ggbnVtYmVyIG9mIGl0ZW1zLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGVsZW0gW2xpXSAtIFRhZyB0byB1c2UgZm9yIHNpYmxpbmcgc2VsZWN0b3JzLlxuQG1peGluIGF1dG8td2lkdGgoJG1heCwgJGVsZW06IGxpKSB7XG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJG1heCB7XG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQsXG4gICAgJjpudGgtbGFzdC1jaGlsZCgjeyRpfSk6Zmlyc3QtY2hpbGQgfiAjeyRlbGVtfSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgxIC8gJGkpO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gUmVtb3ZlcyB0aGUgZm9jdXMgcmluZyBhcm91bmQgYW4gZWxlbWVudCB3aGVuIGEgbW91c2UgaW5wdXQgaXMgZGV0ZWN0ZWQuXG5AbWl4aW4gZGlzYWJsZS1tb3VzZS1vdXRsaW5lIHtcbiAgW2RhdGEtd2hhdGlucHV0PSdtb3VzZSddICYge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8vIE1ha2VzIGFuIGVsZW1lbnQgdmlzdWFsbHkgaGlkZGVuLCBidXQgc3RpbGwgYWNjZXNzaWJsZSB0byBrZXlib2FyZHMgYW5kIGFzc2lzdGl2ZSBkZXZpY2VzLlxuLy8vIEBsaW5rIGh0dHA6Ly9zbm9vay5jYS9hcmNoaXZlcy9odG1sX2FuZF9jc3MvaGlkaW5nLWNvbnRlbnQtZm9yLWFjY2Vzc2liaWxpdHkgSGlkaW5nIENvbnRlbnQgZm9yIEFjY2Vzc2liaWxpdHlcbi8vLyBAbGluayBodHRwOi8vaHVnb2dpcmF1ZGVsLmNvbS8yMDE2LzEwLzEzL2Nzcy1oaWRlLWFuZC1zZWVrL1xuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZW5mb3JjZSAtIElmIGB0cnVlYCwgdXNlIGAhaW1wb3J0YW50YCBvbiBhcHBsaWVkIHByb3BlcnRpZXNcbkBtaXhpbiBlbGVtZW50LWludmlzaWJsZShcbiAgJGVuZm9yY2U6IHRydWVcbikge1xuICAkaW1wb3J0YW50OiBpZigkZW5mb3JjZSwgJyFpbXBvcnRhbnQnLCBudWxsKTtcblxuICBwb3NpdGlvbjogYWJzb2x1dGUgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBoZWlnaHQ6IDFweCAjeyRpbXBvcnRhbnR9O1xuICBwYWRkaW5nOiAwICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiBoaWRkZW4gI3skaW1wb3J0YW50fTtcbiAgY2xpcDogcmVjdCgwLDAsMCwwKSAjeyRpbXBvcnRhbnR9O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwICN7JGltcG9ydGFudH07XG4gIGJvcmRlcjogMCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gUmV2ZXJzZXMgdGhlIENTUyBvdXRwdXQgY3JlYXRlZCBieSB0aGUgYGVsZW1lbnQtaW52aXNpYmxlKClgIG1peGluLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJGVuZm9yY2UgLSBJZiBgdHJ1ZWAsIHVzZSBgIWltcG9ydGFudGAgb24gYXBwbGllZCBwcm9wZXJ0aWVzXG5AbWl4aW4gZWxlbWVudC1pbnZpc2libGUtb2ZmKFxuICAkZW5mb3JjZTogdHJ1ZVxuKSB7XG4gICRpbXBvcnRhbnQ6IGlmKCRlbmZvcmNlLCAnIWltcG9ydGFudCcsIG51bGwpO1xuXG4gIHBvc2l0aW9uOiBzdGF0aWMgI3skaW1wb3J0YW50fTtcbiAgd2lkdGg6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgaGVpZ2h0OiBhdXRvICN7JGltcG9ydGFudH07XG4gIG92ZXJmbG93OiB2aXNpYmxlICN7JGltcG9ydGFudH07XG4gIGNsaXA6IGF1dG8gI3skaW1wb3J0YW50fTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbCAjeyRpbXBvcnRhbnR9O1xufVxuXG4vLy8gVmVydGljYWxseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiB2ZXJ0aWNhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgY2VudGVycyB0aGUgZWxlbWVudCBpbnNpZGUgb2YgaXRzIGZpcnN0IG5vbi1zdGF0aWMgcGFyZW50LFxuLy8vIEBsaW5rIGh0dHA6Ly93d3cuc2l0ZXBvaW50LmNvbS9jZW50ZXJpbmctd2l0aC1zYXNzLyBDZW50ZXJpbmcgV2l0aCBTYXNzXG5AbWl4aW4gaG9yaXpvbnRhbC1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLy8gQWJzb2x1dGVseSBjZW50ZXJzIHRoZSBlbGVtZW50IGluc2lkZSBvZiBpdHMgZmlyc3Qgbm9uLXN0YXRpYyBwYXJlbnQsXG4vLy8gQGxpbmsgaHR0cDovL3d3dy5zaXRlcG9pbnQuY29tL2NlbnRlcmluZy13aXRoLXNhc3MvIENlbnRlcmluZyBXaXRoIFNhc3NcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLy8gSXRlcmF0ZXMgdGhyb3VnaCBicmVha3BvaW50cyBkZWZpbmVkIGluIGAkYnJlYWtwb2ludC1jbGFzc2VzYCBhbmQgcHJpbnRzIHRoZSBDU1MgaW5zaWRlIHRoZSBtaXhpbiBhdCBlYWNoIGJyZWFrcG9pbnQncyBtZWRpYSBxdWVyeS4gVXNlIHRoaXMgd2l0aCB0aGUgZ3JpZCwgb3IgYW55IG90aGVyIGNvbXBvbmVudCB0aGF0IGhhcyByZXNwb25zaXZlIGNsYXNzZXMuXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRzbWFsbCBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBza2lwIHRoZSBgc21hbGxgIGJyZWFrcG9pbnQuIFVzZSB0aGlzIHdpdGggY29tcG9uZW50cyB0aGF0IGRvbid0IHByZWZpeCBjbGFzc2VzIHdpdGggYHNtYWxsLWAsIG9ubHkgYG1lZGl1bS1gIGFuZCB1cC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRhdXRvLWluc2VydC1icmVha3BvaW50cyBbdHJ1ZV0gLSBJZiBgZmFsc2VgLCB0aGUgbWl4aW4gd2lsbCBpdGVyYXRlIG92ZXIgYnJlYWtwb2ludHMgd2l0aG91dCBkb2luZyB0aGUgbWVkaWEgcXVlcnkgaXRzZWxmLiBVc2VmdWwgZm9yIG1vcmUgY29tcGxleCBtZWRpYSBxdWVyeSBnZW5lcmF0aW9uIGFzIGluIHRoZSBtYXJnaW4gZ3JpZC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50KFxuICAkc21hbGw6IHRydWUsXG4gICRhdXRvLWluc2VydC1icmVha3BvaW50czogdHJ1ZVxuKSB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oYXV0bywgLXpmLWJvb2woJHNtYWxsKSwgLXpmLWJvb2woJGF1dG8taW5zZXJ0LWJyZWFrcG9pbnRzKSkge1xuICAgIEBjb250ZW50XG4gIH07XG59XG5cbi8vLyBJdGVyYXRlcyB3aXRoIGBAY29udGVudGAgdGhyb3VnaCB0aGUgZ2l2ZW4gbGlzdCBvZiBicmVha3BvaW50cyBgJGJyZWFrcG9pbnRzYC5cbi8vL1xuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfExpc3R9ICRicmVha3BvaW50cyBbYXV0b10gLSBCcmVha3BvaW50cyB0byBpdGVyYXRlcyBvbi4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbnxOdWxsfSAkemVyby1icmVha3BvaW50IFtudWxsXSAtIFdoZXRoZXIgdGhlIHplcm8tYnJlYWtwb2ludCAob2Z0ZW4gYHNtYWxsYCkgbXVzdCBiZSBpbmNsdWRlZC4gSWYgYHRydWVgLCBpdCB3aWxsIGFsd2F5cyBiZSBhZGRlZCB0byB0aGUgbGlzdCBpZiBub3QgYWxyZWFkeSB0aGVyZS4gSWYgYGZhbHNlYCwgaXQgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZC4gRG9lcyBub3RoaW5nIGJ5IGRlZmF1bHQuXG4vLy8gQHBhcmFtIHtCb29sZWFufEtleXdvcmR9ICRtZWRpYS1xdWVyaWVzIFt0cnVlXSAtIFdoZXRoZXIgbWVkaWEtcXVlcmllcyBtdXN0IGJlIGdlbmVyYXRlZC4gSWYgYGZvci1saXN0c2AsIG9ubHkgZ2VuZXJhdGUgbWVkaWEtcXVlcmllcyB3aGVuIGAkYnJlYWtwb2ludHNgIGlzIGEgbGlzdC5cbkBtaXhpbiAtemYtZWFjaC1icmVha3BvaW50LWluKFxuICAkYnJlYWtwb2ludHM6IGF1dG8sXG4gICR6ZXJvLWJyZWFrcG9pbnQ6IG51bGwsXG4gICRtZWRpYS1xdWVyaWVzOiB0cnVlXG4pIHtcbiAgJC1saXN0OiAoKTtcbiAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IHRydWU7XG5cbiAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgYnJlYWtwb2ludChzKSB0byBpdGVyYXRlIG9uLlxuICBAaWYgJGJyZWFrcG9pbnRzID09IGF1dG8ge1xuICAgICQtbGlzdDogJGJyZWFrcG9pbnQtY2xhc3NlcztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ2xpc3QnIHtcbiAgICAkLWxpc3Q6ICRicmVha3BvaW50cztcbiAgfVxuICBAZWxzZSBpZiB0eXBlLW9mKCRicmVha3BvaW50cykgPT0gJ3N0cmluZycge1xuICAgICQtbGlzdDogKCRicmVha3BvaW50cyk7XG4gICAgJC1icmVha3BvaW50cy1pcy1hLWxpc3Q6IGZhbHNlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCIkYnJlYWtwb2ludHNcIiBpbiBcIi16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oKVwiLiBHb3QgXCIjeyRicmVha3BvaW50c31cIiAoI3t0eXBlLW9mKCRicmVha3BvaW50cyl9KS4gRXhwZWN0ZWQgYSBicmVha3BvaW50IG5hbWUsIGEgbGlzdCBvZiBicmVha3BvaW50cyBvciBcImF1dG9cIic7XG4gIH1cblxuICAvLyBBZGQgb3IgcmVtb3ZlIHRoZSB6ZXJvIGJyZWFrcG9pbnQgYWNjb3JkaW5nIHRvIGAkemVyby1icmVha3BvaW50YFxuICBAaWYgJHplcm8tYnJlYWtwb2ludCA9PSB0cnVlIHtcbiAgICAkLWxpc3Q6IGpvaW4oKCQtemYtemVyby1icmVha3BvaW50KSwgc2wtcmVtb3ZlKCQtbGlzdCwgJC16Zi16ZXJvLWJyZWFrcG9pbnQpKTtcbiAgfVxuICBAZWxzZSBpZiAkemVyby1icmVha3BvaW50ID09IGZhbHNlIHtcbiAgICAkLWxpc3Q6IHNsLXJlbW92ZSgkLWxpc3QsICQtemYtemVyby1icmVha3BvaW50KTtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb24gYnJlYWtwb2ludChzKVxuICBAZWFjaCAkYnAgaW4gJC1saXN0IHtcbiAgICAkb2xkLXpmLXNpemU6IG51bGw7XG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoLXpmLXNpemUpIHtcbiAgICAgICRvbGQtemYtc2l6ZTogJC16Zi1zaXplO1xuICAgIH1cbiAgICAkLXpmLXNpemU6ICRicCAhZ2xvYmFsO1xuXG4gICAgQGlmICgkbWVkaWEtcXVlcmllcyA9PSB0cnVlXG4gICAgICBvciAoJG1lZGlhLXF1ZXJpZXMgPT0gJ2Zvci1saXN0cycgYW5kICQtYnJlYWtwb2ludHMtaXMtYS1saXN0KSkge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnApIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgICQtemYtc2l6ZTogJG9sZC16Zi1zaXplICFnbG9iYWw7XG4gIH1cbn1cblxuLy8vIEdlbmVyYXRlIHRoZSBgQGNvbnRlbnRgIHBhc3NlZCB0byB0aGUgbWl4aW4gd2l0aCBhIHZhbHVlIGAkLXpmLWJwLXZhbHVlYCByZWxhdGVkIHRvIGEgYnJlYWtwb2ludCwgZGVwZW5kaW5nIG9uIHRoZSBgJG5hbWVgIHBhcmFtZXRlcjpcbi8vLyAtIEZvciBhIHNpbmdsZSB2YWx1ZSwgYCQtemYtYnAtdmFsdWVgIGlzIHRoaXMgdmFsdWUuXG4vLy8gLSBGb3IgYSBicmVha3BvaW50IG5hbWUsIGAkLXpmLWJwLXZhbHVlYCBpcyB0aGUgY29ycmVzcG9uZGluZyBicmVha3BvaW50IHZhbHVlIGluIGAkbWFwYC5cbi8vLyAtIEZvciBcImF1dG9cIiwgYCQtemYtYnAtdmFsdWVgIGlzIHRoZSBjb3JyZXNwb25kaW5nIGJyZWFrcG9pbnQgdmFsdWUgaW4gYCRtYXBgIGFuZCBpcyBwYXNzZWQgdG8gYEBjb250ZW50YCwgd2hpY2ggaXMgbWFkZSByZXNwb25zaXZlIGZvciBlYWNoIGJyZWFrcG9pbnQgb2YgYCRtYXBgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfEFycmF5fEtleXdvcmR9ICRuYW1lIFthdXRvXSAtIFNpbmdsZSB2YWx1ZSwgYnJlYWtwb2ludCBuYW1lLCBvciBsaXN0IG9mIGJyZWFrcG9pbnQgbmFtZXMgdG8gdXNlLiBcImF1dG9cIiBieSBkZWZhdWx0LlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJG1hcCAtIE1hcCBvZiBicmVha3BvaW50cyBhbmQgdmFsdWVzIG9yIHNpbmdsZSB2YWx1ZSB0byB1c2UuXG5AbWl4aW4gLXpmLWJyZWFrcG9pbnQtdmFsdWUoXG4gICRuYW1lOiBhdXRvLFxuICAkbWFwOiBudWxsXG4pIHtcbiAgQGlmICRuYW1lID09IGF1dG8gYW5kIHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcge1xuICAgIC8vIFwiYXV0b1wiXG4gICAgQGVhY2ggJGssICR2IGluICRtYXAge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkaykge1xuICAgICAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZSgkdiwgJG1hcCkge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBicmVha3BvaW50IG5hbWVcbiAgICBAaWYgdHlwZS1vZigkbmFtZSkgPT0gJ3N0cmluZycge1xuICAgICAgJGJwLXZhbHVlOiAtemYtZ2V0LWJwLXZhbCgkbWFwLCAkbmFtZSk7XG4gICAgICBAaWYgJGJwLXZhbHVlICE9IG51bGwge1xuICAgICAgICAkbmFtZTogJGJwLXZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVcbiAgICAkLXpmLWJwLXZhbHVlOiAkbmFtZSAhZ2xvYmFsO1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEZvbnQgY29sb3Igb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBjb2xvciBvZiBwbGFjZWhvbGRlciB0ZXh0IHdpdGhpbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGZhbWlseSBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBGb250XG4kaW5wdXQtZm9udC1mYW1pbHk6IGluaGVyaXQgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaW5wdXQtZm9udC1zaXplOiByZW0tY2FsYygxNikgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRpbnB1dC1saW5lLWhlaWdodDogJGdsb2JhbC1saW5laGVpZ2h0ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZm9jdXNlZCBvZiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWJhY2tncm91bmQtZm9jdXM6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgZGlzYWJsZWQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1iYWNrZ3JvdW5kLWRpc2FibGVkOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBmb2N1c2VkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAxcHggc29saWQgJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgb2YgdGV4dCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wYWRkaW5nOiAkZm9ybS1zcGFjaW5nIC8gMiAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgaW5zaWRlIHRleHQgaW5wdXRzIHdoZW4gbm90IGZvY3VzZWQuXG4vLy8gQHR5cGUgU2hhZG93XG4kaW5wdXQtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIDAuMSkgIWRlZmF1bHQ7XG5cbi8vLyBCb3ggc2hhZG93IG91dHNpZGUgdGV4dCBpbnB1dHMgd2hlbiBmb2N1c2VkLlxuLy8vIEB0eXBlIFNoYWRvd1xuJGlucHV0LXNoYWRvdy1mb2N1czogMCAwIDVweCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgdG8gdXNlIHdoZW4gaG92ZXJpbmcgb3ZlciBhIGRpc2FibGVkIHRleHQgaW5wdXQuXG4vLy8gQHR5cGUgQ3Vyc29yXG4kaW5wdXQtY3Vyc29yLWRpc2FibGVkOiBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuLy8vIFByb3BlcnRpZXMgdG8gdHJhbnNpdGlvbiBvbiB0ZXh0IGlucHV0cy5cbi8vLyBAdHlwZSBUcmFuc2l0aW9uXG4kaW5wdXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjVzLCBib3JkZXItY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbi8vLyBFbmFibGVzIHRoZSB1cC9kb3duIGJ1dHRvbnMgdGhhdCBDaHJvbWUgYW5kIEZpcmVmb3ggYWRkIHRvIGA8aW5wdXQgdHlwZT0nbnVtYmVyJz5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRpbnB1dC1udW1iZXItc3Bpbm5lcnM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBSYWRpdXMgZm9yIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIEJvcmRlclxuJGlucHV0LXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBmb3JtIGJ1dHRvbnMsIGRlZmF1bHRlZCB0byBnbG9iYWwtcmFkaXVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGZvcm0tYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWVsZW1lbnQge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICRoZWlnaHQ7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmc7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIGJvcmRlcjogJGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGlucHV0LXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3c7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiBoYXMtdmFsdWUoJGlucHV0LXRyYW5zaXRpb24pIHtcbiAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgfVxuXG4gIC8vIEZvY3VzIHN0YXRlXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyOiAkaW5wdXQtYm9yZGVyLWZvY3VzO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iYWNrZ3JvdW5kLWZvY3VzO1xuICAgIGJveC1zaGFkb3c6ICRpbnB1dC1zaGFkb3ctZm9jdXM7XG5cbiAgICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgICB0cmFuc2l0aW9uOiAkaW5wdXQtdHJhbnNpdGlvbjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS10ZXh0IHtcbiAgLy8gVGV4dCBpbnB1dHNcbiAgI3t0ZXh0LWlucHV0cygpfSxcbiAgdGV4dGFyZWEge1xuICAgIEBpbmNsdWRlIGZvcm0tZWxlbWVudDtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgLy8gVGV4dCBhcmVhc1xuICB0ZXh0YXJlYSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuXG4gICAgJltyb3dzXSB7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG5cbiAgaW5wdXQsXG4gIHRleHRhcmVhIHtcbiAgICAvLyBEaXNhYmxlZC9yZWFkb25seSBzdGF0ZVxuICAgICY6ZGlzYWJsZWQsXG4gICAgJltyZWFkb25seV0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgICBjdXJzb3I6ICRpbnB1dC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgc3R5bGVzIG9uIGJ1dHRvbi1saWtlIGlucHV0c1xuICBbdHlwZT0nc3VibWl0J10sXG4gIFt0eXBlPSdidXR0b24nXSB7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1idXR0b24tcmFkaXVzO1xuICB9XG5cbiAgLy8gUmVzZXQgTm9ybWFsaXplIHNldHRpbmcgY29udGVudC1ib3ggdG8gc2VhcmNoIGVsZW1lbnRzXG4gIGlucHV0W3R5cGU9J3NlYXJjaCddIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIC8vIE51bWJlciBpbnB1dCBzdHlsZXNcbiAgW3R5cGU9J251bWJlciddIHtcbiAgICBAaWYgbm90ICRpbnB1dC1udW1iZXItc3Bpbm5lcnMge1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tdmVuZG9yLXByZWZpeGVzXG5cbiAgICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXZlbmRvci1wcmVmaXhlc1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGxhY2Vob2xkZXIgdGV4dFxuICA6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbiRnbG9iYWwtZm9udC1zaXplOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gUmVtb3ZlcyB0aGUgdW5pdCAoZS5nLiBweCwgZW0sIHJlbSkgZnJvbSBhIHZhbHVlLCByZXR1cm5pbmcgdGhlIG51bWJlciBvbmx5LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRudW0gLSBOdW1iZXIgdG8gc3RyaXAgdW5pdCBmcm9tLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcn0gVGhlIHNhbWUgbnVtYmVyLCBzYW5zIHVuaXQuXG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtKSB7XG4gIEByZXR1cm4gJG51bSAvICgkbnVtICogMCArIDEpO1xufVxuXG4vLy8gQ29udmVydHMgb25lIG9yIG1vcmUgcGl4ZWwgdmFsdWVzIGludG8gbWF0Y2hpbmcgcmVtIHZhbHVlcy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICR2YWx1ZXMgLSBPbmUgb3IgbW9yZSB2YWx1ZXMgdG8gY29udmVydC4gQmUgc3VyZSB0byBzZXBhcmF0ZSB0aGVtIHdpdGggc3BhY2VzIGFuZCBub3QgY29tbWFzLiBJZiB5b3UgbmVlZCB0byBjb252ZXJ0IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdyYXAgdGhlIGxpc3QgaW4gcGFyZW50aGVzZXMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIFtudWxsXSAtIFRoZSBiYXNlIHZhbHVlIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBgcmVtYC4gSWYgeW91J3JlIHVzaW5nIEZvdW5kYXRpb24gb3V0IG9mIHRoZSBib3gsIHRoaXMgaXMgMTZweC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgYG51bGxgLCB0aGUgZnVuY3Rpb24gd2lsbCByZWZlcmVuY2UgdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUgYXMgdGhlIGJhc2UuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gQSBsaXN0IG9mIGNvbnZlcnRlZCB2YWx1ZXMuXG5AZnVuY3Rpb24gcmVtLWNhbGMoJHZhbHVlcywgJGJhc2U6IG51bGwpIHtcbiAgJHJlbS12YWx1ZXM6ICgpO1xuICAkY291bnQ6IGxlbmd0aCgkdmFsdWVzKTtcblxuICAvLyBJZiBubyBiYXNlIGlzIGRlZmluZWQsIGRlZmVyIHRvIHRoZSBnbG9iYWwgZm9udCBzaXplXG4gIEBpZiAkYmFzZSA9PSBudWxsIHtcbiAgICAkYmFzZTogJGdsb2JhbC1mb250LXNpemU7XG4gIH1cblxuICAvLyBJZiB0aGUgYmFzZSBmb250IHNpemUgaXMgYSAlLCB0aGVuIG11bHRpcGx5IGl0IGJ5IDE2cHhcbiAgLy8gVGhpcyBpcyBiZWNhdXNlIDEwMCUgZm9udCBzaXplID0gMTZweCBpbiBtb3N0IGFsbCBicm93c2Vyc1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVtIGFzIGJhc2UgYWxsb3dzIGNvcnJlY3Qgc2NhbGluZ1xuICBAaWYgdW5pdCgkYmFzZSkgPT0gJ3JlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICBAaWYgJGNvdW50ID09IDEge1xuICAgIEByZXR1cm4gLXpmLXRvLXJlbSgkdmFsdWVzLCAkYmFzZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJlbS12YWx1ZXM6IGFwcGVuZCgkcmVtLXZhbHVlcywgLXpmLXRvLXJlbShudGgoJHZhbHVlcywgJGkpLCAkYmFzZSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVtLXZhbHVlcztcbn1cblxuLy8gQ29udmVydHMgYSB1bml0bGVzcywgcGl4ZWwsIG9yIHJlbSB2YWx1ZSB0byBlbSwgZm9yIHVzZSBpbiBicmVha3BvaW50cy5cbkBmdW5jdGlvbiAtemYtYnAtdG8tZW0oJHZhbHVlKSB7XG4gIC8vIFBpeGVsIGFuZCB1bml0bGVzcyB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byByZW1zXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyBvciB1bml0bGVzcygkdmFsdWUpIHtcbiAgICAkdmFsdWU6IHJlbS1jYWxjKCR2YWx1ZSwgJGJhc2U6IDE2cHgpO1xuICB9XG5cbiAgLy8gVGhlbiB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIGVtc1xuICBAcmV0dXJuIHN0cmlwLXVuaXQoJHZhbHVlKSAqIDFlbTtcbn1cblxuLy8vIENvbnZlcnRzIGEgcGl4ZWwgdmFsdWUgdG8gbWF0Y2hpbmcgcmVtIHZhbHVlLiAqQW55KiB2YWx1ZSBwYXNzZWQsIHJlZ2FyZGxlc3Mgb2YgdW5pdCwgaXMgYXNzdW1lZCB0byBiZSBhIHBpeGVsIHZhbHVlLiBCeSBkZWZhdWx0LCB0aGUgYmFzZSBwaXhlbCB2YWx1ZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcmVtIHZhbHVlIGlzIHRha2VuIGZyb20gdGhlIGAkZ2xvYmFsLWZvbnQtc2l6ZWAgdmFyaWFibGUuXG4vLy8gQGFjY2VzcyBwcml2YXRlXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHZhbHVlIC0gUGl4ZWwgdmFsdWUgdG8gY29udmVydC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgW251bGxdIC0gQmFzZSBmb3IgcGl4ZWwgY29udmVyc2lvbi5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IEEgbnVtYmVyIGluIHJlbXMsIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZCB0aGUgYmFzZSBwaXhlbCB2YWx1ZS4gcmVtIHZhbHVlcyBhcmUgcGFzc2VkIHRocm91Z2ggYXMgaXMuXG5AZnVuY3Rpb24gLXpmLXRvLXJlbSgkdmFsdWUsICRiYXNlOiBudWxsKSB7XG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkdmFsdWUpICE9ICdudW1iZXInIHtcbiAgICBAd2FybiBpbnNwZWN0KCR2YWx1ZSkgKyAnIHdhcyBwYXNzZWQgdG8gcmVtLWNhbGMoKSwgd2hpY2ggaXMgbm90IGEgbnVtYmVyLic7XG4gICAgQHJldHVybiAkdmFsdWU7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gZW0gaW50byByZW0gaWYgc29tZW9uZSBoYW5kcyBvdmVyICdlbSdzXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ2VtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgKiAxcmVtO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHJlbSBpZiB1bml0cyBmb3IgJHZhbHVlIGlzIG5vdCByZW0gb3IgZW1cbiAgQGlmIHVuaXQoJHZhbHVlKSAhPSAncmVtJyB7XG4gICAgJHZhbHVlOiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKSAqIDFyZW07XG4gIH1cblxuICAvLyBUdXJuIDByZW0gaW50byAwXG4gIEBpZiAkdmFsdWUgPT0gMHJlbSB7XG4gICAgJHZhbHVlOiAwO1xuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbi8vLyBDb252ZXJ0cyBhIHBpeGVsLCBwZXJjZW50YWdlLCByZW0gb3IgZW0gdmFsdWUgdG8gYSB1bml0bGVzcyB2YWx1ZSBiYXNlZCBvbiBhIGdpdmVuIGZvbnQgc2l6ZS4gSWRlYWwgZm9yIHdvcmtpbmcgb3V0IHVuaXRsZXNzIGxpbmUgaGVpZ2h0cy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBjb252ZXJ0IHRvIGEgdW5pdGxlc3MgbGluZSBoZWlnaHRcbi8vLyBAcGFyYW0ge051bWJlcn0gJGJhc2UgLSBUaGUgZm9udCBzaXplIHRvIHVzZSB0byB3b3JrIG91dCB0aGUgbGluZSBoZWlnaHQgLSBkZWZhdWx0cyB0byAkZ2xvYmFsLWZvbnQtc2l6ZVxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIFVuaXRsZXNzIG51bWJlclxuQGZ1bmN0aW9uIHVuaXRsZXNzLWNhbGMoJHZhbHVlLCAkYmFzZTogbnVsbCkge1xuXG4gIC8vIElmIG5vIGJhc2UgaXMgZGVmaW5lZCwgZGVmZXIgdG8gdGhlIGdsb2JhbCBmb250IHNpemVcbiAgQGlmICRiYXNlID09IG51bGwge1xuICAgICRiYXNlOiAkZ2xvYmFsLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIC8vIEZpcnN0LCBsZXRzIGNvbnZlcnQgb3VyICRiYXNlIHRvIHBpeGVsc1xuXG4gIC8vIElmIHRoZSBiYXNlIGZvbnQgc2l6ZSBpcyBhICUsIHRoZW4gbXVsdGlwbHkgaXQgYnkgMTZweFxuICBAaWYgdW5pdCgkYmFzZSkgPT0gJyUnIHtcbiAgICAkYmFzZTogKCRiYXNlIC8gMTAwJSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdyZW0nIHtcbiAgICAkYmFzZTogc3RyaXAtdW5pdCgkYmFzZSkgKiAxNnB4O1xuICB9XG5cbiAgQGlmIHVuaXQoJGJhc2UpID09ICdlbScge1xuICAgICRiYXNlOiBzdHJpcC11bml0KCRiYXNlKSAqIDE2cHg7XG4gIH1cblxuICAvLyBOb3cgbGV0J3MgY29udmVydCBvdXIgdmFsdWUgdG8gcGl4ZWxzIHRvb1xuICBAaWYgdW5pdCgkdmFsdWUpID09ICclJyB7XG4gICAgJHZhbHVlOiAoJHZhbHVlIC8gMTAwJSkgKiAkYmFzZTtcbiAgfVxuXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3JlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICBAaWYgdW5pdCgkdmFsdWUpID09ICdlbScge1xuICAgICR2YWx1ZTogc3RyaXAtdW5pdCgkdmFsdWUpICogJGJhc2U7XG4gIH1cblxuICAvLyAncHgnXG4gIEBpZiB1bml0KCR2YWx1ZSkgPT0gJ3B4JyB7XG4gICAgQHJldHVybiBzdHJpcC11bml0KCR2YWx1ZSkgLyBzdHJpcC11bml0KCRiYXNlKTtcbiAgfVxuXG4gIC8vIGFzc3VtZSB0aGF0IGxpbmUtaGVpZ2h0cyBncmVhdGVyIHRoYW4gMTAgYXJlIG1lYW50IHRvIGJlIGFic29sdXRlIGluICdweCdcbiAgQGlmIHVuaXRsZXNzKCR2YWx1ZSkgYW5kICgkdmFsdWUgPiAxMCkge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gc3RyaXAtdW5pdCgkYmFzZSk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWNoZWNrYm94IHtcbiAgW3R5cGU9J2ZpbGUnXSxcbiAgW3R5cGU9J2NoZWNrYm94J10sXG4gIFt0eXBlPSdyYWRpbyddIHtcbiAgICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICB9XG5cbiAgLy8gU3R5bGVzIGZvciBpbnB1dC9sYWJlbCBzaWJsaW5nc1xuICBbdHlwZT0nY2hlY2tib3gnXSArIGxhYmVsLFxuICBbdHlwZT0ncmFkaW8nXSArIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuXG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGZvcm0tc3BhY2luZyAqIDAuNTtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJGZvcm0tc3BhY2luZztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgJltmb3JdIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAvLyBTdHlsZXMgZm9yIGlucHV0cyBpbnNpZGUgbGFiZWxzXG4gIGxhYmVsID4gW3R5cGU9J2NoZWNrYm94J10sXG4gIGxhYmVsID4gW3R5cGU9J3JhZGlvJ10ge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkZm9ybS1zcGFjaW5nICogMC41O1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIGZpbGUgaW5wdXQgd2lkdGhcbiAgW3R5cGU9J2ZpbGUnXSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmb3Jtc1xuLy8vL1xuXG4vLy8gQ29sb3IgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kZm9ybS1sYWJlbC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBmb3JtIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgZm9yIGZvcm0gbGFiZWxzLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBMaW5lIGhlaWdodCBmb3IgZm9ybSBsYWJlbHMuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGl0cyBpbnB1dCBmaWVsZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRmb3JtLWxhYmVsLWxpbmUtaGVpZ2h0OiAxLjggIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3JtLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcblxuICBmb250LXNpemU6ICRmb3JtLWxhYmVsLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGZvcm0tbGFiZWwtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvcjtcbn1cblxuQG1peGluIGZvcm0tbGFiZWwtbWlkZGxlIHtcbiAgJGlucHV0LWJvcmRlci13aWR0aDogZ2V0LWJvcmRlci12YWx1ZSgkaW5wdXQtYm9yZGVyLCB3aWR0aCk7XG5cbiAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZztcbiAgcGFkZGluZzogKCRmb3JtLXNwYWNpbmcgLyAyICsgcmVtLWNhbGMoJGlucHV0LWJvcmRlci13aWR0aCkpIDA7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tbGFiZWwge1xuICBsYWJlbCB7XG4gICAgQGluY2x1ZGUgZm9ybS1sYWJlbDtcblxuICAgICYubWlkZGxlIHtcbiAgICAgIEBpbmNsdWRlIGZvcm0tbGFiZWwtbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWxwIHRleHQuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWxwdGV4dC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGhlbHAgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWxwdGV4dC1mb250LXNpemU6IHJlbS1jYWxjKDEzKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzdHlsZSBmb3IgaGVscCB0ZXh0LlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoZWxwdGV4dC1mb250LXN0eWxlOiBpdGFsaWMgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0taGVscHRleHQge1xuICAuaGVscC10ZXh0IHtcbiAgICAkbWFyZ2luLXRvcDogKCRmb3JtLXNwYWNpbmcgKiAwLjUpICogLTE7XG5cbiAgICBtYXJnaW4tdG9wOiAkbWFyZ2luLXRvcDtcbiAgICBmb250LXNpemU6ICRoZWxwdGV4dC1mb250LXNpemU7XG4gICAgZm9udC1zdHlsZTogJGhlbHB0ZXh0LWZvbnQtc3R5bGU7XG4gICAgY29sb3I6ICRoZWxwdGV4dC1jb2xvcjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBDb2xvciBvZiBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQ29sb3JcbiRpbnB1dC1wcmVmaXgtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgbGFiZWxzIHByZWZpeGVkIHRvIGFuIGlucHV0LlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtcHJlZml4LWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGFyb3VuZCBsYWJlbHMgcHJlZml4ZWQgdG8gYW4gaW5wdXQuXG4vLy8gQHR5cGUgQm9yZGVyXG4kaW5wdXQtcHJlZml4LWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIExlZnQvcmlnaHQgcGFkZGluZyBvZiBhbiBwcmUvcG9zdGZpeGVkIGlucHV0IGxhYmVsXG4kaW5wdXQtcHJlZml4LXBhZGRpbmc6IDFyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZvcm0tcHJlcG9zdGZpeCB7XG4gICRoZWlnaHQ6ICgkaW5wdXQtZm9udC1zaXplICogJGlucHV0LWxpbmUtaGVpZ2h0KSArIChnZXQtc2lkZSgkaW5wdXQtcGFkZGluZywgJ3RvcCcpICsgZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICdib3R0b20nKSkgLSByZW0tY2FsYygxKTtcblxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGRpc3BsYXk6IGlmKCRnbG9iYWwtZmxleGJveCwgZmxleCwgdGFibGUpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmc7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIH1cblxuICAgID4gOmZpcnN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICYsICYuaW5wdXQtZ3JvdXAtYnV0dG9uID4gKiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCAkaW5wdXQtcmFkaXVzIDAgMCAkaW5wdXQtcmFkaXVzLCAwICRpbnB1dC1yYWRpdXMgJGlucHV0LXJhZGl1cyAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAlaW5wdXQtZ3JvdXAtY2hpbGQge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmlucHV0LWdyb3VwLWxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nOiAwICRpbnB1dC1wcmVmaXgtcGFkZGluZztcbiAgICBib3JkZXI6ICRpbnB1dC1wcmVmaXgtYm9yZGVyO1xuICAgIGJhY2tncm91bmQ6ICRpbnB1dC1wcmVmaXgtYmFja2dyb3VuZDtcblxuICAgIGNvbG9yOiAkaW5wdXQtcHJlZml4LWNvbG9yO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICB3aWR0aDogMSU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtcHJlZml4LWJvcmRlcikge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtZ3JvdXAtY2hpbGQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAuaW5wdXQtZ3JvdXAtYnV0dG9uIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ncm91cC1jaGlsZDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIGEsXG4gICAgaW5wdXQsXG4gICAgYnV0dG9uLFxuICAgIGxhYmVsIHtcbiAgICAgIEBleHRlbmQgJWlucHV0LWdyb3VwLWNoaWxkO1xuXG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBoZWlnaHQ6ICRoZWlnaHQ7XG4gICAgICB9XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljaXR5IGJ1bXAgbmVlZGVkIHRvIHByZXZlbnQgb3ZlcnJpZGUgYnkgYnV0dG9uc1xuICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIC5pbnB1dC1ncm91cC1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGZvcm1zXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJvcmRlciBhcm91bmQgY3VzdG9tIGZpZWxkc2V0cy5cbi8vLyBAdHlwZSBCb3JkZXJcbiRmaWVsZHNldC1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgaW5zaWRlIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtcGFkZGluZzogcmVtLWNhbGMoMjApICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gYXJvdW5kIGN1c3RvbSBmaWVsZHNldHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZmllbGRzZXQtbWFyZ2luOiByZW0tY2FsYygxOCAwKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBiZXR3ZWVuIHRoZSBsZWdlbmQgdGV4dCBhbmQgZmllbGRzZXQgYm9yZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlZ2VuZC1wYWRkaW5nOiByZW0tY2FsYygwIDMpICFkZWZhdWx0O1xuXG5AbWl4aW4gZmllbGRzZXQge1xuICBtYXJnaW46ICRmaWVsZHNldC1tYXJnaW47XG4gIHBhZGRpbmc6ICRmaWVsZHNldC1wYWRkaW5nO1xuICBib3JkZXI6ICRmaWVsZHNldC1ib3JkZXI7XG5cbiAgbGVnZW5kIHtcbiAgICAvLyBDb3ZlcnMgdXAgdGhlIGZpZWxkc2V0J3MgYm9yZGVyIHRvIGNyZWF0ZSBhcnRpZmljaWFsIHBhZGRpbmdcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogcmVtLWNhbGMoLTMpO1xuICAgIHBhZGRpbmc6ICRsZWdlbmQtcGFkZGluZztcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1mb3JtLWZpZWxkc2V0IHtcbiAgZmllbGRzZXQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gIGxlZ2VuZCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206ICRmb3JtLXNwYWNpbmcgKiAwLjU7XG4gIH1cblxuICAuZmllbGRzZXQge1xuICAgIEBpbmNsdWRlIGZpZWxkc2V0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZm9ybXNcbi8vLy9cblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiB0aGUgZHJvcGRvd24gdHJpYW5nbGUgaW5zaWRlIHNlbGVjdCBtZW51cy4gU2V0IHRvIGB0cmFuc3BhcmVudGAgdG8gcmVtb3ZlIGl0IGVudGlyZWx5LlxuLy8vIEB0eXBlIENvbG9yXG4kc2VsZWN0LXRyaWFuZ2xlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHNlbGVjdCBtZW51cy5cbi8vLyBAdHlwZSBDb2xvclxuJHNlbGVjdC1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzICFkZWZhdWx0O1xuXG5AbWl4aW4gZm9ybS1zZWxlY3Qge1xuICAkaGVpZ2h0OiAoJGlucHV0LWZvbnQtc2l6ZSAqIHVuaXRsZXNzLWNhbGMoJGlucHV0LWxpbmUtaGVpZ2h0KSkgKyAoZ2V0LXNpZGUoJGlucHV0LXBhZGRpbmcsICd0b3AnKSArIGdldC1zaWRlKCRpbnB1dC1wYWRkaW5nLCAnYm90dG9tJykpIC0gcmVtLWNhbGMoMSk7XG5cbiAgaGVpZ2h0OiAkaGVpZ2h0O1xuICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nO1xuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6ICRpbnB1dC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRzZWxlY3QtcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0LWJhY2tncm91bmQ7XG5cbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgZm9udC1zaXplOiAkaW5wdXQtZm9udC1zaXplO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuXG4gIEBpZiAkc2VsZWN0LXRyaWFuZ2xlLWNvbG9yICE9IHRyYW5zcGFyZW50IHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXRyaWFuZ2xlKCRzZWxlY3QtdHJpYW5nbGUtY29sb3IpO1xuICAgIGJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAkZ2xvYmFsLXJpZ2h0ICgtJGZvcm0tc3BhY2luZykgY2VudGVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA5cHggNnB4O1xuXG4gICAgcGFkZGluZy0jeyRnbG9iYWwtcmlnaHR9OiAoJGZvcm0tc3BhY2luZyAqIDEuNSk7XG4gIH1cblxuICBAaWYgaGFzLXZhbHVlKCRpbnB1dC10cmFuc2l0aW9uKSB7XG4gICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gIH1cblxuICAvLyBGb2N1cyBzdGF0ZVxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlcjogJGlucHV0LWJvcmRlci1mb2N1cztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmFja2dyb3VuZC1mb2N1cztcbiAgICBib3gtc2hhZG93OiAkaW5wdXQtc2hhZG93LWZvY3VzO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgkaW5wdXQtdHJhbnNpdGlvbikge1xuICAgICAgdHJhbnNpdGlvbjogJGlucHV0LXRyYW5zaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgJjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJhY2tncm91bmQtZGlzYWJsZWQ7XG4gICAgY3Vyc29yOiAkaW5wdXQtY3Vyc29yLWRpc2FibGVkO1xuICB9XG5cbiAgLy8gSGlkZSB0aGUgZHJvcGRvd24gYXJyb3cgc2hvd24gaW4gbmV3ZXIgSUUgdmVyc2lvbnNcbiAgJjo6LW1zLWV4cGFuZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZbbXVsdGlwbGVdIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmOm5vdChbbXVsdGlwbGVdKSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1zZWxlY3Qge1xuICBzZWxlY3Qge1xuICAgIEBpbmNsdWRlIGZvcm0tc2VsZWN0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYWJpZGVcbi8vLy9cblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBpbnB1dHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWlucHV0czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgaWYgZXJyb3Igc3R5bGVzIHNob3VsZCBiZSBhZGRlZCB0byBsYWJlbHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGFiaWRlLWxhYmVsczogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgdG8gdXNlIGZvciBpbnZhbGlkIHRleHQgaW5wdXRzLlxuLy8vIEB0eXBlIENvbG9yXG4kaW5wdXQtYmFja2dyb3VuZC1pbnZhbGlkOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgdG8gdXNlIGZvciBsYWJlbHMgb2YgaW52YWxpZCBpbnB1dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRmb3JtLWxhYmVsLWNvbG9yLWludmFsaWQ6IGdldC1jb2xvcihhbGVydCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBDb2xvclxuJGlucHV0LWVycm9yLWNvbG9yOiBnZXQtY29sb3IoYWxlcnQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRpbnB1dC1lcnJvci1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgZm9yIGZvcm0gZXJyb3IgdGV4dC5cbi8vLyBAdHlwZSBLZXl3b3JkXG4kaW5wdXQtZXJyb3ItZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTdHlsZXMgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlciBvZiBhbiBpbnB1dCBmaWVsZCB0byBoYXZlIGFuIGVycm9yIHN0YXRlLlxuLy8vXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRhbGVydC1jb2xvcl0gLSBDb2xvciB0byB1c2UgZm9yIHRoZSBiYWNrZ3JvdW5kIGFuZCBib3JkZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYWNrZ3JvdW5kLWxpZ2h0ZW4gWzEwJV0gLSBMaWdodG5lc3MgbGV2ZWwgb2YgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gZm9ybS1pbnB1dC1lcnJvcihcbiAgJGJhY2tncm91bmQ6ICRpbnB1dC1iYWNrZ3JvdW5kLWludmFsaWQsXG4gICRiYWNrZ3JvdW5kLWxpZ2h0ZW46IDEwJVxuKSB7XG4gICY6bm90KDpmb2N1cykge1xuICAgIGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWl4KCRiYWNrZ3JvdW5kLCAkd2hpdGUsICRiYWNrZ3JvdW5kLWxpZ2h0ZW4pO1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBlcnJvciBzdHlsZXMgdG8gYSBmb3JtIGVsZW1lbnQsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHNldHRpbmdzIGZpbGUuXG5AbWl4aW4gZm9ybS1lcnJvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmcgKiAtMC41O1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1zcGFjaW5nO1xuXG4gIGZvbnQtc2l6ZTogJGlucHV0LWVycm9yLWZvbnQtc2l6ZTtcbiAgZm9udC13ZWlnaHQ6ICRpbnB1dC1lcnJvci1mb250LXdlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1lcnJvci1jb2xvcjtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tZm9ybS1lcnJvciB7XG4gIEBpZiAkYWJpZGUtaW5wdXRzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgaW52YWxpZCBpbnB1dHNcbiAgICAuaXMtaW52YWxpZC1pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBmb3JtLWlucHV0LWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkYWJpZGUtbGFiZWxzIHtcbiAgICAvLyBFcnJvciBjbGFzcyBmb3IgbGFiZWxzIG9mIGludmFsaWQgb3V0cHV0c1xuICAgIC5pcy1pbnZhbGlkLWxhYmVsIHtcbiAgICAgIGNvbG9yOiAkZm9ybS1sYWJlbC1jb2xvci1pbnZhbGlkO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gZXJyb3IgZWxlbWVudFxuICAuZm9ybS1lcnJvciB7XG4gICAgQGluY2x1ZGUgZm9ybS1lcnJvcjtcblxuICAgICYuaXMtdmlzaWJsZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0eXBvZ3JhcGh5LWJhc2Vcbi8vLy9cblxuLy8gQmFzZSBUeXBvZ3JhcGh5XG4vLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLVxuLy8gVGhlc2UgYXJlIHN0eWxlcyBhcHBsaWVkIHRvIGJhc2ljIEhUTUwgdGFncywgaW5jbHVkaW5nOlxuLy8gICAtIFBhcmFncmFwaHMgPHA+XG4vLyAgIC0gQm9sZC9pdGFsaWNzIDxiPiA8c3Ryb25nPiA8aT4gPGVtPlxuLy8gICAtIFNtYWxsIHRleHQgPHNtYWxsPlxuLy8gICAtIEhlYWRpbmdzIDxoMT4tPGg2PlxuLy8gICAtIEFuY2hvcnMgPGE+XG4vLyAgIC0gRGl2aWRlcnMgPGhyPlxuLy8gICAtIExpc3RzIDx1bD4gPG9sPiA8ZGw+XG4vLyAgIC0gQmxvY2txdW90ZXMgPGJsb2NrcXVvdGU+XG4vLyAgIC0gQ29kZSBibG9ja3MgPGNvZGU+XG4vLyAgIC0gQWJicmV2aWF0aW9ucyA8YWJicj5cbi8vICAgLSBDaXRhdGlvbnMgPGNpdGU+XG4vLyAgIC0gS2V5c3Ryb2tlcyA8a2JkPlxuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGhlYWRlciBlbGVtZW50cy5cbi8vLyBAdHlwZSBTdHJpbmcgfCBMaXN0XG4kaGVhZGVyLWZvbnQtZmFtaWx5OiAkYm9keS1mb250LWZhbWlseSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHN0eWxlIChlLmcuIGl0YWxpY2l6ZWQpIG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kaGVhZGVyLWZvbnQtc3R5bGU6IG5vcm1hbCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc3RhY2sgdXNlZCBmb3IgZWxlbWVudHMgdGhhdCB1c2UgbW9ub3NwYWNlZCB0eXBlLCBzdWNoIGFzIGNvZGUgc2FtcGxlc1xuLy8vIEB0eXBlIFN0cmluZyB8IExpc3RcbiRmb250LWZhbWlseS1tb25vc3BhY2U6IENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgQ291cmllciwgbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBDb2xvclxuJGhlYWRlci1jb2xvcjogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IG9mIGhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kaGVhZGVyLWxpbmVoZWlnaHQ6IDEuNCAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRoZWFkZXItbWFyZ2luLWJvdHRvbTogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gU3R5bGVzIGZvciBoZWFkaW5ncyBhdCB2YXJpb3VzIHNjcmVlbiBzaXplcy4gRWFjaCBrZXkgaXMgYSBicmVha3BvaW50LCBhbmQgZWFjaCB2YWx1ZSBpcyBhIG1hcCBvZiBoZWFkaW5nIHN0eWxlcy5cbi8vLyBAdHlwZSBNYXBcbiRoZWFkZXItc3R5bGVzOiAoXG4gIHNtYWxsOiAoXG4gICAgJ2gxJzogKCdmb250LXNpemUnOiAyNCksXG4gICAgJ2gyJzogKCdmb250LXNpemUnOiAyMCksXG4gICAgJ2gzJzogKCdmb250LXNpemUnOiAxOSksXG4gICAgJ2g0JzogKCdmb250LXNpemUnOiAxOCksXG4gICAgJ2g1JzogKCdmb250LXNpemUnOiAxNyksXG4gICAgJ2g2JzogKCdmb250LXNpemUnOiAxNiksXG4gICksXG4gIG1lZGl1bTogKFxuICAgICdoMSc6ICgnZm9udC1zaXplJzogNDgpLFxuICAgICdoMic6ICgnZm9udC1zaXplJzogNDApLFxuICAgICdoMyc6ICgnZm9udC1zaXplJzogMzEpLFxuICAgICdoNCc6ICgnZm9udC1zaXplJzogMjUpLFxuICAgICdoNSc6ICgnZm9udC1zaXplJzogMjApLFxuICAgICdoNic6ICgnZm9udC1zaXplJzogMTYpLFxuICApLFxuKSAhZGVmYXVsdDtcblxuLy8gJGhlYWRlci1zdHlsZXMgbWFwIGlzIGJ1aWx0IGZyb20gJGhlYWRlci1zaXplcyBpbiBvcmRlciB0byBlbnN1cmUgZG93bndhcmQgY29tcGF0aWJpbGl0eVxuLy8gd2hlbiAkaGVhZGVyLXNpemVzIGlzIGRlcHJlY2lhdGVkLCAkaGVhZGVyLXN0eWxlcyBuZWVkcyB0byBnZXQgIWRlZmF1bHQgdmFsdWVzIGxpa2Ugc2V0dGluZ3Muc2Nzc1xuQGZ1bmN0aW9uIGJ1aWxkX2Zyb21faGVhZGVyLXNpemVzKCRoZWFkZXItc2l6ZXMpIHtcbiAgQHdhcm4gJ05vdGUsIHRoYXQgJGhlYWRlci1zaXplcyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoICRoZWFkZXItc3R5bGVzLiAkaGVhZGVyLXNpemVzIHN0aWxsIHdvcmtzLCBidXQgaXQgaXMgZ29pbmcgdG8gYmUgZGVwcmVjaWF0ZWQuJztcbiAgJGhlYWRlci1zdHlsZXM6ICgpO1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zaXplcyB7XG4gICAgJGhlYWRlci1tYXA6ICgpO1xuICAgIEBlYWNoICRoZWFkZXIsICRmb250LXNpemUgaW4gJGhlYWRlcnMge1xuICAgICAgJGhlYWRlci1tYXA6IG1hcC1tZXJnZSgkaGVhZGVyLW1hcCwgKCRoZWFkZXI6ICgnZm9udC1zaXplJzogJGZvbnQtc2l6ZSkpKTtcbiAgICB9XG4gICAgJGhlYWRlci1zdHlsZXM6IG1hcC1tZXJnZSgkaGVhZGVyLXN0eWxlcywgKCRzaXplOiAkaGVhZGVyLW1hcCkpO1xuICB9XG4gIEByZXR1cm4gJGhlYWRlci1zdHlsZXM7XG59XG5cbi8vIElmIGl0IGV4aXN0cyAkaGVhZGVycy1zaXplcyBpcyB1c2VkIHRvIGJ1aWxkICRoZWFkZXItc3R5bGVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGhlYWRlci1zaXplcykge1xuICAkaGVhZGVyLXN0eWxlczogYnVpbGRfZnJvbV9oZWFkZXItc2l6ZXMoJGhlYWRlci1zaXplcyk7XG59XG5cbi8vLyBUZXh0IHJlbmRlcmluZyBtZXRob2Qgb2YgaGVhZGVycy5cbi8vLyBAdHlwZSBTdHJpbmdcbiRoZWFkZXItdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBvZiBgPHNtYWxsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc21hbGwtZm9udC1zaXplOiA4MCUgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBgPHNtYWxsPmAgZWxlbWVudHMgd2hlbiBwbGFjZWQgaW5zaWRlIGhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRoZWFkZXItc21hbGwtZm9udC1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gTGluZSBoZWlnaHQgb2YgdGV4dCBpbnNpZGUgYDxwPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kcGFyYWdyYXBoLWxpbmVoZWlnaHQ6IDEuNiAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gb2YgcGFyYWdyYXBocy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFRleHQgcmVuZGVyaW5nIG1ldGhvZCBmb3IgcGFyYWdyYXBoIHRleHQuXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFyYWdyYXBoLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHkgIWRlZmF1bHQ7XG5cbi8vLyBVc2UgdGhlIGAuY29kZS1pbmxpbmVgIGNvbXBvbmVudCBhcyBkZWZhdWx0IGZvciBgPGNvZGU+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZW5hYmxlLWNvZGUtaW5saW5lOiB0cnVlO1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3MuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiRhbmNob3ItY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRhbmNob3ItY29sb3IsICRsaWdodG5lc3M6IC0xNCUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGRlY29yYXRpb24gZm9yIGxpbmtzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGFuY2hvci10ZXh0LWRlY29yYXRpb246IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgZGVjb3JhdGlvbiBmb3IgbGlua3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYW5jaG9yLXRleHQtZGVjb3JhdGlvbi1ob3Zlcjogbm9uZSAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gd2lkdGggb2YgYSBkaXZpZGVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGhyLXdpZHRoOiAkZ2xvYmFsLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBMaXN0XG4kaHItYm9yZGVyOiAxcHggc29saWQgJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXJnaW4gZm9yIGEgZGl2aWRlci5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kaHItbWFyZ2luOiByZW0tY2FsYygyMCkgYXV0byAhZGVmYXVsdDtcblxuLy8vIExpbmUgaGVpZ2h0IGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1saW5laGVpZ2h0OiAkcGFyYWdyYXBoLWxpbmVoZWlnaHQgIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBpdGVtcyBpbiBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1tYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b20gIWRlZmF1bHQ7XG5cbi8vLyBCdWxsZXQgdHlwZSB0byB1c2UgZm9yIHVub3JkZXJlZCBsaXN0cyAoZS5nLiwgYHNxdWFyZWAsIGBjaXJjbGVgLCBgZGlzY2ApLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtdHlwZTogZGlzYyAhZGVmYXVsdDtcblxuLy8vIFBvc2l0aW9uaW5nIGZvciBidWxsZXRzIG9uIHVub3JkZXJlZCBsaXN0IGl0ZW1zLlxuLy8vIEB0eXBlIFN0cmluZ1xuJGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGUgIWRlZmF1bHQ7XG5cbi8vLyBMZWZ0IChvciByaWdodCkgbWFyZ2luIGZvciBsaXN0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsaXN0LXNpZGUtbWFyZ2luOiAxLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gTGVmdCAob3IgcmlnaHQpIG1hcmdpbiBmb3IgYSBsaXN0IGluc2lkZSBhIGxpc3QuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbGlzdC1uZXN0ZWQtc2lkZS1tYXJnaW46IDEuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3R0b20gbWFyZ2luIGZvciBgPGRsPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBgPGR0PmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kZGVmbmxpc3QtdGVybS13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gYDxkdD5gIGFuZCBgPGRkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZGVmbmxpc3QtdGVybS1tYXJnaW4tYm90dG9tOiAwLjNyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmxvY2txdW90ZS1jb2xvcjogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgaW5zaWRlIGEgYDxibG9ja3F1b3RlPmAgZWxlbWVudC5cbi8vLyBAdHlwZSBOdW1iZXIgfCBMaXN0XG4kYmxvY2txdW90ZS1wYWRkaW5nOiByZW0tY2FsYyg5IDIwIDAgMTkpICFkZWZhdWx0O1xuXG4vLy8gU2lkZSBib3JkZXIgZm9yIGA8YmxvY2txdW90ZT5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRibG9ja3F1b3RlLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIFVzZSB0aGUgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQgYXMgZGVmYXVsdCBmb3IgYDxjaXRlPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJGVuYWJsZS1jaXRlLWJsb2NrOiB0cnVlO1xuXG4vLy8gRm9udCBmYW1pbHkgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGtleXN0cm9rZS1mb250OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgYDxrYmQ+YCBlbGVtZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGtleXN0cm9rZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIGA8a2JkPmAgZWxlbWVudHMuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGtleXN0cm9rZS1wYWRkaW5nOiByZW0tY2FsYygyIDQgMCkgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGZvciBgPGtiZD5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRrZXlzdHJva2UtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBib3JkZXIgc3R5bGUgZm9yIGA8YWJicj5gIGVsZW1lbnRzLlxuLy8vIEB0eXBlIExpc3RcbiRhYmJyLXVuZGVybGluZTogMXB4IGRvdHRlZCAkYmxhY2sgIWRlZmF1bHQ7XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXR5cG9ncmFwaHktYmFzZSB7XG4gIC8vIFR5cG9ncmFwaHkgcmVzZXRzXG4gIGRpdixcbiAgZGwsXG4gIGR0LFxuICBkZCxcbiAgdWwsXG4gIG9sLFxuICBsaSxcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcHJlLFxuICBmb3JtLFxuICBwLFxuICBibG9ja3F1b3RlLFxuICB0aCxcbiAgdGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gUGFyYWdyYXBoc1xuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICB0ZXh0LXJlbmRlcmluZzogJHBhcmFncmFwaC10ZXh0LXJlbmRlcmluZztcbiAgfVxuXG4gIC8vIEVtcGhhc2l6ZWQgdGV4dFxuICBlbSxcbiAgaSB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICB9XG5cbiAgLy8gU3Ryb25nIHRleHRcbiAgc3Ryb25nLFxuICBiIHtcbiAgICBmb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIGZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEhlYWRpbmdzXG4gIGgxLCAuaDEsXG4gIGgyLCAuaDIsXG4gIGgzLCAuaDMsXG4gIGg0LCAuaDQsXG4gIGg1LCAuaDUsXG4gIGg2LCAuaDYge1xuICAgIGZvbnQtZmFtaWx5OiAkaGVhZGVyLWZvbnQtZmFtaWx5O1xuICAgIGZvbnQtc3R5bGU6ICRoZWFkZXItZm9udC1zdHlsZTtcbiAgICBmb250LXdlaWdodDogJGhlYWRlci1mb250LXdlaWdodDtcbiAgICBjb2xvcjogJGhlYWRlci1jb2xvcjtcbiAgICB0ZXh0LXJlbmRlcmluZzogJGhlYWRlci10ZXh0LXJlbmRlcmluZztcblxuICAgIHNtYWxsIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgY29sb3I6ICRoZWFkZXItc21hbGwtZm9udC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkaW5nIHN0eWxlc1xuICBAZWFjaCAkc2l6ZSwgJGhlYWRlcnMgaW4gJGhlYWRlci1zdHlsZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgIEBlYWNoICRoZWFkZXIsICRoZWFkZXItZGVmcyBpbiAkaGVhZGVycyB7XG4gICAgICAgICRmb250LXNpemUtdGVtcDogMXJlbTtcbiAgICAgICAgI3skaGVhZGVyfSwgLiN7JGhlYWRlcn0ge1xuXG4gICAgICAgICAgQGlmIG1hcC1oYXMta2V5KCRoZWFkZXItZGVmcywgZm9udC1zaXplKSB7XG4gICAgICAgICAgICAkZm9udC1zaXplLXRlbXA6IHJlbS1jYWxjKG1hcC1nZXQoJGhlYWRlci1kZWZzLCBmb250LXNpemUpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBmcykge1xuICAgICAgICAgICAgJGZvbnQtc2l6ZS10ZW1wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgZnMpKTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS10ZW1wO1xuICAgICAgICAgIH0gQGVsc2UgaWYgJHNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXRlbXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiBtYXAtaGFzLWtleSgkaGVhZGVyLWRlZnMsIGxpbmUtaGVpZ2h0KSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdW5pdGxlc3MtY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbGluZS1oZWlnaHQpLCAkZm9udC1zaXplLXRlbXApO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBsaCkge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHVuaXRsZXNzLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIGxoKSwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9IEBlbHNlIGlmICRzaXplID09ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB1bml0bGVzcy1jYWxjKCRoZWFkZXItbGluZWhlaWdodCwgJGZvbnQtc2l6ZS10ZW1wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tdG9wKSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLXRvcCkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtdCkge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG10KSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYXJnaW4tYm90dG9tKSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYyhtYXAtZ2V0KCRoZWFkZXItZGVmcywgbWFyZ2luLWJvdHRvbSkpO1xuICAgICAgICAgIH0gQGVsc2UgaWYgbWFwLWhhcy1rZXkoJGhlYWRlci1kZWZzLCBtYikge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcmVtLWNhbGMobWFwLWdldCgkaGVhZGVyLWRlZnMsIG1iKSk7XG4gICAgICAgICAgfSBAZWxzZSBpZiAkc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiByZW0tY2FsYygkaGVhZGVyLW1hcmdpbi1ib3R0b20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkYW5jaG9yLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogJGFuY2hvci10ZXh0LWRlY29yYXRpb247XG5cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6ICRhbmNob3ItY29sb3ItaG92ZXI7XG4gICAgICBAaWYgJGFuY2hvci10ZXh0LWRlY29yYXRpb24taG92ZXIgIT0gJGFuY2hvci10ZXh0LWRlY29yYXRpb24ge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246ICRhbmNob3ItdGV4dC1kZWNvcmF0aW9uLWhvdmVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGltZyB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9yaXpvbnRhbCBydWxlXG4gIGhyIHtcbiAgICBjbGVhcjogYm90aDtcblxuICAgIG1heC13aWR0aDogJGhyLXdpZHRoO1xuICAgIGhlaWdodDogMDtcbiAgICBtYXJnaW46ICRoci1tYXJnaW47XG5cbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBib3JkZXItYm90dG9tOiAkaHItYm9yZGVyO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICB9XG5cbiAgLy8gTGlzdHNcbiAgdWwsXG4gIG9sLFxuICBkbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGxpc3QtbWFyZ2luLWJvdHRvbTtcbiAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiAkbGlzdC1zdHlsZS1wb3NpdGlvbjtcbiAgICBsaW5lLWhlaWdodDogJGxpc3QtbGluZWhlaWdodDtcbiAgfVxuXG4gIC8vIExpc3QgaXRlbXNcbiAgbGkge1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBsaXN0c1xuICB1bCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gICAgbGlzdC1zdHlsZS10eXBlOiAkbGlzdC1zdHlsZS10eXBlO1xuICB9XG5cbiAgLy8gT3JkZXJlZCBsaXN0c1xuICBvbCB7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3Qtc2lkZS1tYXJnaW47XG4gIH1cblxuICAvLyBOZXN0ZWQgdW5vcmRlcmVkL29yZGVyZWQgbGlzdHNcbiAgdWwsIG9sIHtcbiAgICAmICYge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJGxpc3QtbmVzdGVkLXNpZGUtbWFyZ2luO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBEZWZpbml0aW9uIGxpc3RzXG4gIGRsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkZGVmbmxpc3QtbWFyZ2luLWJvdHRvbTtcblxuICAgIGR0IHtcbiAgICAgIG1hcmdpbi1ib3R0b206ICRkZWZubGlzdC10ZXJtLW1hcmdpbi1ib3R0b207XG4gICAgICBmb250LXdlaWdodDogJGRlZm5saXN0LXRlcm0td2VpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMCAwICRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTtcbiAgICBwYWRkaW5nOiAkYmxvY2txdW90ZS1wYWRkaW5nO1xuICAgIGJvcmRlci0jeyRnbG9iYWwtbGVmdH06ICRibG9ja3F1b3RlLWJvcmRlcjtcblxuICAgICYsIHAge1xuICAgICAgbGluZS1oZWlnaHQ6ICRwYXJhZ3JhcGgtbGluZWhlaWdodDtcbiAgICAgIGNvbG9yOiAkYmxvY2txdW90ZS1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBJbmxpbmUgQ2l0YXRpb25zXG4gIEBpZiAoJGVuYWJsZS1jaXRlLWJsb2NrID09IHRydWUpIHtcbiAgICBjaXRlIHtcbiAgICAgIC8vIEV4dGVuZGluZyBhIGNsYXNzIGlzIG5vdCByZWNvbW1lbmRlZC5cbiAgICAgIC8vIFRPRE86IEJyZWFrIHRoZSB0eXBvZ3JhcGh5LWJhc2UvdHlwb2dyYXBoeS1oZWxwZXJzIHNlcGFyYXRpb25cbiAgICAgIEBleHRlbmQgLmNpdGUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLy8gQWJicmV2aWF0aW9uc1xuICBhYmJyLCBhYmJyW3RpdGxlXSB7XG4gICAgYm9yZGVyLWJvdHRvbTogJGFiYnItdW5kZXJsaW5lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAvLyBGaWd1cmVzXG4gIGZpZ3VyZSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLy8gQ29kZVxuICBAaWYgKCRlbmFibGUtY29kZS1pbmxpbmUgPT0gdHJ1ZSkge1xuICAgIGNvZGUge1xuICAgICAgQGV4dGVuZCAuY29kZS1pbmxpbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5c3Ryb2tlc1xuICBrYmQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAka2V5c3Ryb2tlLXBhZGRpbmc7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAka2V5c3Ryb2tlLWJhY2tncm91bmQ7XG5cbiAgICBmb250LWZhbWlseTogJGtleXN0cm9rZS1mb250O1xuICAgIGNvbG9yOiAka2V5c3Ryb2tlLWNvbG9yO1xuXG4gICAgQGlmIGhhcy12YWx1ZSgka2V5c3Ryb2tlLXJhZGl1cykge1xuICAgICAgYm9yZGVyLXJhZGl1czogJGtleXN0cm9rZS1yYWRpdXM7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdHlwb2dyYXBoeS1oZWxwZXJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGZvbnQgc2l6ZSBmb3IgbGVhZCBwYXJhZ3JhcGhzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxlYWQtZm9udC1zaXplOiAkZ2xvYmFsLWZvbnQtc2l6ZSAqIDEuMjUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBsZWFkIHBhcmFncmFwaHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kbGVhZC1saW5laGVpZ2h0OiAxLjYgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGxpbmUgaGVpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1saW5laGVpZ2h0OiAxLjQgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRzdWJoZWFkZXItY29sb3I6ICRkYXJrLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgd2VpZ2h0IGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIFN0cmluZ1xuJHN1YmhlYWRlci1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0b3AgbWFyZ2luIGZvciBzdWJoZWFkZXJzLlxuLy8vIEB0eXBlIE51bWJlclxuJHN1YmhlYWRlci1tYXJnaW4tdG9wOiAwLjJyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4gZm9yIHN1YmhlYWRlcnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3ViaGVhZGVyLW1hcmdpbi1ib3R0b206IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIGZvciBzdGF0aXN0aWMgbnVtYmVycy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzdGF0LWZvbnQtc2l6ZTogMi41cmVtICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBmb3IgYC5jaXRlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjaXRlLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIGZvciBgLmNpdGUtYmxvY2tgIGNvbXBvbmVudC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjaXRlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTMpICFkZWZhdWx0O1xuXG4vLy8gUHNldWRvIGNvbnRlbnQgZm9yIGAuY2l0ZS1ibG9ja2AgY29tcG9uZW50LlxuLy8vIEB0eXBlIFN0cmluZ1xuJGNpdGUtcHNldWRvLWNvbnRlbnQ6ICdcXDIwMTQgXFwwMDIwJyAhZGVmYXVsdDtcblxuLy8vIFRleHQgY29sb3Igb2YgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNvZGUtY29sb3I6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEZvbnQgZmFtaWx5IG9mIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nIHwgTGlzdFxuJGNvZGUtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2UgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHdlaWdodCBvZiB0ZXh0IGluIGAuY29kZS1pbmxpbmVgIGFuZCBgLmNvZGUtYmxvY2tgIGNvbXBvbmVudHMuXG4vLy8gQHR5cGUgU3RyaW5nXG4kY29kZS1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBgLmNvZGUtaW5saW5lYCBhbmQgYC5jb2RlLWJsb2NrYCBjb21wb25lbnRzLlxuLy8vIEB0eXBlIENvbG9yXG4kY29kZS1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBhcm91bmQgYC5jb2RlLWlubGluZWAgYW5kIGAuY29kZS1ibG9ja2AgY29tcG9uZW50cy5cbi8vLyBAdHlwZSBMaXN0XG4kY29kZS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGFyb3VuZCB0ZXh0IG9mIHRoZSBgLmNvZGUtaW5saW5lYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtcGFkZGluZzogcmVtLWNhbGMoMiA1IDEpICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBhcm91bmQgdGV4dCBvZiB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyIHwgTGlzdFxuJGNvZGUtYmxvY2stcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIE1hcmdpbiB1bmRlciB0aGUgYC5jb2RlLWJsb2NrYCBjb21wb25lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY29kZS1ibG9jay1tYXJnaW4tYm90dG9tOiAxLjVyZW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiBjaXRlLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAkY2l0ZS1jb2xvcjtcbiAgZm9udC1zaXplOiAkY2l0ZS1mb250LXNpemU7XG5cbiAgJjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICRjaXRlLXBzZXVkby1jb250ZW50O1xuICB9XG59XG5cbi8vLyBBZGQgYmFzaWMgc3R5bGVzIGZvciBhIGNvZGUgaGVscGVyLlxuLy8vIFNlZSBgY29kZS1pbmxpbmVgIGFuZCBgY29kZS1ibG9ja2AgbWl4aW5zLlxuQG1peGluIGNvZGUtc3R5bGUge1xuICBib3JkZXI6ICRjb2RlLWJvcmRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmFja2dyb3VuZDtcblxuICBmb250LWZhbWlseTogJGNvZGUtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkY29kZS1mb250LXdlaWdodDtcbiAgY29sb3I6ICRjb2RlLWNvbG9yO1xufVxuXG4vLy8gTWFrZSBjb2RlIGhlbHBlciBmcm9tIHRoZSBgY29kZS1zdHlsZWAgbWl4aW4gaW5saW5lLlxuLy8vIFVzZWQgdG8gZ2VuZXJhdGUgYC5jb2RlLWlubGluZWBcbkBtaXhpbiBjb2RlLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG5cbiAgcGFkZGluZzogJGNvZGUtcGFkZGluZztcbn1cblxuLy8vIE1ha2UgY29kZSBoZWxwZXIgZnJvbSB0aGUgYGNvZGUtc3R5bGVgIG1peGluIGEgYmxvY2suXG4vLy8gVXNlZCB0byBnZW5lcmF0ZSBgLmNvZGUtYmxvY2tgXG5AbWl4aW4gY29kZS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZTtcblxuICBwYWRkaW5nOiAkY29kZS1ibG9jay1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiAkY29kZS1ibG9jay1tYXJnaW4tYm90dG9tO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi10eXBvZ3JhcGh5LWhlbHBlcnMge1xuICAvLyBVc2UgdG8gY3JlYXRlIGEgc3ViaGVhZGluZyB1bmRlciBhIG1haW4gaGVhZGVyXG4gIC8vIE1ha2Ugc3VyZSB5b3UgcGFpciB0aGUgdHdvIGVsZW1lbnRzIGluIGEgPGhlYWRlcj4gZWxlbWVudCwgbGlrZSB0aGlzOlxuICAvLyA8aGVhZGVyPlxuICAvLyAgIDxoMT5IZWFkaW5nPC9oMT5cbiAgLy8gICA8aDI+U3ViaGVhZGluZzwvaDI+XG4gIC8vIDwvaGVhZGVyPlxuICAuc3ViaGVhZGVyIHtcbiAgICBtYXJnaW4tdG9wOiAkc3ViaGVhZGVyLW1hcmdpbi10b3A7XG4gICAgbWFyZ2luLWJvdHRvbTogJHN1YmhlYWRlci1tYXJnaW4tYm90dG9tO1xuXG4gICAgZm9udC13ZWlnaHQ6ICRzdWJoZWFkZXItZm9udC13ZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRzdWJoZWFkZXItbGluZWhlaWdodDtcbiAgICBjb2xvcjogJHN1YmhlYWRlci1jb2xvcjtcbiAgfVxuXG4gIC8vIFVzZSB0byBzdHlsZSBhbiBpbnRyb2R1Y3RvcnkgbGVhZCwgZGVjaywgYmx1cmIsIGV0Yy5cbiAgLmxlYWQge1xuICAgIGZvbnQtc2l6ZTogJGxlYWQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGVhZC1saW5laGVpZ2h0O1xuICB9XG5cbiAgLy8gVXNlIHRvIHN0eWxlIGEgbGFyZ2UgbnVtYmVyIHRvIGRpc3BsYXkgYSBzdGF0aXN0aWNcbiAgLnN0YXQge1xuICAgIGZvbnQtc2l6ZTogJHN0YXQtZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgcCArICYge1xuICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwsIG9sIHtcbiAgICAvLyBVc2UgdG8gcmVtb3ZlIG51bWJlcnMgZnJvbSBvcmRlcmVkIGxpc3QgJiBidWxsZXRzIGZyb20gdW5vcmRlcmVkIGxpc3RcbiAgICAmLm5vLWJ1bGxldCB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuY2l0ZS1ibG9jayB7XG4gICAgQGluY2x1ZGUgY2l0ZS1ibG9jaztcbiAgfVxuXG4gIC5jb2RlLWlubGluZSB7XG4gICAgQGluY2x1ZGUgY29kZS1zdHlsZTtcbiAgICBAaW5jbHVkZSBjb2RlLWlubGluZTtcbiAgfVxuXG4gIC5jb2RlLWJsb2NrIHtcbiAgICBAaW5jbHVkZSBjb2RlLXN0eWxlO1xuICAgIEBpbmNsdWRlIGNvZGUtYmxvY2s7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tdGV4dC1hbGlnbm1lbnQge1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICBAZWFjaCAkYWxpZ24gaW4gKGxlZnQsIHJpZ2h0LCBjZW50ZXIsIGp1c3RpZnkpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tdGV4dC0jeyRhbGlnbn0ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJGFsaWduO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgLnRleHQtI3skYWxpZ259IHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246ICRhbGlnbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIElmIGB0cnVlYCwgYWxsIGVsZW1lbnRzIHdpbGwgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcyB3aGVuIHByaW50ZWQsIHRvIHNhdmUgb24gaW5rLlxuLy8vIEB0eXBlIEJvb2xlYW5cbi8vLyBAZ3JvdXAgZ2xvYmFsXG4kcHJpbnQtdHJhbnNwYXJlbnQtYmFja2dyb3VuZHM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGRpc3BsYXlzIG5leHQgdG8gYWxsIGxpbmtzIHRoZWlyIFwiaHJlZlwiIHdoZW4gcHJpbnRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4vLy8gQGdyb3VwIGdsb2JhbFxuJHByaW50LWhyZWZzOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZS1hbGxcblxuQG1peGluIGZvdW5kYXRpb24tcHJpbnQtc3R5bGVzIHtcbiAgLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICAqIHtcbiAgICAgIC8vIEVuc3VyZSBhIFwiYmxhY2stb24td2hpdGVcIiBwcmludCBieSByZW1vdmluZyBiYWNrZ3JvdW5kcyxcbiAgICAgIC8vIHVzaW5nIGJsYWNrIHRleHQgZXZlcnl3aGVyZSBhbmQgZm9yY2luZyB0aGUgYnJvd3NlciB0byBlY29ub21pemUgaW5rLlxuICAgICAgQGlmICRwcmludC10cmFuc3BhcmVudC1iYWNrZ3JvdW5kcyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyAvLyBCbGFjayBwcmludHMgZmFzdGVyOiBoNWJwLmNvbS9zXG4gICAgICAgIGNvbG9yLWFkanVzdDogZWNvbm9teTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgcHJldmVudCBhbnkgZWNvbm9teSBieSB0aGUgYnJvd3Nlci5cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgY29sb3ItYWRqdXN0OiBleGFjdDtcbiAgICAgIH1cblxuICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gICAgLmhpZGUtZm9yLXByaW50IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbiAgICB0YWJsZS5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgICB0aGVhZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cCAhaW1wb3J0YW50OyB9XG4gICAgdGJvZHkuc2hvdy1mb3ItcHJpbnQgeyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgIWltcG9ydGFudDsgfVxuICAgIHRyLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgICB0ZC5zaG93LWZvci1wcmludCB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxuICAgIHRoLnNob3ctZm9yLXByaW50IHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG5cbiAgICAvLyBEaXNwbGF5IHRoZSBVUkwgb2YgYSBsaW5rIGFmdGVyIHRoZSB0ZXh0XG4gICAgYSxcbiAgICBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9XG4gICAgQGlmICRwcmludC1ocmVmcyB7XG4gICAgICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogJyAoJyBhdHRyKGhyZWYpICcpJzsgfVxuICAgIH1cblxuICAgIC8vIERvbid0IGRpc3BsYXkgdGhlIFVSTCBmb3IgaW1hZ2VzIG9yIEphdmFTY3JpcHQvaW50ZXJuYWwgbGlua3NcbiAgICAuaXIgYTphZnRlcixcbiAgICBhW2hyZWZePSdqYXZhc2NyaXB0OiddOmFmdGVyLFxuICAgIGFbaHJlZl49JyMnXTphZnRlciB7IGNvbnRlbnQ6ICcnOyB9XG5cbiAgICAvLyBEaXNwbGF5IHdoYXQgYW4gYWJicmV2aWF0aW9uIHN0YW5kcyBmb3IgYWZ0ZXIgdGhlIHRleHRcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7IGNvbnRlbnQ6ICcgKCcgYXR0cih0aXRsZSkgJyknOyB9XG5cbiAgICAvLyBQcmV2ZW50IHBhZ2UgYnJlYWtzIGluIHRoZSBtaWRkbGUgb2YgYSBibG9ja3F1b3RlIG9yIHByZWZvcm1hdHRlZCB0ZXh0IGJsb2NrXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgJGRhcmstZ3JheTtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICAvLyBoNWJwLmNvbS90XG4gICAgdGhlYWQgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cblxuICAgIHRyLFxuICAgIGltZyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfVxuXG4gICAgaW1nIHsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cblxuICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICBvcnBoYW5zOiAzO1xuICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIC8vIEF2b2lkIHBhZ2UgYnJlYWtzIGFmdGVyIGEgaGVhZGluZ1xuICAgIGgyLFxuICAgIGgzIHsgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH1cblxuICAgIC8vIEhlbHBlciB0byByZS1hbGxvdyBwYWdlIGJyZWFrcyBpbiB0aGUgbWlkZGxlIG9mIGNlcnRhaW4gZWxlbWVudHMgKGUuZy4gcHJlLCBibG9ja3F1b3RlLCB0cilcbiAgICAucHJpbnQtYnJlYWstaW5zaWRlIHtcbiAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LWJhc2UtZ3JpZC1jbGFzc2VzIHtcblxuICAvLyBHcmlkIENvbnRhaW5lclxuICAuZ3JpZC1jb250YWluZXIge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQtY29udGFpbmVyO1xuXG4gICAgJi5mbHVpZCB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWNvbnRhaW5lcigxMDAlKTtcbiAgICB9XG5cbiAgICAmLmZ1bGwge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb250YWluZXIoMTAwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQmFzZSBncmlkIHN0eWxlc1xuICAuZ3JpZC14IHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkO1xuICB9XG5cbiAgLmNlbGwge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoZnVsbCwgJGd1dHRlci10eXBlOiBub25lKTtcblxuICAgICYuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2UoYXV0byk7XG4gICAgfVxuXG4gICAgJi5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgfVxuXG4gIH1cbiAgLmdyaWQteCB7XG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG5cbiAgICA+IC5zaHJpbmsge1xuICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKHNocmluaywgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdXRvIHdpZHRoXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyAmIFBScyBmb3IgdGhlIGJhY2tzdG9yeTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMDI0NFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL3B1bGwvMTAxNjRcbiAgICAuZ3JpZC14IHtcbiAgICAgICRzdHI6IFwiPiAuI3skLXpmLXNpemV9LXNocmluaywgPiAuI3skLXpmLXNpemV9LWZ1bGxcIjtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICRzdHI6ICRzdHIgKyBcIiwgPiAuI3skLXpmLXNpemV9LSN7JGl9XCJcbiAgICAgIH1cbiAgICAgICN7JHN0cn0ge1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgLy8gUmVzcG9uc2l2ZSBcImF1dG9cIiBtb2RpZmllclxuICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAuZ3JpZC14ID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbChhdXRvLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJhc2Uoc2hyaW5rKTtcbiAgICB9XG5cbiAgICAvLyBSZXNwb25zaXZlIFwic2hyaW5rXCIgbW9kaWZpZXJcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tc2hyaW5rIHtcbiAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstaG9yaXpvbnRhbC0jeyQtemYtc2l6ZX07XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzcG9uc2l2ZSB3aWR0aCBtb2RpZmllcnNcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgLmdyaWQteCA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICBAZXh0ZW5kICUteHktY2VsbC1iYXNlLXNocmluay1ob3Jpem9udGFsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRpLCAkZ3V0dGVyLXR5cGU6IG5vbmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2V0IHdpZHRoIHdoZW4gdXNpbmcgYC5ncmlkLW1hcmdpbi14YCBub3Qgb24gYC5ncmlkLXhgXG4gIC5ncmlkLW1hcmdpbi14Om5vdCguZ3JpZC14KSA+IC5jZWxsIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxuXG4gIC8vIFJlc2V0IGhlaWdodCB3aGVuIHVzaW5nIGAuZ3JpZC1tYXJnaW4teWAgbm90IG9uIGAuZ3JpZC15YFxuICAuZ3JpZC1tYXJnaW4teTpub3QoLmdyaWQteSkgPiAuY2VsbCB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG59XG5cbkBtaXhpbiAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGNsYXNzLWJyZWFrcG9pbnQsICRndXR0ZXItYnJlYWtwb2ludCwgJHZlcnRpY2FsKSB7XG4gICRwcmVmaXg6IGlmKCRjbGFzcy1icmVha3BvaW50ID09ICQtemYtemVyby1icmVha3BvaW50LCAnJywgJyN7JGNsYXNzLWJyZWFrcG9pbnR9LScpO1xuICA+IC4jeyRwcmVmaXh9YXV0byB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKGF1dG8sICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gID4gLiN7JHByZWZpeH1zaHJpbmsge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICRjbGFzc25hbWU6IGlmKCR2ZXJ0aWNhbCwgJy4jeyRjbGFzcy1icmVha3BvaW50fS0jeyRpfScsICcuI3skY2xhc3MtYnJlYWtwb2ludH0tI3skaX0nKTtcblxuICAgID4gI3skY2xhc3NuYW1lfSB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICR2ZXJ0aWNhbDogJHZlcnRpY2FsKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gTWFyZ2luIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoXG4gICRndXR0ZXItcG9zaXRpb246IGxlZnQgcmlnaHQsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICR3cmFwcGluZy1zZWxlY3RvcjogJy5ncmlkLW1hcmdpbi14J1xuKXtcbiAgI3skd3JhcHBpbmctc2VsZWN0b3J9IHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRuZWdhdGl2ZTogdHJ1ZSwgJGd1dHRlci1wb3NpdGlvbjogJGd1dHRlci1wb3NpdGlvbik7XG5cbiAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgfVxuXG4gICAgLy8gYmFzZSBzdHlsZXMgbmVlZCB0byBhbGwgYmUgYmVmb3JlIHRoZSBhdXRvIGFuZCBzaHJpbmsgc3R5bGVzXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIEBpZih0eXBlLW9mKCRncmlkLW1hcmdpbi1ndXR0ZXJzKSA9PSAnbWFwJyBhbmQgbWFwLWhhcy1rZXkoJGdyaWQtbWFyZ2luLWd1dHRlcnMsICQtemYtc2l6ZSkgYW5kICQtemYtc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgICAgICA+IC5jZWxsIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKCR2ZXJ0aWNhbDogJHZlcnRpY2FsLCAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuXG4gICAgICAvLyBUaGlzIGlzIHB1cmVseSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzIC0gdGhlIG1hcmdpbiBncmlkIGhhcyB0byBnbyBiYWNrIGFuZCBhZGp1c3Qgd2lkdGhzIChvciBoZWlnaHRzKVxuICAgICAgLy8gZm9yIGFsbCBwcmlvciBicmVha3BvaW50cy5cbiAgICAgIC8vIEFzIHRoZWlyIGd1dHRlciBpcyBkZWZpbmVkIHdpdGggdGhlaXIgd2lkdGgvaGVpZ2h0LCBldmVuIGJyZWFrcG9pbnQgd2l0aG91dCBhIG5ldyBtYXJnaW4gbXVzdCBiZVxuICAgICAgLy8gZ2VuZXJhdGVkIHRvIG5vdCBoYXZpbmcgdGhlaXIgd2lkdGgvaGVpZ2h0IG92ZXJyaWRlZCBieSByZS1hZGp1c3RlZCBzbWFsbGVyIGJyZWFrcG9pbnRzLlxuICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICBAZWFjaCAkYnAgaW4gLXpmLWJyZWFrcG9pbnRzLWxlc3MtdGhhbigkLXpmLXNpemUpIHtcbiAgICAgICAgICBAaW5jbHVkZSAteHktYnJlYWtwb2ludC1jZWxsLWNsYXNzZXMoJGJwLCAkLXpmLXNpemUsICR2ZXJ0aWNhbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgLXh5LWJyZWFrcG9pbnQtY2VsbC1jbGFzc2VzKCQtemYtc2l6ZSwgJC16Zi1zaXplLCAkdmVydGljYWwpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBQYWRkaW5nIEdyaWQgY2xhc3Nlc1xuQG1peGluIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzIHtcbiAgLmdyaWQtcGFkZGluZy14IHtcblxuICAgIC8vIE5lZ2F0aXZlIG1hcmdpbiBmb3IgbmVzdGVkIGdyaWRzXG4gICAgLmdyaWQtcGFkZGluZy14IHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJG5lZ2F0aXZlOiB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIGdyaWRzIHdpdGhpbiBgZ3JpZC1jb250YWluZXIvZ3JpZC1jb250YWluZXIuZmx1aWRgXG4gICAgLy8gVGhpcyBhbGxvd3MgbWFyZ2luIGFuZCBwYWRkaW5nIGdyaWRzIHRvIGxpbmUgdXAgd2l0aCBlYWNob3RoZXJcbiAgICAuZ3JpZC1jb250YWluZXI6bm90KC5mdWxsKSA+ICYge1xuICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUpO1xuICAgIH1cblxuICAgIC8vIEJhc2UgY2VsbCBzdHlsZXNcbiAgICA+IC5jZWxsIHtcbiAgICAgIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRncmlkLXBhZGRpbmctZ3V0dGVycywgJGd1dHRlci10eXBlOiBwYWRkaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQmxvY2sgR3JpZCBjbGFzc2VzXG5AbWl4aW4geHktYmxvY2stZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZDogdHJ1ZSwgJHBhZGRpbmctZ3JpZDogdHJ1ZSkge1xuICBAaWYgJHBhZGRpbmctZ3JpZCB7XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC4jeyQtemYtc2l6ZX0tdXAtI3skaX0ge1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtbGF5b3V0KCRuOiAkaSwgJHNlbGVjdG9yOiAnLmNlbGwnLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRvdXRwdXQ6IChzaXplKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50IHtcbiAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJHh5LWJsb2NrLWdyaWQtbWF4IHtcbiAgICAgICAgLy8gVGhpcyBpcyBwdXJlbHkgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycyAtIHRoZSBtYXJnaW4gZ3JpZCBoYXMgdG8gZ28gYmFjayBhbmQgYWRqdXN0IHdpZHRocyAob3IgaGVpZ2h0cylcbiAgICAgICAgLy8gZm9yIHByaW9yIGJyZWFrcG9pbnRzIGJhc2VkIG9uIHRoZSByZXNwb25zaXZlIGd1dHRlci5cbiAgICAgICAgQGlmKHR5cGUtb2YoJGdyaWQtbWFyZ2luLWd1dHRlcnMpID09ICdtYXAnIGFuZCBtYXAtaGFzLWtleSgkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplKSkge1xuICAgICAgICAgIEBlYWNoICRicCBpbiAtemYtYnJlYWtwb2ludHMtbGVzcy10aGFuKCQtemYtc2l6ZSkge1xuICAgICAgICAgICAgQGlmKG1hcC1oYXMta2V5KCRncmlkLW1hcmdpbi1ndXR0ZXJzLCAkYnApKSB7XG4gICAgICAgICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JGJwfS11cC0jeyRpfSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICR4eS1ibG9jay1ncmlkLW1heCB7XG4gICAgICAgIC5ncmlkLW1hcmdpbi14LiN7JC16Zi1zaXplfS11cC0jeyRpfSB7XG4gICAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1sYXlvdXQoJG46ICRpLCAkc2VsZWN0b3I6ICcuY2VsbCcsICRndXR0ZXItdHlwZTogbWFyZ2luLCAkb3V0cHV0OiAoc2l6ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbGxhcHNlIGNsYXNzZXNcbkBtaXhpbiB4eS1jb2xsYXBzZS1ncmlkLWNsYXNzZXMoJG1hcmdpbi1ncmlkOiB0cnVlLCAkcGFkZGluZy1ncmlkOiB0cnVlKSB7XG4gIEBlYWNoICRicCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICAgIC4jeyRicH0tbWFyZ2luLWNvbGxhcHNlIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3JpZC1jb2xsYXBzZSgkZ3V0dGVyLXR5cGU6IG1hcmdpbiwgJG1pbi1icmVha3BvaW50OiAkYnApO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkcGFkZGluZy1ncmlkIHtcbiAgICAgIC4jeyRicH0tcGFkZGluZy1jb2xsYXBzZSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtY29sbGFwc2UoJGd1dHRlci10eXBlOiBwYWRkaW5nLCAkbWluLWJyZWFrcG9pbnQ6ICRicCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE9mZnNldCBjbGFzc2VzXG5AbWl4aW4geHktb2Zmc2V0LWNlbGwtY2xhc3NlcyB7XG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQge1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAvLyBPZmZzZXRzXG4gICAgICAkbzogJGkgLSAxO1xuXG4gICAgICAuI3skLXpmLXNpemV9LW9mZnNldC0jeyRvfSB7XG4gICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtb2Zmc2V0KCRvLCAkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuICAgICAgfVxuXG4gICAgICAuZ3JpZC1tYXJnaW4teCA+IC4jeyQtemYtc2l6ZX0tb2Zmc2V0LSN7JG99IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1vZmZzZXQoJG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBWZXJ0aWNhbCBHcmlkIGNsYXNzZXNcbkBtaXhpbiB4eS12ZXJ0aWNhbC1ncmlkLWNsYXNzZXMoXG4gICRtYXJnaW4tZ3JpZDogdHJ1ZSxcbiAgJHBhZGRpbmctZ3JpZDogdHJ1ZVxuKSB7XG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICBAaWYgbm90KCQtemYtc2l6ZSA9PSAkLXpmLXplcm8tYnJlYWtwb2ludCkge1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLXkge1xuICAgIEBpbmNsdWRlIHh5LWdyaWQodmVydGljYWwsIGZhbHNlKTtcblxuXG4gICAgPiAuY2VsbCB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXJlc2V0KCk7XG4gICAgfVxuXG4gICAgPiAuYXV0byB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoYXV0bywgJGd1dHRlci10eXBlOiBub25lLCAkdmVydGljYWw6IHRydWUpO1xuICAgIH1cblxuICAgID4gLnNocmluayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoc2hyaW5rLCAkZ3V0dGVyLXR5cGU6IG5vbmUsICR2ZXJ0aWNhbDogdHJ1ZSk7XG4gICAgfVxuXG5cbiAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2svd29ya2Fyb3VuZCwgc2VlIHRoZXNlIGlzc3VlcyBhbmQgUFJzIGZvciB0aGUgYmFja3N0b3J5OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZvdW5kYXRpb24vZm91bmRhdGlvbi1zaXRlcy9pc3N1ZXMvMTAyNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDIyMiBhbmRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3VuZGF0aW9uL2ZvdW5kYXRpb24tc2l0ZXMvcHVsbC8xMDE2NFxuICAgICAgJHN0cjogXCI+IC4jeyQtemYtc2l6ZX0tc2hyaW5rLCA+IC4jeyQtemYtc2l6ZX0tZnVsbFwiO1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgJHN0cjogJHN0ciArIFwiLCA+IC4jeyQtemYtc2l6ZX0tI3skaX1cIlxuICAgICAgfVxuICAgICAgI3skc3RyfSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCgpIHtcbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJhdXRvXCIgbW9kaWZpZXJcbiAgICAgIEBpZiBub3QoJC16Zi1zaXplID09ICQtemYtemVyby1icmVha3BvaW50KSB7XG4gICAgICAgID4gLiN7JC16Zi1zaXplfS1hdXRvIHtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsKGF1dG8sICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKHNocmluayk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3BvbnNpdmUgXCJzaHJpbmtcIiBtb2RpZmllclxuICAgICAgQGlmIG5vdCgkLXpmLXNpemUgPT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQpIHtcbiAgICAgICAgPiAuI3skLXpmLXNpemV9LXNocmluayB7XG4gICAgICAgICAgQGV4dGVuZCAlLXh5LWNlbGwtYmFzZS1zaHJpbmstdmVydGljYWwtI3skLXpmLXNpemV9O1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZShzaHJpbmssICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb25zaXZlIHdpZHRoIG1vZGlmaWVyc1xuICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgLy8gU2l6aW5nIChwZXJjZW50YWdlKVxuICAgICAgICA+IC4jeyQtemYtc2l6ZX0tI3skaX0ge1xuICAgICAgICAgIEBleHRlbmQgJS14eS1jZWxsLWJhc2Utc2hyaW5rLXZlcnRpY2FsLSN7JC16Zi1zaXplfTtcbiAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSwgJHZlcnRpY2FsOiB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWRkaW5nLWdyaWQge1xuICAgIC5ncmlkLXBhZGRpbmcteSB7XG4gICAgICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIG5lc3RlZCBncmlkc1xuICAgICAgLmdyaWQtcGFkZGluZy15IHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkbmVnYXRpdmU6IHRydWUsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuXG4gICAgICAvLyBCYXNlIGNlbGwgc3R5bGVzXG4gICAgICA+IC5jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgeHktZ3V0dGVycygkZ3V0dGVyczogJGdyaWQtcGFkZGluZy1ndXR0ZXJzLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcsICRndXR0ZXItcG9zaXRpb246IHRvcCBib3R0b20pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAkbWFyZ2luLWdyaWQge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXModG9wIGJvdHRvbSwgdHJ1ZSwgJy5ncmlkLW1hcmdpbi15Jyk7XG4gIH1cblxufVxuXG5AbWl4aW4geHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkOiB0cnVlLCAkbWFyZ2luLWdyaWQ6IHRydWUpIHtcbiAgLy8gRnJhbWVkIGdyaWQgc3R5bGVzXG4gIC5ncmlkLWZyYW1lIHtcbiAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lO1xuICB9XG5cbiAgLmNlbGwgLmdyaWQtZnJhbWUge1xuICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICB9XG5cbiAgLmNlbGwtYmxvY2sge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2soKTtcbiAgfVxuXG4gIC5jZWxsLWJsb2NrLXkge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gIH1cblxuXG4gIC5jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ibG9jay1jb250YWluZXIoKTtcbiAgfVxuXG5cbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuXG4gICAgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWU7XG4gICAgfVxuXG4gICAgLmNlbGwgLiN7JC16Zi1zaXplfS1ncmlkLWZyYW1lIHtcbiAgICAgIHdpZHRoOiAxMDAlOyAvLyBTYW1lIGFzIGluY2x1ZGUgd2l0aCAkbmVzdGVkLCBidXQgd2l0aCBsZXNzIGNzc1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jayB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrKCk7XG4gICAgfVxuXG4gICAgLiN7JC16Zi1zaXplfS1jZWxsLWJsb2NrLWNvbnRhaW5lciB7XG4gICAgICBAaW5jbHVkZSB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIC4jeyQtemYtc2l6ZX0tY2VsbC1ibG9jay15IHtcbiAgICAgIEBpbmNsdWRlIHh5LWNlbGwtYmxvY2sodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICR2ZXJ0aWNhbC1ncmlkIHtcbiAgICAuZ3JpZC15IHtcbiAgICAgICYuZ3JpZC1mcmFtZSB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgICYuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIEBpbmNsdWRlIHh5LWdyaWQtZnJhbWUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgICAuY2VsbCB7XG4gICAgICAuZ3JpZC15LmdyaWQtZnJhbWUge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7IC8vIFNhbWUgYXMgaW5jbHVkZSB3aXRoICRuZXN0ZWQsIGJ1dCB3aXRoIGxlc3MgY3NzXG4gICAgICB9XG4gICAgICBAaW5jbHVkZSAtemYtZWFjaC1icmVha3BvaW50KGZhbHNlKSB7XG4gICAgICAgIC5ncmlkLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICAgIGhlaWdodDogMTAwJTsgLy8gU2FtZSBhcyBpbmNsdWRlIHdpdGggJG5lc3RlZCwgYnV0IHdpdGggbGVzcyBjc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAaWYgJG1hcmdpbi1ncmlkIHtcbiAgICBAaW5jbHVkZSB4eS1tYXJnaW4tZ3JpZC1jbGFzc2VzKHRvcCBib3R0b20sIHRydWUsICcuZ3JpZC1tYXJnaW4teScpO1xuICAgIC5ncmlkLWZyYW1lLmdyaWQtbWFyZ2luLXkge1xuICAgICAgQGluY2x1ZGUgeHktZ3JpZC1mcmFtZSh0cnVlLCBmYWxzZSwgJGdyaWQtbWFyZ2luLWd1dHRlcnMsICRpbmNsdWRlLWJhc2U6IGZhbHNlKTtcbiAgICB9XG4gICAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludChmYWxzZSkge1xuICAgICAgLmdyaWQtbWFyZ2luLXkuI3skLXpmLXNpemV9LWdyaWQtZnJhbWUge1xuICAgICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKHRydWUsIGZhbHNlLCAkZ3JpZC1tYXJnaW4tZ3V0dGVycywgJC16Zi1zaXplLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZpbmFsIGNsYXNzZXNcbkBtaXhpbiBmb3VuZGF0aW9uLXh5LWdyaWQtY2xhc3NlcyhcbiAgJGJhc2UtZ3JpZDogdHJ1ZSxcbiAgJG1hcmdpbi1ncmlkOiB0cnVlLFxuICAkcGFkZGluZy1ncmlkOiB0cnVlLFxuICAkYmxvY2stZ3JpZDogdHJ1ZSxcbiAgJGNvbGxhcHNlOiB0cnVlLFxuICAkb2Zmc2V0OiB0cnVlLFxuICAkdmVydGljYWwtZ3JpZDogdHJ1ZSxcbiAgJGZyYW1lLWdyaWQ6IHRydWVcbikge1xuXG4gIC8vIEJhc2UgZ3JpZCBzdHlsZXNcbiAgQGlmKCRiYXNlLWdyaWQpIHtcbiAgICBAaW5jbHVkZSB4eS1iYXNlLWdyaWQtY2xhc3NlcygpO1xuICB9XG5cbiAgLy8gTWFyZ2luIGdyaWRcbiAgQGlmKCRtYXJnaW4tZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LW1hcmdpbi1ncmlkLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFBhZGRpbmcgZ3JpZFxuICBAaWYoJHBhZGRpbmctZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LXBhZGRpbmctZ3JpZC1jbGFzc2VzKCk7XG4gIH1cblxuICAvLyBCbG9jayBncmlkXG4gIEBpZigkYmxvY2stZ3JpZCkge1xuICAgIEBpbmNsdWRlIHh5LWJsb2NrLWdyaWQtY2xhc3NlcygkbWFyZ2luLWdyaWQsICRwYWRkaW5nLWdyaWQpO1xuICB9XG5cbiAgLy8gQ29sbGFwc2UgZ3V0dGVyc1xuICBAaWYoJGNvbGxhcHNlKSB7XG4gICAgQGluY2x1ZGUgeHktY29sbGFwc2UtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICAvLyBPZmZzZXQgZ3V0dGVyc1xuICBAaWYoJG9mZnNldCkge1xuICAgIEBpbmNsdWRlIHh5LW9mZnNldC1jZWxsLWNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsIGdyaWRcbiAgQGlmKCR2ZXJ0aWNhbC1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktdmVydGljYWwtZ3JpZC1jbGFzc2VzKCRtYXJnaW4tZ3JpZCwgJHBhZGRpbmctZ3JpZCk7XG4gIH1cblxuICBAaWYgKCRmcmFtZS1ncmlkKSB7XG4gICAgQGluY2x1ZGUgeHktZnJhbWUtZ3JpZC1jbGFzc2VzKCR2ZXJ0aWNhbC1ncmlkLCAkbWFyZ2luLWdyaWQpXG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGUgZ3V0dGVycyBmb3IgYSBjZWxsL2NvbnRhaW5lci5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgZWl0aGVyIG1hcmdpbiBvciBwYWRkaW5nLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb24gdG8gYXBwbHkgZ3V0dGVycyB0by4gQWNjZXB0cyBgdG9wYCwgYGJvdHRvbWAsIGBsZWZ0YCwgYHJpZ2h0YCBpbiBhbnkgY29tYmluYXRpb24uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkbmVnYXRpdmUgW2ZhbHNlXSAtIFdoZXRoZXIgdG8gYXBwbHkgdGhlIGd1dHRlciBhcyBhIG5lZ2F0aXZlIHZhbHVlLiBDb21tb25seSB1c2VkIGZvciBuZXN0ZWQgZ3JpZHMuXG5AbWl4aW4geHktZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogcmlnaHQgbGVmdCxcbiAgJG5lZ2F0aXZlOiBmYWxzZVxuKSB7XG4gICRvcGVyYXRvcjogaWYoJG5lZ2F0aXZlLCAnLScsICcnKTtcblxuICAvLyBJZiB3ZSBoYXZlIGRlY2xhcmVkIG5lZ2F0aXZlIGd1dHRlcnMsIGZvcmNlIHR5cGUgdG8gYG1hcmdpbi5cbiAgJGd1dHRlci10eXBlOiBpZigkbmVnYXRpdmUsICdtYXJnaW4nLCAkZ3V0dGVyLXR5cGUpO1xuXG4gIC8vIE91dHB1dCBvdXIgbWFyZ2luIGd1dHRlcnMuXG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkZ3V0dGVycykge1xuICAgICAgJGd1dHRlcjogcmVtLWNhbGMoJC16Zi1icC12YWx1ZSkgLyAyO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgI3skZ3V0dGVyLXR5cGV9LSN7JHZhbHVlfTogdW5xdW90ZShcIiN7JG9wZXJhdG9yfSN7JGd1dHRlcn1cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICh0eXBlLW9mKCRndXR0ZXJzKSA9PSAnbnVtYmVyJykge1xuICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXJzKSAvIDI7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBndXR0ZXIgcG9zaXRpb25cbiAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAjeyRndXR0ZXItdHlwZX0tI3skdmFsdWV9OiB1bnF1b3RlKFwiI3skb3BlcmF0b3J9I3skZ3V0dGVyfVwiKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB4eS1ncmlkXG4vLy8vXG5cbi8vLyBDcmVhdGVzIGEgbWF4IHdpZHRoIGNvbnRhaW5lciwgZGVzaWduZWQgdG8gaG91c2UgeW91ciBncmlkIGNvbnRlbnQuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJHdpZHRoIFskZ3JpZC1jb250YWluZXJdIC0gYSB3aWR0aCB0byBsaW1pdCB0aGUgY29udGFpbmVyIHRvLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkcGFkZGluZyBbJGdyaWQtY29udGFpbmVyLXBhZGRpbmddIC0gcGFkZGluZ3Mgb2YgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiB4eS1ncmlkLWNvbnRhaW5lcihcbiAgJHdpZHRoOiAkZ3JpZC1jb250YWluZXIsXG4gICRwYWRkaW5nOiAkZ3JpZC1jb250YWluZXItcGFkZGluZ1xuKSB7XG4gIEBpbmNsdWRlIHh5LWd1dHRlcnMoJGd1dHRlcnM6ICRwYWRkaW5nLCAkZ3V0dGVyLXR5cGU6IHBhZGRpbmcpO1xuXG4gIG1heC13aWR0aDogJHdpZHRoO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4vLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgeW91ciBmbGV4IGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyZWN0aW9uIFtob3Jpem9udGFsXSAtIEVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGRpcmVjdGlvbiBvZiBjZWxscyB3aXRoaW4uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkd3JhcCBbdHJ1ZV0gLSBJZiB0aGUgY2VsbHMgd2l0aGluIHNob3VsZCB3cmFwIG9yIG5vdC5cbkBtaXhpbiB4eS1ncmlkKFxuICAkZGlyZWN0aW9uOiBob3Jpem9udGFsLFxuICAkd3JhcDogdHJ1ZVxuKSB7XG4gICRkaXJlY3Rpb246IGlmKCRkaXJlY3Rpb24gPT0gJ2hvcml6b250YWwnLCByb3csIGNvbHVtbik7XG4gICR3cmFwOiBpZigkd3JhcCwgd3JhcCwgbm93cmFwKTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6ICRkaXJlY3Rpb24gJHdyYXA7XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIGZsZXggdmFsdWUgZm9yIGEgY2VsbCBiYXNlLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG4vLy9cbi8vLyBAcmV0dXJucyB7TGlzdH0gVGhlIGNlbGwgZmxleCBwcm9wZXJ0eSB2YWx1ZS5cbkBmdW5jdGlvbiB4eS1jZWxsLWJhc2UoJHNpemU6IGZ1bGwpIHtcbiAgQGlmICgkc2l6ZSA9PSAnYXV0bycpIHtcbiAgICBAcmV0dXJuIDEgMSAwcHg7XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdncm93Jykge1xuICAgIEByZXR1cm4gMSAwIGF1dG87XG4gIH1cbiAgQGVsc2UgaWYgKCRzaXplID09ICdzaHJpbmsnIG9yICRzaXplID09ICdmdWxsJyBvciB6Zi1pcy1mcmFjdGlvbigkc2l6ZSwgJGFsbG93LW5vLWRlbm9taW5hdG9yOiB0cnVlKSkge1xuICAgIEByZXR1cm4gMCAwIGF1dG87XG4gIH1cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLy8gQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgY2VsbCBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgZ3V0dGVycyBtYXAgYCRndXR0ZXJzYC4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vXG4vLy8gQHJldHVybnMge051bWJlcnxNYXB9IFRoZSBjZWxsIGd1dHRlciBzaXplIG9yIHRoZSByZXNwb25zaXZlIGd1dHRlcnMgbWFwLlxuQGZ1bmN0aW9uIHh5LWNlbGwtZ3V0dGVycyhcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gIC8vIEZvciBgYXV0b2AsIHJldHVybnMgdGhlIHJlc3BvbnNpdmUgbWFwIGAkZ3V0dGVyc2AuXG4gIEBpZiAoJGJyZWFrcG9pbnQgPT0gJ2F1dG8nKSB7XG4gICAgQHJldHVybiAkZ3V0dGVycztcbiAgfVxuXG4gIC8vIFVzZSB0aGUgY29udGV4dHVhbCBicmVha3BvaW50IGJ5IGRlZmF1bHQuXG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50KTtcblxuICBAaWYgKCRicmVha3BvaW50KSB7XG4gICAgQHJldHVybiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIC16Zi1nZXQtYnAtdmFsKCRndXR0ZXJzLCAkLXpmLXplcm8tYnJlYWtwb2ludCkgb3IgMDtcbiAgfVxufVxuXG4vLy8gUmV0dXJucyB0aGUgcGVyY2VudGFnZSBzaXplIG9mIGEgY2VsbC5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfExpc3R9ICRzaXplIFskZ3JpZC1jb2x1bW5zXSAtIFNpemUgdG8gbWFrZSB0aGUgY2VsbC4gWW91IGNhbiBwYXNzIGEgdmFsdWUgaW4gbXVsdGlwbGUgZm9ybWF0cywgc3VjaCBhcyBgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8zYC5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFNpemUgb2YgdGhlIGNlbGwgKGluIHBlcmNlbnQpLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZShcbiAgJHNpemU6ICRncmlkLWNvbHVtbnNcbikge1xuICBAcmV0dXJuIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoJHNpemUsICRkZW5vbWluYXRvcjogJGdyaWQtY29sdW1ucyk7XG59XG5cbi8vLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBDU1MgdmFsdWUgZm9yIGEgY2VsbCBzaXplLlxuLy8vXG4vLy8gR3V0dGVycy1yZWxhdGVkIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgZm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMgKGJ5IGRlZmF1bHQpIGFzIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfE51bWJlcn0gJHNpemUgW2Z1bGxdIC0gVGhlIHNpemUgb2YgeW91ciBjZWxsLiBDYW4gYmUgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgIG9yIGFueSBmcmFjdGlvbiBsaWtlIGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLlxuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCByZXR1cm5zIGEgbWFwIG9mIHNpemVzIGFkYXB0ZWQgdG8gcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ3xNYXB9IFRoZSBjZWxsIHNpemluZyBwcm9wZXJ0eSB2YWx1ZSwgb3IgYSByZXNwb25zaXZlIG1hcCBvZiB0aGVtLlxuQGZ1bmN0aW9uIHh5LWNlbGwtc2l6ZS1jc3MoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbFxuKSB7XG4gICRtYXJnaW4tZ3V0dGVyOiAwO1xuXG4gIEBpZiAoJHNpemUgPT0gJ2F1dG8nIG9yICRzaXplID09ICdzaHJpbmsnKSB7XG4gICAgQHJldHVybiBhdXRvO1xuICB9XG5cbiAgLy8gRm9yIGNlbGxzIHdpdGggbWFyZ2luIGd1dHRlcnMsIHRoZSBndXR0ZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHdpZHRoLlxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuICAgICRtYXJnaW4tZ3V0dGVyOiB4eS1jZWxsLWd1dHRlcnMoJGd1dHRlcnMsICRicmVha3BvaW50KTtcbiAgICBAaWYgKCRtYXJnaW4tZ3V0dGVyID09IG51bGwpIHtcbiAgICAgIEBlcnJvciAneHktY2VsbC1zaXplOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBjZWxsIHNpemUgKG51bWJlcilcbiAgJHNpemUtcmF3OiBpZigkc2l6ZSA9PSAnZnVsbCcsIDEwMCUsIHh5LWNlbGwtc2l6ZSgkc2l6ZSkpO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgY2VsbCBDU1Mgc2l6ZSBpbmNsdWRpbmcgZ3V0dGVycyAoc3RyaW5nKVxuICAvLyBJZiB0aGUgY2VsbCBoYXMgcmVzcG9uc2l2ZSBtYXJnaW4gZ3V0dGVycywgcmV0dXJuIGEgcmVzcG9uc2l2ZSBtYXAgb2Ygc2l6ZXMuXG4gIEBpZiB0eXBlLW9mKCRtYXJnaW4tZ3V0dGVyKSA9PSAnbWFwJyB7XG4gICAgJHJlc3BvbnNpdmUtY3NzLXNpemVzOiAoKTtcblxuICAgIEBlYWNoICRicCwgJG1nIGluICRtYXJnaW4tZ3V0dGVyIHtcbiAgICAgICRzaXplLWNzczogaWYoJG1nID09IDAsICRzaXplLXJhdywgY2FsYygjeyRzaXplLXJhd30gLSAje3JlbS1jYWxjKCRtZyl9KSk7XG4gICAgICAkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXM6IG1hcC1tZXJnZSgkcmVzcG9uc2l2ZS1jc3Mtc2l6ZXMsICgkYnA6ICRzaXplLWNzcykpO1xuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3BvbnNpdmUtY3NzLXNpemVzO1xuICB9XG4gIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgc2luZ2xlIENTUyBzaXplLlxuICBAZWxzZSB7XG4gICAgJGNzcy1zaXplOiBpZigkbWFyZ2luLWd1dHRlciA9PSAwLCAkc2l6ZS1yYXcsIGNhbGMoI3skc2l6ZS1yYXd9IC0gI3tyZW0tY2FsYygkbWFyZ2luLWd1dHRlcil9KSk7XG4gICAgQHJldHVybiAkY3NzLXNpemU7XG4gIH1cbn1cblxuLy8vIFNldHMgYmFzZSBmbGV4IHByb3BlcnRpZXMgZm9yIGNlbGxzLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIEFjY2VwdHMgYGZ1bGxgLCBgYXV0b2AsIGBzaHJpbmtgLCBgZ3Jvd2AsIG9yIGFueSBvdGhlciB2YWx1ZSByZXByZXNlbnRpbmcgYSBjZWxsIHNpemUgKGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBgc2hyaW5rYCkuXG5AbWl4aW4geHktY2VsbC1iYXNlKCRzaXplOiBmdWxsKSB7XG4gICRiYXNlOiB4eS1jZWxsLWJhc2UoJHNpemUpO1xuXG4gIGZsZXg6ICN7JGJhc2V9O1xuXG4gIC8vIFNldCBiYXNlIHN0eWxlcyBmb3IgXCJmdWxsXCIgb25seVxuICBAaWYoJHNpemUgPT0gJ2Z1bGwnKSB7XG4gICAgbWluLWhlaWdodDogMHB4O1xuICAgIG1pbi13aWR0aDogMHB4O1xuICB9XG59XG5cbi8vLyBSZXNldHMgYSBjZWxscyB3aWR0aCAob3IgaGVpZ2h0IGlmIHZlcnRpY2FsIGlzIHRydWUpIGFzIHdlbGwgYXMgc3RyaXBzIGl0cyBndXR0ZXJzLlxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtcmVzZXQoJHZlcnRpY2FsOiB0cnVlKSB7XG4gICRkaXJlY3Rpb246IGlmKCR2ZXJ0aWNhbCA9PSB0cnVlLCBoZWlnaHQsIHdpZHRoKTtcbiAgI3skZGlyZWN0aW9ufTogYXV0bztcbiAgbWF4LSN7JGRpcmVjdGlvbn06IG5vbmU7XG59XG5cbi8vLyBTZXRzIHNpemluZyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEd1dHRlcnMtcmVsYXRlZCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGZvciBjZWxscyB3aXRoIG1hcmdpbiBndXR0ZXJzIChieSBkZWZhdWx0KSBhcyB0aGUgZ3V0dGVyIGlzIGluY2x1ZGVkIGluIHRoZSB3aWR0aC5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gVHlwZSBvZiBndXR0ZXIgdG8gb3V0cHV0LiBBY2NlcHRzIGBtYXJnaW5gLCBgcGFkZGluZ2Agb3IgYG5vbmVgLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uIElmIGBhdXRvYCwgZ2VuZXJhdGVzIHNpemVzIGFkYXB0ZWQgZm9yIHJlc3BvbnNpdmUgZ3V0dGVycy4gSWYgdXNpbmcgd2l0aCB0aGUgYGJyZWFrcG9pbnQoKWAgbWl4aW4gdGhpcyB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IHVubGVzcyBtYW51YWxseSBlbnRlcmVkLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJHZlcnRpY2FsIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBvdXRwdXQgdmVydGljYWwgKGhlaWdodCkgc3R5bGVzIHJhdGhlciB0aGFuIHdpZHRocy5cbkBtaXhpbiB4eS1jZWxsLXNpemUoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRzaXplczogeHktY2VsbC1zaXplLWNzcygkc2l6ZSwgJGd1dHRlcnMsICRndXR0ZXItdHlwZSwgJGJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgaGVpZ2h0LCB3aWR0aCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzaXplcykgPT0gJ21hcCcpIHtcbiAgICBAaW5jbHVkZSAtemYtYnJlYWtwb2ludC12YWx1ZShhdXRvLCAkc2l6ZXMpIHtcbiAgICAgICN7JGRpcmVjdGlvbn06ICQtemYtYnAtdmFsdWU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAjeyRkaXJlY3Rpb259OiAkc2l6ZXM7XG4gIH1cbn1cblxuLy8vIFNldHMgZ3V0dGVycyBwcm9wZXJ0aWVzIGZvciBjZWxscy5cbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfE1hcH0gJGd1dHRlcnMgWyRncmlkLW1hcmdpbi1ndXR0ZXJzXSAtIE1hcCBvciBzaW5nbGUgdmFsdWUgZm9yIGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUeXBlIG9mIGd1dHRlciB0byBvdXRwdXQuIEFjY2VwdHMgYG1hcmdpbmAsIGBwYWRkaW5nYCBvciBgbm9uZWAuXG4vLy8gQHBhcmFtIHtMaXN0fSAkZ3V0dGVyLXBvc2l0aW9uIFtudWxsXSAtIFRoZSBwb3NpdGlvbiB0byBhcHBseSBndXR0ZXJzIHRvLiBBY2NlcHRzIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgLCBgcmlnaHRgIGluIGFueSBjb21iaW5hdGlvbi4gQnkgZGVmYXVsdCBgcmlnaHQgbGVmdGAgZm9yIGhvcml6b250YWwgY2VsbHMgYW5kIGB0b3AgYm90dG9tYCBmb3IgdmVydGljYWwgY2VsbHMuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRicmVha3BvaW50IFtudWxsXSAtIFRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IHNpemUgaW4geW91ciBndXR0ZXJzIG1hcCB0byBnZXQgdGhlIHNpemUgZnJvbS4gSWYgYGF1dG9gLCBnZW5lcmF0ZXMgcmVzcG9uc2l2ZSBndXR0ZXJzLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIERpcmVjdGlvbiBvZiB0aGUgZ3V0dGVycyB0byBvdXRwdXQuIFNlZSBgJGd1dHRlci1wb3NpdGlvbmAuXG5AbWl4aW4geHktY2VsbC1ndXR0ZXJzKFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIC8vIEdldCB0aGUgZGVmYXVsdCBndXR0ZXIgcG9zaXRpb24gYWNjb3JkaW5nIHRvIGNlbGwgZGlyZWN0aW9uXG4gIEBpZigkZ3V0dGVyLXBvc2l0aW9uID09IG51bGwpIHtcbiAgICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGd1dHRlciB3aWR0aCBmb3IgdGhpcyBicmVha3BvaW50XG4gICRndXR0ZXItd2lkdGg6IHh5LWNlbGwtZ3V0dGVycygkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICBAaWYgKCRndXR0ZXItd2lkdGggPT0gbnVsbCkge1xuICAgIEBlcnJvciAneHktY2VsbC1ndXR0ZXJzOiBubyBndXR0ZXJzIHdlcmUgZm91bmQgaW4gYCRndXR0ZXJzYCBmb3IgXCIkYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIic7XG4gIH1cblxuICBAaWYgKCRndXR0ZXItdHlwZSBhbmQgJGd1dHRlci10eXBlICE9IG5vbmUpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXItd2lkdGgsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cblxuLy8vIENyZWF0ZXMgYSBjZWxsIGZvciB5b3VyIGdyaWQuXG4vLy9cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkc2l6ZSBbZnVsbF0gLSBUaGUgc2l6ZSBvZiB5b3VyIGNlbGwuIENhbiBiZSBgZnVsbGAgKDEwMCUgd2lkdGgpLCBgYXV0b2AgKHVzZSBhbGwgYXZhaWxhYmxlIHNwYWNlKSwgYHNocmlua2AgKHVzZSBvbmx5IHRoZSByZXF1aXJlZCBzcGFjZSkgb3IgYW55IGZyYWN0aW9uIChgNmAsIGA1MCVgLCBgMSBvZiAyYCBvciBgMS8yYC4uLikuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiBgYXV0b2AsIGdlbmVyYXRlcyByZXNwb25zaXZlIGd1dHRlcnMuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gb3V0cHV0IHZlcnRpY2FsIChoZWlnaHQpIHN0eWxlcyByYXRoZXIgdGhhbiB3aWR0aHMuXG4vLy8gQHBhcmFtIHtMaXN0fSAkb3V0cHV0IFsoYmFzZSBzaXplIGd1dHRlcnMpXSAtIENlbGwgcGFydHMgdG8gb3V0cHV0LiBZb3Ugd2lsbCBuZWVkIHRvIGdlbmVyYXRlIG90aGVycyBwYXJ0cyBvZiB0aGUgY2VsbCBzZXBlcmF0ZWx5LCBpdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgb3RoZXJ3aXNlLlxuQG1peGluIHh5LWNlbGwoXG4gICRzaXplOiBmdWxsLFxuICAkZ3V0dGVyLW91dHB1dDogbnVsbCxcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGd1dHRlci1wb3NpdGlvbjogbnVsbCxcbiAgJGJyZWFrcG9pbnQ6IG51bGwsXG4gICR2ZXJ0aWNhbDogZmFsc2UsXG4gICRvdXRwdXQ6IChiYXNlIHNpemUgZ3V0dGVycylcbikge1xuICAvLyBEZWZhdWx0IGZvciAkZ3V0dGVyLW91dHB1dFxuICBAaWYgKCRndXR0ZXItb3V0cHV0ICE9IG51bGwpIHtcbiAgICBAd2FybiAneHktY2VsbDogJGd1dHRlci1vdXRwdXQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBTZWUgbWlncmF0aW9uIG5vdGVzIGF0IGh0dHBzOi8vZ2l0LmlvL2ZvdW5kYXRpb24tNi02LTAnO1xuICAgIEBpZiAoJGd1dHRlci1vdXRwdXQgPT0gZmFsc2UpIHtcbiAgICAgICRvdXRwdXQ6IHNsLXJlbW92ZSgkb3V0cHV0LCBndXR0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGJhc2UpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1iYXNlKCRzaXplKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIHNpemUpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1zaXplKCRzaXplLCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsKTtcbiAgfVxuICBAaWYgKGluZGV4KCRvdXRwdXQsIGd1dHRlcnMpKSB7XG4gICAgQGluY2x1ZGUgeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkZ3V0dGVyLXR5cGUsICRndXR0ZXItcG9zaXRpb24sICRicmVha3BvaW50LCAkdmVydGljYWwpO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2luZ2xlIGJyZWFrcG9pbnQgc2l6ZWQgZ3JpZC4gVXNlZCB0byBnZW5lcmF0ZSBvdXIgZ3JpZCBjbGFzc2VzLlxuLy8vXG4vLy8gYHh5LWNlbGwtc3RhdGljKClgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC5cbi8vLyBVc2UgYHh5LWNlbGwoKWAgaW5zdGVhZCB3aXRoIGAkb3V0cHV0OiAoc2l6ZSBndXR0ZXJzKWAgdG8gbm90IGdlbmVyYXRlIHRoZSBjZWxsIGJhc2UuXG4vLy8gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wXG4vLy9cbi8vLyBAZGVwcmVjYXRlZCB2Ni42LjBcbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZHxOdW1iZXJ9ICRzaXplIFtmdWxsXSAtIFRoZSBzaXplIG9mIHlvdXIgY2VsbC4gQ2FuIGJlIGBmdWxsYCAoMTAwJSB3aWR0aCksIGBhdXRvYCAodXNlIGFsbCBhdmFpbGFibGUgc3BhY2UpLCBgc2hyaW5rYCAodXNlIG9ubHkgdGhlIHJlcXVpcmVkIHNwYWNlKSBvciBhbnkgZnJhY3Rpb24gKGA2YCwgYDUwJWAsIGAxIG9mIDJgIG9yIGAxLzJgLi4uKS5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRndXR0ZXItb3V0cHV0IFt0cnVlXSAtIFdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBndXR0ZXJzLiBBbHdheXMgYHRydWVgIGZvciBtYXJnaW4gZ3V0dGVycy5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuQG1peGluIHh5LWNlbGwtc3RhdGljKFxuICAkc2l6ZTogZnVsbCxcbiAgJGd1dHRlci1vdXRwdXQ6IHRydWUsXG4gICRndXR0ZXJzOiAkZ3JpZC1tYXJnaW4tZ3V0dGVycyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRicmVha3BvaW50OiAkLXpmLXplcm8tYnJlYWtwb2ludCxcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gIEB3YXJuICd4eS1jZWxsLXN0YXRpYygpIG1peGluIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIFwieHktY2VsbCgpXCIgaW5zdGVhZC4gU2VlIG1pZ3JhdGlvbiBub3RlcyBhdCBodHRwczovL2dpdC5pby9mb3VuZGF0aW9uLTYtNi0wJztcblxuICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuICAkZ3V0dGVyLXBvc2l0aW9uOiBpZigkdmVydGljYWwgPT0gdHJ1ZSwgdG9wIGJvdHRvbSwgbGVmdCByaWdodCk7XG5cbiAgJC1ndXR0ZXItb3V0cHV0OiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsIHRydWUsICRndXR0ZXItb3V0cHV0KTtcbiAgJC1ndXR0ZXItbWFyZ2luOiBpZigkZ3V0dGVyLXR5cGUgPT0gJ21hcmdpbicsICRndXR0ZXIsIDApO1xuXG4gIEBpbmNsdWRlIC14eS1jZWxsLXByb3BlcnRpZXMoJHNpemUsICQtZ3V0dGVyLW1hcmdpbiwgJHZlcnRpY2FsKTtcbiAgQGlmICgkLWd1dHRlci1vdXRwdXQpIHtcbiAgICBAaW5jbHVkZSB4eS1ndXR0ZXJzKCRndXR0ZXIsICRndXR0ZXItdHlwZSwgJGd1dHRlci1wb3NpdGlvbik7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBmdW5jdGlvbnNcbi8vLy9cblxuLy8vIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0d28gaW50ZWdlcnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcn0gJGEgLSBGaXJzdCBudW1iZXIgdG8gY29tcGFyZS5cbi8vLyBAcGFyYW0ge051bWJlcn0gJGIgLSBTZWNvbmQgbnVtYmVyIHRvIGNvbXBhcmUuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuXG5AZnVuY3Rpb24gZ2NkKCRhLCAkYikge1xuICAvLyBGcm9tOiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvR3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IjSmF2YVNjcmlwdFxuICBAaWYgKCRiICE9IDApIHtcbiAgICBAcmV0dXJuIGdjZCgkYiwgJGEgJSAkYik7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gYWJzKCRhKTtcbiAgfVxufVxuXG4vLy8gSGFuZGxlcyBkZWNpbWFsIGV4cG9uZW50cyBieSB0cnlpbmcgdG8gY29udmVydCB0aGVtIGludG8gYSBmcmFjdGlvbiBhbmQgdGhlbiB1c2UgYSBudGgtcm9vdC1hbGdvcml0aG0gZm9yIHBhcnRzIG9mIHRoZSBjYWxjdWxhdGlvblxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRiYXNlIC0gVGhlIGJhc2UgbnVtYmVyLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZXhwb25lbnQgLSBUaGUgZXhwb25lbnQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgcHJvZHVjdCBvZiB0aGUgZXhwb25lbnRpYXRpb24uXG5AZnVuY3Rpb24gcG93KCRiYXNlLCAkZXhwb25lbnQsICRwcmVjOiAxNikge1xuICBAaWYgKGZsb29yKCRleHBvbmVudCkgIT0gJGV4cG9uZW50KSB7XG4gICAgJHByZWMyIDogcG93KDEwLCAkcHJlYyk7XG4gICAgJGV4cG9uZW50OiByb3VuZCgkZXhwb25lbnQgKiAkcHJlYzIpO1xuICAgICRkZW5vbWluYXRvcjogZ2NkKCRleHBvbmVudCwgJHByZWMyKTtcbiAgICBAcmV0dXJuIG50aC1yb290KHBvdygkYmFzZSwgJGV4cG9uZW50IC8gJGRlbm9taW5hdG9yKSwgJHByZWMyIC8gJGRlbm9taW5hdG9yLCAkcHJlYyk7XG4gIH1cblxuICAkdmFsdWU6ICRiYXNlO1xuICBAaWYgJGV4cG9uZW50ID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkZXhwb25lbnQge1xuICAgICAgJHZhbHVlOiAkdmFsdWUgKiAkYmFzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGV4cG9uZW50IDwgMSB7XG4gICAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAtJGV4cG9uZW50IHtcbiAgICAgICR2YWx1ZTogJHZhbHVlIC8gJGJhc2U7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbkBmdW5jdGlvbiBudGgtcm9vdCgkbnVtLCAkbjogMiwgJHByZWM6IDEyKSB7XG4gIC8vIEZyb206IGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICR4OiAxO1xuXG4gIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggJHByZWMge1xuICAgICR4OiAxIC8gJG4gKiAoKCRuIC0gMSkgKiAkeCArICgkbnVtIC8gcG93KCR4LCAkbiAtIDEpKSk7XG4gIH1cblxuICBAcmV0dXJuICR4O1xufVxuXG4vLy8gQ2FsY3VsYXRlcyB0aGUgaGVpZ2h0IGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggZm9yIGEgZ2l2ZW4gcmF0aW8uXG4vLy8gQHBhcmFtIHtMaXN0fSAkcmF0aW8gLSBSYXRpbyB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHQsIGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9IEEgcGVyY2VudGFnZSB2YWx1ZSBmb3IgdGhlIGhlaWdodCByZWxhdGl2ZSB0byB0aGUgd2lkdGggb2YgYSByZXNwb25zaXZlIGNvbnRhaW5lci5cbkBmdW5jdGlvbiByYXRpby10by1wZXJjZW50YWdlKCRyYXRpbykge1xuICAkdzogbnRoKCRyYXRpbywgMSk7XG4gICRoOiBudGgoJHJhdGlvLCAzKTtcbiAgQHJldHVybiAkaCAvICR3ICogMTAwJTtcbn1cblxuLy8vIFBhcnNlIHRoZSBnaXZlbiBgJGZyYWN0aW9uYCB0byBudW1lcmF0b3JzIGFuZCBkZW51bWVyYXRvcnMuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICRmcmFjdGlvbiAtIFZhbHVlIHJlcHJlc2VudGluZyBhIGZyYWN0aW9uIHRvIHBhcnNlLiBJdCBjYW4gYmUgZm9ybWF0dGVkIGFzIGA1MCVgLCBgMSBvZiAyYCwgYDEvMmAgb3IgYDUwYCAobm8gZGVub21pbmF0b3Igd291bGQgYmUgcmV0dXJuZWQpLlxuLy8vXG4vLy8gQHJldHVybiB7TGlzdH0gTGlzdCBvZiBwYXJzZWQgdmFsdWVzIHdpdGggbnVtZXJhdG9yIGF0IGZpcnN0IHBvc2l0aW9uIGFuZCBkZW51bWVyYXRvciBhcyBzZWNvbmQuIFRoZXNlIHZhbHVlcyBtYXkgYmUgbnVsbC5cbkBmdW5jdGlvbiB6Zi1wYXJzZS1mcmFjdGlvbigkZnJhY3Rpb24pIHtcblxuICBAaWYgdHlwZS1vZigkZnJhY3Rpb24pID09ICdudW1iZXInIHtcbiAgICAvLyBcIjUwJVwiXG4gICAgQGlmIHVuaXQoJGZyYWN0aW9uKSA9PSAnJScge1xuICAgICAgQHJldHVybiAoc3RyaXAtdW5pdCgkZnJhY3Rpb24pLCAxMDApO1xuICAgIH1cbiAgICBAZWxzZSBpZiAodW5pdCgkZnJhY3Rpb24pID09ICcnKSB7XG4gICAgICAvLyBcIjAuNVwiXG4gICAgICBAaWYgJGZyYWN0aW9uIDwgMSB7XG4gICAgICAgIEByZXR1cm4gKCRmcmFjdGlvbiAqIDEwMCwgMTAwKTtcbiAgICAgIH1cbiAgICAgIC8vIFwiNTBcIlxuICAgICAgQGVsc2Uge1xuICAgICAgICBAcmV0dXJuICgkZnJhY3Rpb24sIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGZyYWN0aW9uKSA9PSAnbGlzdCcge1xuICAgIC8vIFwiNTAgb2YgMTAwXCIsIFwiNTAvMTAwXCIuLi5cbiAgICBAaWYgbGVuZ3RoKCRmcmFjdGlvbikgPT0gM1xuICAgICAgYW5kIHR5cGUtb2YobnRoKCRmcmFjdGlvbiwgMSkgPT0gJ251bWJlcicpXG4gICAgICBhbmQgdHlwZS1vZihudGgoJGZyYWN0aW9uLCAzKSA9PSAnbnVtYmVyJykge1xuICAgICAgQHJldHVybiAobnRoKCRmcmFjdGlvbiwgMSksIG50aCgkZnJhY3Rpb24sIDMpKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIChudWxsLCBudWxsKTtcbn1cblxuLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLiBTdXBwb3J0cyBmb3JtYXRzIGxpa2UgYDUwJWAsIGAxIG9mIDJgLCBgMSBwZXIgMmAgb3IgYDEvMmAuXG4vLy9cbi8vLyBAcGFyYW0geyp9ICR2YWx1ZSAtIFZhbHVlIHRvIHRlc3QuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkYWxsb3ctbm8tZGVub21pbmF0b3IgW2ZhbHNlXSAtIElmIGB0cnVlYCwgc2ltcGxlIG51bWJlcnMgd2l0aG91dCBkZW5vbWluYXRvcnMgbGlrZSBgNTBgIGFyZSBzdXBwb3J0ZWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYCR2YWx1ZWAgcmVwcmVzZW50cyBhIGZyYWN0aW9uLCBgZmFsc2VgIG90aGVyd2lzZS5cbkBmdW5jdGlvbiB6Zi1pcy1mcmFjdGlvbigkdmFsdWUsICRhbGxvdy1uby1kZW5vbWluYXRvcjogZmFsc2UpIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJHZhbHVlKTtcbiAgQHJldHVybiBub3QobnRoKCRwYXJzZWQsIDEpID09IG51bGxcbiAgICBvciAobnRoKCRwYXJzZWQsIDIpID09IG51bGwgYW5kICRhbGxvdy1uby1kZW5vbWluYXRvciA9PSBmYWxzZSkpO1xufVxuXG4vLy8gQ2FsY3VsYXRlIGEgcGVyY2VudGFnZSBmcm9tIGEgZ2l2ZW4gZnJhY3Rpb24uXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkZnJhY3Rpb24gLSBWYWx1ZSByZXByZXNlbnRpbmcgYSBmcmFjdGlvbiB0byB1c2UgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlLCBmb3JtYXR0ZWQgYXMgYDUwYCAocmVsYXRpdmUgdG8gYCRkZW5vbWluYXRvcmApLCBgNTAlYCwgYDEgb2YgMmAgb3IgYDEvMmAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TGlzdH0gJGRlbm9taW5hdG9yIC0gRGVmYXVsdCB2YWx1ZSB0byB1c2UgYXMgZGVub21pbmF0b3Igd2hlbiBgJGZyYWN0aW9uYCByZXByZXNlbnRzIGFuIGFic29sdXRlIHZhbHVlLlxuQGZ1bmN0aW9uIGZyYWN0aW9uLXRvLXBlcmNlbnRhZ2UoXG4gICRmcmFjdGlvbixcbiAgJGRlbm9taW5hdG9yOiBudWxsXG4pIHtcbiAgJHBhcnNlZDogemYtcGFyc2UtZnJhY3Rpb24oJGZyYWN0aW9uKTtcbiAgJHBhcnNlZC1ub21pbmF0b3I6IG50aCgkcGFyc2VkLCAxKTtcbiAgJHBhcnNlZC1kZW5vbWluYXRvcjogbnRoKCRwYXJzZWQsIDIpO1xuXG4gIEBpZiAkcGFyc2VkLW5vbWluYXRvciA9PSBudWxsIHtcbiAgICBAZXJyb3IgJ1dyb25nIHN5bnRheCBmb3IgXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gVXNlIGEgbnVtYmVyLCBkZWNpbWFsLCBwZXJjZW50YWdlLCBvciBcIm4gb2YgblwiIC8gXCJuL25cIi4nO1xuICB9XG4gIEBpZiAkcGFyc2VkLWRlbm9taW5hdG9yID09IG51bGwge1xuICAgIEBpZiB0eXBlLW9mKCRkZW5vbWluYXRvcikgPT0gJ251bWJlcicge1xuICAgICAgJHBhcnNlZC1kZW5vbWluYXRvcjogJGRlbm9taW5hdG9yO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAZXJyb3IgJ0Vycm9yIHdpdGggXCJmcmFjdGlvbi10by1wZXJjZW50YWdlKClcIi4gQSBkZWZhdWx0IFwiJGRlbm9taW5hdG9yXCIgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBhYnNvbHV0ZSB2YWx1ZXMnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gcGVyY2VudGFnZSgkcGFyc2VkLW5vbWluYXRvciAvICRwYXJzZWQtZGVub21pbmF0b3IpO1xufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIFNpemVzIGNoaWxkIGVsZW1lbnRzIHNvIHRoYXQgYCRuYCBudW1iZXIgb2YgaXRlbXMgYXBwZWFyIG9uIGVhY2ggcm93LlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRuIC0gTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRpc3BsYXkgcGVyIHJvdy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFsnLmNlbGwnXSAtIFNlbGVjdG9yKHMpIHRvIHVzZSBmb3IgY2hpbGQgZWxlbWVudHMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZ3V0dGVyLW91dHB1dCBbbnVsbF0gLSBbREVQUkVDQVRFRF0gV2hldGhlciBvciBub3QgdG8gb3V0cHV0IGd1dHRlcnMuXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbJGdyaWQtbWFyZ2luLWd1dHRlcnNdIC0gTWFwIG9yIHNpbmdsZSB2YWx1ZSBmb3IgZ3V0dGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRndXR0ZXItdHlwZSBbbWFyZ2luXSAtIFR5cGUgb2YgZ3V0dGVyIHRvIG91dHB1dC4gQWNjZXB0cyBgbWFyZ2luYCwgYHBhZGRpbmdgIG9yIGBub25lYC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRndXR0ZXItcG9zaXRpb24gW251bGxdIC0gVGhlIHBvc2l0aW9uIHRvIGFwcGx5IGd1dHRlcnMgdG8uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLiBCeSBkZWZhdWx0IGByaWdodCBsZWZ0YCBmb3IgaG9yaXpvbnRhbCBjZWxscyBhbmQgYHRvcCBib3R0b21gIGZvciB2ZXJ0aWNhbCBjZWxscy5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIGJyZWFrcG9pbnQgdG8gdXNlIGZvciB0aGUgY2VsbCBnZW5lcmF0aW9uLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIG91dHB1dCB2ZXJ0aWNhbCAoaGVpZ2h0KSBzdHlsZXMgcmF0aGVyIHRoYW4gd2lkdGhzLlxuLy8vIEBwYXJhbSB7TGlzdH0gJG91dHB1dCBbKGJhc2Ugc2l6ZSBndXR0ZXJzKV0gLSBDZWxsIHBhcnRzIHRvIG91dHB1dC4gWW91IHdpbGwgbmVlZCB0byBnZW5lcmF0ZSBvdGhlcnMgcGFydHMgb2YgdGhlIGNlbGwgc2VwZXJhdGVseSwgaXQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSBvdGhlcndpc2UuXG5AbWl4aW4geHktZ3JpZC1sYXlvdXQoXG4gICRuLFxuICAkc2VsZWN0b3I6ICcuY2VsbCcsXG4gICRndXR0ZXItb3V0cHV0OiBudWxsLFxuICAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gICRndXR0ZXItdHlwZTogbWFyZ2luLFxuICAkZ3V0dGVyLXBvc2l0aW9uOiBudWxsLFxuICAkYnJlYWtwb2ludDogbnVsbCxcbiAgJHZlcnRpY2FsOiBmYWxzZSxcbiAgJG91dHB1dDogKGJhc2Ugc2l6ZSBndXR0ZXJzKVxuKSB7XG4gICRzaXplOiBwZXJjZW50YWdlKDEvJG4pO1xuXG4gICYgPiAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpbmNsdWRlIHh5LWNlbGwoJHNpemUsICRndXR0ZXItb3V0cHV0LCAkZ3V0dGVycywgJGd1dHRlci10eXBlLCAkZ3V0dGVyLXBvc2l0aW9uLCAkYnJlYWtwb2ludCwgJHZlcnRpY2FsLCAkb3V0cHV0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHh5LWdyaWRcbi8vLy9cblxuLy8vIENvbGxhcHNlcyB0aGUgZ3JpZCBhIGNlbGxzIHdpdGhpbiBpdC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWy5jZWxsXSAtIFRoZSBjaGlsZCBlbGVtZW50IHRvIHJlbW92ZSB0aGUgZ3V0dGVyIGZyb20uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZ3V0dGVyLXR5cGUgW21hcmdpbl0gLSBUaGUgdHlwZSBvZiBndXR0ZXIgdG8gcmVtb3ZlLlxuLy8vIEBwYXJhbSB7TGlzdH0gJGd1dHRlci1wb3NpdGlvbiBbcmlnaHQgbGVmdF0gLSBUaGUgcG9zaXRpb25zIHRvIHJlbW92ZSBndXR0ZXJzIGZyb20uIEFjY2VwdHMgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAsIGByaWdodGAgaW4gYW55IGNvbWJpbmF0aW9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG1pbi1icmVha3BvaW50IFskLXpmLXplcm8tYnJlYWtwb2ludF0gLSBNaW5pbXVtIGJyZWFrcG9pbnQgaW4gYCRicmVha3BvaW50LWNsYXNzZXNgIGZvciB3aGljaCB0byBjb2xsYXBzZSB0aGUgZ3V0dGVyLlxuQG1peGluIHh5LWdyaWQtY29sbGFwc2UoXG4gICRzZWxlY3RvcjogJy5jZWxsJyxcbiAgJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gICRndXR0ZXItcG9zaXRpb246IHJpZ2h0IGxlZnQsXG4gICRtaW4tYnJlYWtwb2ludDogJC16Zi16ZXJvLWJyZWFrcG9pbnRcbikge1xuICAvLyBGaXJzdCwgbGV0cyBuZWdhdGUgYW55IG1hcmdpbnMgb24gdGhlIHRvcCBsZXZlbFxuICBAaWYgKCRndXR0ZXItdHlwZSA9PSAnbWFyZ2luJykge1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbWluLWJyZWFrcG9pbnQpIHtcbiAgICAgIEBlYWNoICR2YWx1ZSBpbiAkZ3V0dGVyLXBvc2l0aW9uIHtcbiAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgIH1cblxuICAgICAgPiAjeyRzZWxlY3Rvcn0ge1xuICAgICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgICAgbWFyZ2luLSN7JHZhbHVlfTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRleGNsdWRlZC1icHM6IC16Zi1icmVha3BvaW50cy1sZXNzLXRoYW4oJG1pbi1icmVha3BvaW50KTtcblxuICAgIC8vIE91dHB1dCBuZXcgd2lkdGhzIHRvIG5vdCBpbmNsdWRlIGd1dHRlcnNcbiAgICBAZWFjaCAkYnAgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgICBAaWYoc2wtY29udGFpbigkZXhjbHVkZWQtYnBzLCAkYnApKSB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAgICAgICAgIC8vIFNpemluZyAocGVyY2VudGFnZSlcbiAgICAgICAgICAgID4gLiN7JGJwfS0jeyRpfSB7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIHh5LWNlbGwtc2l6ZSgkaSwgJGd1dHRlci10eXBlOiBub25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRicCkge1xuICAgICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgICAgICAgICAvLyBTaXppbmcgKHBlcmNlbnRhZ2UpXG4gICAgICAgICAgICA+IC4jeyRicH0tI3skaX0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSB4eS1jZWxsLXNpemUoJGksICRndXR0ZXItdHlwZTogbm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1pbi1icmVha3BvaW50KSB7XG4gICAgICBAZWFjaCAkdmFsdWUgaW4gJGd1dHRlci1wb3NpdGlvbiB7XG4gICAgICAgIG1hcmdpbi0jeyR2YWx1ZX06IDA7XG4gICAgICB9XG5cbiAgICAgID4gI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGVhY2ggJHZhbHVlIGluICRndXR0ZXItcG9zaXRpb24ge1xuICAgICAgICAgIHBhZGRpbmctI3skdmFsdWV9OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgeHktZ3JpZFxuLy8vL1xuXG4vLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ1NTIHZhbHVlIHRvIG9mZnNldCBhIGNlbGwuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge1N0cmluZ30gJGJyZWFrcG9pbnQgW251bGxdIC0gVGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgc2l6ZSBpbiB5b3VyIGd1dHRlcnMgbWFwIHRvIGdldCB0aGUgc2l6ZSBmcm9tLiBJZiB1c2luZyB3aXRoIHRoZSBgYnJlYWtwb2ludCgpYCBtaXhpbiB0aGlzIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgdW5sZXNzIG1hbnVhbGx5IGVudGVyZWQuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfFN0cmluZ30gVGhlIGNlbGwgb2Zmc2V0IHByb3BlcnR5IHZhbHVlLlxuQGZ1bmN0aW9uIHh5LWNlbGwtb2Zmc2V0KFxuICAkbixcbiAgJGd1dHRlcnM6ICRncmlkLW1hcmdpbi1ndXR0ZXJzLFxuICAkZ3V0dGVyLXR5cGU6IG1hcmdpbixcbiAgJGJyZWFrcG9pbnQ6IG51bGxcbikge1xuICAkYnJlYWtwb2ludDogLXpmLWN1cnJlbnQtYnJlYWtwb2ludCgkYnJlYWtwb2ludCwgJGRlZmF1bHQ6ICQtemYtemVyby1icmVha3BvaW50KTtcbiAgJHNpemU6IHh5LWNlbGwtc2l6ZSgkbik7XG5cbiAgJG9mZnNldDogJHNpemU7XG4gIEBpZiAoJGd1dHRlci10eXBlID09ICdtYXJnaW4nKSB7XG4gICAgJGd1dHRlcjogcmVtLWNhbGMoeHktY2VsbC1ndXR0ZXJzKCRndXR0ZXJzLCAkYnJlYWtwb2ludCkgLyAyKTtcbiAgICAkb2Zmc2V0OiBpZigkZ3V0dGVyID09IDAsICRzaXplLCBjYWxjKCN7JHNpemV9ICsgI3skZ3V0dGVyfSkpO1xuICB9XG4gIEByZXR1cm4gJG9mZnNldDtcbn1cblxuLy8vIE9mZnNldHMgYSBjb2x1bW4gdG8gdGhlIHJpZ2h0L2JvdHRvbSBieSBgJG5gIGNvbHVtbnMuXG4vLy9cbi8vLyBAcGFyYW0ge051bWJlcnxMaXN0fSAkbiAtIFNpemUgdG8gb2Zmc2V0IGJ5LiBZb3UgY2FuIHBhc3MgaW4gYW55IHZhbHVlIGFjY2VwdGVkIGJ5IHRoZSBgeHktY2VsbCgpYCBtaXhpbiwgc3VjaCBhcyBgNmAsIGA1MCVgLCBvciBgMSBvZiAyYC5cbi8vLyBAcGFyYW0ge051bWJlcnxNYXB9ICRndXR0ZXJzIFskZ3JpZC1tYXJnaW4tZ3V0dGVyc10gTWFwIG9mIGd1dHRlcnMgb3Igc2luZ2xlIHZhbHVlIHRvIHVzZSBmb3IgcmVzcG9uc2l2ZSBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGd1dHRlci10eXBlIFttYXJnaW5dIFRoZSB0eXBlIG9mIGd1dHRlciB0byB1c2UuIENhbiBiZSBgbWFyZ2luYCBvciBgcGFkZGluZ2Bcbi8vLyBAcGFyYW0ge051bWJlcnxBcnJheXxLZXl3b3JkfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBCcmVha3BvaW50IHRvIHVzZSBmb3IgYCRndXR0ZXJzYC4gSXQgY2FuIGJlIGEgYnJlYWtwb2ludCBuYW1lLCBsaXN0IG9mIGJyZWFrcG9pbnRzIG9yIGBhdXRvYCBmb3IgYWxsIGJyZWFrcG9pbnRzLiBJZiBhIGxpc3QgaXMgZ2l2ZW4sIG1lZGlhLXF1ZXJpZXMgd2lsbCBiZSBnZW5lcmF0ZWQuIElmIHVzaW5nIHdpdGggdGhlIGBicmVha3BvaW50KClgIG1peGluIHRoaXMgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSB1bmxlc3MgbWFudWFsbHkgZW50ZXJlZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIFNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgb2Zmc2V0LiBJZiBzZXQgdG8gdHJ1ZSB3aWxsIGFwcGx5IG1hcmdpbi10b3AgaW5zdGVhZC5cbkBtaXhpbiB4eS1jZWxsLW9mZnNldChcbiAkbixcbiAkZ3V0dGVyczogJGdyaWQtbWFyZ2luLWd1dHRlcnMsXG4gJGd1dHRlci10eXBlOiBtYXJnaW4sXG4gJGJyZWFrcG9pbnQ6IG51bGwsXG4gJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRicmVha3BvaW50OiAtemYtY3VycmVudC1icmVha3BvaW50KCRicmVha3BvaW50LCAkZGVmYXVsdDogJC16Zi16ZXJvLWJyZWFrcG9pbnQpO1xuICAkZGlyZWN0aW9uOiBpZigkdmVydGljYWwsICd0b3AnLCAkZ2xvYmFsLWxlZnQpO1xuXG4gIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQtaW4oJGJyZWFrcG9pbnQsICRtZWRpYS1xdWVyaWVzOiAnZm9yLWxpc3RzJykge1xuICAgICRvZmZzZXQ6IHh5LWNlbGwtb2Zmc2V0KCRuLCAkZ3V0dGVycywgJGd1dHRlci10eXBlKTtcbiAgICBtYXJnaW4tI3skZGlyZWN0aW9ufTogI3skb2Zmc2V0fTtcbiAgfVxufVxuIiwiLy8vIE1vZGlmaWVzIGEgZ3JpZCB0byBnaXZlIGl0IFwiZnJhbWVcIiBiZWhhdmlvciAobm8gb3ZlcmZsb3csIG5vIHdyYXAsIHN0cmV0Y2ggYmVoYXZpb3IpXG4vLy9cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICR2ZXJ0aWNhbCBbZmFsc2VdIC0gSXMgZ3JpZCB2ZXJ0aWNhbCBvciBob3Jpem9udGFsLiBTaG91bGQgbWF0Y2ggZ3JpZC5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRuZXN0ZWQgW2ZhbHNlXSAtIElzIGdyaWQgbmVzdGVkIG9yIG5vdC4gSWYgbmVzdGVkIGlzIHRydWUgdGhpcyBzZXRzIHRoZSBmcmFtZSB0byAxMDAlIGhlaWdodCwgb3RoZXJ3aXNlIHdpbGwgYmUgMTAwdmguXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkZ3V0dGVycyBbbnVsbF0gLSBNYXAgb3Igc2luZ2xlIHZhbHVlIGZvciBndXR0ZXJzLlxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkYnJlYWtwb2ludCBbbnVsbF0gLSBUaGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBzaXplIGluIHlvdXIgZ3V0dGVycyBtYXAgdG8gZ2V0IHRoZSBzaXplIGZyb20uXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkaW5jbHVkZS1iYXNlIFt0cnVlXSAtIEluY2x1ZGUgdGhlIGJhc2Ugc3R5bGVzIHRoYXQgZG9uJ3QgdmFyeSBwZXIgYnJlYWtwb2ludC5cbkBtaXhpbiB4eS1ncmlkLWZyYW1lKFxuICAkdmVydGljYWw6IGZhbHNlLFxuICAkbmVzdGVkOiBmYWxzZSxcbiAgJGd1dHRlcnM6IG51bGwsXG4gICRicmVha3BvaW50OiBudWxsLFxuICAkaW5jbHVkZS1iYXNlOiB0cnVlXG4pIHtcblxuICBAaWYgJGluY2x1ZGUtYmFzZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIH1cblxuICBAaWYgJGJyZWFrcG9pbnQgPT0gbnVsbCBhbmQgdHlwZS1vZigkZ3V0dGVycykgPT0gJ21hcCcge1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoKSB7XG4gICAgICBAaW5jbHVkZSB4eS1ncmlkLWZyYW1lKCR2ZXJ0aWNhbCwgJG5lc3RlZCwgJGd1dHRlcnMsICQtemYtc2l6ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgLy8gR2V0IG91ciBndXR0ZXJzIGlmIGFwcGxpY2FibGVcbiAgICAkZ3V0dGVyOiAtemYtZ2V0LWJwLXZhbCgkZ3V0dGVycywgJGJyZWFrcG9pbnQpO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIGd1dHRlciwgYWRkIGl0IHRvIHRoZSB3aWR0aC9oZWlnaHRcbiAgICBAaWYgJGd1dHRlciB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2aCk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICBoZWlnaHQ6IGNhbGMoI3skdW5pdH0gKyAjeyRndXR0ZXJ9KTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkdW5pdDogaWYoJG5lc3RlZCA9PSB0cnVlLCAxMDAlLCAxMDB2dyk7XG4gICAgICAgICRndXR0ZXI6IHJlbS1jYWxjKCRndXR0ZXIpO1xuICAgICAgICB3aWR0aDogY2FsYygjeyR1bml0fSArICN7JGd1dHRlcn0pO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgICAgICBoZWlnaHQ6IGlmKCRuZXN0ZWQgPT0gdHJ1ZSwgMTAwJSwgMTAwdmgpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHdpZHRoOiBpZigkbmVzdGVkID09IHRydWUsIDEwMCUsIDEwMHZ3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIE1vZGlmaWVzIGEgY2VsbCB0byBnaXZlIGl0IFwiYmxvY2tcIiBiZWhhdmlvciAob3ZlcmZsb3cgYXV0bywgaW5lcnRpYWwgc2Nyb2xsaW5nKVxuLy8vXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkdmVydGljYWwgW2ZhbHNlXSAtIElzIGdyaWQgdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gU2hvdWxkIG1hdGNoIGdyaWQuXG5AbWl4aW4geHktY2VsbC1ibG9jayhcbiAgJHZlcnRpY2FsOiBmYWxzZVxuKSB7XG4gICRwcm9wZXJ0eTogaWYoJHZlcnRpY2FsID09IHRydWUsICdvdmVyZmxvdy15JywgJ292ZXJmbG93LXgnKTtcblxuICBAaWYgJHZlcnRpY2FsID09IHRydWUge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICB9IEBlbHNlIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7XG59XG5cbi8vLyBDb250YWluZXIgZm9yIGluc2lkZSBhIGdyaWQgZnJhbWUgY29udGFpbmluZyBtdWx0aXBsZSBibG9ja3MuIFR5cGljYWxseSB1c2VkXG4vLy8gYXMgYSBtb2RpZmllciBmb3IgYSBgLmNlbGxgIHRvIGFsbG93IHRoZSBjZWxsIHRvIHBhc3MgYWxvbmcgZmxleCBzaXppbmdcbi8vLyBjb25zdHJhaW50cyAvIGZyb20gcGFyZW50cyB0byBjaGlsZHJlbi5cbkBtaXhpbiB4eS1jZWxsLWJsb2NrLWNvbnRhaW5lcigpIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWF4LWhlaWdodDogMTAwJTtcblxuICA+IC5ncmlkLXgge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b25cbi8vLy9cblxuLy8vIEZvbnQgZmFtaWx5IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gQHR5cGUgRm9udFxuJGJ1dHRvbi1mb250LWZhbWlseTogaW5oZXJpdCAhZGVmYXVsdDtcblxuLy8vIEZvbnQgd2VpZ2h0IGZvciBidXR0b24gZWxlbWVudHMuXG4vLy8gSWdub3JlZCBpZiBudWxsIChkZWZhdWx0KVxuLy8vIEB0eXBlIEZvbnQtV2VpZ2h0XG4kYnV0dG9uLWZvbnQtd2VpZ2h0OiBudWxsICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXBhZGRpbmc6IDAuODVlbSAxZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYXJvdW5kIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1tYXJnaW46IDAgMCAkZ2xvYmFsLW1hcmdpbiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmaWxsIGZvciBidXR0b25zLiBDYW4gZWl0aGVyIGJlIGBzb2xpZGAgb3IgYGhvbGxvd2AuXG4vLy8gQHR5cGUgS2V5d29yZFxuJGJ1dHRvbi1maWxsOiBzb2xpZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBDb2xvclxuJGJ1dHRvbi1iYWNrZ3JvdW5kOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgQ29sb3JcbiRidXR0b24tYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJ1dHRvbi1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgY29sb3IgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQWx0ZXJuYXRpdmUgZm9udCBjb2xvciBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWNvbG9yLWFsdDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHJhZGl1cyBmb3IgYnV0dG9ucywgZGVmYXVsdGVkIHRvIGdsb2JhbC1yYWRpdXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgZm9yIGJ1dHRvbnMsIHRyYW5zcGFyZW50IGJ5IGRlZmF1bHRcbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLWJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIHdpZHRoIGZvciBob2xsb3cgb3V0bGluZSBidXR0b25zXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNpemVzIGZvciBidXR0b25zLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1zaXplczogKFxuICB0aW55OiAwLjZyZW0sXG4gIHNtYWxsOiAwLjc1cmVtLFxuICBkZWZhdWx0OiAwLjlyZW0sXG4gIGxhcmdlOiAxLjI1cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIENvbG9yaW5nIGNsYXNzZXMuIEEgbWFwIG9mIGNsYXNzZXMgdG8gb3V0cHV0IGluIHlvdXIgQ1NTLCBsaWtlIGAuc2Vjb25kYXJ5YCwgYC5zdWNjZXNzYCwgYW5kIHNvIG9uLlxuLy8vIEB0eXBlIE1hcFxuJGJ1dHRvbi1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gb3BhY2l0eSBmb3IgYSBkaXNhYmxlZCBidXR0b24uXG4vLy8gQHR5cGUgTGlzdFxuJGJ1dHRvbi1vcGFjaXR5LWRpc2FibGVkOiAwLjI1ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBsaWdodG5lc3Mgb24gaG92ZXIgZm9yIGJ1dHRvbnMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYnV0dG9uLWJhY2tncm91bmQtaG92ZXItbGlnaHRuZXNzOiAtMjAlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyIGZvciBob2xsb3cgYnV0dG9ucy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b24taG9sbG93LWhvdmVyLWxpZ2h0bmVzczogLTUwJSAhZGVmYXVsdDtcblxuLy8gSW50ZXJuYWw6IGZsaXAgZnJvbSBtYXJnaW4tcmlnaHQgdG8gbWFyZ2luLWxlZnQgZm9yIGRlZmF1bHRzXG5AaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICRidXR0b24tbWFyZ2luOiAwIDAgJGdsb2JhbC1tYXJnaW4gJGdsb2JhbC1tYXJnaW4gIWRlZmF1bHQ7XG59XG5cbi8vLyB0cmFuc2l0aW9ucyBmb3IgYnV0dG9ucy5cbi8vLyBAdHlwZSBMaXN0XG4kYnV0dG9uLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZS1vdXQsIGNvbG9yIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gQWRkaXRpb25hbCByZXNwb25zaXZlIGNsYXNzZXMgZm9yIC5leHBhbmRlZFxuLy8vIEB0eXBlIEJvb2xlYW5cbiRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIFRPRE86IERvY3VtZW50IGJ1dHRvbi1iYXNlKCkgbWl4aW5cbkBtaXhpbiBidXR0b24tYmFzZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW46ICRidXR0b24tbWFyZ2luO1xuXG4gIEBpZiAodHlwZS1vZigkYnV0dG9uLXBhZGRpbmcpID09ICdtYXAnKSB7XG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluICRidXR0b24tcGFkZGluZyB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplKSB7XG4gICAgICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgcGFkZGluZzogJGJ1dHRvbi1wYWRkaW5nO1xuICB9XG5cbiAgYm9yZGVyOiAkYnV0dG9uLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gIHRyYW5zaXRpb246ICRidXR0b24tdHJhbnNpdGlvbjtcbiAgZm9udC1mYW1pbHk6ICRidXR0b24tZm9udC1mYW1pbHk7XG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcbiAgZm9udC13ZWlnaHQ6ICRidXR0b24tZm9udC13ZWlnaHQ7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby12ZW5kb3ItcHJlZml4ZXNcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vLy8gRXhwYW5kcyBhIGJ1dHRvbiB0byBtYWtlIGl0IGZ1bGwtd2lkdGguXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFt0cnVlXSAtIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBleHBhbmQgYmVoYXZpb3IuIFNldCB0byBgZmFsc2VgIHRvIHJldmVyc2UgdGhpcyBiZWhhdmlvci5cbkBtaXhpbiBidXR0b24tZXhwYW5kKCRleHBhbmQ6IHRydWUpIHtcbiAgQGlmICRleHBhbmQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogJGJ1dHRvbi1tYXJnaW47XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IG9yIGNsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWZpbGwtc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZmlsbCBbJGJ1dHRvbi1maWxsXSAtIFR5cGUgb2YgZmlsbGluZyBiZXR3ZWVuIGBob2xsb3dgIGFuZCBgY2xlYXJgLiBgc29saWRgIGhhcyBubyBlZmZlY3RzLlxuQG1peGluIGJ1dHRvbi1maWxsKFxuICAkZmlsbDogJGJ1dHRvbi1maWxsXG4pIHtcbiAgQGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdztcbiAgfVxuICBAZWxzZSBpZiAkZmlsbCA9PSBjbGVhciB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWNsZWFyO1xuICB9XG59XG5cbi8vLyBTZXRzIHRoZSB2aXN1YWwgc3R5bGVzIG9mIGEgc29saWQvaG9sbG93L2NsZWFyIGJ1dHRvbiBmaWxsaW5nIGFjY29yZGluZyB0byBgJGZpbGxgLlxuLy8vIFNlZSBtaXhpbnMgYGJ1dHRvbi1zdHlsZWAsIGBidXR0b24taG9sbG93LXN0eWxlYCBhbmQgYGJ1dHRvbi1jbGVhci1zdHlsZWAgZm9yIGVmZmVjdHMgb2YgdmlzdWFsIHN0eWxpbmcgcGFyYW1ldGVycy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRmaWxsIFskYnV0dG9uLWZpbGxdIC0gVHlwZSBvZiBmaWxsaW5nIGJldHdlZW4gYGhvbGxvd2AgYW5kIGBjbGVhcmAuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQgWyRidXR0b24tYmFja2dyb3VuZF0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGJhY2tncm91bmQtaG92ZXIgWyRidXR0b24tYmFja2dyb3VuZC1ob3Zlcl0gLSAtXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIC1cbkBtaXhpbiBidXR0b24tZmlsbC1zdHlsZShcbiAgJGZpbGw6ICRidXR0b24tZmlsbCxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yXG4pIHtcbiAgQGlmICRmaWxsID09IHNvbGlkIHtcbiAgICBAaW5jbHVkZSBidXR0b24tc3R5bGUoJGJhY2tncm91bmQsICRiYWNrZ3JvdW5kLWhvdmVyLCAkY29sb3IpO1xuICB9XG4gIEBlbHNlIGlmICRmaWxsID09IGhvbGxvdyB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWhvbGxvdy1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbiAgQGVsc2UgaWYgJGZpbGwgPT0gY2xlYXIge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1jbGVhci1zdHlsZSgkYmFja2dyb3VuZCk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZCBbJGJ1dHRvbi1iYWNrZ3JvdW5kXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFja2dyb3VuZC1ob3ZlciBbJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyXSAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci4gU2V0IHRvIGBhdXRvYCB0byBoYXZlIHRoZSBtaXhpbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgaG92ZXIgY29sb3IuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskYnV0dG9uLWNvbG9yXSAtIFRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbi4gU2V0IHRvIGBhdXRvYCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgY29sb3IgYmFzZWQgb24gdGhlIGJhY2tncm91bmQgY29sb3IuXG5AbWl4aW4gYnV0dG9uLXN0eWxlKFxuICAkYmFja2dyb3VuZDogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkYmFja2dyb3VuZC1ob3ZlcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkY29sb3I6ICRidXR0b24tY29sb3IsXG4gICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1iYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzc1xuKSB7XG4gIEBpZiAkY29sb3IgPT0gYXV0byB7XG4gICAgJGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGJ1dHRvbi1jb2xvciwgJGJ1dHRvbi1jb2xvci1hbHQpKTtcbiAgfVxuXG4gIEBpZiAkYmFja2dyb3VuZC1ob3ZlciA9PSBhdXRvIHtcbiAgICAkYmFja2dyb3VuZC1ob3Zlcjogc2NhbGUtY29sb3IoJGJhY2tncm91bmQsICRsaWdodG5lc3M6ICRiYWNrZ3JvdW5kLWhvdmVyLWxpZ2h0bmVzcyk7XG4gIH1cblxuICAvLyBEZWZhdWx0IGFuZCBkaXNhYmxlZCBzdGF0ZXNcbiAgJixcbiAgJi5kaXNhYmxlZCwgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQ6aG92ZXIsICZbZGlzYWJsZWRdOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzLCAmW2Rpc2FibGVkXTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBTZWUgbWl4aW4gYGJ1dHRvbi1ob2xsb3ctc3R5bGVgIGZvciB0aGUgZmlsbGluZyBzdHlsZXMuXG5AbWl4aW4gYnV0dG9uLWhvbGxvdyB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLy8gU2V0cyB0aGUgdmlzdWFsIHN0eWxlIG9mIGEgaG9sbG93IGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGFuZCBib3JkZXIgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkaG92ZXItbGlnaHRuZXNzIFskYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3NdIC0gQ29sb3IgbGlnaHRuZXNzIG9uIGhvdmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRib3JkZXItd2lkdGggWyRidXR0b24taG9sbG93LWJvcmRlci13aWR0aF0gLSBCb3JkZXIgd2lkdGggb2YgdGhlIGJ1dHRvbi5cbkBtaXhpbiBidXR0b24taG9sbG93LXN0eWxlKFxuICAkY29sb3I6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGhvdmVyLWxpZ2h0bmVzczogJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzLFxuICAkYm9yZGVyLXdpZHRoOiAkYnV0dG9uLWhvbGxvdy1ib3JkZXItd2lkdGhcbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3I7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWhvdmVyO1xuICAgIGNvbG9yOiAkY29sb3ItaG92ZXI7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGJhc2Ugc3R5bGVzIG9mIGEgY2xlYXIgYnV0dG9uLlxuLy8vIFNlZSBtaXhpbiBgYnV0dG9uLWNsZWFyLXN0eWxlYCBmb3IgdGhlIGZpbGxpbmcgc3R5bGVzLlxuQG1peGluIGJ1dHRvbi1jbGVhciB7XG4gICYsICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdIHtcbiAgICAmLCAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHZpc3VhbCBzdHlsZSBvZiBhIGNsZWFyIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tYmFja2dyb3VuZF0gLSBUZXh0IGNvbG9yIG9mIHRoZSBidXR0b24uXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGhvdmVyLWxpZ2h0bmVzcyBbJGJ1dHRvbi1ob2xsb3ctaG92ZXItbGlnaHRuZXNzXSAtIENvbG9yIGxpZ2h0bmVzcyBvbiBob3Zlci5cbkBtaXhpbiBidXR0b24tY2xlYXItc3R5bGUoXG4gICRjb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kLFxuICAkaG92ZXItbGlnaHRuZXNzOiAkYnV0dG9uLWhvbGxvdy1ob3Zlci1saWdodG5lc3Ncbikge1xuICAkY29sb3ItaG92ZXI6IHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJGhvdmVyLWxpZ2h0bmVzcyk7XG5cbiAgLy8gRGVmYXVsdCBhbmQgZGlzYWJsZWQgc3RhdGVzXG4gICYsXG4gICYuZGlzYWJsZWQsICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkOmhvdmVyLCAmW2Rpc2FibGVkXTpob3ZlcixcbiAgJi5kaXNhYmxlZDpmb2N1cywgJltkaXNhYmxlZF06Zm9jdXMge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cblxuICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGNvbG9yLWhvdmVyO1xuICB9XG59XG5cbi8vLyBBZGRzIGRpc2FibGVkIHN0eWxlcyB0byBhIGJ1dHRvbiBieSBmYWRpbmcgdGhlIGVsZW1lbnQgYW5kIHJlc2V0aW5nIHRoZSBjdXJzb3IuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcGFjaXR5IFskYnV0dG9uLW9wYWNpdHktZGlzYWJsZWRdIC0gT3BhY2l0eSBvZiB0aGUgZGlzYWJsZWQgYnV0dG9uLlxuQG1peGluIGJ1dHRvbi1kaXNhYmxlZChcbiAgJG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZFxuKSB7XG4gIG9wYWNpdHk6ICRidXR0b24tb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLy8vIEFkZHMgYSBkcm9wZG93biBhcnJvdyB0byBhIGJ1dHRvbi5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNpemUgWzAuNGVtXSAtIFNpemUgb2YgdGhlIGFycm93LiBXZSByZWNvbW1lbmQgdXNpbmcgYW4gYGVtYCB2YWx1ZSBzbyB0aGUgdHJpYW5nbGUgc2NhbGVzIHdoZW4gdXNlZCBpbnNpZGUgZGlmZmVyZW50IHNpemVzIG9mIGJ1dHRvbnMuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFt3aGl0ZV0gLSBDb2xvciBvZiB0aGUgYXJyb3cuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvZmZzZXQgWyRidXR0b24tcGFkZGluZ10gLSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBhcnJvdyBhbmQgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbi4gRGVmYXVsdHMgdG8gd2hhdGV2ZXIgdGhlIHJpZ2h0IHBhZGRpbmcgb2YgYSBidXR0b24gaXMuXG5AbWl4aW4gYnV0dG9uLWRyb3Bkb3duKFxuICAkc2l6ZTogMC40ZW0sXG4gICRjb2xvcjogJHdoaXRlLFxuICAkb2Zmc2V0OiBnZXQtc2lkZSgkYnV0dG9uLXBhZGRpbmcsIHJpZ2h0KVxuKSB7XG4gICY6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJHNpemUsICRjb2xvciwgZG93bik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogMC40ZW07IC8vIEFsaWducyB0aGUgYXJyb3cgd2l0aCB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1yaWdodH07XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogJG9mZnNldDtcbiAgfVxufVxuXG4vLy8gQWRkcyBhbGwgc3R5bGVzIGZvciBhIGJ1dHRvbi4gRm9yIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyIHN0eWxlcywgdXNlIHRoZSBpbmRpdmlkdWFsIGJ1dHRvbiBtaXhpbnMuXG4vLy8gQHBhcmFtIHtCb29sZWFufSAkZXhwYW5kIFtmYWxzZV0gLSBTZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGJ1dHRvbiBmdWxsLXdpZHRoLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIFskYnV0dG9uLWJhY2tncm91bmRdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kLWhvdmVyIFskYnV0dG9uLWJhY2tncm91bmQtaG92ZXJdIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uIG9uIGhvdmVyLiBTZXQgdG8gYGF1dG9gIHRvIGhhdmUgdGhlIG1peGluIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBob3ZlciBjb2xvci5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRidXR0b24tY29sb3JdIC0gVGV4dCBjb2xvciBvZiB0aGUgYnV0dG9uLiBTZXQgdG8gYGF1dG9gIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBjb2xvciBiYXNlZCBvbiB0aGUgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHlsZSBbc29saWRdIC0gU2V0IHRvIGBob2xsb3dgIHRvIGNyZWF0ZSBhIGhvbGxvdyBidXR0b24uIFRoZSBjb2xvciBkZWZpbmVkIGluIGAkYmFja2dyb3VuZGAgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcmltYXJ5IGNvbG9yIG9mIHRoZSBidXR0b24uXG5AbWl4aW4gYnV0dG9uKFxuICAkZXhwYW5kOiBmYWxzZSxcbiAgJGJhY2tncm91bmQ6ICRidXR0b24tYmFja2dyb3VuZCxcbiAgJGJhY2tncm91bmQtaG92ZXI6ICRidXR0b24tYmFja2dyb3VuZC1ob3ZlcixcbiAgJGNvbG9yOiAkYnV0dG9uLWNvbG9yLFxuICAkc3R5bGU6ICRidXR0b24tZmlsbFxuKSB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1iYXNlO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbCgkc3R5bGUpO1xuICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkc3R5bGUsICRiYWNrZ3JvdW5kLCAkYmFja2dyb3VuZC1ob3ZlciwgJGNvbG9yKTtcblxuICBAaWYgJGV4cGFuZCB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1idXR0b24ge1xuICAuYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBidXR0b24oJHN0eWxlOiBub25lKTtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBmb250LXNpemU6ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmV4cGFuZGVkIHsgQGluY2x1ZGUgYnV0dG9uLWV4cGFuZDsgfVxuXG4gICAgQGlmICRidXR0b24tcmVzcG9uc2l2ZS1leHBhbmRlZCB7XG4gICAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBvbmx5KSB7XG4gICAgICAgICAgJi4jeyRzaXplfS1vbmx5LWV4cGFuZGVkIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1leHBhbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAkc2l6ZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgjeyRzaXplfSBkb3duKSB7XG4gICAgICAgICAgICAmLiN7JHNpemV9LWRvd24tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoI3skc2l6ZX0pIHtcbiAgICAgICAgICAgICYuI3skc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tZXhwYW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNvbGlkLCBob2xsb3cgJiBjbGVhciBzdHlsZXNcbiAgICBAZWFjaCAkZmlsbGluZyBpbiAoc29saWQgaG9sbG93IGNsZWFyKSB7XG4gICAgICAkc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skc2VsZWN0b3J9IHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZmlsbC1zdHlsZSgkZmlsbGluZyk7XG5cbiAgICAgICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkYnV0dG9uLXBhbGV0dGUge1xuICAgICAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcsICRjb2xvciwgYXV0bywgYXV0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGVcbiAgICAmLmRpc2FibGVkLCAmW2Rpc2FibGVkXSB7XG4gICAgICBAaW5jbHVkZSBidXR0b24tZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd24gYXJyb3dcbiAgICAmLmRyb3Bkb3duIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1kcm9wZG93bjtcblxuICAgICAgQGlmICRidXR0b24tZmlsbCA9PSBob2xsb3cge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJ1dHRvbi1iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuaG9sbG93LCAmLmNsZWFyIHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRidXR0b24tYmFja2dyb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1dHRvbiB3aXRoIGRyb3Bkb3duIGFycm93IG9ubHlcbiAgICAmLmFycm93LW9ubHk6OmFmdGVyIHtcbiAgICAgIHRvcDogLTAuMWVtO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIH1cbiAgfVxuXG4gIGEuYnV0dG9uIHsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBidXR0b24tZ3JvdXBcbi8vLy9cblxuLy8vIE1hcmdpbiBmb3IgYnV0dG9uIGdyb3Vwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRidXR0b25ncm91cC1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLXNwYWNpbmc6IDFweCAhZGVmYXVsdDtcblxuLy8vIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHR5cGUgU3RyaW5nXG4kYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3I6ICcuYnV0dG9uJyAhZGVmYXVsdDtcblxuLy8vIE1heGltdW0gbnVtYmVyIG9mIGJ1dHRvbnMgdGhhdCBjYW4gYmUgaW4gYW4gZXZlbi13aWR0aCBidXR0b24gZ3JvdXAuIChPbmx5IG5lZWRlZCB3aGVuICRnbG9iYWwtZmxleGJveDogZmFsc2U7KVxuLy8vIEB0eXBlIE51bWJlclxuJGJ1dHRvbmdyb3VwLWV4cGFuZC1tYXg6IDYgIWRlZmF1bHQ7XG5cbi8vLyBEZXRlcm1pbmVzIGlmICRidXR0b24tcmFkaXVzIGlzIGFwcGxpZWQgdG8gZWFjaCBidXR0b24gb3IgdGhlIGJ1dHRvbiBncm91cCBhcyBhIHdob2xlLiBVc2UgJGdsb2JhbC1yYWRpdXMgaW4gX3NldHRpbmdzLnNjc3MgdG8gY2hhbmdlIHJhZGl1cy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2g6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBBZGQgc3R5bGVzIGZvciBhIGJ1dHRvbiBncm91cCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRjaGlsZC1zZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzcGFjaW5nIFskYnV0dG9uZ3JvdXAtc3BhY2luZ10gLSBTcGFjaW5nIGJldHdlZW4gYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAoXG4gICRjaGlsZC1zZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmdcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLWJvdHRvbTogJGJ1dHRvbmdyb3VwLW1hcmdpbjtcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgLy8gRGlzYWJsZSBjbGVhcmZpeFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZm9udC1zaXplOiAwO1xuICB9XG5cbiAgI3skY2hpbGQtc2VsZWN0b3J9IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRzcGFjaW5nO1xuICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgIGZvbnQtc2l6ZTogbWFwLWdldCgkYnV0dG9uLXNpemVzLCBkZWZhdWx0KTtcblxuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRidXR0b24tcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkYnV0dG9uLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGJ1dHRvbi1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBNYWtlIGJ1dHRvbnMgYm9uZGVkIHdpdGhvdXQgZ2FwIGJldHdlZW4gdGhlbS4gQm9yZGVycyBiZXR3ZWVuIGJ1dHRvbnMgYXJlIG1lcmdlZFxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkc2VsZWN0b3IgWyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcl0gLSBTZWxlY3RvciBmb3IgdGhlIGJ1dHRvbnMgaW5zaWRlIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1uby1nYXBzKFxuICAkc2VsZWN0b3I6ICRidXR0b25ncm91cC1jaGlsZC1zZWxlY3RvcixcbiAgJGJvcmRlci13aWR0aDogJGJ1dHRvbi1ob2xsb3ctYm9yZGVyLXdpZHRoXG4pIHtcbiAgI3skc2VsZWN0b3J9IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogcmVtLWNhbGMoLSRib3JkZXItd2lkdGgpO1xuXG4gICAgKyAjeyRzZWxlY3Rvcn0ge1xuICAgICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgZnVsbC13aWR0aCBidXR0b24gZ3JvdXAsIG1ha2luZyBlYWNoIGJ1dHRvbiBlcXVhbCB3aWR0aC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHNwYWNpbmcgWyRidXR0b25ncm91cC1zcGFjaW5nXSAtIFNwYWNpbmcgYmV0d2VlbiBidXR0b25zIGluIGEgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1leHBhbmQoXG4gICRzZWxlY3RvcjogJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yLFxuICAkc3BhY2luZzogJGJ1dHRvbmdyb3VwLXNwYWNpbmcsXG4gICRjb3VudDogbnVsbFxuKSB7XG4gIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogLSRzcGFjaW5nO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIERpc2FibGUgY2xlYXJmaXhcbiAgICB9XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgLy8gT25lIGNoaWxkXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gI3skc3BhY2luZ30pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFR3byBvciBtb3JlIGNoaWxkcmVlblxuICAgICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkYnV0dG9uZ3JvdXAtZXhwYW5kLW1heCB7XG4gICAgICAgICY6Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoI3skaX0pIHtcbiAgICAgICAgICAmLCAmOmZpcnN0LWNoaWxkOm50aC1sYXN0LWNoaWxkKCN7JGl9KSB+ICN7JHNlbGVjdG9yfSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICB3aWR0aDogY2FsYygje3BlcmNlbnRhZ2UoMSAvICRpKX0gLSAjeyRzcGFjaW5nfSk7XG4gICAgICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkc3BhY2luZyAqIC0kYnV0dG9uZ3JvdXAtZXhwYW5kLW1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFN0YWNrcyB0aGUgYnV0dG9ucyBpbiBhIGJ1dHRvbiBncm91cC5cbi8vLyBAcGFyYW0ge1N0cmluZ30gJHNlbGVjdG9yIFskYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3JdIC0gU2VsZWN0b3IgZm9yIHRoZSBidXR0b25zIGluc2lkZSB0aGUgYnV0dG9uIGdyb3VwLlxuQG1peGluIGJ1dHRvbi1ncm91cC1zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIEBpZiBub3QgJGJ1dHRvbmdyb3VwLXJhZGl1cy1vbi1lYWNoIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1sZWZ0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItdG9wLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtcmlnaHR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vLyBVbi1zdGFja3MgdGhlIGJ1dHRvbnMgaW4gYSBidXR0b24gZ3JvdXAuXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRzZWxlY3RvciBbJGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yXSAtIFNlbGVjdG9yIGZvciB0aGUgYnV0dG9ucyBpbnNpZGUgdGhlIGJ1dHRvbiBncm91cC5cbkBtaXhpbiBidXR0b24tZ3JvdXAtdW5zdGFjayhcbiAgJHNlbGVjdG9yOiAkYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3Jcbikge1xuICAjeyRzZWxlY3Rvcn0ge1xuICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgQGlmIG5vdCAkYnV0dG9uZ3JvdXAtcmFkaXVzLW9uLWVhY2gge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tI3skZ2xvYmFsLWxlZnR9LXJhZGl1czogJGdsb2JhbC1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtI3skZ2xvYmFsLXJpZ2h0fS1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLSN7JGdsb2JhbC1yaWdodH0tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS0jeyRnbG9iYWwtbGVmdH0tcmFkaXVzOiAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJ1dHRvbi1ncm91cCB7XG4gIC5idXR0b24tZ3JvdXAge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cDtcblxuICAgIC8vIFNpemVzXG4gICAgQGVhY2ggJHNpemUsICR2YWx1ZSBpbiBtYXAtcmVtb3ZlKCRidXR0b24tc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0gI3skYnV0dG9uZ3JvdXAtY2hpbGQtc2VsZWN0b3J9IHtcbiAgICAgICAgZm9udC1zaXplOiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBHcm91cFxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnV0dG9uLWdyb3VwLWV4cGFuZDtcbiAgICB9XG5cbiAgICAvLyBTb2xpZCwgaG9sbG93ICYgY2xlYXIgc3R5bGVzXG4gICAgQGVhY2ggJGZpbGxpbmcgaW4gKHNvbGlkIGhvbGxvdyBjbGVhcikge1xuICAgICAgJGJhc2Utc2VsZWN0b3I6IGlmKCRidXR0b24tZmlsbCA9PSAkZmlsbGluZywgbnVsbCwgJy4jeyRmaWxsaW5nfScpO1xuXG4gICAgICAmI3skYmFzZS1zZWxlY3Rvcn0ge1xuICAgICAgICAvLyBEbyBub3QgZ2VuZXJhdGUgYnV0dG9uIGJhc2Ugc3R5bGVzIGZvciB0aGUgZGVmYXVsdCBmaWxsaW5nXG4gICAgICAgIEBpZigkYnV0dG9uLWZpbGwgIT0gJGZpbGxpbmcpIHtcbiAgICAgICAgICAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwoJGZpbGxpbmcpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWZpbGwtc3R5bGUoJGZpbGxpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRuYW1lLCAkY29sb3IgaW4gJGJ1dHRvbi1wYWxldHRlIHtcbiAgICAgICAgICAkaW5kaXZpZHVhbC1zZWxlY3RvcjogaWYoJGJ1dHRvbi1maWxsID09ICRmaWxsaW5nLCBudWxsLCAnICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfS4jeyRuYW1lfScpO1xuXG4gICAgICAgICAgJi4jeyRuYW1lfSAjeyRidXR0b25ncm91cC1jaGlsZC1zZWxlY3Rvcn0sICN7JGluZGl2aWR1YWwtc2VsZWN0b3J9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1maWxsLXN0eWxlKCRmaWxsaW5nLCAkY29sb3IsIGF1dG8sIGF1dG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi5uby1nYXBzIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1uby1nYXBzO1xuICAgIH1cblxuICAgICYuc3RhY2tlZCxcbiAgICAmLnN0YWNrZWQtZm9yLXNtYWxsLFxuICAgICYuc3RhY2tlZC1mb3ItbWVkaXVtIHtcbiAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1zdGFjaztcblxuICAgICAgJi5leHBhbmRlZCB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5zdGFja2VkLWZvci1zbWFsbCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tZ3JvdXAtdW5zdGFjaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1ncm91cC11bnN0YWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuc3RhY2tlZC1mb3Itc21hbGwuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBvbmx5KSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnN0YWNrZWQtZm9yLW1lZGl1bS5leHBhbmRlZCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSBkb3duKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICN7JGJ1dHRvbmdyb3VwLWNoaWxkLXNlbGVjdG9yfSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjbG9zZS1idXR0b25cbi8vLy9cblxuLy8vIERlZmF1bHQgcG9zaXRpb24gb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVGhlIGZpcnN0IHZhbHVlIHNob3VsZCBiZSBgcmlnaHRgIG9yIGBsZWZ0YCwgYW5kIHRoZSBzZWNvbmQgdmFsdWUgc2hvdWxkIGJlIGB0b3BgIG9yIGBib3R0b21gLlxuLy8vIEB0eXBlIExpc3RcbiRjbG9zZWJ1dHRvbi1wb3NpdGlvbjogcmlnaHQgdG9wICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB6LWluZGV4IGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjbG9zZWJ1dHRvbi16LWluZGV4OiAxMCAhZGVmYXVsdDtcblxuLy8vIEJ1dHRvbiBzaXplIHRvIHVzZSBhcyBkZWZhdWx0XG4vLy8gQHR5cGUgU3RyaW5nXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tc2l6ZVxuLy8vIEBzZWUgJGNsb3NlYnV0dG9uLW9mZnNldC1ob3Jpem9udGFsXG4vLy8gQHNlZSAkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsXG4kY2xvc2VidXR0b24tZGVmYXVsdC1zaXplOiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBSaWdodCAob3IgbGVmdCkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LWhvcml6b250YWw6IChcbiAgc21hbGw6IDAuNjZyZW0sXG4gIG1lZGl1bTogMXJlbSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBUb3AgKG9yIGJvdHRvbSkgb2Zmc2V0KHMpIGZvciBhIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBOdW1iZXJ8TWFwXG4kY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsOiAoXG4gIHNtYWxsOiAwLjMzZW0sXG4gIG1lZGl1bTogMC41cmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIFNpemUocykgb2YgdGhlIGNsb3NlIGJ1dHRvbi4gVXNlZCB0byBnZW5lcmF0ZSBzaXppbmcgbW9kaWZpZXJzLlxuLy8vIEB0eXBlIE51bWJlcnxNYXBcbiRjbG9zZWJ1dHRvbi1zaXplOiAoXG4gIHNtYWxsOiAxLjVlbSxcbiAgbWVkaXVtOiAyZW0sXG4pICFkZWZhdWx0O1xuXG4vLy8gVGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBjbG9zZSBidXR0b24uIEl0IGFmZmVjdHMgdGhlIHNwYWNpbmcgb2YgdGhlIGVsZW1lbnQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2xvc2VidXR0b24tbGluZWhlaWdodDogMSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIGNsb3NlIGJ1dHRvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yOiAkZGFyay1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgY2xvc2UgYnV0dG9uIHdoZW4gYmVpbmcgaG92ZXJlZCBvbi5cbi8vLyBAdHlwZSBDb2xvclxuJGNsb3NlYnV0dG9uLWNvbG9yLWhvdmVyOiAkYmxhY2sgIWRlZmF1bHQ7XG5cblxuLy8vIEdldCB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGEgY2xvc2UgYnV0dG9uLiBJZiB0aGUgaW5wdXQgdmFsdWUgaXMgYSBudW1iZXIsIHRoZSBudW1iZXIgaXMgcmV0dXJuZWQuIElmIHRoZSBpbnB1dCB2YWx1ZSBpcyBhIGNvbmZpZyBtYXAgYW5kIHRoZSBtYXAgaGFzIHRoZSBrZXkgYCRzaXplYCwgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuLy8vXG4vLy8gQHBhcmFtIHtOdW1iZXJ8TWFwfSAkdmFsdWUgLSBBIG51bWJlciBvciBtYXAgdGhhdCByZXByZXNlbnRzIHRoZSBzaXplIG9yIHBvc2l0aW9uIHZhbHVlKHMpIG9mIHRoZSBjbG9zZSBidXR0b24uXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkc2l6ZSAtIFRoZSBzaXplIG9mIHRoZSBjbG9zZSBidXR0b24gdG8gdXNlLlxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSBUaGUgZ2l2ZW4gbnVtYmVyIG9yIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgbWFwLlxuQGZ1bmN0aW9uIC16Zi1nZXQtc2l6ZS12YWwoJHZhbHVlLCAkc2l6ZSkge1xuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBudW1iZXJcbiAgQGlmIHR5cGUtb2YoJHZhbHVlKSA9PSAnbnVtYmVyJyB7XG4gICAgLy8gSWYgaXQgaXMsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXJcbiAgICBAcmV0dXJuICR2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzaXplIG5hbWUgZXhpc3RzIGluIHRoZSB2YWx1ZSBtYXBcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJHZhbHVlLCAkc2l6ZSkge1xuICAgIC8vIElmIGl0IGRvZXMsIHJldHVybiB0aGUgdmFsdWVcbiAgICBAcmV0dXJuIG1hcC1nZXQoJHZhbHVlLCAkc2l6ZSk7XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIGEgY2xvc2UgYnV0dG9uLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgW21lZGl1bV0gLSBUaGUgc2l6ZSB0byB1c2UuIFNldCB0byBgc21hbGxgIHRvIGNyZWF0ZSBhIHNtYWxsIGNsb3NlIGJ1dHRvbi4gVGhlICdtZWRpdW0nIHZhbHVlcyBkZWZpbmVkIGluIGAkY2xvc2VidXR0b24tKmAgdmFyaWFibGVzIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgY2xvc2UgYnV0dG9uLlxuQG1peGluIGNsb3NlLWJ1dHRvbi1zaXplKCRzaXplKSB7XG4gICR4OiBudGgoJGNsb3NlYnV0dG9uLXBvc2l0aW9uLCAxKTtcbiAgJHk6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDIpO1xuXG4gICN7JHh9OiAtemYtZ2V0LXNpemUtdmFsKCRjbG9zZWJ1dHRvbi1vZmZzZXQtaG9yaXpvbnRhbCwgJHNpemUpO1xuICAjeyR5fTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tb2Zmc2V0LXZlcnRpY2FsLCAkc2l6ZSk7XG4gIGZvbnQtc2l6ZTogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tc2l6ZSwgJHNpemUpO1xuICBsaW5lLWhlaWdodDogLXpmLWdldC1zaXplLXZhbCgkY2xvc2VidXR0b24tbGluZWhlaWdodCwgJHNpemUpO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgY2xvc2UgYnV0dG9uLCB1c2luZyB0aGUgc3R5bGVzIGluIHRoZSBzZXR0aW5ncyB2YXJpYWJsZXMuXG5AbWl4aW4gY2xvc2UtYnV0dG9uIHtcbiAgJHg6IG50aCgkY2xvc2VidXR0b24tcG9zaXRpb24sIDEpO1xuICAkeTogbnRoKCRjbG9zZWJ1dHRvbi1wb3NpdGlvbiwgMik7XG5cbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICRjbG9zZWJ1dHRvbi16LWluZGV4O1xuICBjb2xvcjogJGNsb3NlYnV0dG9uLWNvbG9yO1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRjbG9zZWJ1dHRvbi1jb2xvci1ob3ZlcjtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1jbG9zZS1idXR0b24ge1xuICAuY2xvc2UtYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBjbG9zZS1idXR0b247XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHBsYWNlaG9sZGVyIGFuZCBhIGNsYXNzIGZvciBlYWNoIHNpemVcbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJGNsb3NlYnV0dG9uLXNpemUge1xuICAgICAgQGF0LXJvb3Qge1xuICAgICAgICAlemYtY2xvc2UtYnV0dG9uLS0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgY2xvc2UtYnV0dG9uLXNpemUoJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAZXh0ZW5kICV6Zi1jbG9zZS1idXR0b24tLSN7JG5hbWV9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBieSBkZWZhdWx0IHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgZGVmYXVsdCBzaXplXG4gICAgQGV4dGVuZCAlemYtY2xvc2UtYnV0dG9uLS0jeyRjbG9zZWJ1dHRvbi1kZWZhdWx0LXNpemV9O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbGFiZWxcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBDb2xvclxuJGxhYmVsLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgbGFiZWxzLlxuLy8vIEB0eXBlIENvbG9yXG4kbGFiZWwtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRsYWJlbC1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGxhYmVscy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRsYWJlbC1mb250LXNpemU6IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBpbnNpZGUgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXBhZGRpbmc6IDAuMzMzMzNyZW0gMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgb2YgbGFiZWxzLlxuLy8vIEB0eXBlIE51bWJlclxuJGxhYmVsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBHZW5lcmF0ZXMgYmFzZSBzdHlsZXMgZm9yIGEgbGFiZWwuXG5AbWl4aW4gbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6ICRsYWJlbC1wYWRkaW5nO1xuXG4gIGJvcmRlci1yYWRpdXM6ICRsYWJlbC1yYWRpdXM7XG5cbiAgZm9udC1zaXplOiAkbGFiZWwtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogMTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1sYWJlbCB7XG4gIC5sYWJlbCB7XG4gICAgQGluY2x1ZGUgbGFiZWw7XG5cbiAgICBiYWNrZ3JvdW5kOiAkbGFiZWwtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJGxhYmVsLWNvbG9yO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkbGFiZWwtcGFsZXR0ZSB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yO1xuICAgICAgICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkY29sb3IsICgkbGFiZWwtY29sb3IsICRsYWJlbC1jb2xvci1hbHQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHByb2dyZXNzIGJhciBjb250YWluZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAkcHJvZ3Jlc3MtaGVpZ2h0O1xuICBtYXJnaW4tYm90dG9tOiAkcHJvZ3Jlc3MtbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyLXJhZGl1czogJHByb2dyZXNzLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhY2tncm91bmQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGlubmVyIG1ldGVyIG9mIGEgcHJvZ3Jlc3MgYmFyLlxuQG1peGluIHByb2dyZXNzLW1ldGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1tZXRlci1iYWNrZ3JvdW5kO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRnbG9iYWwtcmFkaXVzO1xuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGV4dCBpbiB0aGUgcHJvZ3Jlc3MgbWV0ZXIuXG5AbWl4aW4gcHJvZ3Jlc3MtbWV0ZXItdGV4dCB7XG4gIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcjtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogJHdoaXRlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gIEBpZiBoYXMtdmFsdWUoJHByb2dyZXNzLXJhZGl1cykge1xuICAgIGJvcmRlci1yYWRpdXM6ICRwcm9ncmVzcy1yYWRpdXM7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tcHJvZ3Jlc3MtYmFyIHtcbiAgLy8gUHJvZ3Jlc3MgYmFyXG4gIC5wcm9ncmVzcyB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtY29udGFpbmVyO1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICAucHJvZ3Jlc3MtbWV0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElubmVyIG1ldGVyXG4gIC5wcm9ncmVzcy1tZXRlciB7XG4gICAgQGluY2x1ZGUgcHJvZ3Jlc3MtbWV0ZXI7XG4gIH1cblxuICAvLyBJbm5lciBtZXRlciB0ZXh0XG4gIC5wcm9ncmVzcy1tZXRlci10ZXh0IHtcbiAgICBAaW5jbHVkZSBwcm9ncmVzcy1tZXRlci10ZXh0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vIFtUT0RPXSBDaGVjayBob3cgcGx1Z2luIGNvbmZpcm1zIGRpc2FibGVkIG9yIHZlcnRpY2FsIHN0YXR1c1xuLy8gW1RPRE9dIENoZWNrIGlmIHRyYW5zaXRpb246IGFsbDsgaXMgbmVjZXNzYXJ5XG5cbi8vLy9cbi8vLyBAZ3JvdXAgc2xpZGVyXG4vLy8vXG5cbi8vLyBEZWZhdWx0IHNsaWRlciB3aWR0aCBvZiBhIHZlcnRpY2FsIHNsaWRlci4gKERvZXNuJ3QgYXBwbHkgdG8gdGhlIG5hdGl2ZSBzbGlkZXIuKVxuLy8vIEB0eXBlIE51bWJlclxuJHNsaWRlci13aWR0aC12ZXJ0aWNhbDogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBzbGlkZXIgaGFuZGxlIGFuZCBmaWxsLiAoRG9lc24ndCBhcHBseSB0byB0aGUgbmF0aXZlIHNsaWRlci4pXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHNsaWRlci10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciBzbGlkZXJzLlxuQG1peGluIHNsaWRlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogJHNsaWRlci1oZWlnaHQ7XG4gIG1hcmdpbi10b3A6IDEuMjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDIuMjVyZW07XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1iYWNrZ3JvdW5kO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICB0b3VjaC1hY3Rpb246IG5vbmU7XG59XG5cbi8vLyBBZGRzIHRoZSBnZW5lcmFsIHN0eWxlcyBmb3IgYWN0aXZlIGZpbGwgZm9yIHNsaWRlcnMuXG5AbWl4aW4gc2xpZGVyLWZpbGwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkc2xpZGVyLWhlaWdodDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWZpbGwtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuLy8vIEFkZHMgdGhlIGdlbmVyYWwgc3R5bGVzIGZvciB0aGUgc2xpZGVyIGhhbmRsZXMuXG5AbWl4aW4gc2xpZGVyLWhhbmRsZSB7XG4gIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgQGluY2x1ZGUgdmVydGljYWwtY2VudGVyO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcblxuICBib3JkZXItcmFkaXVzOiAkc2xpZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNsaWRlci1oYW5kbGUtYmFja2dyb3VuZDtcbiAgdHJhbnNpdGlvbjogJHNsaWRlci10cmFuc2l0aW9uO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzY2FsZS1jb2xvcigkc2xpZGVyLWhhbmRsZS1iYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTUlKTtcbiAgfVxuXG4gICYuaXMtZHJhZ2dpbmcge1xuICAgIHRyYW5zaXRpb246IGFsbCAwcyBsaW5lYXI7XG4gIH1cbn1cblxuQG1peGluIHNsaWRlci1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6ICRzbGlkZXItb3BhY2l0eS1kaXNhYmxlZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuQG1peGluIHNsaWRlci12ZXJ0aWNhbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6ICRzbGlkZXItd2lkdGgtdmVydGljYWw7XG4gIGhlaWdodDogMTIuNXJlbTtcbiAgbWFyZ2luOiAwIDEuMjVyZW07XG4gIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuXG4gIC5zbGlkZXItZmlsbCB7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkc2xpZGVyLXdpZHRoLXZlcnRpY2FsO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6ICRzbGlkZXItaGFuZGxlLWhlaWdodDtcbiAgICBoZWlnaHQ6ICRzbGlkZXItaGFuZGxlLXdpZHRoO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zbGlkZXIge1xuICAvLyBDb250YWluZXJcbiAgLnNsaWRlciB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIEZpbGwgYXJlYVxuICAuc2xpZGVyLWZpbGwge1xuICAgIEBpbmNsdWRlIHNsaWRlci1maWxsO1xuICB9XG5cbiAgLy8gRHJhZ2dhYmxlIGhhbmRsZVxuICAuc2xpZGVyLWhhbmRsZSB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLWhhbmRsZTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlXG4gIC5zbGlkZXIuZGlzYWJsZWQsXG4gIC5zbGlkZXJbZGlzYWJsZWRdIHtcbiAgICBAaW5jbHVkZSBzbGlkZXItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBWZXJ0aWNhbCBzbGlkZXJcbiAgLnNsaWRlci52ZXJ0aWNhbCB7XG4gICAgQGluY2x1ZGUgc2xpZGVyLXZlcnRpY2FsO1xuICB9XG5cbiAgLy8gUlRMIHN1cHBvcnRcbiAgQGlmICRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gcnRsIHtcbiAgICAuc2xpZGVyOm5vdCgudmVydGljYWwpIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIHN3aXRjaFxuLy8vL1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGFjdGl2ZSBjb2xvciBvZiBhIHN3aXRjaC5cbi8vLyBAdHlwZSBDb2xvclxuJHN3aXRjaC1iYWNrZ3JvdW5kLWFjdGl2ZTogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2gsIHdpdGggbm8gY2xhc3MgYXBwbGllZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0OiAycmVtICFkZWZhdWx0O1xuXG4vLy8gSGVpZ2h0IG9mIGEgc3dpdGNoIHdpdGggLnRpbnkgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC10aW55OiAxLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgb2YgYSBzd2l0Y2ggd2l0aCAuc21hbGwgY2xhc3MuXG4vLy8gQHR5cGUgTnVtYmVyXG4kc3dpdGNoLWhlaWdodC1zbWFsbDogMS43NXJlbSAhZGVmYXVsdDtcblxuLy8vIEhlaWdodCBvZiBhIHN3aXRjaCB3aXRoIC5sYXJnZSBjbGFzcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtaGVpZ2h0LWxhcmdlOiAyLjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIG9mIHRoZSBzd2l0Y2hcbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIGJvcmRlciBhcm91bmQgYSBtb2RhbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtbWFyZ2luOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBzd2l0Y2ggY29udGFpbmVyIGFuZCBwYWRkbGUuXG4vLy8gQHR5cGUgQ29sb3JcbiRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFNwYWNpbmcgYmV0d2VlbiBhIHN3aXRjaCBwYWRkbGUgYW5kIHRoZSBlZGdlIG9mIHRoZSBib2R5LlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtb2Zmc2V0OiAwLjI1cmVtICFkZWZhdWx0O1xuXG4vLy8gYm9yZGVyIHJhZGl1cyBvZiB0aGUgc3dpdGNoIHBhZGRsZVxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIHN3aXRjaCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjogYWxsIDAuMjVzIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gT3BhY2l0eSBvZiBhIGRpc2FibGVkIHN3aXRjaC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRzd2l0Y2gtb3BhY2l0eS1kaXNhYmxlZDogLjUgIWRlZmF1bHQ7XG5cbi8vLyBDdXJzb3IgZm9yIGEgZGlzYWJsZWQgc3dpdGNoLlxuLy8vIEB0eXBlIEN1cnNvclxuJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkICFkZWZhdWx0O1xuXG4vLyBtYWtlIHRoZW0gdmFyaWFibGVzXG4vLyBhc2sgYWJvdXQgYWNjZXNzaWJpbGl0eSBvbiBsYWJlbFxuLy8gY2hhbmdlIGNsYXNzIG5hbWUgZm9yIHRleHRcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gYSBjb250YWluZXIgY2xhc3MuXG5AbWl4aW4gc3dpdGNoLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHN3aXRjaC1tYXJnaW47XG4gIG91dGxpbmU6IDA7XG5cbiAgLy8gVGhlc2UgcHJvcGVydGllcyBjYXNjYWRlIGRvd24gdG8gdGhlIHN3aXRjaCB0ZXh0XG4gIGZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICR3aGl0ZTtcblxuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHN3aXRjaCBpbnB1dC4gQXBwbHkgdGhpcyB0byBhbiBgPGlucHV0PmAgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYmFja2dyb3VuZCBhbmQgcGFkZGxlIG9mIGEgc3dpdGNoLiBBcHBseSB0aGlzIHRvIGEgYDxsYWJlbD5gIHdpdGhpbiBhIHN3aXRjaC5cbkBtaXhpbiBzd2l0Y2gtcGFkZGxlIHtcbiAgJHN3aXRjaC13aWR0aDogJHN3aXRjaC1oZWlnaHQgKiAyO1xuICAkcGFkZGxlLWhlaWdodDogJHN3aXRjaC1oZWlnaHQgLSAoJHN3aXRjaC1wYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRzd2l0Y2gtcGFkZGxlLW9mZnNldCAqIDIpO1xuICAkcGFkZGxlLWFjdGl2ZS1vZmZlc3Q6ICRzd2l0Y2gtd2lkdGggLSAkcGFkZGxlLXdpZHRoIC0gJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkc3dpdGNoLXdpZHRoO1xuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIGJvcmRlci1yYWRpdXM6ICRzd2l0Y2gtcmFkaXVzO1xuICBiYWNrZ3JvdW5kOiAkc3dpdGNoLWJhY2tncm91bmQ7XG4gIHRyYW5zaXRpb246ICRzd2l0Y2gtcGFkZGxlLXRyYW5zaXRpb247XG5cbiAgLy8gUmVzZXR0aW5nIHRoZXNlIDxsYWJlbD4gcHJlc2V0cyBzbyB0eXBlIHN0eWxlcyBjYXNjYWRlIGRvd25cbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuXG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAvLyBOZWVkZWQgdG8gb3ZlcnJpZGUgc3BlY2lmaWNpdHlcbiAgaW5wdXQgKyAmIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvLyBUaGUgcGFkZGxlIGl0c2VsZlxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuICAgICN7JGdsb2JhbC1sZWZ0fTogJHN3aXRjaC1wYWRkbGUtb2Zmc2V0O1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICRwYWRkbGUtd2lkdGg7XG4gICAgaGVpZ2h0OiAkcGFkZGxlLWhlaWdodDtcblxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgYm9yZGVyLXJhZGl1czogJHN3aXRjaC1wYWRkbGUtcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtcGFkZGxlLWJhY2tncm91bmQ7XG4gICAgdHJhbnNpdGlvbjogJHN3aXRjaC1wYWRkbGUtdHJhbnNpdGlvbjtcbiAgICBjb250ZW50OiAnJztcbiAgfVxuXG4gIC8vIENoYW5nZSB0aGUgdmlzdWFsIHN0eWxlIHdoZW4gdGhlIHN3aXRjaCBpcyBhY3RpdmVcbiAgaW5wdXQ6Y2hlY2tlZCB+ICYge1xuICAgIGJhY2tncm91bmQ6ICRzd2l0Y2gtYmFja2dyb3VuZC1hY3RpdmU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbmRpY2F0ZSBhIGRpc2FibGVkIHN3aXRjaFxuICBpbnB1dDpkaXNhYmxlZCB+ICYge1xuICAgIGN1cnNvcjogJHN3aXRjaC1jdXJzb3ItZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogJHN3aXRjaC1vcGFjaXR5LWRpc2FibGVkO1xuICB9XG5cbiAgaW5wdXQ6Zm9jdXMgfiAmIHtcbiAgICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG4gIH1cbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIGFjdGl2ZS9pbmFjdGl2ZSB0ZXh0IGluc2lkZSBhIHN3aXRjaC4gQXBwbHkgdGhpcyB0byB0ZXh0IGVsZW1lbnRzIGluc2lkZSB0aGUgc3dpdGNoIGA8bGFiZWw+YC5cbkBtaXhpbiBzd2l0Y2gtdGV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWN0aXZlIHN0YXRlIHRleHQgd2l0aGluIGEgc3dpdGNoLlxuQG1peGluIHN3aXRjaC10ZXh0LWFjdGl2ZSB7XG4gICN7JGdsb2JhbC1sZWZ0fTogOCU7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5hY3RpdmUgc3RhdGUgdGV4dCB3aXRoaW4gYSBzd2l0Y2guXG5AbWl4aW4gc3dpdGNoLXRleHQtaW5hY3RpdmUge1xuICAjeyRnbG9iYWwtcmlnaHR9OiAxNSU7XG5cbiAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsID4gJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4vLy8gQ2hhbmdlcyB0aGUgc2l6ZSBvZiBhIHN3aXRjaCBieSBtb2RpZnlpbmcgdGhlIHNpemUgb2YgdGhlIGJvZHkgYW5kIHBhZGRsZS4gQXBwbHkgdGhpcyB0byBhIHN3aXRjaCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRmb250LXNpemUgWzFyZW1dIC0gRm9udCBzaXplIG9mIGxhYmVsIHRleHQgd2l0aGluIHRoZSBzd2l0Y2guXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzd2l0Y2gtaGVpZ2h0IFsycmVtXSAtIEhlaWdodCBvZiB0aGUgc3dpdGNoIGJvZHkuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRwYWRkbGUtb2Zmc2V0IFswLjI1cmVtXSAtIFNwYWNpbmcgYmV0d2VlbiB0aGUgc3dpdGNoIHBhZGRsZSBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHN3aXRjaCBib2R5LlxuQG1peGluIHN3aXRjaC1zaXplKFxuICAkZm9udC1zaXplOiAxcmVtLFxuICAkc3dpdGNoLWhlaWdodDogMnJlbSxcbiAgJHBhZGRsZS1vZmZzZXQ6IDAuMjVyZW1cbikge1xuXG4gICRzd2l0Y2gtd2lkdGg6ICRzd2l0Y2gtaGVpZ2h0ICogMjtcbiAgJHBhZGRsZS13aWR0aDogJHN3aXRjaC1oZWlnaHQgLSAoJHBhZGRsZS1vZmZzZXQgKiAyKTtcbiAgJHBhZGRsZS1oZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0IC0gKCRwYWRkbGUtb2Zmc2V0ICogMik7XG4gICRwYWRkbGUtYWN0aXZlLW9mZmVzdDogJHN3aXRjaC13aWR0aCAtICRwYWRkbGUtd2lkdGggLSAkcGFkZGxlLW9mZnNldDtcblxuICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuXG4gIC5zd2l0Y2gtcGFkZGxlIHtcbiAgICB3aWR0aDogJHN3aXRjaC13aWR0aDtcbiAgICBoZWlnaHQ6ICRzd2l0Y2gtaGVpZ2h0O1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgfVxuXG4gIC5zd2l0Y2gtcGFkZGxlOjphZnRlciB7XG4gICAgdG9wOiAkcGFkZGxlLW9mZnNldDtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtb2Zmc2V0O1xuICAgIHdpZHRoOiAkcGFkZGxlLXdpZHRoO1xuICAgIGhlaWdodDogJHBhZGRsZS1oZWlnaHQ7XG4gIH1cblxuICBpbnB1dDpjaGVja2VkIH4gLnN3aXRjaC1wYWRkbGU6OmFmdGVyIHtcbiAgICAjeyRnbG9iYWwtbGVmdH06ICRwYWRkbGUtYWN0aXZlLW9mZmVzdDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1zd2l0Y2gge1xuICAvLyBDb250YWluZXIgY2xhc3NcbiAgLnN3aXRjaCB7XG4gICAgaGVpZ2h0OiAkc3dpdGNoLWhlaWdodDtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtY29udGFpbmVyO1xuICB9XG5cbiAgLy8gPGlucHV0PiBlbGVtZW50XG4gIC5zd2l0Y2gtaW5wdXQge1xuICAgIEBpbmNsdWRlIHN3aXRjaC1pbnB1dDtcbiAgfVxuXG4gIC8vIDxsYWJlbD4gZWxlbWVudFxuICAuc3dpdGNoLXBhZGRsZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXBhZGRsZTtcbiAgfVxuXG4gIC8vIEJhc2UgbGFiZWwgdGV4dCBzdHlsZXNcbiAgJXN3aXRjaC10ZXh0IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtdGV4dDtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBsYWJlbCB0ZXh0IHN0eWxlc1xuICAuc3dpdGNoLWFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtYWN0aXZlO1xuICB9XG5cbiAgLy8gSW5hY3RpdmUgbGFiZWwgdGV4dCBzdHlsZXNcbiAgLnN3aXRjaC1pbmFjdGl2ZSB7XG4gICAgQGV4dGVuZCAlc3dpdGNoLXRleHQ7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXRleHQtaW5hY3RpdmU7XG4gIH1cblxuICAvLyBTd2l0Y2ggc2l6ZXNcbiAgLnN3aXRjaC50aW55IHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMCksICRzd2l0Y2gtaGVpZ2h0LXRpbnksICRzd2l0Y2gtcGFkZGxlLW9mZnNldCk7XG4gIH1cblxuICAuc3dpdGNoLnNtYWxsIHtcbiAgICBAaW5jbHVkZSBzd2l0Y2gtc2l6ZShyZW0tY2FsYygxMiksICRzd2l0Y2gtaGVpZ2h0LXNtYWxsLCAkc3dpdGNoLXBhZGRsZS1vZmZzZXQpO1xuICB9XG5cbiAgLnN3aXRjaC5sYXJnZSB7XG4gICAgQGluY2x1ZGUgc3dpdGNoLXNpemUocmVtLWNhbGMoMTYpLCAkc3dpdGNoLWhlaWdodC1sYXJnZSwgJHN3aXRjaC1wYWRkbGUtb2Zmc2V0KTtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLyBzYXNzLWxpbnQ6ZGlzYWJsZSBuby1xdWFsaWZ5aW5nLWVsZW1lbnRzXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGFibGVcbi8vLy9cblxuLy8vIERlZmF1bHQgY29sb3IgZm9yIHRhYmxlIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1iYWNrZ3JvdW5kOiAkd2hpdGUgICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzY2FsZSBmb3IgZGFya2VuaW5nIHRoZSBzdHJpcGVkIHRhYmxlIHJvd3MgYW5kIHRoZSB0YWJsZSBib3JkZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtY29sb3Itc2NhbGU6IDUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBzdHlsZSBmb3IgdGFibGUgYm9yZGVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1ib3JkZXI6IDFweCBzb2xpZCBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgdGFibGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtcGFkZGluZzogcmVtLWNhbGMoOCAxMCAxMCkgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHNjYWxlIGZvciBkYXJrZW5pbmcgdGhlIHRhYmxlIHJvd3Mgb24gaG92ZXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGFibGUtaG92ZXItc2NhbGU6IDIlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBzdGFuZGFyZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWhvdmVyLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2Ygc3RyaXBlZCByb3dzIG9uIGhvdmVyLlxuLy8vIEB0eXBlIExpc3RcbiR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyOiBkYXJrZW4oJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSArICR0YWJsZS1ob3Zlci1zY2FsZSkgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIHRhYmxlcyBhcmUgc3RyaXBlZCBieSBkZWZhdWx0IGFuZCBhbiAudW5zdHJpcGVkIGNsYXNzIGlzIGNyZWF0ZWQuIElmIGBmYWxzZWAsIGEgLnN0cmlwZWQgY2xhc3MgaXMgY3JlYXRlZC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kdGFibGUtaXMtc3RyaXBlZDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3Igc3RyaXBlZCByb3dzLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFibGUtc3RyaXBlZC1iYWNrZ3JvdW5kOiBzbWFydC1zY2FsZSgkdGFibGUtYmFja2dyb3VuZCwgJHRhYmxlLWNvbG9yLXNjYWxlKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIHN0cmlwZSBvbiByb3dzIG9mIHRoZSB0YWJsZXMsIGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGFuZCBmb290ZXIuIElmIGV2ZW4sIHRoZSBldmVuIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgb2RkLCB0aGUgb2RkIHJvd3Mgd2lsbCBoYXZlIGEgYmFja2dyb3VuZCBjb2xvci4gSWYgZW1wdHksIG9yIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRhYmxlIHJvd3Mgd2lsbCBoYXZlIG5vIHN0cmlwaW5nLlxuLy8vIEB0eXBlIEtleXdvcmRcbiR0YWJsZS1zdHJpcGU6IGV2ZW4gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBoZWFkZXIgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWhlYWQtYmFja2dyb3VuZDogc21hcnQtc2NhbGUoJHRhYmxlLWJhY2tncm91bmQsICR0YWJsZS1jb2xvci1zY2FsZSAvIDIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBoZWFkZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtaGVhZC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtaGVhZC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBmb3IgZm9vdGVyIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1mb290LWJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCR0YWJsZS1iYWNrZ3JvdW5kLCAkdGFibGUtY29sb3Itc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiBmb290ZXIgcm93cyBvbiBob3Zlci5cbi8vLyBAdHlwZSBMaXN0XG4kdGFibGUtZm9vdC1yb3ctaG92ZXI6IGRhcmtlbigkdGFibGUtZm9vdC1iYWNrZ3JvdW5kLCAkdGFibGUtaG92ZXItc2NhbGUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBoZWFkZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWJsZS1oZWFkLWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGZvb3Rlci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYmxlLWZvb3QtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgdmFsdWUgZm9yIHNob3dpbmcgdGhlIGhlYWRlciB3aGVuIHVzaW5nIHN0YWNrZWQgdGFibGVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRzaG93LWhlYWRlci1mb3Itc3RhY2tlZDogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHN0YWNrZWQgdGFibGUgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0YWJsZS1zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbkBtaXhpbiAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGU6ICR0YWJsZS1zdHJpcGUpIHtcbiAgdHIge1xuICAgIC8vIElmIHN0cmlwZSBpcyBzZXQgdG8gZXZlbiwgZGFya2VuIHRoZSBldmVuIHJvd3MuXG4gICAgQGlmICRzdHJpcGUgPT0gZXZlbiB7XG4gICAgICAmOm50aC1jaGlsZChldmVuKSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgc3RyaXBlIGlzIHNldCB0byBvZGQsIGRhcmtlbiB0aGUgb2RkIHJvd3MuXG4gICAgQGVsc2UgaWYgJHN0cmlwZSA9PSBvZGQge1xuICAgICAgJjpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1zdHJpcGVkLWJhY2tncm91bmQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiAtemYtdGFibGUtdW5zdHJpcGUoKSB7XG4gIHRyIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICR0YWJsZS1ib3JkZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJhY2tncm91bmQ7XG4gIH1cbn1cblxuQG1peGluIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZTogJHRhYmxlLXN0cmlwZSwgJGlzLXN0cmlwZWQ6ICR0YWJsZS1pcy1zdHJpcGVkKSB7XG4gIHRoZWFkLFxuICB0Ym9keSxcbiAgdGZvb3Qge1xuICAgIGJvcmRlcjogJHRhYmxlLWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgfVxuXG4gIC8vIENhcHRpb25cbiAgY2FwdGlvbiB7XG4gICAgcGFkZGluZzogJHRhYmxlLXBhZGRpbmc7XG4gICAgZm9udC13ZWlnaHQ6ICRnbG9iYWwtd2VpZ2h0LWJvbGQ7XG4gIH1cblxuICAvLyBUYWJsZSBoZWFkXG4gIHRoZWFkIHtcbiAgICBiYWNrZ3JvdW5kOiAkdGFibGUtaGVhZC1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkdGFibGUtaGVhZC1mb250LWNvbG9yO1xuICB9XG5cbiAgLy8gVGFibGUgZm9vdFxuICB0Zm9vdCB7XG4gICAgYmFja2dyb3VuZDogJHRhYmxlLWZvb3QtYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRhYmxlLWZvb3QtZm9udC1jb2xvcjtcbiAgfVxuXG4gIC8vIFRhYmxlIGhlYWQgYW5kIGZvb3RcbiAgdGhlYWQsXG4gIHRmb290IHtcbiAgICAvLyBSb3dzIHdpdGhpbiBoZWFkIGFuZCBmb290XG4gICAgdHIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8gQ2VsbHMgd2l0aGluIGhlYWQgYW5kIGZvb3RcbiAgICB0aCxcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiAkdGFibGUtcGFkZGluZztcbiAgICAgIGZvbnQtd2VpZ2h0OiAkZ2xvYmFsLXdlaWdodC1ib2xkO1xuICAgICAgdGV4dC1hbGlnbjogI3skZ2xvYmFsLWxlZnR9O1xuICAgIH1cbiAgfVxuXG4gIC8vIFRhYmxlIHJvd3NcbiAgdGJvZHkge1xuICAgIHRoLFxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6ICR0YWJsZS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRhYmxlcyBhcmUgc3RyaXBlZFxuICBAaWYgJGlzLXN0cmlwZWQgPT0gdHJ1ZSB7XG4gICAgdGJvZHkge1xuICAgICAgQGluY2x1ZGUgLXpmLXRhYmxlLXN0cmlwZSgkc3RyaXBlKTtcbiAgICB9XG5cbiAgICAmLnVuc3RyaXBlZCB7XG4gICAgICB0Ym9keSB7XG4gICAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS11bnN0cmlwZSgpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmFja2dyb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0YWJsZXMgYXJlIG5vdCBzdHJpcGVkXG4gIEBlbHNlIGlmICRpcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICB0Ym9keSB7XG4gICAgICBAaW5jbHVkZSAtemYtdGFibGUtdW5zdHJpcGUoKTtcbiAgICB9XG5cbiAgICAmLnN0cmlwZWQge1xuICAgICAgdGJvZHkge1xuICAgICAgICBAaW5jbHVkZSAtemYtdGFibGUtc3RyaXBlKCRzdHJpcGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyB0aGUgZ2VuZXJhbCBzdHlsZXMgZm9yIHRhYmxlcy5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzdHJpcGUgWyR0YWJsZS1zdHJpcGVdIC0gVXNlcyBrZXl3b3JkcyBldmVuLCBvZGQsIG9yIG5vbmUgdG8gZGFya2VuIHJvd3Mgb2YgdGhlIHRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBldmVuLlxuLy8vIEBwYXJhbSB7Qm9vbGVhbn0gJG5lc3QgW2ZhbHNlXSAtIE5lZWRlZCBpZiB5b3Ugb25seSB3YW50IHRvIGFwcGx5IHRoaXMgdG8gYSBzcGVjaWZpYyB0YWJsZS5cbkBtaXhpbiB0YWJsZShcbiAgJHN0cmlwZTogJHRhYmxlLXN0cmlwZSxcbiAgJG5lc3Q6IGZhbHNlXG4pIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luO1xuICBib3JkZXItcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cztcblxuICBAaWYgJG5lc3Qge1xuICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBhdC1yb290IHtcbiAgICAgIEBpbmNsdWRlIC16Zi10YWJsZS1jaGlsZHJlbi1zdHlsZXMoJHN0cmlwZSk7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHRoZSBhYmlsaXR5IHRvIGhvcml6b250YWxseSBzY3JvbGwgdGhlIHRhYmxlIHdoZW4gdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIGhvcml6b250YWxseS5cbkBtaXhpbiB0YWJsZS1zY3JvbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93LXg6IGF1dG87XG59XG5cbi8vLyBTbGlnaHRseSBkYXJrZW5zIHRoZSB0YWJsZSByb3dzIG9uIGhvdmVyLlxuQG1peGluIHRhYmxlLWhvdmVyIHtcbiAgdGhlYWQgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgaGVhZGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtaGVhZC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGZvb3QgdHIge1xuICAgIC8vRGFya2VucyB0aGUgdGFibGUgZm9vdGVyIHJvd3Mgb24gaG92ZXIuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtZm9vdC1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgdGJvZHkgdHIge1xuICAgIC8vRGFya2VucyB0aGUgbm9uLXN0cmlwZWQgdGFibGUgcm93cyBvbiBob3Zlci5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctaG92ZXI7XG4gICAgfVxuICB9XG5cbiAgQGlmICR0YWJsZS1pcy1zdHJpcGVkID09IHRydWUge1xuICAgIC8vIERhcmtlbnMgdGhlIGV2ZW4gc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBpZigkdGFibGUtc3RyaXBlID09IGV2ZW4pIHtcbiAgICAgICY6bm90KC51bnN0cmlwZWQpIHRyOm50aC1vZi10eXBlKGV2ZW4pOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLXJvdy1zdHJpcGUtaG92ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGFya2VucyB0aGUgb2RkIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAZWxzZSBpZigkdGFibGUtc3RyaXBlID09IG9kZCkge1xuICAgICAgJjpub3QoLnVuc3RyaXBlZCkgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBlbHNlIGlmICR0YWJsZS1pcy1zdHJpcGVkID09IGZhbHNlIHtcbiAgICAvLyBEYXJrZW5zIHRoZSBldmVuIHN0cmlwZWQgdGFibGUgcm93cy5cbiAgICBAaWYoJHRhYmxlLXN0cmlwZSA9PSBldmVuKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUoZXZlbik6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtcm93LXN0cmlwZS1ob3ZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYXJrZW5zIHRoZSBvZGQgc3RyaXBlZCB0YWJsZSByb3dzLlxuICAgIEBlbHNlIGlmKCR0YWJsZS1zdHJpcGUgPT0gb2RkKSB7XG4gICAgICAmLnN0cmlwZWQgdHI6bnRoLW9mLXR5cGUob2RkKTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1yb3ctc3RyaXBlLWhvdmVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc3RhY2tlZCB0YWJsZS4gVXNlZnVsIGZvciBzbWFsbC1zY3JlZW4gbGF5b3V0cy5cbi8vLyBAcGFyYW0ge0Jvb2xlYW59ICRoZWFkZXIgWyRzaG93LWhlYWRlci1mb3Itc3RhY2tlZF0gLSBTaG93IHRoZSBmaXJzdCB0aCBvZiBoZWFkZXIgd2hlbiBzdGFja2VkLlxuQG1peGluIHRhYmxlLXN0YWNrKCRoZWFkZXI6ICRzaG93LWhlYWRlci1mb3Itc3RhY2tlZCkge1xuICBAaWYgJGhlYWRlciB7XG4gICAgdGhlYWQge1xuICAgICAgdGgge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIHRoZWFkIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGZvb3Qge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICB0cixcbiAgdGgsXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIHRkIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRhYmxlKCRuZXN0OiBmYWxzZSkge1xuICB0YWJsZSB7XG4gICAgQGluY2x1ZGUgdGFibGUoJG5lc3Q6ICRuZXN0KTtcbiAgfVxuXG4gIHRhYmxlLnN0YWNrIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0YWJsZS1zdGFjay1icmVha3BvaW50IGRvd24pIHtcbiAgICAgIEBpbmNsdWRlIHRhYmxlLXN0YWNrO1xuICAgIH1cbiAgfVxuXG4gIHRhYmxlLnNjcm9sbCB7XG4gICAgQGluY2x1ZGUgdGFibGUtc2Nyb2xsO1xuICB9XG5cbiAgdGFibGUuaG92ZXIge1xuICAgIEBpbmNsdWRlIHRhYmxlLWhvdmVyO1xuICB9XG5cbiAgLnRhYmxlLXNjcm9sbCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbkBpbXBvcnQgJ21hdGgnO1xuXG4kY29udHJhc3Qtd2FybmluZ3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLy9cbi8vLyBAZ3JvdXAgZnVuY3Rpb25zXG4vLy8vXG5cbi8vLyBDaGVja3MgdGhlIGx1bWluYW5jZSBvZiBgJGNvbG9yYC5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIGNoZWNrIHRoZSBsdW1pbmFuY2Ugb2YuXG4vLy9cbi8vLyBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbHVtaW5hbmNlIG9mIGAkY29sb3JgLlxuQGZ1bmN0aW9uIGNvbG9yLWx1bWluYW5jZSgkY29sb3IpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICRyZ2JhOiByZWQoJGNvbG9yKSwgZ3JlZW4oJGNvbG9yKSwgYmx1ZSgkY29sb3IpO1xuICAkcmdiYTI6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggMyB7XG4gICAgJHJnYjogbnRoKCRyZ2JhLCAkaSk7XG4gICAgJHJnYjogJHJnYiAvIDI1NTtcblxuICAgICRyZ2I6IGlmKCRyZ2IgPCAwLjAzOTI4LCAkcmdiIC8gMTIuOTIsIHBvdygoJHJnYiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpKTtcblxuICAgICRyZ2JhMjogYXBwZW5kKCRyZ2JhMiwgJHJnYik7XG4gIH1cblxuICBAcmV0dXJuIDAuMjEyNiAqIG50aCgkcmdiYTIsIDEpICsgMC43MTUyICogbnRoKCRyZ2JhMiwgMikgKyAwLjA3MjIgKiBudGgoJHJnYmEyLCAzKTtcbn1cblxuLy8vIENoZWNrcyB0aGUgY29udHJhc3QgcmF0aW8gb2YgdHdvIGNvbG9ycy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjEgLSBGaXJzdCBjb2xvciB0byBjb21wYXJlLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvcjIgLSBTZWNvbmQgY29sb3IgdG8gY29tcGFyZS5cbi8vL1xuLy8vIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBjb250cmFzdCByYXRpbyBvZiB0aGUgY29tcGFyZWQgY29sb3JzLlxuQGZ1bmN0aW9uIGNvbG9yLWNvbnRyYXN0KCRjb2xvcjEsICRjb2xvcjIpIHtcbiAgLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vTGVhVmVyb3UvY29udHJhc3QtcmF0aW8vYmxvYi9naC1wYWdlcy9jb2xvci5qc1xuICAvLyBGb3JtdWxhOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICRsdW1pbmFuY2UxOiBjb2xvci1sdW1pbmFuY2UoJGNvbG9yMSkgKyAwLjA1O1xuICAkbHVtaW5hbmNlMjogY29sb3ItbHVtaW5hbmNlKCRjb2xvcjIpICsgMC4wNTtcbiAgJHJhdGlvOiAkbHVtaW5hbmNlMSAvICRsdW1pbmFuY2UyO1xuXG4gIEBpZiAkbHVtaW5hbmNlMiA+ICRsdW1pbmFuY2UxIHtcbiAgICAkcmF0aW86IDEgLyAkcmF0aW87XG4gIH1cblxuICAkcmF0aW86IHJvdW5kKCRyYXRpbyAqIDEwKSAvIDEwO1xuXG4gIEByZXR1cm4gJHJhdGlvO1xufVxuXG4vLy8gQ2hlY2tzIHRoZSBsdW1pbmFuY2Ugb2YgYCRiYXNlYCwgYW5kIHJldHVybnMgdGhlIGNvbG9yIGZyb20gYCRjb2xvcnNgIChsaXN0IG9mIGNvbG9ycykgdGhhdCBoYXMgdGhlIG1vc3QgY29udHJhc3QuXG4vLy9cbi8vLyBAcGFyYW0ge0NvbG9yfSAkYmFzZSAtIENvbG9yIHRvIGNoZWNrIGx1bWluYW5jZS5cbi8vLyBAcGFyYW0ge0xpc3R9ICRjb2xvcnMgWygkd2hpdGUsICRibGFjayldIC0gQ29sb3JzIHRvIGNvbXBhcmUuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICR0b2xlcmFuY2UgWyRnbG9iYWwtY29sb3ItcGljay1jb250cmFzdC10b2xlcmFuY2VdIC0gQ29udHJhc3QgdG9sZXJhbmNlLlxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSB0aGUgY29sb3IgZnJvbSBgJGNvbG9yc2AgKGxpc3Qgb2YgY29sb3JzKSB0aGF0IGhhcyB0aGUgbW9zdCBjb250cmFzdC5cbkBmdW5jdGlvbiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYXNlLCAkY29sb3JzOiAoJHdoaXRlLCAkYmxhY2spLCAkdG9sZXJhbmNlOiAkZ2xvYmFsLWNvbG9yLXBpY2stY29udHJhc3QtdG9sZXJhbmNlKSB7XG4gICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAxKSk7XG4gICRiZXN0OiBudGgoJGNvbG9ycywgMSk7XG5cbiAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCBsZW5ndGgoJGNvbG9ycykge1xuICAgICRjdXJyZW50LWNvbnRyYXN0OiBjb2xvci1jb250cmFzdCgkYmFzZSwgbnRoKCRjb2xvcnMsICRpKSk7XG4gICAgQGlmICgkY3VycmVudC1jb250cmFzdCAtICRjb250cmFzdCA+ICR0b2xlcmFuY2UpIHtcbiAgICAgICRjb250cmFzdDogY29sb3ItY29udHJhc3QoJGJhc2UsIG50aCgkY29sb3JzLCAkaSkpO1xuICAgICAgJGJlc3Q6IG50aCgkY29sb3JzLCAkaSk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkY29udHJhc3Qtd2FybmluZ3MgYW5kICRjb250cmFzdCA8IDMpIHtcbiAgICBAd2FybiBcIkNvbnRyYXN0IHJhdGlvIG9mICN7JGJlc3R9IG9uICN7JGJhc2V9IGlzIHByZXR0eSBiYWQsIGp1c3QgI3skY29udHJhc3R9XCI7XG4gIH1cblxuICBAcmV0dXJuICRiZXN0O1xufVxuXG4vLy8gU2NhbGVzIGEgY29sb3IgdG8gYmUgZGFya2VyIGlmIGl0J3MgbGlnaHQsIG9yIGxpZ2h0ZXIgaWYgaXQncyBkYXJrLiBVc2UgdGhpcyBmdW5jdGlvbiB0byB0aW50IGEgY29sb3IgYXBwcm9wcmlhdGUgdG8gaXRzIGxpZ2h0bmVzcy5cbi8vL1xuLy8vIEBwYXJhbSB7Q29sb3J9ICRjb2xvciAtIENvbG9yIHRvIHNjYWxlLlxuLy8vIEBwYXJhbSB7UGVyY2VudGFnZX0gJHNjYWxlIFs1JV0gLSBBbW91bnQgdG8gc2NhbGUgdXAgb3IgZG93bi5cbi8vLyBAcGFyYW0ge1BlcmNlbnRhZ2V9ICR0aHJlc2hvbGQgWzQwJV0gLSBUaHJlc2hvbGQgb2YgbGlnaHRuZXNzIHRvIGNoZWNrIGFnYWluc3QuXG4vLy9cbi8vLyBAcmV0dXJucyB7Q29sb3J9IEEgc2NhbGVkIGNvbG9yLlxuQGZ1bmN0aW9uIHNtYXJ0LXNjYWxlKCRjb2xvciwgJHNjYWxlOiA1JSwgJHRocmVzaG9sZDogNDAlKSB7XG4gIEBpZiBsaWdodG5lc3MoJGNvbG9yKSA+ICR0aHJlc2hvbGQge1xuICAgICRzY2FsZTogLSRzY2FsZTtcbiAgfVxuICBAcmV0dXJuIHNjYWxlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJHNjYWxlKTtcbn1cblxuLy8vIEdldCBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHBhcmFtIHtrZXl9IGNvbG9yIGtleSBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuLy8vXG4vLy8gQHJldHVybnMge0NvbG9yfSBjb2xvciBmcm9tIGZvdW5kYXRpb24tcGFsZXR0ZVxuQGZ1bmN0aW9uIGdldC1jb2xvcigka2V5KSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCAka2V5KSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsICRrZXkpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAZXJyb3IgJ2dpdmVuICRrZXkgaXMgbm90IGF2YWlsYWJsZSBpbiAkZm91bmRhdGlvbi1wYWxldHRlJztcbiAgfVxufVxuXG4vLy8gVHJhbnNmZXJzIHRoZSBjb2xvcnMgaW4gdGhlIGAkZm91bmRhdGlvbi1wYWxldHRlYCBtYXAgaW50byB2YXJpYWJsZXMsIHN1Y2ggYXMgYCRwcmltYXJ5LWNvbG9yYCBhbmQgYCRzZWNvbmRhcnktY29sb3JgLiBDYWxsIHRoaXMgbWl4aW4gYmVsb3cgdGhlIEdsb2JhbCBzZWN0aW9uIG9mIHlvdXIgc2V0dGluZ3MgZmlsZSB0byBwcm9wZXJseSBtaWdyYXRlIHlvdXIgY29kZWJhc2UuXG5AbWl4aW4gYWRkLWZvdW5kYXRpb24tY29sb3JzKCkge1xuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgcHJpbWFyeSkge1xuICAgICRwcmltYXJ5LWNvbG9yOiBtYXAtZ2V0KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHByaW1hcnkpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRwcmltYXJ5LWNvbG9yOiAjMTc3OWJhICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHNlY29uZGFyeSkge1xuICAgICRzZWNvbmRhcnktY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgc2Vjb25kYXJ5KSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc2Vjb25kYXJ5LWNvbG9yOiAjNzY3Njc2ICFnbG9iYWw7XG4gIH1cbiAgQGlmIG1hcC1oYXMta2V5KCRmb3VuZGF0aW9uLXBhbGV0dGUsIHN1Y2Nlc3MpIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogbWFwLWdldCgkZm91bmRhdGlvbi1wYWxldHRlLCBzdWNjZXNzKSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkc3VjY2Vzcy1jb2xvcjogIzNhZGI3NiAhZ2xvYmFsO1xuICB9XG4gIEBpZiBtYXAtaGFzLWtleSgkZm91bmRhdGlvbi1wYWxldHRlLCB3YXJuaW5nKSB7XG4gICAgJHdhcm5pbmctY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgd2FybmluZykgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJHdhcm5pbmctY29sb3I6ICNmZmFlMDAgIWdsb2JhbDtcbiAgfVxuICBAaWYgbWFwLWhhcy1rZXkoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpIHtcbiAgICAkYWxlcnQtY29sb3I6IG1hcC1nZXQoJGZvdW5kYXRpb24tcGFsZXR0ZSwgYWxlcnQpICFnbG9iYWw7XG4gIH0gQGVsc2Uge1xuICAgICRhbGVydC1jb2xvcjogI2NjNGIzNyAhZ2xvYmFsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgYmFkZ2Vcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtYmFja2dyb3VuZDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHRleHQgY29sb3IgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJhZGdlLWNvbG9yOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGUgdGV4dCBjb2xvciBmb3IgYmFkZ2VzLlxuLy8vIEB0eXBlIENvbG9yXG4kYmFkZ2UtY29sb3ItYWx0OiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvcmluZyBjbGFzc2VzLiBBIG1hcCBvZiBjbGFzc2VzIHRvIG91dHB1dCBpbiB5b3VyIENTUywgbGlrZSBgLnNlY29uZGFyeWAsIGAuc3VjY2Vzc2AsIGFuZCBzbyBvbi5cbi8vLyBAdHlwZSBNYXBcbiRiYWRnZS1wYWxldHRlOiAkZm91bmRhdGlvbi1wYWxldHRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGluc2lkZSBiYWRnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtcGFkZGluZzogMC4zZW0gIWRlZmF1bHQ7XG5cbi8vLyBNaW5pbXVtIHdpZHRoIG9mIGEgYmFkZ2UuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYmFkZ2UtbWlud2lkdGg6IDIuMWVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IHNpemUgZm9yIGJhZGdlcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRiYWRnZS1mb250LXNpemU6IDAuNnJlbSAhZGVmYXVsdDtcblxuLy8vIEdlbmVyYXRlcyB0aGUgYmFzZSBzdHlsZXMgZm9yIGEgYmFkZ2UuXG5AbWl4aW4gYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogJGJhZGdlLW1pbndpZHRoO1xuICBwYWRkaW5nOiAkYmFkZ2UtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgZm9udC1zaXplOiAkYmFkZ2UtZm9udC1zaXplO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJhZGdlIHtcbiAgLmJhZGdlIHtcbiAgICBAaW5jbHVkZSBiYWRnZTtcblxuICAgIGJhY2tncm91bmQ6ICRiYWRnZS1iYWNrZ3JvdW5kO1xuICAgIGNvbG9yOiAkYmFkZ2UtY29sb3I7XG5cbiAgICBAZWFjaCAkbmFtZSwgJGNvbG9yIGluICRiYWRnZS1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG4gICAgICAgIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRjb2xvciwgKCRiYWRnZS1jb2xvciwgJGJhZGdlLWNvbG9yLWFsdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGJyZWFkY3J1bWJzXG4vLy8vXG5cbi8vLyBNYXJnaW4gYXJvdW5kIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLW1hcmdpbjogMCAwICRnbG9iYWwtbWFyZ2luIDAgIWRlZmF1bHQ7XG5cbi8vLyBGb250IHNpemUgb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTEpICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBDb2xvclxuJGJyZWFkY3J1bWJzLWl0ZW0tY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGFjdGl2ZSBicmVhZGNydW1iIGxpbmsuXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWN1cnJlbnQ6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIE9wYWNpdHkgb2YgZGlzYWJsZWQgYnJlYWRjcnVtYiBsaW5rcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBNYXJnaW4gYmV0d2VlbiBicmVhZGNydW1iIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJGJyZWFkY3J1bWJzLWl0ZW0tbWFyZ2luOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBtYWtlcyBicmVhZGNydW1iIGxpbmtzIHVwcGVyY2FzZS5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2U6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBJZiBgdHJ1ZWAsIGFkZHMgYSBzZXBlcmF0b3IgYmV0d2VlbiBicmVhZGNydW1iIGxpbmtzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvcjogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gSWYgaXQgZXhpc3RzICRicmVhZGNydW1icy1pdGVtLXNsYXNoIGlzIHVzZWQgdG8gYnVpbGQgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLiBTZWUgdGhlIGRvY3VtZW50YXRpb24uXG5AaWYgdmFyaWFibGUtZXhpc3RzKGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gpIHtcbiAgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zbGFzaDtcbn1cblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW06ICcvJyAhZGVmYXVsdDtcblxuLy8vIFVzZWQgY2hhcmFjdGVyIGZvciB0aGUgYnJlYWRjcnVtYiBzZXBhcmF0b3IgaW4gcnRsIG1vZGUuXG4vLy8gQHR5cGUgQ29udGVudFxuJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yLWl0ZW0tcnRsOiAnXFxcXCcgIWRlZmF1bHQ7XG5cbi8vLyBDb2xvciBvZiBicmVhZGNydW1iIGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1jb2xvcjogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLyBJZiBpdCBleGlzdHMgJGJyZWFkY3J1bWJzLWl0ZW0tc2xhc2gtY29sb3IgaXMgdXNlZCB0byBidWlsZCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbi5cbkBpZiB2YXJpYWJsZS1leGlzdHMoYnJlYWRjcnVtYnMtaXRlbS1zbGFzaC1jb2xvcikge1xuICAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I6ICRicmVhZGNydW1icy1pdGVtLXNsYXNoLWNvbG9yO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgYnJlYWRjcnVtYnMgY29udGFpbmVyLCBhbG9uZyB3aXRoIHRoZSBzdHlsZXMgZm9yIHRoZSBgPGxpPmAgYW5kIGA8YT5gIGVsZW1lbnRzIGluc2lkZSBvZiBpdC5cbkBtaXhpbiBicmVhZGNydW1icy1jb250YWluZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luOiAkYnJlYWRjcnVtYnMtbWFyZ2luO1xuICBsaXN0LXN0eWxlOiBub25lO1xuXG4gIC8vIEl0ZW0gd3JhcHBlclxuICBsaSB7XG4gICAgZmxvYXQ6ICN7JGdsb2JhbC1sZWZ0fTtcblxuICAgIGZvbnQtc2l6ZTogJGJyZWFkY3J1bWJzLWl0ZW0tZm9udC1zaXplO1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvci1jdXJyZW50O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgIEBpZiAkYnJlYWRjcnVtYnMtaXRlbS11cHBlcmNhc2Uge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICBAaWYgJGJyZWFkY3J1bWJzLWl0ZW0tc2VwYXJhdG9yIHtcbiAgICAgIC8vIE5lZWQgdG8gZXNjYXBlIHRoZSBiYWNrc2xhc2hcbiAgICAgICRzZXBhcmF0b3I6IGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gJ2x0cicsICRicmVhZGNydW1icy1pdGVtLXNlcGFyYXRvci1pdGVtLCAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItaXRlbS1ydGwpO1xuXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIG1hcmdpbjogMCAkYnJlYWRjcnVtYnMtaXRlbS1tYXJnaW47XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICBjb250ZW50OiAkc2VwYXJhdG9yO1xuICAgICAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1zZXBhcmF0b3ItY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICRicmVhZGNydW1icy1pdGVtLW1hcmdpbjtcbiAgICB9XG4gIH1cblxuICAvLyBQYWdlIGxpbmtzXG4gIGEge1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYnMtaXRlbS1jb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWJyZWFkY3J1bWJzIHtcbiAgLmJyZWFkY3J1bWJzIHtcbiAgICBAaW5jbHVkZSBicmVhZGNydW1icy1jb250YWluZXI7XG5cbiAgICAuZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRicmVhZGNydW1icy1pdGVtLWNvbG9yLWRpc2FibGVkO1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBjYWxsb3V0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3IuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZmFkZSB2YWx1ZSBmb3IgY2FsbG91dCBiYWNrZ3JvdW5kcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRjYWxsb3V0LWJhY2tncm91bmQtZmFkZTogODUlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgc3R5bGUgZm9yIGNhbGxvdXRzLlxuLy8vIEB0eXBlIExpc3RcbiRjYWxsb3V0LWJvcmRlcjogMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAwLjI1KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm90dG9tIG1hcmdpbiBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FsbG91dC1tYXJnaW46IDAgMCAxcmVtIDAgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgQ2FsbG91dCBwYWRkaW5ncy5cbi8vLyBAdHlwZSBNYXBcbiRjYWxsb3V0LXNpemVzOiAoXG4gIHNtYWxsOiAwLjVyZW0sXG4gIGRlZmF1bHQ6IDFyZW0sXG4gIGxhcmdlOiAzcmVtLFxuKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBjb2xvciBmb3IgY2FsbG91dHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGZvbnQgY29sb3IgZm9yIGNhbGxvdXRzLCBpZiB0aGUgY2FsbG91dCBoYXMgYSBkYXJrIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgQ29sb3JcbiRjYWxsb3V0LWZvbnQtY29sb3ItYWx0OiAkYm9keS1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgcmFkaXVzIGZvciBjYWxsb3V0cy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhbGxvdXQtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEFtb3VudCB0byB0aW50IGxpbmtzIHVzZWQgd2l0aGluIGNvbG9yZWQgcGFuZWxzLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbi8vLyBAdHlwZSBOdW1iZXIgfCBCb29sZWFuXG4kY2FsbG91dC1saW5rLXRpbnQ6IDMwJSAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzaWMgc3R5bGVzIGZvciBhIGNhbGxvdXQsIGluY2x1ZGluZyBwYWRkaW5nIGFuZCBtYXJnaW4uXG5AbWl4aW4gY2FsbG91dC1iYXNlKCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJGNhbGxvdXQtbWFyZ2luO1xuICBwYWRkaW5nOiBtYXAtZ2V0KCRjYWxsb3V0LXNpemVzLCBkZWZhdWx0KTtcblxuICBib3JkZXI6ICRjYWxsb3V0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGNhbGxvdXQtcmFkaXVzO1xuXG4gIC8vIFJlc3BlY3QgdGhlIHBhZGRpbmcsIGZvb2wuXG4gID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLy8gR2VuZXJhdGUgcXVpY2sgc3R5bGVzIGZvciBhIGNhbGxvdXQgdXNpbmcgYSBzaW5nbGUgY29sb3IgYXMgYSBiYXNlbGluZS5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgWyRjYWxsb3V0LWJhY2tncm91bmRdIC0gQ29sb3IgdG8gdXNlLlxuQG1peGluIGNhbGxvdXQtc3R5bGUoJGNvbG9yOiAkY2FsbG91dC1iYWNrZ3JvdW5kKSB7XG4gICRiYWNrZ3JvdW5kOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6ICRjYWxsb3V0LWJhY2tncm91bmQtZmFkZSk7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGNvbG9yOiBjb2xvci1waWNrLWNvbnRyYXN0KCRiYWNrZ3JvdW5kLCAoJGNhbGxvdXQtZm9udC1jb2xvciwgJGNhbGxvdXQtZm9udC1jb2xvci1hbHQpKTtcbn1cblxuQG1peGluIGNhbGxvdXQtc2l6ZSgkcGFkZGluZykge1xuICBwYWRkaW5nLXRvcDogJHBhZGRpbmc7XG4gIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmc7XG4gIHBhZGRpbmctbGVmdDogJHBhZGRpbmc7XG59XG5cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhbGxvdXQuXG4vLy8gQHBhcmFtIHtDb2xvcn0gJGNvbG9yIFskY2FsbG91dC1iYWNrZ3JvdW5kXSAtIENvbG9yIHRvIHVzZS5cbkBtaXhpbiBjYWxsb3V0KCRjb2xvcjogJGNhbGxvdXQtYmFja2dyb3VuZCkge1xuICBAaW5jbHVkZSBjYWxsb3V0LWJhc2U7XG4gIEBpbmNsdWRlIGNhbGxvdXQtc3R5bGUoJGNvbG9yKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FsbG91dCB7XG4gIC5jYWxsb3V0IHtcbiAgICBAaW5jbHVkZSBjYWxsb3V0O1xuXG4gICAgQGVhY2ggJG5hbWUsICRjb2xvciBpbiAkZm91bmRhdGlvbi1wYWxldHRlIHtcbiAgICAgICYuI3skbmFtZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXN0eWxlKCRjb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGVhY2ggJHNpemUsICRwYWRkaW5nIGluIG1hcC1yZW1vdmUoJGNhbGxvdXQtc2l6ZXMsIGRlZmF1bHQpIHtcbiAgICAgICYuI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBjYWxsb3V0LXNpemUoJHBhZGRpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGNhcmRcbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvci5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBmb250IGNvbG9yIGZvciBjYXJkcy5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZm9udC1jb2xvcjogJGJvZHktZm9udC1jb2xvciAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJGNhcmQtZGl2aWRlci1iYWNrZ3JvdW5kOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIHN0eWxlLlxuLy8vIEB0eXBlIExpc3RcbiRjYXJkLWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjYXJkIHNoYWRvdy5cbi8vLyBAdHlwZSBMaXN0XG4kY2FyZC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciByYWRpdXMuXG4vLy8gQHR5cGUgTGlzdFxuJGNhcmQtYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kY2FyZC1wYWRkaW5nOiAkZ2xvYmFsLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvdHRvbSBtYXJnaW4uXG4vLy8gQHR5cGUgbnVtYmVyXG4kY2FyZC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgY29udGFpbmVyLlxuLy8vIEBwYXJhbSB7Q29sb3J9ICRiYWNrZ3JvdW5kIC0gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0NvbG9yfSAkY29sb3IgLSBmb250IGNvbG9yIG9mIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIC0gQm90dG9tIG1hcmdpbiBvZiB0aGUgY2FyZC5cbi8vLyBAcGFyYW0ge0xpc3R9ICRib3JkZXIgLSBCb3JkZXIgYXJvdW5kIHRoZSBjYXJkLlxuLy8vIEBwYXJhbSB7TGlzdH0gJHJhZGl1cyAtIGJvcmRlciByYWRpdXMgb2YgdGhlIGNhcmQuXG4vLy8gQHBhcmFtIHtMaXN0fSAkc2hhZG93IC0gYm94IHNoYWRvdyBvZiB0aGUgY2FyZC5cbkBtaXhpbiBjYXJkLWNvbnRhaW5lcihcbiAgJGJhY2tncm91bmQ6ICRjYXJkLWJhY2tncm91bmQsXG4gICRjb2xvcjogJGNhcmQtZm9udC1jb2xvcixcbiAgJG1hcmdpbjogJGNhcmQtbWFyZ2luLWJvdHRvbSxcbiAgJGJvcmRlcjogJGNhcmQtYm9yZGVyLFxuICAkcmFkaXVzOiAkY2FyZC1ib3JkZXItcmFkaXVzLFxuICAkc2hhZG93OiAkY2FyZC1zaGFkb3dcbikge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZmxleC1ncm93OiAxO1xuICB9XG5cbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcblxuICBib3JkZXI6ICRib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG5cbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3c7XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY29sb3I6ICRjb2xvcjtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgZGl2aWRlci5cbkBtaXhpbiBjYXJkLWRpdmlkZXIoXG4gICRiYWNrZ3JvdW5kOiAkY2FyZC1kaXZpZGVyLWJhY2tncm91bmQsXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAwIDEgYXV0bztcbiAgfVxuXG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNhcmQgc2VjdGlvbi5cbkBtaXhpbiBjYXJkLXNlY3Rpb24oXG4gICRwYWRkaW5nOiAkY2FyZC1wYWRkaW5nXG4pIHtcbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZmxleDogMSAwIGF1dG87XG4gIH1cblxuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tY2FyZCB7XG4gIC5jYXJkIHtcbiAgICBAaW5jbHVkZSBjYXJkLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC5jYXJkLWRpdmlkZXIge1xuICAgIEBpbmNsdWRlIGNhcmQtZGl2aWRlcjtcbiAgfVxuXG4gIC5jYXJkLXNlY3Rpb24ge1xuICAgIEBpbmNsdWRlIGNhcmQtc2VjdGlvbjtcbiAgfVxuXG4gIC8vIEZvciBJRSAxMSAtIEZsZXhidWdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHdhbHRvbi9mbGV4YnVncy9pc3N1ZXMvNzVcbiAgLmNhcmQtaW1hZ2Uge1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duXG4vLy8vXG5cbi8vLyBQYWRkaW5nIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBMaXN0XG4kZHJvcGRvd24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgZm9yIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tYmFja2dyb3VuZDogJGJvZHktYmFja2dyb3VuZCAhZGVmYXVsdDtcblxuLy8vIEJvcmRlciBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWJvcmRlcjogMXB4IHNvbGlkICRtZWRpdW0tZ3JheSAhZGVmYXVsdDtcblxuLy8vIEZvbnQgc2l6ZSBmb3IgZHJvcGRvd24gcGFuZXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3duLWZvbnQtc2l6ZTogMXJlbSAhZGVmYXVsdDtcblxuLy8vIFdpZHRoIGZvciBkcm9wZG93biBwYW5lcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bi13aWR0aDogMzAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCb3JkZXIgcmFkaXVzIGRyb3Bkb3duIHBhbmVzLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3duLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBTaXplcyBmb3IgZHJvcGRvd24gcGFuZXMuIEVhY2ggc2l6ZSBpcyBhIENTUyBjbGFzcyB5b3UgY2FuIGFwcGx5LlxuLy8vIEB0eXBlIE1hcFxuJGRyb3Bkb3duLXNpemVzOiAoXG4gIHRpbnk6IDEwMHB4LFxuICBzbWFsbDogMjAwcHgsXG4gIGxhcmdlOiA0MDBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBBcHBsaWVzIHN0eWxlcyBmb3IgYSBiYXNpYyBkcm9wZG93bi5cbkBtaXhpbiBkcm9wZG93bi1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwO1xuXG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgd2lkdGg6ICRkcm9wZG93bi13aWR0aDtcbiAgcGFkZGluZzogJGRyb3Bkb3duLXBhZGRpbmc7XG5cbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBib3JkZXI6ICRkcm9wZG93bi1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRkcm9wZG93bi1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1iYWNrZ3JvdW5kO1xuXG4gIGZvbnQtc2l6ZTogJGRyb3Bkb3duLWZvbnQtc2l6ZTtcblxuXG4gIC8vIEFsbG93IGFuIGludGVybWl0dGVudCBzdGF0ZSB0byBkbyBwb3NpdGlvbmluZyBiZWZvcmUgbWFraW5nIHZpc2libGUuXG4gICYuaXMtb3BlbmluZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAmLmlzLW9wZW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tZHJvcGRvd24ge1xuICAuZHJvcGRvd24tcGFuZSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tY29udGFpbmVyO1xuICB9XG5cbiAgQGVhY2ggJG5hbWUsICRzaXplIGluICRkcm9wZG93bi1zaXplcyB7XG4gICAgLmRyb3Bkb3duLXBhbmUge1xuICAgICAgJi4jeyRuYW1lfSB7XG4gICAgICAgIHdpZHRoOiAkc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBwYWdpbmF0aW9uXG4vLy8vXG5cbi8vLyBGb250IHNpemUgb2YgcGFnaW5hdGlvbiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTQpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIG9mIHRoZSBwYWdpbmF0aW9uIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWNvbG9yOiAkYmxhY2sgIWRlZmF1bHQ7XG5cbi8vLyBQYWRkaW5nIGluc2lkZSBvZiBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nOiByZW0tY2FsYygzIDEwKSAhZGVmYXVsdDtcblxuLy8vIFJpZ2h0IG1hcmdpbiB0byBzZXBhcmF0ZSBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24taXRlbS1zcGFjaW5nOiByZW0tY2FsYygxKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcmFkaXVzIGZvciBwYWdpbmF0aW9uIGl0ZW1zLlxuLy8vIEB0eXBlIE51bWJlclxuJHBhZ2luYXRpb24tcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtcyBvbiBob3Zlci5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWhvdmVyOiAkbGlnaHQtZ3JheSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgcGFnaW5hdGlvbiBpdGVtIGZvciB0aGUgY3VycmVudCBwYWdlLlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtY3VycmVudDogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIHRoZSBwYWdpbmF0aW9uIGl0ZW0gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXG4vLy8gQHR5cGUgQ29sb3JcbiRwYWdpbmF0aW9uLWl0ZW0tY29sb3ItY3VycmVudDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhIGRpc2FibGVkIHBhZ2luYXRpb24gaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHBhZ2luYXRpb24taXRlbS1jb2xvci1kaXNhYmxlZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGhlIGVsbGlwc2lzIGluIGEgcGFnaW5hdGlvbiBtZW51LlxuLy8vIEB0eXBlIENvbG9yXG4kcGFnaW5hdGlvbi1lbGxpcHNpcy1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gSWYgYGZhbHNlYCwgZG9uJ3QgZGlzcGxheSBwYWdlIG51bWJlciBsaW5rcyBvbiBtb2JpbGUsIG9ubHkgbmV4dC9wcmV2aW91cyBsaW5rc1xuLy8vIGFuZCBvcHRpb25hbGx5IGN1cnJlbnQgcGFnZSBudW1iZXIuXG4vLy8gQHR5cGUgQm9vbGVhblxuJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIG51bWJlciBvbiBtb2JpbGUgZXZlbiBpZiBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zYCBpcyBzZXQgdG8gYGZhbHNlYC5cbi8vLyBUaGlzIHBhcmFtZXRlciB3aWxsIG9ubHkgb3ZlcnJpZGUgdGhlIHZpc2liaWxpdHkgc2V0dGluZyBvZiB0aGUgY3VycmVudCBpdGVtIGZvciBgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zOiBmYWxzZTtgLFxuLy8vIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgY3VycmVudCBwYWdlIG51bWJlciB2aXNpYmlsaXR5IHdoZW4gYCRwYWdpbmF0aW9uLW1vYmlsZS1pdGVtc2AgaXMgc2V0IHRvIGB0cnVlYC5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1tb2JpbGUtY3VycmVudC1pdGVtOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYXJyb3dzIGFyZSBhZGRlZCB0byB0aGUgbmV4dCBhbmQgcHJldmlvdXMgbGlua3Mgb2YgcGFnaW5hdGlvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kcGFnaW5hdGlvbi1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgcHJldmlvdXMgYXJyb3cgd2hlbiBgJHBhZ2luYXRpb24tYXJyb3dzYCBpcyBgdHJ1ZWBcbi8vLyBAdHlwZSBTdHJpbmdcbiRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzOiAnXFwwMEFCJyAhZGVmYXVsdDtcblxuLy8vIENvbnRlbnQgZm9yIHRoZSBuZXh0IGFycm93IHdoZW4gYCRwYWdpbmF0aW9uLWFycm93c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kcGFnaW5hdGlvbi1hcnJvdy1uZXh0OiAnXFwwMEJCJyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIHBhZ2luYXRpb24gY29udGFpbmVyLiBBcHBseSB0aGlzIHRvIGEgYDx1bD5gLlxuQG1peGluIHBhZ2luYXRpb24tY29udGFpbmVyIChcbiAgJG1hcmdpbi1ib3R0b206ICRwYWdpbmF0aW9uLW1hcmdpbi1ib3R0b20sXG4gICRmb250LXNpemU6ICRwYWdpbmF0aW9uLWZvbnQtc2l6ZSxcbiAgJHNwYWNpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tc3BhY2luZyxcbiAgJHJhZGl1czogJHBhZ2luYXRpb24tcmFkaXVzLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWl0ZW0tY29sb3IsXG4gICRwYWRkaW5nOiAkcGFnaW5hdGlvbi1pdGVtLXBhZGRpbmcsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkcGFnaW5hdGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXJcbikge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMDtcbiAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbi1ib3R0b207XG5cbiAgLy8gTGlzdCBpdGVtXG4gIGxpIHtcbiAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG5cbiAgICBAaWYgJHBhZ2luYXRpb24tbW9iaWxlLWl0ZW1zIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgJjpsYXN0LWNoaWxkLFxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cblxuICAgICAgQGlmICRwYWdpbmF0aW9uLW1vYmlsZS1jdXJyZW50LWl0ZW0ge1xuICAgICAgICAmLmN1cnJlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBsaW5rc1xuICBhLFxuICBidXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gICAgY29sb3I6ICRjb2xvcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtaG92ZXI7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBpdGVtLiBBcHBseSB0aGlzIHRvIGFuIGA8YT5gLlxuQG1peGluIHBhZ2luYXRpb24taXRlbS1jdXJyZW50IChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGJhY2tncm91bmQtY3VycmVudDogJHBhZ2luYXRpb24taXRlbS1iYWNrZ3JvdW5kLWN1cnJlbnQsXG4gICRjb2xvci1jdXJyZW50OiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWN1cnJlbnRcbikge1xuICBwYWRkaW5nOiAkcGFkZGluZztcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtY3VycmVudDtcbiAgY29sb3I6ICRjb2xvci1jdXJyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSBkaXNhYmxlZCBwYWdpbmF0aW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gYW4gYDxhPmAuXG5AbWl4aW4gcGFnaW5hdGlvbi1pdGVtLWRpc2FibGVkIChcbiAgJHBhZGRpbmc6ICRwYWdpbmF0aW9uLWl0ZW0tcGFkZGluZyxcbiAgJGNvbG9yOiAkcGFnaW5hdGlvbi1pdGVtLWNvbG9yLWRpc2FibGVkXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBlbGxpcHNpcyBmb3IgdXNlIGluIGEgcGFnaW5hdGlvbiBsaXN0LlxuQG1peGluIHBhZ2luYXRpb24tZWxsaXBzaXMgKFxuICAkcGFkZGluZzogJHBhZ2luYXRpb24taXRlbS1wYWRkaW5nLFxuICAkY29sb3I6ICRwYWdpbmF0aW9uLWVsbGlwc2lzLWNvbG9yXG4pIHtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG4gIGNvbnRlbnQ6ICdcXDIwMjYnO1xuICBjb2xvcjogJGNvbG9yO1xufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1wYWdpbmF0aW9uIHtcbiAgLnBhZ2luYXRpb24ge1xuICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tY29udGFpbmVyO1xuXG4gICAgLmN1cnJlbnQge1xuICAgICAgQGluY2x1ZGUgcGFnaW5hdGlvbi1pdGVtLWN1cnJlbnQ7XG4gICAgfVxuXG4gICAgLmRpc2FibGVkIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24taXRlbS1kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAuZWxsaXBzaXM6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIHBhZ2luYXRpb24tZWxsaXBzaXM7XG4gICAgfVxuICB9XG5cbiAgQGlmICRwYWdpbmF0aW9uLWFycm93cyB7XG4gICAgLnBhZ2luYXRpb24tcHJldmlvdXMgYTo6YmVmb3JlLFxuICAgIC5wYWdpbmF0aW9uLXByZXZpb3VzLmRpc2FibGVkOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDAuNXJlbTtcbiAgICAgIGNvbnRlbnQ6ICRwYWdpbmF0aW9uLWFycm93LXByZXZpb3VzO1xuICAgIH1cblxuICAgIC5wYWdpbmF0aW9uLW5leHQgYTo6YWZ0ZXIsXG4gICAgLnBhZ2luYXRpb24tbmV4dC5kaXNhYmxlZDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1sZWZ0fTogMC41cmVtO1xuICAgICAgY29udGVudDogJHBhZ2luYXRpb24tYXJyb3ctbmV4dDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0b29sdGlwXG4vLy8vXG5cbi8vLyBEZWZhdWx0IGN1cnNvciBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIEtleXdvcmRcbiRoYXMtdGlwLWN1cnNvcjogaGVscCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCB3ZWlnaHQgb2YgdGhlIGRlZmluZWQgdGVybS5cbi8vLyBAdHlwZSBLZXl3b3JkIHwgTnVtYmVyXG4kaGFzLXRpcC1mb250LXdlaWdodDogJGdsb2JhbC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYm9yZGVyIGJvdHRvbSBvZiB0aGUgZGVmaW5lZCB0ZXJtLlxuLy8vIEB0eXBlIExpc3RcbiRoYXMtdGlwLWJvcmRlci1ib3R0b206IGRvdHRlZCAxcHggJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgY29sb3Igb2YgdGhlIHRvb2x0aXAgYmFja2dyb3VuZC5cbi8vLyBAdHlwZSBDb2xvclxuJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcjogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBjb2xvciBvZiB0aGUgdG9vbHRpcCBmb250LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9vbHRpcC1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIHRoZSB0b29sdGlwIGJhY2tncm91bmQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9vbHRpcC1wYWRkaW5nOiAwLjc1cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBtYXggd2lkdGggZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtbWF4LXdpZHRoOiAxMHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZm9udCBzaXplIG9mIHRoZSB0b29sdGlwIHRleHQuIEJ5IGRlZmF1bHQsIHdlIHJlY29tbWVuZCBhIHNtYWxsZXIgZm9udCBzaXplIHRoYW4gdGhlIGJvZHkgY29weS5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLWZvbnQtc2l6ZTogJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIHdpZHRoIGZvciB0b29sdGlwcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC13aWR0aDogMC43NXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGlwIGhlaWdodCBmb3IgdG9vbHRpcHMuIFRoaXMgaXMgaGVscGZ1bCBmb3IgY2FsY3VsYXRpbmcgdGhlIGRpc3RhbmNlIG9mIHRoZSB0b29sdGlwIGZyb20gdGhlIHRvb2x0aXAgd29yZC5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0b29sdGlwLXBpcC1oZWlnaHQ6ICR0b29sdGlwLXBpcC13aWR0aCAqIDAuODY2ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRvb2x0aXBzLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvb2x0aXAtcmFkaXVzOiAkZ2xvYmFsLXJhZGl1cyAhZGVmYXVsdDtcblxuQG1peGluIGhhcy10aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBib3JkZXItYm90dG9tOiAkaGFzLXRpcC1ib3JkZXItYm90dG9tO1xuICBmb250LXdlaWdodDogJGhhcy10aXAtZm9udC13ZWlnaHQ7XG4gIGN1cnNvcjogJGhhcy10aXAtY3Vyc29yO1xufVxuXG5AbWl4aW4gdG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiBjYWxjKDEwMCUgKyAjeyR0b29sdGlwLXBpcC1oZWlnaHR9KTtcbiAgei1pbmRleDogMTIwMDtcblxuICBtYXgtd2lkdGg6ICR0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogJHRvb2x0aXAtcGFkZGluZztcblxuICBib3JkZXItcmFkaXVzOiAkdG9vbHRpcC1yYWRpdXM7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJhY2tncm91bmQtY29sb3I7XG4gIGZvbnQtc2l6ZTogJHRvb2x0aXAtZm9udC1zaXplO1xuICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cblxuICAmLmJvdHRvbSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHVwKTtcbiAgICAgIGJvdHRvbTogMTAwJTtcbiAgICB9XG5cbiAgICAmLmFsaWduLWNlbnRlcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnRvcCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGRvd24pO1xuICAgICAgdG9wOiAxMDAlO1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgIH1cblxuICAgICYuYWxpZ24tY2VudGVyOjpiZWZvcmUge1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkdG9vbHRpcC1waXAtd2lkdGgsICR0b29sdGlwLWJhY2tncm91bmQtY29sb3IsIHJpZ2h0KTtcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLnJpZ2h0IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCR0b29sdGlwLXBpcC13aWR0aCwgJHRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgbGVmdCk7XG4gICAgICByaWdodDogMTAwJTtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgfVxuXG4gICAgJi5hbGlnbi1jZW50ZXI6OmJlZm9yZSB7XG4gICAgICBib3R0b206IGF1dG87XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLXRvcDo6YmVmb3JlIHtcbiAgICBib3R0b206IGF1dG87XG4gICAgdG9wOiAxMCU7XG4gIH1cblxuICAmLmFsaWduLWJvdHRvbTo6YmVmb3JlIHtcbiAgICBib3R0b206IDEwJTtcbiAgICB0b3A6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLWxlZnQ6OmJlZm9yZSB7XG4gICAgbGVmdDogMTAlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodDo6YmVmb3JlIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIHJpZ2h0OiAxMCU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdG9vbHRpcCB7XG4gIC5oYXMtdGlwIHtcbiAgICBAaW5jbHVkZSBoYXMtdGlwO1xuICB9XG5cbiAgLnRvb2x0aXAge1xuICAgIEBpbmNsdWRlIHRvb2x0aXA7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb25cbi8vLy9cblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY2NvcmRpb24gZ3JvdXAuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gSWYgYHRydWVgLCBhZGRzIHBsdXMgYW5kIG1pbnVzIGljb25zIHRvIHRoZSBzaWRlIG9mIGVhY2ggYWNjb3JkaW9uIHRpdGxlLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRhY2NvcmRpb24tcGx1c21pbnVzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQ29udGVudCBmb3IgdGhlIHBsdXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLXBsdXMtY29udGVudDogJ1xcMDAyQicgIWRlZmF1bHQ7XG5cbi8vLyBDb250ZW50IGZvciB0aGUgbWludXMgaWNvbiB3aGVuIGAkYWNjb3JkaW9uLXBsdXNtaW51c2AgaXMgYHRydWVgXG4vLy8gQHR5cGUgU3RyaW5nXG4kYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ6ICdcXDIwMTMnICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIGFjY29yZGlvbiB0aXRsZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZTogcmVtLWNhbGMoMTIpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIGZvciBpdGVtcyBpbiBhIE1lbnUuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24taXRlbS1jb2xvcjogJHByaW1hcnktY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb24gaG92ZXIgZm9yIGl0ZW1zIGluIGEgTWVudS5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIG9mIGFuIGFjY29yZGlvbiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24taXRlbS1wYWRkaW5nOiAxLjI1cmVtIDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IGJvcmRlciBjb2xvciBvZiB0YWIgY29udGVudC5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbi1jb250ZW50LWJvcmRlcjogMXB4IHNvbGlkICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGFuIGFjY29yZGlvbiBjb250YWluZXIuIEFwcGx5IHRoaXMgdG8gdGhlIHNhbWUgZWxlbWVudCB0aGF0IGdldHMgYGRhdGEtYWNjb3JkaW9uYC5cbkBtaXhpbiBhY2NvcmRpb24tY29udGFpbmVyIChcbiAgJGJhY2tncm91bmQ6ICRhY2NvcmRpb24tYmFja2dyb3VuZFxuKSB7XG4gIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cbiAgJltkaXNhYmxlZF0ge1xuICAgIC5hY2NvcmRpb24tdGl0bGUge1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgYWNjb3JkaW9uIGl0ZW0uIEFwcGx5IHRoaXMgdG8gdGhlIGxpc3QgaXRlbSB3aXRoaW4gYW4gYWNjb3JkaW9uIHVsLlxuQG1peGluIGFjY29yZGlvbi1pdGVtIHtcbiAgJjpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgJGdsb2JhbC1yYWRpdXMgMCAwO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAkZ2xvYmFsLXJhZGl1cyAkZ2xvYmFsLXJhZGl1cztcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSB0aXRsZSBvZiBhbiBhY2NvcmRpb24gaXRlbS4gQXBwbHkgdGhpcyB0byB0aGUgbGluayB3aXRoaW4gYW4gYWNjb3JkaW9uIGl0ZW0uXG5AbWl4aW4gYWNjb3JkaW9uLXRpdGxlIChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24taXRlbS1wYWRkaW5nLFxuICAkZm9udC1zaXplOiAkYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkYWNjb3JkaW9uLWl0ZW0tY29sb3IsXG4gICRib3JkZXI6ICRhY2NvcmRpb24tY29udGVudC1ib3JkZXIsXG4gICRiYWNrZ3JvdW5kLWhvdmVyOiAkYWNjb3JkaW9uLWl0ZW0tYmFja2dyb3VuZC1ob3ZlclxuKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICRwYWRkaW5nO1xuXG4gIGJvcmRlcjogJGJvcmRlcjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkOm5vdCguaXMtYWN0aXZlKSA+ICYge1xuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXI7XG4gICAgYm9yZGVyLXJhZGl1czogMCAwICRnbG9iYWwtcmFkaXVzICRnbG9iYWwtcmFkaXVzO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtaG92ZXI7XG4gIH1cblxuICBAaWYgJGFjY29yZGlvbi1wbHVzbWludXMge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgICBtYXJnaW4tdG9wOiAtMC41cmVtO1xuICAgICAgY29udGVudDogJGFjY29yZGlvbi1wbHVzLWNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLmlzLWFjdGl2ZSA+ICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAkYWNjb3JkaW9uLW1pbnVzLWNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYWNjb3JkaW9uIGNvbnRlbnQuIEFwcGx5IHRoaXMgdG8gdGhlIGNvbnRlbnQgcGFuZSBiZWxvdyBhbiBhY2NvcmRpb24gaXRlbSdzIHRpdGxlLlxuQG1peGluIGFjY29yZGlvbi1jb250ZW50IChcbiAgJHBhZGRpbmc6ICRhY2NvcmRpb24tY29udGVudC1wYWRkaW5nLFxuICAkYm9yZGVyOiAkYWNjb3JkaW9uLWNvbnRlbnQtYm9yZGVyLFxuICAkYmFja2dyb3VuZDogJGFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQsXG4gICRjb2xvcjogJGFjY29yZGlvbi1jb250ZW50LWNvbG9yXG4pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcGFkZGluZzogJHBhZGRpbmc7XG5cbiAgYm9yZGVyOiAkYm9yZGVyO1xuICBib3JkZXItYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcblxuICBjb2xvcjogJGNvbG9yO1xuXG4gIDpsYXN0LWNoaWxkID4gJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbiB7XG4gIC5hY2NvcmRpb24ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1jb250YWluZXI7XG4gIH1cblxuICAuYWNjb3JkaW9uLWl0ZW0ge1xuICAgIEBpbmNsdWRlIGFjY29yZGlvbi1pdGVtO1xuICB9XG5cbiAgLmFjY29yZGlvbi10aXRsZSB7XG4gICAgQGluY2x1ZGUgYWNjb3JkaW9uLXRpdGxlO1xuICB9XG5cbiAgLmFjY29yZGlvbi1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBhY2NvcmRpb24tY29udGVudDtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG1lZGlhLW9iamVjdFxuLy8vL1xuXG4vLy8gQm90dG9tIG1hcmdpbiBvZiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tOiAkZ2xvYmFsLW1hcmdpbiAhZGVmYXVsdDtcblxuLy8vIExlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgb24gc2VjdGlvbnMgd2l0aGluIGEgbWVkaWEgb2JqZWN0LlxuLy8vIEB0eXBlIE51bWJlclxuJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZzogJGdsb2JhbC1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gV2lkdGggb2YgaW1hZ2VzIHdpdGhpbiBhIG1lZGlhIG9iamVjdCwgd2hlbiB0aGUgb2JqZWN0IGlzIHN0YWNrZWQgdmVydGljYWxseS4gU2V0IHRvICdhdXRvJyB0byB1c2UgdGhlIGltYWdlJ3MgbmF0dXJhbCB3aWR0aC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZWRpYW9iamVjdC1pbWFnZS13aWR0aC1zdGFja2VkOiAxMDAlICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgbWVkaWEgb2JqZWN0IGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3QtY29udGFpbmVyIHtcbiAgZGlzcGxheTogaWYoJGdsb2JhbC1mbGV4Ym94LCBmbGV4LCBibG9jayk7XG4gIG1hcmdpbi1ib3R0b206ICRtZWRpYW9iamVjdC1tYXJnaW4tYm90dG9tO1xuXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB9XG5cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAmLnN0YWNrLWZvci0jeyQtemYtemVyby1icmVha3BvaW50fSB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCQtemYtemVyby1icmVha3BvaW50IG9ubHkpIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHNlY3Rpb25zIHdpdGhpbiBhIG1lZGlhIG9iamVjdC5cbi8vLyBAcGFyYW0ge051bWJlcn0gJHBhZGRpbmcgWyRtZWRpYW9iamVjdC1zZWN0aW9uLXBhZGRpbmddIC0gUGFkZGluZyBiZXR3ZWVuIHNlY3Rpb25zLlxuQG1peGluIG1lZGlhLW9iamVjdC1zZWN0aW9uKCRwYWRkaW5nOiAkbWVkaWFvYmplY3Qtc2VjdGlvbi1wYWRkaW5nKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuICB9XG4gIEBlbHNlIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIH1cblxuICAmOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLSN7JGdsb2JhbC1yaWdodH06ICRwYWRkaW5nO1xuICB9XG5cbiAgJjpsYXN0LWNoaWxkOm5vdCg6bnRoLWNoaWxkKDIpKSB7XG4gICAgcGFkZGluZy0jeyRnbG9iYWwtbGVmdH06ICRwYWRkaW5nO1xuICB9XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5zdGFjay1mb3ItI3skLXpmLXplcm8tYnJlYWtwb2ludH0gJiB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkLXpmLXplcm8tYnJlYWtwb2ludCBvbmx5KSB7XG4gICAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgJi5tYWluLXNlY3Rpb24ge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICYubWlkZGxlIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgJi5ib3R0b20ge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRvIHN0YWNrIHNlY3Rpb25zIG9mIGEgbWVkaWEgb2JqZWN0LiBBcHBseSB0aGlzIHRvIHRoZSBzZWN0aW9uIGVsZW1lbnRzLCBub3QgdGhlIGNvbnRhaW5lci5cbkBtaXhpbiBtZWRpYS1vYmplY3Qtc3RhY2sge1xuICBwYWRkaW5nOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogJG1lZGlhb2JqZWN0LXNlY3Rpb24tcGFkZGluZztcblxuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBpbWcge1xuICAgIHdpZHRoOiAkbWVkaWFvYmplY3QtaW1hZ2Utd2lkdGgtc3RhY2tlZDtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1tZWRpYS1vYmplY3Qge1xuICAubWVkaWEtb2JqZWN0IHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3QtY29udGFpbmVyO1xuICB9XG5cbiAgLm1lZGlhLW9iamVjdC1zZWN0aW9uIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1vYmplY3Qtc2VjdGlvbjtcbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIG9yYml0XG4vLy8vXG5cbi8vLyBEZWZhdWx0IGNvbG9yIGZvciBPcmJpdCdzIGJ1bGxldHMuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1idWxsZXQtYmFja2dyb3VuZDogJG1lZGl1bS1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBhY3RpdmUgY29sb3IgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBDb2xvclxuJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTogJGRhcmstZ3JheSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlhbWV0ZXIgZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtZGlhbWV0ZXI6IDEuMnJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgbWFyZ2luIGJldHdlZW4gT3JiaXQncyBidWxsZXRzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWJ1bGxldC1tYXJnaW46IDAuMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgZGlzdGFuY2UgZnJvbSBzbGlkZSByZWdpb24gZm9yIE9yYml0J3MgYnVsbGV0cy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDogMC44cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3R0b20gbWFyZ2luIGZyb20gT3JiaXQncyBidWxsZXRzIHRvIHdoYXRldmVyIGNvbnRlbnQgbWF5IGx1cmsgYmVsb3cgaXQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kb3JiaXQtYnVsbGV0LW1hcmdpbi1ib3R0b206IDAuOHJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIENvbG9yXG4kb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kOiByZ2JhKCRibGFjaywgMC41KSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBmb3IgT3JiaXQncyBjYXB0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNhcHRpb24tcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBmb3IgT3JiaXQncyBjb250cm9scyB3aGVuIGhvdmVyZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRvcmJpdC1jb250cm9sLWJhY2tncm91bmQtaG92ZXI6IHJnYmEoJGJsYWNrLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBwYWRkaW5nIGZvciBPcmJpdCdzIGNvbnRyb2xzLlxuLy8vIEB0eXBlIE51bWJlclxuJG9yYml0LWNvbnRyb2wtcGFkZGluZzogMXJlbSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgei1pbmRleCBmb3IgT3JiaXQncyBjb250cm9scy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvcmJpdC1jb250cm9sLXppbmRleDogMTAgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIG91dGVyIE9yYml0IHdyYXBwZXIuIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5uZXIgT3JiaXQgc2xpZGUgY29udGFpbmVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY29udGFpbmVyYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDsgLy8gUHJldmVudCBGT1VDIGJ5IG5vdCBzaG93aW5nIHVudGlsIEpTIHNldHMgaGVpZ2h0XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgaW5kaXZpZHVhbCBzbGlkZXMgb2YgYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtc2xpZGVgIGNsYXNzLlxuQG1peGluIG9yYml0LXNsaWRlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLm5vLW1vdGlvbnVpIHtcbiAgICAmLmlzLWFjdGl2ZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gb3JiaXQtZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgc2xpZGUgY29udGFpbmluZyBhbiBpbWFnZS4gVGhlc2Ugc3R5bGVzIGFyZSB1c2VkIG9uIHRoZSBgLm9yYml0LWltYWdlYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBvcmJpdCBzbGlkZSBjYXB0aW9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtY2FwdGlvbmAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogJG9yYml0LWNhcHRpb24tcGFkZGluZztcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kO1xuICBjb2xvcjogY29sb3ItcGljay1jb250cmFzdCgkb3JiaXQtY2FwdGlvbi1iYWNrZ3JvdW5kKTtcbn1cblxuLy8vIEFkZHMgYmFzZSBzdHlsZXMgZm9yIHRoZSBuZXh0L3ByZXZpb3VzIGJ1dHRvbnMgaW4gYW4gT3JiaXQgc2xpZGVyLiBUaGVzZSBzdHlsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBgLm9yYml0LW5leHRgIGFuZCBgLm9yYml0LXByZXZpb3VzYCBjbGFzc2VzIGluIHRoZSBkZWZhdWx0IENTUy5cbkBtaXhpbiBvcmJpdC1jb250cm9sIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBAaW5jbHVkZSB2ZXJ0aWNhbC1jZW50ZXI7XG4gIHotaW5kZXg6ICRvcmJpdC1jb250cm9sLXppbmRleDtcbiAgcGFkZGluZzogJG9yYml0LWNvbnRyb2wtcGFkZGluZztcbiAgY29sb3I6ICR3aGl0ZTtcblxuICAmOmhvdmVyLFxuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWNvbnRyb2wtYmFja2dyb3VuZC1ob3ZlcjtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1wcmV2aW91c2AgY2xhc3MuXG5AbWl4aW4gb3JiaXQtcHJldmlvdXMge1xuICAjeyRnbG9iYWwtbGVmdH06IDA7XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIE9yYml0IG5leHQgYnV0dG9uLiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgb24gdGhlIGAub3JiaXQtbmV4dGAgY2xhc3MuXG5AbWl4aW4gb3JiaXQtbmV4dCB7XG4gICN7JGdsb2JhbC1sZWZ0fTogYXV0bztcbiAgI3skZ2xvYmFsLXJpZ2h0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIGNvbnRhaW5lciBvZiBPcmJpdCBidWxsZXRzLiAvLy8gQWRkcyBzdHlsZXMgZm9yIHRoZSBPcmJpdCBwcmV2aW91cyBidXR0b24uIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBvbiB0aGUgYC5vcmJpdC1idWxsZXRzYCBjbGFzcy5cbkBtaXhpbiBvcmJpdC1idWxsZXRzIHtcbiAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6ICRvcmJpdC1idWxsZXQtbWFyZ2luLXRvcDtcbiAgbWFyZ2luLWJvdHRvbTogJG9yYml0LWJ1bGxldC1tYXJnaW4tYm90dG9tO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgYnV0dG9uIHtcbiAgICB3aWR0aDogJG9yYml0LWJ1bGxldC1kaWFtZXRlcjtcbiAgICBoZWlnaHQ6ICRvcmJpdC1idWxsZXQtZGlhbWV0ZXI7XG4gICAgbWFyZ2luOiAkb3JiaXQtYnVsbGV0LW1hcmdpbjtcblxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkb3JiaXQtYnVsbGV0LWJhY2tncm91bmQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRvcmJpdC1idWxsZXQtYmFja2dyb3VuZC1hY3RpdmU7XG4gICAgfVxuXG4gICAgJi5pcy1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG9yYml0LWJ1bGxldC1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tb3JiaXQge1xuICAub3JiaXQge1xuICAgIEBpbmNsdWRlIG9yYml0LXdyYXBwZXI7XG4gIH1cblxuICAub3JiaXQtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jb250YWluZXI7XG4gIH1cblxuICAub3JiaXQtc2xpZGUge1xuICAgIEBpbmNsdWRlIG9yYml0LXNsaWRlO1xuICB9XG5cbiAgLm9yYml0LWZpZ3VyZSB7XG4gICAgQGluY2x1ZGUgb3JiaXQtZmlndXJlO1xuICB9XG5cbiAgLm9yYml0LWltYWdlIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1pbWFnZTtcbiAgfVxuXG4gIC5vcmJpdC1jYXB0aW9uIHtcbiAgICBAaW5jbHVkZSBvcmJpdC1jYXB0aW9uO1xuICB9XG5cbiAgJW9yYml0LWNvbnRyb2wge1xuICAgIEBpbmNsdWRlIG9yYml0LWNvbnRyb2w7XG4gIH1cblxuICAub3JiaXQtcHJldmlvdXMge1xuICAgIEBleHRlbmQgJW9yYml0LWNvbnRyb2w7XG4gICAgQGluY2x1ZGUgb3JiaXQtcHJldmlvdXM7XG4gIH1cblxuICAub3JiaXQtbmV4dCB7XG4gICAgQGV4dGVuZCAlb3JiaXQtY29udHJvbDtcbiAgICBAaW5jbHVkZSBvcmJpdC1uZXh0O1xuICB9XG5cbiAgLm9yYml0LWJ1bGxldHMge1xuICAgIEBpbmNsdWRlIG9yYml0LWJ1bGxldHM7XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCByZXNwb25zaXZlLWVtYmVkXG4vLy8vXG5cbi8vLyBNYXJnaW4gYmVsb3cgYSByZXNwb25zaXZlIGVtYmVkIGNvbnRhaW5lci5cbi8vLyBAdHlwZSBOdW1iZXJcbiRyZXNwb25zaXZlLWVtYmVkLW1hcmdpbi1ib3R0b206IHJlbS1jYWxjKDE2KSAhZGVmYXVsdDtcblxuLy8vIEFzcGVjdCByYXRpb3MgdXNlZCB0byBkZXRlcm1pbmUgcGFkZGluZy1ib3R0b20gb2YgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXJzLlxuLy8vIEB0eXBlIE1hcFxuJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zOiAoXG4gIGRlZmF1bHQ6IDQgYnkgMyxcbiAgd2lkZXNjcmVlbjogMTYgYnkgOSxcbikgIWRlZmF1bHQ7XG5cbi8vLyBDcmVhdGVzIGEgcmVzcG9uc2l2ZSBlbWJlZCBjb250YWluZXIuXG4vLy8gQHBhcmFtIHtTdHJpbmd8TGlzdH0gJHJhdGlvIFtkZWZhdWx0XSAtIFJhdGlvIG9mIHRoZSBjb250YWluZXIuIENhbiBiZSBhIGtleSBmcm9tIHRoZSBgJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zYCBtYXAgb3IgYSBsaXN0IGZvcm1hdHRlZCBhcyBgeCBieSB5YC5cbkBtaXhpbiByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCkge1xuICBAaWYgdHlwZS1vZigkcmF0aW8pID09ICdzdHJpbmcnIHtcbiAgICAkcmF0aW86IG1hcC1nZXQoJHJlc3BvbnNpdmUtZW1iZWQtcmF0aW9zLCAkcmF0aW8pO1xuICB9XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcmVzcG9uc2l2ZS1lbWJlZC1tYXJnaW4tYm90dG9tO1xuICBwYWRkaW5nLWJvdHRvbTogcmF0aW8tdG8tcGVyY2VudGFnZSgkcmF0aW8pO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGlmcmFtZSxcbiAgb2JqZWN0LFxuICBlbWJlZCxcbiAgdmlkZW8ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgI3skZ2xvYmFsLWxlZnR9OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1yZXNwb25zaXZlLWVtYmVkIHtcbiAgLnJlc3BvbnNpdmUtZW1iZWQsXG4gIC5mbGV4LXZpZGVvIHtcbiAgICBAaW5jbHVkZSByZXNwb25zaXZlLWVtYmVkKCRyYXRpbzogZGVmYXVsdCk7XG5cbiAgICAkcmF0aW9zOiBtYXAtcmVtb3ZlKCRyZXNwb25zaXZlLWVtYmVkLXJhdGlvcyxkZWZhdWx0KTtcblxuICAgIEBlYWNoICRuYW1lLCAkcmF0aW8gaW4gJHJhdGlvcyB7XG4gICAgICAmLiN7JG5hbWV9IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IHJhdGlvLXRvLXBlcmNlbnRhZ2UoJHJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCB0YWJzXG4vLy8vXG5cbi8vLyBEZWZhdWx0IG1hcmdpbiBvZiB0aGUgdGFiIGJhci5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBGb250IGNvbG9yIG9mIHRhYiBpdGVtLlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIEFjdGl2ZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGFiIGJhci5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1iYWNrZ3JvdW5kLWFjdGl2ZTogJGxpZ2h0LWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBBY3RpdmUgZm9udCBjb2xvciBvZiB0YWIgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJHRhYi1hY3RpdmUtY29sb3I6ICRwcmltYXJ5LWNvbG9yICFkZWZhdWx0O1xuXG4vLy8gRm9udCBzaXplIG9mIHRhYiBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiR0YWItaXRlbS1mb250LXNpemU6IHJlbS1jYWxjKDEyKSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvbiBob3ZlciBmb3IgaXRlbXMgaW4gYSBNZW51LlxuJHRhYi1pdGVtLWJhY2tncm91bmQtaG92ZXI6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIERlZmF1bHQgcGFkZGluZyBvZiBhIHRhYiBpdGVtLlxuLy8vIEB0eXBlIE51bWJlclxuJHRhYi1pdGVtLXBhZGRpbmc6IDEuMjVyZW0gMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtYmFja2dyb3VuZDogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCBib3JkZXIgY29sb3Igb2YgdGFiIGNvbnRlbnQuXG4vLy8gQHR5cGUgQ29sb3JcbiR0YWItY29udGVudC1ib3JkZXI6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdGFiLWNvbnRlbnQtY29sb3I6ICRib2R5LWZvbnQtY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBEZWZhdWx0IHBhZGRpbmcgZm9yIHRhYiBjb250ZW50LlxuLy8vIEB0eXBlIE51bWJlciB8IExpc3RcbiR0YWItY29udGVudC1wYWRkaW5nOiAxcmVtICFkZWZhdWx0O1xuXG4vLy8gQWRkcyBzdHlsZXMgZm9yIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byBhIGA8dWw+YC5cbkBtaXhpbiB0YWJzLWNvbnRhaW5lciAoXG4gICRtYXJnaW46ICR0YWItbWFyZ2luLFxuICAkYmFja2dyb3VuZDogJHRhYi1iYWNrZ3JvdW5kLFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIG1hcmdpbjogJG1hcmdpbjtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYmFja2dyb3VuZDogJGJhY2tncm91bmQ7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRhaW5lciB0byBoYXZlIHZlcnRpY2FsIHRhYnMuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGFpbmVyKClgLlxuQG1peGluIHRhYnMtY29udGFpbmVyLXZlcnRpY2FsIHtcbiAgPiBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciB0aGUgbGlua3Mgd2l0aGluIGEgdGFiIGNvbnRhaW5lci4gQXBwbHkgdGhpcyB0byB0aGUgYDxsaT5gIGVsZW1lbnRzIGluc2lkZSBhIHRhYiBjb250YWluZXIuXG5AbWl4aW4gdGFicy10aXRsZSAoXG4gICRwYWRkaW5nOiAkdGFiLWl0ZW0tcGFkZGluZyxcbiAgJGZvbnQtc2l6ZTogJHRhYi1pdGVtLWZvbnQtc2l6ZSxcbiAgJGNvbG9yOiAkdGFiLWNvbG9yLFxuICAkY29sb3ItYWN0aXZlOiAkdGFiLWFjdGl2ZS1jb2xvcixcbiAgJGJhY2tncm91bmQtaG92ZXI6ICR0YWItaXRlbS1iYWNrZ3JvdW5kLWhvdmVyLFxuICAkYmFja2dyb3VuZC1hY3RpdmU6ICR0YWItYmFja2dyb3VuZC1hY3RpdmVcbikge1xuICBmbG9hdDogI3skZ2xvYmFsLWxlZnR9O1xuXG4gID4gYSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGNvbG9yO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZC1ob3ZlcjtcbiAgICAgIGNvbG9yOiBzY2FsZS1jb2xvcigkY29sb3IsICRsaWdodG5lc3M6IC0xNCUpO1xuICAgIH1cblxuICAgICY6Zm9jdXMsXG4gICAgJlthcmlhLXNlbGVjdGVkPSd0cnVlJ10ge1xuICAgICAgYmFja2dyb3VuZDogJGJhY2tncm91bmQtYWN0aXZlO1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgdGhlIHdyYXBwZXIgdGhhdCBzdXJyb3VuZHMgYSB0YWIgZ3JvdXAncyBjb250ZW50IHBhbmVzLlxuQG1peGluIHRhYnMtY29udGVudCAoXG4gICRiYWNrZ3JvdW5kOiAkdGFiLWNvbnRlbnQtYmFja2dyb3VuZCxcbiAgJGNvbG9yOiAkdGFiLWNvbnRlbnQtY29sb3IsXG4gICRib3JkZXItY29sb3I6ICR0YWItY29udGVudC1ib3JkZXJcbikge1xuICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICBib3JkZXItdG9wOiAwO1xuICBiYWNrZ3JvdW5kOiAkYmFja2dyb3VuZDtcbiAgY29sb3I6ICRjb2xvcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTtcbn1cblxuLy8vIEF1Z21lbnRzIGEgdGFiIGNvbnRlbnQgY29udGFpbmVyIHRvIGhhdmUgYSB2ZXJ0aWNhbCBzdHlsZSwgYnkgc2hpZnRpbmcgdGhlIGJvcmRlciBhcm91bmQuIFVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggYHRhYnMtY29udGVudCgpYC5cbkBtaXhpbiB0YWJzLWNvbnRlbnQtdmVydGljYWwgKFxuICAkYm9yZGVyLWNvbG9yOiAkdGFiLWNvbnRlbnQtYm9yZGVyXG4pIHtcbiAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogMDtcbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhbiBpbmRpdmlkdWFsIHRhYiBjb250ZW50IHBhbmVsIHdpdGhpbiB0aGUgdGFiIGNvbnRlbnQgY29udGFpbmVyLlxuQG1peGluIHRhYnMtcGFuZWwgKFxuICAkcGFkZGluZzogJHRhYi1jb250ZW50LXBhZGRpbmdcbikge1xuICBkaXNwbGF5OiBub25lO1xuICBwYWRkaW5nOiAkcGFkZGluZztcblxuICAmLmlzLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGFicyB7XG4gIC50YWJzIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lcjtcbiAgfVxuXG4gIC8vIFZlcnRpY2FsXG4gIC50YWJzLnZlcnRpY2FsIHtcbiAgICBAaW5jbHVkZSB0YWJzLWNvbnRhaW5lci12ZXJ0aWNhbDtcbiAgfVxuXG4gIC8vIFNpbXBsZVxuICAudGFicy5zaW1wbGUge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcmltYXJ5IGNvbG9yXG4gIC50YWJzLnByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWNvbG9yO1xuXG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJHByaW1hcnktY29sb3IpO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHNtYXJ0LXNjYWxlKCRwcmltYXJ5LWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudGFicy10aXRsZSB7XG4gICAgQGluY2x1ZGUgdGFicy10aXRsZTtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudDtcbiAgfVxuXG4gIC50YWJzLWNvbnRlbnQudmVydGljYWwge1xuICAgIEBpbmNsdWRlIHRhYnMtY29udGVudC12ZXJ0aWNhbDtcbiAgfVxuXG4gIC50YWJzLXBhbmVsIHtcbiAgICBAaW5jbHVkZSB0YWJzLXBhbmVsO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGh1bWJuYWlsXG4vLy8vXG5cbi8vLyBCb3JkZXIgYXJvdW5kIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgQm9yZGVyXG4kdGh1bWJuYWlsLWJvcmRlcjogNHB4IHNvbGlkICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIEJvdHRvbSBtYXJnaW4gZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGh1bWJuYWlsLW1hcmdpbi1ib3R0b206ICRnbG9iYWwtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyB1bmRlciB0aHVtYm5haWwgaW1hZ2VzLlxuLy8vIEB0eXBlIFNoYWRvd1xuJHRodW1ibmFpbC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKCRibGFjaywgMC4yKSAhZGVmYXVsdDtcblxuLy8vIEJveCBzaGFkb3cgdW5kZXIgdGh1bWJuYWlsIGltYWdlcy5cbi8vLyBAdHlwZSBTaGFkb3dcbiR0aHVtYm5haWwtc2hhZG93LWhvdmVyOiAwIDAgNnB4IDFweCByZ2JhKCRwcmltYXJ5LWNvbG9yLCAwLjUpICFkZWZhdWx0O1xuXG4vLy8gVHJhbnNpdGlvbiBwcm9wcnRpZXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgVHJhbnNpdGlvblxuJHRodW1ibmFpbC10cmFuc2l0aW9uOiBib3gtc2hhZG93IDIwMG1zIGVhc2Utb3V0ICFkZWZhdWx0O1xuXG4vLy8gRGVmYXVsdCByYWRpdXMgZm9yIHRodW1ibmFpbCBpbWFnZXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdGh1bWJuYWlsLXJhZGl1czogJGdsb2JhbC1yYWRpdXMgIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHRodW1ibmFpbCBzdHlsZXMgdG8gYW4gZWxlbWVudC5cbkBtaXhpbiB0aHVtYm5haWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogJHRodW1ibmFpbC1tYXJnaW4tYm90dG9tO1xuXG4gIGJvcmRlcjogJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtcmFkaXVzO1xuICBib3gtc2hhZG93OiAkdGh1bWJuYWlsLXNoYWRvdztcblxuICBsaW5lLWhlaWdodDogMDtcbn1cblxuQG1peGluIHRodW1ibmFpbC1saW5rIHtcbiAgdHJhbnNpdGlvbjogJHRodW1ibmFpbC10cmFuc2l0aW9uO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6ICR0aHVtYm5haWwtc2hhZG93LWhvdmVyO1xuICB9XG5cbiAgaW1hZ2Uge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIGZvdW5kYXRpb24tdGh1bWJuYWlsIHtcbiAgLnRodW1ibmFpbCB7XG4gICAgQGluY2x1ZGUgdGh1bWJuYWlsO1xuICB9XG5cbiAgYS50aHVtYm5haWwge1xuICAgIEBpbmNsdWRlIHRodW1ibmFpbC1saW5rO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgbWVudVxuLy8vL1xuXG4vLy8gTWFyZ2luIG9mIGEgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW1hcmdpbjogMCAhZGVmYXVsdDtcblxuLy8vIExlZnQtaGFuZCBtYXJnaW4gb2YgYSBuZXN0ZWQgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3IgaXRlbXMgaW4gYSBwaWxsIG1lbnUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pdGVtcy1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIG1hcmdpbiBmb3IgaXRlbXMgaW4gYSBzaW1wbGUgbWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRtZW51LXNpbXBsZS1tYXJnaW46IDFyZW0gIWRlZmF1bHQ7XG5cbi8vLyBUZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgQ29sb3JcbiRtZW51LWl0ZW0tY29sb3ItYWN0aXZlOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBBbHRlcm5hdGl2ZSB0ZXh0IGNvbG9yIG9mIGFuIGFjdGl2ZSBtZW51IGl0ZW0uLlxuLy8vIEB0eXBlIENvbG9yXG4kbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmU6ICRibGFjayAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3Igb2YgYW4gYWN0aXZlIG1lbnUgaXRlbS5cbi8vLyBAdHlwZSBDb2xvclxuJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBiZXR3ZWVuIGFuIGljb24gYW5kIHRleHQgaW4gYSBtZW51IGl0ZW0uXG4vLy8gQHR5cGUgTnVtYmVyXG4kbWVudS1pY29uLXNwYWNpbmc6IDAuMjVyZW0gIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IHN0YXRlLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgYWN0aXZlYCB3aXRoIGBpcy1hY3RpdmVgLiBcbi8vLyBCdXQgcGxlYXNlIG5vdGUgdGhhdCBgYWN0aXZlYCB3aWxsIGJlIHJlbW92ZWQgaW4gdXBjb21pbmcgdmVyc2lvbnMuXG4vLy8gQHR5cGUgQm9vbGVhblxuJG1lbnUtc3RhdGUtYmFjay1jb21wYXQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBtZW51IGNlbnRlcmVkLiBJZiB0cnVlLCB0aGlzIGR1cGxpY2F0ZSBgLm1lbnUtY2VudGVyZWQgPiAubWVudWAgd2l0aCBgLm1lbnUuYWxpZ24tY2VudGVyYC4gXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgYG1lbnUtY2VudGVyZWRgIHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1jZW50ZXJlZC1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHVzaW5nIGBpY29uLSpgIGNsYXNzZXMgd2l0aG91dCBgLmljb25zYCBjbGFzc2VzXG4vLy8gQnV0IHBsZWFzZSBub3RlIHRoYXQgdGhpcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpbGwgYmUgcmVtb3ZlZCBpbiB1cGNvbWluZyB2ZXJzaW9ucy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kbWVudS1pY29ucy1iYWNrLWNvbXBhdDogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIENyZWF0ZXMgdGhlIGJhc2Ugc3R5bGVzIGZvciBhIE1lbnUuXG5AbWl4aW4gbWVudS1iYXNlIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICBsaSB7XG4gICAgQGluY2x1ZGUgZGlzYWJsZS1tb3VzZS1vdXRsaW5lO1xuICB9XG5cbiAgYSxcbiAgLmJ1dHRvbiB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LWl0ZW1zLXBhZGRpbmc7XG4gIH1cblxuICAvLyBSZXNldCBzdHlsZXMgb2YgaW5uZXIgZWxlbWVudHNcbiAgaW5wdXQsXG4gIHNlbGVjdCxcbiAgYSxcbiAgYnV0dG9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG4vLy8gRXhwYW5kcyB0aGUgaXRlbXMgb2YgYSBNZW51LCBzbyBlYWNoIGl0ZW0gaXMgdGhlIHNhbWUgd2lkdGguXG5AbWl4aW4gbWVudS1leHBhbmQge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBsaSB7XG4gICAgICBmbGV4OiAxIDEgMHB4OyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIHplcm8tdW5pdFxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gQWxpZ24gbWVudSBpdGVtcy5cbkBtaXhpbiBtZW51LWFsaWduKCRhbGlnbm1lbnQpIHtcbiAgQGlmICRhbGlnbm1lbnQgPT0gbGVmdCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGFsaWdubWVudCA9PSByaWdodCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLnZlcnRpY2FsIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG5cbiAgICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcblxuICAgICAgLnN1Ym1lbnUgbGkge1xuICAgICAgICB0ZXh0LWFsaWduOiAkZ2xvYmFsLWxlZnQ7XG4gICAgICB9XG5cbiAgICAgICYudmVydGljYWwge1xuICAgICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogJGdsb2JhbC1yaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkYWxpZ25tZW50ID09IGNlbnRlciB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgIC5zdWJtZW51IGxpIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAuc3VibWVudSBsaSB7XG4gICAgICAgIHRleHQtYWxpZ246ICRnbG9iYWwtbGVmdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIFNldHMgdGhlIGRpcmVjdGlvbiBvZiBhIE1lbnUuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkZGlyIFtob3Jpem9udGFsXSAtIERpcmVjdGlvbiBvZiB0aGUgTWVudS4gQ2FuIGJlIGBob3Jpem9udGFsYCBvciBgdmVydGljYWxgLlxuQG1peGluIG1lbnUtZGlyZWN0aW9uKCRkaXI6IGhvcml6b250YWwpIHtcbiAgQGlmICRkaXIgPT0gaG9yaXpvbnRhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBsaSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBtZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbi8vLyBDcmVhdGVzIGEgc2ltcGxlIE1lbnUsIHdoaWNoIGhhcyBubyBwYWRkaW5nIG9yIGhvdmVyIHN0YXRlLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpciBbJGdsb2JhbC1sZWZ0XSAtIERpcmVjdGlvbiBvZiB0aGUgbWVudS4gVGhpcyBlZmZlY3RzIHRoZSBzaWRlIG9mIHRoZSBgPGxpPmAgdGhhdCByZWNlaXZlcyB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkbWFyZ2luIFskbWVudS1zaW1wbGUtbWFyZ2luXSAtIFRoZSBtYXJnaW4gdG8gYXBwbHkgdG8gZWFjaCBgPGxpPmAuXG5AbWl4aW4gbWVudS1zaW1wbGUoJGRpcjogJGdsb2JhbC1sZWZ0LCAkbWFyZ2luOiAkbWVudS1zaW1wbGUtbWFyZ2luKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cblxuICBsaSArIGxpIHtcbiAgICBtYXJnaW4tI3skZGlyfTogJG1hcmdpbjtcbiAgfVxuXG4gIGEge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIGZvciBhIG5lc3RlZCBNZW51LCBieSBhZGRpbmcgYG1hcmdpbi1sZWZ0YCB0byB0aGUgbWVudS5cbi8vLyBAcGFyYW0ge0tleXdvcmR8TnVtYmVyfSAkbWFyZ2luIFskbWVudS1uZXN0ZWQtbWFyZ2luXSAtIExlbmd0aCBvZiB0aGUgbWFyZ2luLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJG5lc3RlZC1hbGlnbm1lbnQgW2xlZnRdIC0gQWxpZ25tZW50IG9mIHRoZSBuZXN0ZWQgY2xhc3NcbkBtaXhpbiBtZW51LW5lc3RlZChcbiAgJG1hcmdpbjogJG1lbnUtbmVzdGVkLW1hcmdpbixcbiAgJG5lc3RlZC1hbGlnbm1lbnQ6IGxlZnRcbikge1xuICBAaWYgJG5lc3RlZC1hbGlnbm1lbnQgPT0gcmlnaHQge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkbWFyZ2luO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06IDA7XG4gIH1cbiAgQGVsc2Uge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRtYXJnaW47XG4gIH1cblxufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGljb25zIGluIG1lbnVzLlxuQG1peGluIG1lbnUtaWNvbnMoKSB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGEge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIGltZyxcbiAgICBpLFxuICAgIHN2ZyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgICArIHNwYW4ge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gQWRkcyBwb3NpdGlvbiBjbGFzc2VzIGZvciBpY29ucyB3aXRoaW4gYSBtZW51LlxuQG1peGluIG1lbnUtaWNvbi1wb3NpdGlvbigkcG9zaXRpb246IGxlZnQsICRzcGFjaW5nOiAkbWVudS1pY29uLXNwYWNpbmcpIHtcbiAgQGlmICRwb3NpdGlvbiA9PSBsZWZ0IHtcbiAgICBsaSBhIHtcbiAgICAgIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBtYXJnaW4tI3skZ2xvYmFsLXJpZ2h0fTogJHNwYWNpbmc7XG5cbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgaW1nLFxuICAgICAgaSxcbiAgICAgIHN2ZyB7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtbGVmdH06ICRzcGFjaW5nO1xuXG4gICAgICAgIEBpZiBub3QgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgbGkgYSB7XG4gICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIGltZyxcbiAgICAgIGksXG4gICAgICBzdmcge1xuICAgICAgICBAaWYgbm90ICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG8gJHNwYWNpbmc7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmc7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICRwb3NpdGlvbiA9PSBib3R0b20ge1xuICAgIGxpIGEge1xuICAgICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICBpbWcsXG4gICAgICBpLFxuICAgICAgc3ZnIHtcbiAgICAgICAgQGlmIG5vdCAkZ2xvYmFsLWZsZXhib3gge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1hcmdpbjogJHNwYWNpbmcgYXV0byAwO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gbWVudS10ZXh0IHtcbiAgcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmc7XG5cbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuQG1peGluIG1lbnUtc3RhdGUtYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgY29sb3I6IGNvbG9yLXBpY2stY29udHJhc3QoJG1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZSwgKCRtZW51LWl0ZW0tY29sb3ItYWN0aXZlLCAkbWVudS1pdGVtLWNvbG9yLWFsdC1hY3RpdmUpKTtcbn1cblxuQG1peGluIGZvdW5kYXRpb24tbWVudSB7XG4gIC5tZW51IHtcbiAgICBAaW5jbHVkZSBtZW51LWJhc2U7XG5cbiAgICAvLyBEZWZhdWx0IG9yaWVudGF0aW9uOiBob3Jpem9udGFsXG4gICAgJiwgJi5ob3Jpem9udGFsIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgIH1cblxuICAgIC8vIFZlcnRpY2FsIG9yaWVudGF0aW9uIG1vZGlmaWVyXG4gICAgJi52ZXJ0aWNhbCB7XG4gICAgICBAaW5jbHVkZSBtZW51LWRpcmVjdGlvbih2ZXJ0aWNhbCk7XG4gICAgfVxuXG4gICAgLy8gRXZlbi13aWR0aCBtb2RpZmllciBmb3IgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICAgICYuZXhwYW5kZWQge1xuICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlXG4gICAgJi5zaW1wbGUge1xuICAgICAgQGluY2x1ZGUgbWVudS1zaW1wbGU7XG4gICAgfVxuXG4gICAgLy8gQnJlYWtwb2ludCBzcGVjaWZpYyB2ZXJzaW9uc1xuICAgIEBpbmNsdWRlIC16Zi1lYWNoLWJyZWFrcG9pbnQoJHNtYWxsOiBmYWxzZSkge1xuICAgICAgJi4jeyQtemYtc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKGhvcml6b250YWwpO1xuICAgICAgfVxuXG4gICAgICAmLiN7JC16Zi1zaXplfS12ZXJ0aWNhbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tZXhwYW5kZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWV4cGFuZDtcbiAgICAgIH1cblxuICAgICAgJi4jeyQtemYtc2l6ZX0tc2ltcGxlIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1leHBhbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmVzdGluZ1xuICAgICYubmVzdGVkIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkO1xuICAgIH1cblxuICAgIC8vIEljb24gQmFzZSBTdHlsZXNcbiAgICAmLmljb25zIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbnM7XG4gICAgfVxuXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LWljb25zLWJhY2stY29tcGF0IHtcbiAgICAgICYuaWNvbi10b3AsXG4gICAgICAmLmljb24tcmlnaHQsXG4gICAgICAmLmljb24tYm90dG9tLFxuICAgICAgJi5pY29uLWxlZnQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LWljb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEljb24gTGVmdFxuICAgICYuaWNvbi1sZWZ0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihsZWZ0KTtcbiAgICB9XG5cbiAgICAvLyBJY29uIFJpZ2h0XG4gICAgJi5pY29uLXJpZ2h0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbihyaWdodCk7XG4gICAgfVxuXG4gICAgLy8gSWNvbiBUb3BcbiAgICAmLmljb24tdG9wIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtaWNvbi1wb3NpdGlvbih0b3ApO1xuICAgIH1cblxuICAgIC8vIEljb24gQm90dG9tXG4gICAgJi5pY29uLWJvdHRvbSB7XG4gICAgICBAaW5jbHVkZSBtZW51LWljb24tcG9zaXRpb24oYm90dG9tKTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAuaXMtYWN0aXZlID4gYSB7XG4gICAgICBAaW5jbHVkZSBtZW51LXN0YXRlLWFjdGl2ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBmb3IgYWN0aXZlIHN0YXRlXG4gICAgQGlmICRtZW51LXN0YXRlLWJhY2stY29tcGF0IHtcbiAgICAgIC5hY3RpdmUgPiBhIHtcbiAgICAgICAgQGluY2x1ZGUgbWVudS1zdGF0ZS1hY3RpdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gbGVmdFxuICAgICYuYWxpZ24tI3skZ2xvYmFsLWxlZnR9IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24obGVmdCk7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gcmlnaHRcbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihyaWdodCk7XG5cbiAgICAgIC5uZXN0ZWQge1xuICAgICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkbmVzdGVkLWFsaWdubWVudDogcmlnaHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsaWduIGNlbnRlclxuICAgICYuYWxpZ24tY2VudGVyIHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtYWxpZ24oY2VudGVyKTtcbiAgICB9XG5cbiAgICAubWVudS10ZXh0IHtcbiAgICAgIEBpbmNsdWRlIG1lbnUtdGV4dDtcbiAgICB9XG4gIH1cblxuICBAaWYgJG1lbnUtY2VudGVyZWQtYmFjay1jb21wYXQge1xuICAgIC5tZW51LWNlbnRlcmVkIHtcbiAgICAgID4gLm1lbnUge1xuICAgICAgICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgQGluY2x1ZGUgbWVudS1hbGlnbihjZW50ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFByZXZlbnQgRk9VQyB3aGVuIHVzaW5nIHRoZSBSZXNwb25zaXZlIE1lbnUgcGx1Z2luXG4gIC5uby1qcyBbZGF0YS1yZXNwb25zaXZlLW1lbnVdIHVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCJAbWl4aW4gZm91bmRhdGlvbi1tZW51LWljb24ge1xuICAubWVudS1pY29uIHtcbiAgICBAaW5jbHVkZSBoYW1idXJnZXIoJGNvbG9yOiAkdGl0bGViYXItaWNvbi1jb2xvciwgJGNvbG9yLWhvdmVyOiAkdGl0bGViYXItaWNvbi1jb2xvci1ob3Zlcik7XG4gIH1cblxuICAubWVudS1pY29uLmRhcmsge1xuICAgIEBpbmNsdWRlIGhhbWJ1cmdlcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIEBncm91cCBhY2NvcmRpb24tbWVudVxuLy8vL1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGFjY29yZGlvbm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IG5lc3RlZCBtYXJnaW5cbi8vLyBAdHlwZSBOdW1iZXJcbiRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW46ICRnbG9iYWwtbWVudS1uZXN0ZWQtbWFyZ2luICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBzdWJtZW51IHBhZGRpbmcuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc6ICRhY2NvcmRpb25tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGlmIGFjY29yZGlvbiBtZW51cyBoYXZlIHRoZSBkZWZhdWx0IGFycm93IHN0eWxlcy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kYWNjb3JkaW9ubWVudS1hcnJvd3M6IHRydWUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1pdGVtLWJhY2tncm91bmQ6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gYm9yZGVyLlxuLy8vIEB0eXBlIENvbG9yXG4kYWNjb3JkaW9ubWVudS1ib3JkZXI6IG51bGwgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IGl0ZW0gcGFkZGluZy5cbi8vLyBAdHlwZSBDb2xvclxuJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIExpc3RcbiRhY2NvcmRpb24tc3VibWVudS10b2dnbGUtYm9yZGVyOiAkYWNjb3JkaW9ubWVudS1ib3JkZXIgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGFjY29yZGlvbiBtZW51IHN1Ym1lbnUgdG9nZ2xlIGJhY2tncm91bmQgd2lkdGguXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDogNDBweCAhZGVmYXVsdDtcblxuLy8vIFNldHMgYWNjb3JkaW9uIG1lbnUgc3VibWVudSB0b2dnbGUgYmFja2dyb3VuZCBoZWlnaHQuXG4vLy8gQHR5cGUgTnVtYmVyXG4kYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1oZWlnaHQ6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBhY2NvcmRpb24gbWVudSBhcnJvdyBzaXplIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kYWNjb3JkaW9ubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbkBtaXhpbiB6Zi1hY2NvcmRpb24tbWVudS1sZWZ0LXJpZ2h0LWFycm93cyB7XG4gIC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRhY2NvcmRpb25tZW51LWFycm93LXNpemUsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbWFyZ2luLXRvcDogLTEgKiAoJGFjY29yZGlvbm1lbnUtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgI3skZ2xvYmFsLXJpZ2h0fTogMXJlbTtcbiAgICB9XG4gIH1cblxuICAmLmFsaWduLWxlZnQgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCA+IGE6OmFmdGVyIHtcbiAgICByaWdodDogMXJlbTtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgJi5hbGlnbi1yaWdodCAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDFyZW07XG4gIH1cbn1cbkBtaXhpbiBmb3VuZGF0aW9uLWFjY29yZGlvbi1tZW51IHtcblxuICAuYWNjb3JkaW9uLW1lbnUge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgICBib3JkZXItdG9wOiAkYWNjb3JkaW9ubWVudS1ib3JkZXI7XG4gICAgICAgIGJvcmRlci1yaWdodDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgICBib3JkZXItbGVmdDogJGFjY29yZGlvbm1lbnUtYm9yZGVyO1xuICAgICAgfVxuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBAaWYgJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGFjY29yZGlvbm1lbnUtaXRlbS1iYWNrZ3JvdW5kO1xuICAgICAgfVxuICAgICAgcGFkZGluZzogJGFjY29yZGlvbm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgYSB7XG4gICAgICBwYWRkaW5nOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkYWNjb3JkaW9ubWVudS1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAmLmFsaWduLSN7JGdsb2JhbC1yaWdodH0ge1xuICAgICAgLm5lc3RlZC5pcy1hY2NvcmRpb24tc3VibWVudSB7XG4gICAgICAgIEBpbmNsdWRlIG1lbnUtbmVzdGVkKCRhY2NvcmRpb25tZW51LW5lc3RlZC1tYXJnaW4sIHJpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtYXJyb3dzIHtcbiAgICAgIEBpbmNsdWRlIHpmLWFjY29yZGlvbi1tZW51LWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50W2FyaWEtZXhwYW5kZWQ9J3RydWUnXSA+IGE6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUgbGkge1xuICAgIEBpZiAkYWNjb3JkaW9ubWVudS1ib3JkZXIge1xuICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmlzLWFjY29yZGlvbi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmhhcy1zdWJtZW51LXRvZ2dsZSA+IGEge1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS13aWR0aDtcbiAgfVxuXG4gIC8vIFN1Ym1lbnUgdG9nZ2xlXG4gIC5zdWJtZW51LXRvZ2dsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICAjeyRnbG9iYWwtcmlnaHR9OiAwO1xuXG4gICAgd2lkdGg6ICRhY2NvcmRpb25tZW51LXN1Ym1lbnUtdG9nZ2xlLXdpZHRoO1xuICAgIGhlaWdodDogJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtaGVpZ2h0O1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgYm9yZGVyLSN7JGdsb2JhbC1sZWZ0fTogJGFjY29yZGlvbi1zdWJtZW51LXRvZ2dsZS1ib3JkZXI7XG5cbiAgICBAaWYgJGFjY29yZGlvbm1lbnUtc3VibWVudS10b2dnbGUtYmFja2dyb3VuZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYWNjb3JkaW9ubWVudS1zdWJtZW51LXRvZ2dsZS1iYWNrZ3JvdW5kO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgYXJyb3cgdG8gdGhlIHRvZ2dsZVxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSg2cHgsICRhY2NvcmRpb25tZW51LWFycm93LWNvbG9yLCBkb3duKTtcblxuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJvdGF0ZSB0aGUgYXJyb3cgd2hlbiBtZW51IGlzIG9wZW5cbiAgLnN1Ym1lbnUtdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9J3RydWUnXTo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGVZKC0xKTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xuICB9XG5cbiAgLnN1Ym1lbnUtdG9nZ2xlLXRleHQge1xuICAgIEBpbmNsdWRlIGVsZW1lbnQtaW52aXNpYmxlO1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZHJpbGxkb3duXG4vLy8vXG5cbi8vLyBUcmFuc2l0aW9uIHByb3BlcnR5IHRvIHVzZSBmb3IgYW5pbWF0aW5nIG1lbnVzLlxuLy8vIEB0eXBlIFRyYW5zaXRpb25cbiRkcmlsbGRvd24tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzIGxpbmVhciAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYXJyb3dzIHRvIGRyaWxsZG93biBpdGVtcyB3aXRoIHN1Ym1lbnVzLCBhcyB3ZWxsIGFzIHRoZSBiYWNrIGJ1dHRvbi5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZHJpbGxkb3duLWFycm93czogdHJ1ZSAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgaXRlbSBwYWRkaW5nLlxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1wYWRkaW5nOiAkZ2xvYmFsLW1lbnUtcGFkZGluZyAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgZHJpbGxkb3duIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyaWxsZG93bi1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBtZW51IGl0ZW0gcGFkZGluZyBpbiB0aGUgc3VibWVudS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nOiAkZHJpbGxkb3duLXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciBkcmlsbGRvd24gc3VibWVudXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcmlsbGRvd24tc3VibWVudS1iYWNrZ3JvdW5kOiAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyaWxsZG93biBhcnJvdyBjb2xvciBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIENvbG9yXG4kZHJpbGxkb3duLWFycm93LWNvbG9yOiAkcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcblxuLy8vIFNldHMgZHJpbGxkb3duIGFycm93IHNpemUgaWYgYXJyb3cgaXMgdXNlZC5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcmlsbGRvd24tYXJyb3ctc2l6ZTogNnB4ICFkZWZhdWx0O1xuXG5AbWl4aW4gemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgLmlzLWRyaWxsZG93bi1zdWJtZW51LXBhcmVudCA+IGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJpbGxkb3duLWFycm93LXNpemUsICRkcmlsbGRvd24tYXJyb3ctY29sb3IsICRnbG9iYWwtcmlnaHQpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcmlsbGRvd24tYXJyb3ctc2l6ZTtcbiAgICAgICN7JGdsb2JhbC1yaWdodH06IDFyZW07XG4gICAgfVxuICB9XG5cbiAgJi5hbGlnbi1sZWZ0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgcmlnaHQpO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cblxuICAmLmFsaWduLXJpZ2h0IC5pcy1kcmlsbGRvd24tc3VibWVudS1wYXJlbnQgPiBhOjphZnRlciB7XG4gICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgbGVmdCk7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMXJlbTtcbiAgfVxuXG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyaWxsZG93bi1tZW51IHtcbiAgLy8gQXBwbGllZCB0byB0aGUgTWVudSBjb250YWluZXJcbiAgLmlzLWRyaWxsZG93biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBsaSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmLmFuaW1hdGUtaGVpZ2h0IHtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSB0b3AgbGV2ZWwgPHVsPlxuICAuZHJpbGxkb3duIHtcbiAgICBhIHtcbiAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRkcmlsbGRvd24tYmFja2dyb3VuZDtcbiAgICB9XG5cbiAgICAvLyBBcHBsaWVkIHRvIHN1Ym1lbnUgPHVsPnNcbiAgICAuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgI3skZ2xvYmFsLWxlZnR9OiAxMDAlO1xuICAgICAgei1pbmRleDogLTE7XG5cbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogJGRyaWxsZG93bi1zdWJtZW51LWJhY2tncm91bmQ7XG4gICAgICB0cmFuc2l0aW9uOiAkZHJpbGxkb3duLXRyYW5zaXRpb247XG5cbiAgICAgICYuaXMtYWN0aXZlIHtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChpZigkZ2xvYmFsLXRleHQtZGlyZWN0aW9uID09IGx0ciwgLTEwMCUsIDEwMCUpKTtcbiAgICAgIH1cblxuICAgICAgJi5pcy1jbG9zaW5nIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGlmKCRnbG9iYWwtdGV4dC1kaXJlY3Rpb24gPT0gbHRyLCAxMDAlLCAtMTAwJSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJtZW51IGl0ZW0gcGFkZGluZ1xuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmc6ICRkcmlsbGRvd24tc3VibWVudS1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJpbGxkb3duLXN1Ym1lbnUge1xuICAgICAgQGluY2x1ZGUgbWVudS1uZXN0ZWQoJGRyaWxsZG93bi1uZXN0ZWQtbWFyZ2luKTtcbiAgICB9XG5cbiAgICAuZHJpbGxkb3duLXN1Ym1lbnUtY292ZXItcHJldmlvdXMge1xuICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICBAaWYgJGRyaWxsZG93bi1hcnJvd3Mge1xuICAgICAgQGluY2x1ZGUgemYtZHJpbGxkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuXG4gICAgICAuanMtZHJpbGxkb3duLWJhY2sgPiBhOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyaWxsZG93bi1hcnJvdy1zaXplLCAkZHJpbGxkb3duLWFycm93LWNvbG9yLCAkZ2xvYmFsLWxlZnQpO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAwLjc1cmVtOyAvLyBDcmVhdGVzIHNwYWNlIGJldHdlZW4gdGhlIGFycm93IGFuZCB0aGUgdGV4dFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm91bmRhdGlvbiBmb3IgU2l0ZXNcbi8vIGh0dHBzOi8vZ2V0LmZvdW5kYXRpb25cbi8vIExpY2Vuc2VkIHVuZGVyIE1JVCBPcGVuIFNvdXJjZVxuXG4vLy8vXG4vLy8gQGdyb3VwIGRyb3Bkb3duLW1lbnVcbi8vLy9cblxuLy8vIEVuYWJsZXMgYXJyb3dzIGZvciBpdGVtcyB3aXRoIGRyb3Bkb3duIG1lbnVzLlxuLy8vIEB0eXBlIEJvb2xlYW5cbiRkcm9wZG93bm1lbnUtYXJyb3dzOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gU2V0cyBkcm9wZG93biBtZW51IGFycm93IGNvbG9yIGlmIGFycm93IGlzIHVzZWQuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3I6ICRhbmNob3ItY29sb3IgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgc2l6ZSBpZiBhcnJvdyBpcyB1c2VkLlxuLy8vIEB0eXBlIExlbmd0aFxuJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplOiA2cHggIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgYXJyb3cgcGFkZGluZyBmb3IgYWxpZ25pbmcgdGhlIGFycm93IGNvcnJlY3RseS5cbi8vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYXJyb3ctcGFkZGluZzogMS41cmVtICFkZWZhdWx0O1xuXG4vLy8gTWluaW11bSB3aWR0aCBvZiBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kZHJvcGRvd25tZW51LW1pbi13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0b3AgbGV2ZWwgaXRlbXMuXG4vLy8gQHR5cGUgQ29sb3JcbiRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDogbnVsbCAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIGRyb3Bkb3ducy5cbi8vLyBAdHlwZSBDb2xvclxuJGRyb3Bkb3dubWVudS1zdWJtZW51LWJhY2tncm91bmQ6ICR3aGl0ZSAhZGVmYXVsdDtcblxuLy8vIFBhZGRpbmcgZm9yIHRvcCBsZXZlbCBpdGVtcy5cbi8vLyBAdHlwZSBOdW1iZXJcbiRkcm9wZG93bm1lbnUtcGFkZGluZzogJGdsb2JhbC1tZW51LXBhZGRpbmcgIWRlZmF1bHQ7XG5cbi8vLyBTZXRzIGRyb3Bkb3duIG1lbnUgbmVzdGVkIG1hcmdpblxuLy8vIEB0eXBlIE51bWJlclxuJGRyb3Bkb3dubWVudS1uZXN0ZWQtbWFyZ2luOiAwICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBmb3Igc3ViLW1lbnUgaXRlbXMuXG4vLy8gQHR5cGUgTnVtYmVyXG4kZHJvcGRvd25tZW51LXN1Ym1lbnUtcGFkZGluZzogJGRyb3Bkb3dubWVudS1wYWRkaW5nICFkZWZhdWx0O1xuXG4vLy8gQm9yZGVyIGZvciBkcm9wZG93biBzdWItbWVudXMuXG4vLy8gQHR5cGUgTGlzdFxuJGRyb3Bkb3dubWVudS1ib3JkZXI6IDFweCBzb2xpZCAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vIEJvcmRlciB3aWR0aCBmb3IgZHJvcGRvd24gc3ViLW1lbnVzLlxuLy8gVXNlZCB0byBhZGp1c3QgdG9wIG1hcmdpbiBvZiBhIHN1Yi1tZW51IGlmIGEgYm9yZGVyIGlzIHVzZWQuXG4vLyBAdHlwZSBMZW5ndGhcbiRkcm9wZG93bm1lbnUtYm9yZGVyLXdpZHRoOiBudGgoJGRyb3Bkb3dubWVudS1ib3JkZXIsIDEpO1xuXG4vLy8gVGV4dCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTogZ2V0LWNvbG9yKHByaW1hcnkpICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBhY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtLiBFeHBsaWNpdCBvdmVycmlkZSBmb3IgbWVudSBkZWZhdWx0c1xuLy8vIEB0eXBlIENvbG9yXG4kZHJvcGRvd24tbWVudS1pdGVtLWJhY2tncm91bmQtYWN0aXZlOiB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuQG1peGluIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzIHtcbiAgPiBhOjphZnRlciB7XG4gICAgI3skZ2xvYmFsLXJpZ2h0fTogMTRweDtcbiAgfVxuXG4gICYub3BlbnMtbGVmdCA+IGE6OmFmdGVyIHtcbiAgICBAaW5jbHVkZSBjc3MtdHJpYW5nbGUoJGRyb3Bkb3dubWVudS1hcnJvdy1zaXplLCAkZHJvcGRvd25tZW51LWFycm93LWNvbG9yLCBsZWZ0KTtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiA1cHg7XG4gIH1cblxuICAmLm9wZW5zLXJpZ2h0ID4gYTo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIGNzcy10cmlhbmdsZSgkZHJvcGRvd25tZW51LWFycm93LXNpemUsICRkcm9wZG93bm1lbnUtYXJyb3ctY29sb3IsIHJpZ2h0KTtcbiAgfVxufVxuXG5AbWl4aW4gZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oJGRpcjogaG9yaXpvbnRhbCkge1xuICBAaWYgJGRpciA9PSBob3Jpem9udGFsIHtcbiAgICA+IGxpLm9wZW5zLWxlZnQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gbGkub3BlbnMtcmlnaHQgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYSB7IC8vIHNhc3MtbGludDpkaXNhYmxlLWxpbmUgbm8tcXVhbGlmeWluZy1lbGVtZW50c1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctI3skZ2xvYmFsLXJpZ2h0fTogJGRyb3Bkb3dubWVudS1hcnJvdy1wYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICA+IGxpLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50ID4gYTo6YWZ0ZXIgeyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICAgICAgQGluY2x1ZGUgY3NzLXRyaWFuZ2xlKCRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZSwgJGRyb3Bkb3dubWVudS1hcnJvdy1jb2xvciwgZG93bik7XG4gICAgICAgICN7JGdsb2JhbC1yaWdodH06IDVweDtcbiAgICAgICAgI3skZ2xvYmFsLWxlZnR9OiBhdXRvO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqICgkZHJvcGRvd25tZW51LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGRpciA9PSB2ZXJ0aWNhbCB7XG4gICAgPiBsaSB7XG4gICAgICAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1sZWZ0IHtcbiAgICAgICAgPiAuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5vcGVucy1yaWdodCB7XG4gICAgICAgID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmICRkcm9wZG93bm1lbnUtYXJyb3dzIHtcbiAgICAgICAgQGluY2x1ZGUgemYtZHJvcGRvd24tbGVmdC1yaWdodC1hcnJvd3M7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAd2FybiAnVGhlIGRpcmVjdGlvbiB1c2VkIGZvciBkcm9wZG93bi1tZW51LWRpcmVjdGlvbigpIG11c3QgYmUgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbC4nO1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWRyb3Bkb3duLW1lbnUge1xuICAuZHJvcGRvd24ubWVudSB7XG4gICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24oaG9yaXpvbnRhbCk7XG5cbiAgICBhIHtcbiAgICAgIEBpbmNsdWRlIGRpc2FibGUtbW91c2Utb3V0bGluZTtcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbVxuICAgID4gbGkgPiBhIHtcbiAgICAgIGJhY2tncm91bmQ6ICRkcm9wZG93bm1lbnUtYmFja2dyb3VuZDtcbiAgICAgIHBhZGRpbmc6ICRkcm9wZG93bm1lbnUtcGFkZGluZztcbiAgICB9XG5cbiAgICAvLyBUb3AtbGV2ZWwgaXRlbSBhY3RpdmUgc3RhdGVcbiAgICA+IGxpLmlzLWFjdGl2ZSA+IGEge1xuICAgICAgYmFja2dyb3VuZDogJGRyb3Bkb3duLW1lbnUtaXRlbS1iYWNrZ3JvdW5kLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiAkZHJvcGRvd24tbWVudS1pdGVtLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAubm8tanMgJiB1bCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5uZXN0ZWQuaXMtZHJvcGRvd24tc3VibWVudSB7XG4gICAgICBAaW5jbHVkZSBtZW51LW5lc3RlZCgkZHJvcGRvd25tZW51LW5lc3RlZC1tYXJnaW4pO1xuICAgIH1cblxuICAgICYudmVydGljYWwge1xuICAgICAgQGluY2x1ZGUgZHJvcGRvd24tbWVudS1kaXJlY3Rpb24odmVydGljYWwpO1xuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgICAgICAgICYuI3skc2l6ZX0taG9yaXpvbnRhbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBkcm9wZG93bi1tZW51LWRpcmVjdGlvbihob3Jpem9udGFsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLiN7JHNpemV9LXZlcnRpY2FsIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGRyb3Bkb3duLW1lbnUtZGlyZWN0aW9uKHZlcnRpY2FsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFsaWduLXJpZ2h0IHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51LmZpcnN0LXN1YiB7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmlzLWRyb3Bkb3duLW1lbnUudmVydGljYWwge1xuICAgIHdpZHRoOiAxMDBweDtcblxuICAgICYuYWxpZ24tcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgYTo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICAjeyRnbG9iYWwtcmlnaHR9OiA1cHg7XG4gICAgICAjeyRnbG9iYWwtbGVmdH06IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqICRkcm9wZG93bm1lbnUtYXJyb3ctc2l6ZTtcbiAgICB9XG5cbiAgICAmLm9wZW5zLWlubmVyID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuXG4gICAgICB0b3A6IDEwMCU7XG4gICAgICBAaWYgJGdsb2JhbC10ZXh0LWRpcmVjdGlvbiA9PSAncnRsJyB7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYub3BlbnMtbGVmdCA+IC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAmLm9wZW5zLXJpZ2h0ID4gLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgICN7JGdsb2JhbC1sZWZ0fTogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBtaW4td2lkdGg6ICRkcm9wZG93bm1lbnUtbWluLXdpZHRoO1xuXG4gICAgYm9yZGVyOiAkZHJvcGRvd25tZW51LWJvcmRlcjtcbiAgICBiYWNrZ3JvdW5kOiAkZHJvcGRvd25tZW51LXN1Ym1lbnUtYmFja2dyb3VuZDtcblxuICAgIC5kcm9wZG93biAmIGEge1xuICAgICAgcGFkZGluZzogJGRyb3Bkb3dubWVudS1zdWJtZW51LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgLmlzLWRyb3Bkb3duLXN1Ym1lbnUtcGFyZW50IHtcbiAgICAgIEBpZiAkZHJvcGRvd25tZW51LWFycm93cyB7XG4gICAgICAgIEBpbmNsdWRlIHpmLWRyb3Bkb3duLWxlZnQtcmlnaHQtYXJyb3dzO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAodHlwZS1vZigkZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCkgPT0gJ251bWJlcicpIHtcbiAgICAgIC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgbWFyZ2luLXRvcDogKC0kZHJvcGRvd25tZW51LWJvcmRlci13aWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiBsaSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAvLyBbVE9ET10gQ3V0IGJhY2sgc3BlY2lmaWNpdHlcbiAgICAvLyY6bm90KC5qcy1kcm9wZG93bi1ub2hvdmVyKSA+IC5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudDpob3ZlciA+ICYsIC8vIHdoeSBpcyB0aGlzIGxpbmUgbmVlZGVkPyBPcGVuaW5nIGlzIGhhbmRsZWQgYnkgSlMgYW5kIHRoaXMgY2F1c2VzIHNvbWUgdWdseSBmbGlja2VyaW5nIHdoZW4gdGhlIHN1YiBpcyByZS1wb3NpdGlvbmVkIGF1dG9tYXRpY2FsbHkuLi5cbiAgICAmLmpzLWRyb3Bkb3duLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBvZmYtY2FudmFzXG4vLy8vXG5cbi8vLyBXaWR0aCBtYXAgb2YgYSBsZWZ0L3JpZ2h0IG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgTWFwXG4kb2ZmY2FudmFzLXNpemVzOiAoXG4gIHNtYWxsOiAyNTBweCxcbikgIWRlZmF1bHQ7XG5cbi8vLyBIZWlnaHQgbWFwIG9mIGEgdG9wL2JvdHRvbSBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE1hcFxuJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKFxuICBzbWFsbDogMjUwcHgsXG4pICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBvZiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQm94IHNoYWRvdyBmb3IgdGhlIG9mZi1jYW52YXMgb3ZlcmxhcCBwYW5lbC5cbi8vLyBAdHlwZSBTaGFkb3dcbiRvZmZjYW52YXMtc2hhZG93OiAwIDAgMTBweCByZ2JhKCRibGFjaywgMC43KSAhZGVmYXVsdDtcblxuLy8vIElubmVyIGJveCBzaGFkb3cgc2l6ZSBmb3IgdGhlIG9mZi1jYW52YXMgcHVzaCBwYW5lbC5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemU6IDIwcHggIWRlZmF1bHQ7XG5cbi8vLyBJbm5lciBib3ggc2hhZG93IGNvbG9yIGZvciB0aGUgb2ZmLWNhbnZhcyBwdXNoIHBhbmVsLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1jb2xvcjogcmdiYSgkYmxhY2ssIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIGNvbnRlbnQgb3ZlcmxheS5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXg6IDExICFkZWZhdWx0O1xuXG4vLy8gWi1pbmRleCBvZiBhbiBvZmYtY2FudmFzIHBhbmVsIHdpdGggdGhlIGBwdXNoYCB0cmFuc2l0aW9uLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy1wdXNoLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBaLWluZGV4IG9mIGFuIG9mZi1jYW52YXMgcGFuZWwgd2l0aCB0aGUgYG92ZXJsYXBgIHRyYW5zaXRpb24uXG4vLy8gQHR5cGUgTnVtYmVyXG4kb2ZmY2FudmFzLW92ZXJsYXAtemluZGV4OiAxMyAhZGVmYXVsdDtcblxuLy8vIFotaW5kZXggb2YgYW4gb2ZmLWNhbnZhcyBwYW5lbCB1c2luZyB0aGUgYHJldmVhbC1mb3ItKmAgY2xhc3NlcyBvciBtaXhpbi5cbi8vLyBAdHlwZSBOdW1iZXJcbiRvZmZjYW52YXMtcmV2ZWFsLXppbmRleDogMTIgIWRlZmF1bHQ7XG5cbi8vLyBMZW5ndGggb2YgdGhlIGFuaW1hdGlvbiBvbiBhbiBvZmYtY2FudmFzIHBhbmVsLlxuLy8vIEB0eXBlIE51bWJlclxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aDogMC41cyAhZGVmYXVsdDtcblxuLy8vIFRpbWluZyBmdW5jdGlvbiBvZiB0aGUgYW5pbWF0aW9uIG9uIGFuIG9mZi1jYW52YXMgcGFuZWwuXG4vLy8gQHR5cGUgS2V5d29yZFxuJG9mZmNhbnZhcy10cmFuc2l0aW9uLXRpbWluZzogZWFzZSAhZGVmYXVsdDtcblxuLy8vIElmIGB0cnVlYCwgYSByZXZlYWxlZCBvZmYtY2FudmFzIHdpbGwgYmUgZml4ZWQtcG9zaXRpb24sIGFuZCBzY3JvbGwgd2l0aCB0aGUgc2NyZWVuLlxuLy8vIEB0eXBlIEJvb2xcbiRvZmZjYW52YXMtZml4ZWQtcmV2ZWFsOiB0cnVlICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIG92ZXJsYXkgdGhhdCBhcHBlYXJzIHdoZW4gYW4gb2ZmLWNhbnZhcyBwYW5lbCBpcyBvcGVuLlxuLy8vIEB0eXBlIENvbG9yXG4kb2ZmY2FudmFzLWV4aXQtYmFja2dyb3VuZDogcmdiYSgkd2hpdGUsIDAuMjUpICFkZWZhdWx0O1xuXG4vLy8gQ1NTIGNsYXNzIHVzZWQgZm9yIHRoZSBtYWluIGNvbnRlbnQgYXJlYS4gVGhlIG9mZi1jYW52YXMgbWl4aW5zIHVzZSB0aGlzIHRvIHRhcmdldCB0aGUgcGFnZSBjb250ZW50LlxuJG1haW5jb250ZW50LWNsYXNzOiAnb2ZmLWNhbnZhcy1jb250ZW50JyAhZGVmYXVsdDtcblxuLy8vIEFkZHMgYmFzZWxpbmUgc3R5bGVzIGZvciBvZmYtY2FudmFzLiBUaGlzIENTUyBpcyByZXF1aXJlZCB0byBtYWtlIHRoZSBvdGhlciBwaWVjZXMgd29yay5cbkBtaXhpbiBvZmYtY2FudmFzLWJhc2ljcyB7XG5cbiAgLy8vIFRyYW5zZm9ybSBkZXByZWNhdGVkIHNpemUgc2V0dGluZ3MgaW50byBtYXAgJiBzaG93IHdhcm5pbmdcbiAgQGlmIHZhcmlhYmxlLWV4aXN0cyhvZmZjYW52YXMtc2l6ZSkge1xuICAgICRvZmZjYW52YXMtc2l6ZXM6IChzbWFsbDogJG9mZmNhbnZhcy1zaXplLCBtZWRpdW06ICRvZmZjYW52YXMtc2l6ZSkgIWdsb2JhbDtcbiAgICBAd2FybiAnJG9mZmNhbnZhcy1zaXplIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCB1c2VkIGFueW1vcmUhIFBsZWFzZSB1cGRhdGUgeW91ciBzZXR0aW5ncyBhbmQgdXNlIHRoZSBtYXAgJG9mZmNhbnZhcy1zaXplcyBpbnN0ZWFkJztcbiAgfVxuICBAaWYgdmFyaWFibGUtZXhpc3RzKG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSB7XG4gICAgJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplczogKHNtYWxsOiAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUsIG1lZGl1bTogJG9mZmNhbnZhcy12ZXJ0aWNhbC1zaXplKSAhZ2xvYmFsO1xuICAgIEB3YXJuICckb2ZmY2FudmFzLXZlcnRpY2FsLXNpemUgaXMgZGVwcmVjYXRlZCBhbmQgbm90IHVzZWQgYW55bW9yZSEgUGxlYXNlIHVwZGF0ZSB5b3VyIHNldHRpbmdzIGFuZCB1c2UgdGhlIG1hcCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzIGluc3RlYWQnO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHRoZSB6LWluZGV4ZXMgYW5kIGluY3JlYXNlIHRoZW0gZHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBvdmVybGF5J3Mgei1pbmRleCBpcyBuZXcgc2luY2UgdjYuNCBhbmQgbWF5IGJlIGlkZW50aWNhbCB0byB0aGUgdXNlciBjdXN0b20gc2V0dGluZ3Mgb2YgdGhlIHB1c2ggei1pbmRleC5cbiAgQGlmICRvZmZjYW52YXMtcHVzaC16aW5kZXggPD0gJG9mZmNhbnZhcy1vdmVybGF5LXppbmRleCB7ICRvZmZjYW52YXMtcHVzaC16aW5kZXg6ICRvZmZjYW52YXMtb3ZlcmxheS16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXggPD0gJG9mZmNhbnZhcy1wdXNoLXppbmRleCB7ICRvZmZjYW52YXMtb3ZlcmxhcC16aW5kZXg6ICRvZmZjYW52YXMtcHVzaC16aW5kZXggKyAxICFnbG9iYWw7IH1cbiAgQGlmICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCA8PSAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4IHsgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4ICsgMSAhZ2xvYmFsOyB9XG5cbiAgLy8gSGlkZXMgb3ZlcmZsb3cgb24gYm9keSB3aGVuIGFuIG9mZi1jYW52YXMgcGFuZWwgaXMgb3Blbi5cbiAgLmlzLW9mZi1jYW52YXMtb3BlbiB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgb3ZlcmxheSAoZ2VuZXJhdGVkIGJ5IEphdmFTY3JpcHQpXG4gIC5qcy1vZmYtY2FudmFzLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAkb2ZmY2FudmFzLW92ZXJsYXktemluZGV4O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkb2ZmY2FudmFzLXRyYW5zaXRpb24tbGVuZ3RoICRvZmZjYW52YXMtdHJhbnNpdGlvbi10aW1pbmcsIHZpc2liaWxpdHkgJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuXG4gICAgYmFja2dyb3VuZDogJG9mZmNhbnZhcy1leGl0LWJhY2tncm91bmQ7XG5cbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLmlzLXZpc2libGUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgJi5pcy1jbG9zYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgJi5pcy1vdmVybGF5LWFic29sdXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG5cbiAgICAmLmlzLW92ZXJsYXktZml4ZWQge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRzIGJhc2ljIHN0eWxlcyBmb3IgYW4gb2ZmLWNhbnZhcyB3cmFwcGVyLlxuQG1peGluIG9mZi1jYW52YXMtd3JhcHBlcigpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLy8gQWRkcyBiYXNpYyBzdHlsZXMgZm9yIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1iYXNlKFxuICAkYmFja2dyb3VuZDogJG9mZmNhbnZhcy1iYWNrZ3JvdW5kLFxuICAkdHJhbnNpdGlvbjogJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nLFxuICAkZml4ZWQ6IHRydWVcbikge1xuICBAaW5jbHVkZSBkaXNhYmxlLW1vdXNlLW91dGxpbmU7XG5cbiAgQGlmICRmaXhlZCA9PSB0cnVlIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgb2ZmLWNhbnZhcyB6LWluZGV4LlxuICB6LWluZGV4OiAkb2ZmY2FudmFzLXB1c2gtemluZGV4O1xuXG4gIC8vIEluY3JlYXNlIENTUyBzcGVjaWZpY2l0eVxuICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1wdXNoLXppbmRleDtcbiAgfVxuXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuXG4gIC8vIEhpZGUgaW5hY3RpdmUgb2ZmLWNhbnZhcyB3aXRoaW4gdGhlIGNvbnRlbnQgdGhhdCBoYXZlIHRoZSBzYW1lIHBvc2l0aW9uXG4gICYuaXMtY2xvc2VkIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBPdmVybGFwIG9ubHkgc3R5bGVzLlxuICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcCB7XG4gICAgei1pbmRleDogJG9mZmNhbnZhcy1vdmVybGFwLXppbmRleDtcblxuICAgICYuaXMtb3BlbiB7XG4gICAgICBib3gtc2hhZG93OiAkb2ZmY2FudmFzLXNoYWRvdztcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHRyYW5zZm9ybSB0byAwIHRvIHNob3cgYW4gb2ZmLWNhbnZhcyBwYW5lbC5cbiAgJi5pcy1vcGVuIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgfVxufVxuXG4vLy8gQWRkcyBzdHlsZXMgdG8gcG9zaXRpb24gYW4gb2ZmLWNhbnZhcyBwYW5lbCB0byB0aGUgbGVmdC9yaWdodC90b3AvYm90dG9tLlxuQG1peGluIG9mZi1jYW52YXMtcG9zaXRpb24oXG4gICRwb3NpdGlvbjogbGVmdCxcbiAgJG9yaWVudGF0aW9uOiBob3Jpem9udGFsLFxuICAkc2l6ZXM6IGlmKCRvcmllbnRhdGlvbiA9PSBob3Jpem9udGFsLCAkb2ZmY2FudmFzLXNpemVzLCAkb2ZmY2FudmFzLXZlcnRpY2FsLXNpemVzKVxuKSB7XG4gIEBpZiAkcG9zaXRpb24gPT0gbGVmdCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgd2lkdGg6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcblxuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcG9zaXRpb24gPT0gcmlnaHQge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICB3aWR0aDogJHNpemU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgcG9zaXRpb24gZm9yIG5lc3RlZCBvZmYtY2FudmFzIGVsZW1lbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9IC5vZmYtY2FudmFzLnBvc2l0aW9uLSN7JHBvc2l0aW9ufSB7XG5cbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKCRzaXplKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJi5pcy10cmFuc2l0aW9uLW92ZXJsYXAuaXMtb3BlbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIG9wZW4gcG9zaXRpb24gZm9yIHRoZSBjb250ZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfS5pcy1vcGVuLSN7JHBvc2l0aW9ufSB7XG4gICAgICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgICAgICBAZWFjaCAkbmFtZSwgJHNpemUgaW4gJHNpemVzIHtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLSRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLSRzaXplKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBwb3NpdGlvbiBmb3IgbmVzdGVkIG9mZi1jYW52YXMgZWxlbWVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30gLm9mZi1jYW52YXMucG9zaXRpb24tI3skcG9zaXRpb259IHtcbiAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0kc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICYuaXMtdHJhbnNpdGlvbi1vdmVybGFwLmlzLW9wZW4ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXRzIHRoZSBvcGVuIHBvc2l0aW9uIGZvciB0aGUgY29udGVudFxuICAgIEBhdC1yb290IC4jeyRtYWluY29udGVudC1jbGFzc30uaXMtb3Blbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCRzaXplKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbmFtZSkge1xuICAgICAgICBoZWlnaHQ6ICRzaXplO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIHBvc2l0aW9uIGZvciBuZXN0ZWQgb2ZmLWNhbnZhcyBlbGVtZW50XG4gICAgQGF0LXJvb3QgLiN7JG1haW5jb250ZW50LWNsYXNzfSAub2ZmLWNhbnZhcy5wb3NpdGlvbi0jeyRwb3NpdGlvbn0ge1xuICAgICAgQGVhY2ggJG5hbWUsICRzaXplIGluICRzaXplcyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHNpemUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAmLmlzLXRyYW5zaXRpb24tb3ZlcmxhcC5pcy1vcGVuIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0cyB0aGUgb3BlbiBwb3NpdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9LmlzLW9wZW4tI3skcG9zaXRpb259IHtcbiAgICAgICYuaGFzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICAgIEBlYWNoICRuYW1lLCAkc2l6ZSBpbiAkc2l6ZXMge1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtJHNpemUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmICRvZmZjYW52YXMtaW5uZXItc2hhZG93LXNpemUgaXMgc2V0LCBhZGQgaW5uZXIgYm94LXNoYWRvdy5cbiAgLy8gVGhpcyBtaW1pY3MgdGhlIG9mZi1jYW52YXMgcGFuZWwgaGF2aW5nIGEgbG93ZXIgei1pbmRleCwgd2l0aG91dCBoYXZpbmcgdG8gaGF2ZSBvbmUuXG4gIEBpZiAkb2ZmY2FudmFzLWlubmVyLXNoYWRvdy1zaXplIHtcbiAgICAmLmlzLXRyYW5zaXRpb24tcHVzaCB7XG4gICAgICBAaWYgJHBvc2l0aW9uID09IGxlZnQge1xuICAgICAgICBAaW5jbHVkZSBpbm5lci1zaWRlLXNoYWRvdyhyaWdodCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHJpZ2h0IHtcbiAgICAgICAgQGluY2x1ZGUgaW5uZXItc2lkZS1zaGFkb3cobGVmdCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IHRvcCB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KGJvdHRvbSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgICAgQGVsc2UgaWYgJHBvc2l0aW9uID09IGJvdHRvbSB7XG4gICAgICAgIEBpbmNsdWRlIGlubmVyLXNpZGUtc2hhZG93KHRvcCwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctc2l6ZSwgJG9mZmNhbnZhcy1pbm5lci1zaGFkb3ctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbi8vLyBTZXRzIHRoZSBzdHlsZXMgZm9yIHRoZSBjb250ZW50IGNvbnRhaW5lci5cbkBtaXhpbiBvZmYtY2FudmFzLWNvbnRlbnQoKSB7XG4gIHRyYW5zZm9ybTogbm9uZTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEJpbmQgdG8gaGFzLXRyYW5zaXRpb24tWCBjbGFzcyB0byBwcmV2ZW50IHRyYW5zaXRpb24gZm9yIHRyYW5zZm9ybTpub25lXG4gICYuaGFzLXRyYW5zaXRpb24tb3ZlcmxhcCxcbiAgJi5oYXMtdHJhbnNpdGlvbi1wdXNoIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJG9mZmNhbnZhcy10cmFuc2l0aW9uLWxlbmd0aCAkb2ZmY2FudmFzLXRyYW5zaXRpb24tdGltaW5nO1xuICB9XG5cbiAgLy8gVHJhbnNmb3JtIHNjb3BlIHVudGlsIHRoZSBlbGVtZW50IGlzIGNsb3NlZCAobWFrZXMgc3VyZSB0cmFuc2l0aW9uZW5kIGdldHMgdHJpZ2dlcmVkKVxuICAmLmhhcy10cmFuc2l0aW9uLXB1c2gge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB9XG5cbiAgLy8gQ29uc2lkZXIgZWxlbWVudCAmIGNvbnRlbnQsIG5lc3RlZCBpbiBhbm90aGVyIGNvbnRlbnRcbiAgLm9mZi1jYW52YXMuaXMtb3BlbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIH1cbn1cblxuLy8vIEFkZHMgc3R5bGVzIHRoYXQgcmV2ZWFsIGFuIG9mZi1jYW52YXMgcGFuZWwuXG5AbWl4aW4gb2ZmLWNhbnZhcy1yZXZlYWwoXG4kcG9zaXRpb246IGxlZnQsXG4kemluZGV4OiAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsXG4kY29udGVudDogJG1haW5jb250ZW50LWNsYXNzLFxuJGJyZWFrcG9pbnQ6IHNtYWxsXG4pIHtcbiAgdHJhbnNmb3JtOiBub25lO1xuICB6LWluZGV4OiAkemluZGV4O1xuICB0cmFuc2l0aW9uOiBub25lO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXG4gIEBpZiBub3QgJG9mZmNhbnZhcy1maXhlZC1yZXZlYWwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuXG4gIC5jbG9zZS1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBDb25zaWRlciByZXZlYWxlZCBlbGVtZW50IGlzIG5lc3RlZCBpbiBjb250ZW50XG4gIC4jeyRtYWluY29udGVudC1jbGFzc30gJiB7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgQGF0LXJvb3QgLiN7JGNvbnRlbnR9Lmhhcy1yZXZlYWwtI3skcG9zaXRpb259IHtcbiAgICBtYXJnaW4tI3skcG9zaXRpb259OiAtemYtZ2V0LWJwLXZhbCgkb2ZmY2FudmFzLXNpemVzLCAkYnJlYWtwb2ludCk7XG4gIH1cblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAocHJpb3IgdG8gdjYuNClcbiAgJiB+IC4jeyRjb250ZW50fSB7XG4gICAgbWFyZ2luLSN7JHBvc2l0aW9ufTogLXpmLWdldC1icC12YWwoJG9mZmNhbnZhcy1zaXplcywgJGJyZWFrcG9pbnQpO1xuICB9XG59XG5cbi8vLyBPdmVycmlkZXMgdGhlIG9mZi1jYW52YXMgc3R5bGVzXG5AbWl4aW4gaW4tY2FudmFzKCkge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiBhdXRvO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcblxuICAvLyBJbmNyZWFzZSBDU1Mgc3BlY2lmaWNpdHlcbiAgJi5wb3NpdGlvbi1sZWZ0LFxuICAmLnBvc2l0aW9uLXJpZ2h0LFxuICAmLnBvc2l0aW9uLXRvcCxcbiAgJi5wb3NpdGlvbi1ib3R0b20ge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmNsb3NlLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWl4aW4gZm91bmRhdGlvbi1vZmYtY2FudmFzIHtcbiAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNpY3M7XG5cbiAgLy8gT2ZmLWNhbnZhcyB3cmFwcGVyXG4gIC5vZmYtY2FudmFzLXdyYXBwZXIge1xuICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtd3JhcHBlcjtcbiAgfVxuXG4gIC8vIE9mZi1jYW52YXMgY29udGFpbmVyXG4gIC5vZmYtY2FudmFzIHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWJhc2U7XG5cbiAgICAvLyBGb3JjZSBwb3NpdGlvbiBhYnNvbHV0ZSBmb3IgbmVzdGVkIG9mZi1jYW52YXMgYmVjYXVzZSBmaXhlZCBkb2Vzbid0IHdvcmsgZm9yIHB1c2ggdHJhbnNpdGlvbiB3aXRoaW4gdGhlIHRyYW5zZm9ybSBzY29wZS5cbiAgICBAYXQtcm9vdCAuI3skbWFpbmNvbnRlbnQtY2xhc3N9ICYge1xuICAgICAgLy8gTk9URTogc2luY2Ugb3ZlcmxhcCB0cmFuc2l0aW9uIGlzIGN1cnJlbnRseSBmb3JjZWQgaWYgbmVzdGVkLCB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgcG9zaXRpb24gYWJzb2x1dGUgdW50aWwgbmVzdGVkIHB1c2ggdHJhbnNpdGlvbiBpcyBzdXBwb3J0ZWQuXG4gICAgICAvLyBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBjb250YWluZXIgd2l0aCBhYnNvbHV0ZSBwb3NpdGlvblxuICAub2ZmLWNhbnZhcy1hYnNvbHV0ZSB7XG4gICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1iYXNlKCRmaXhlZDogZmFsc2UpO1xuICB9XG5cbiAgLy8gT2ZmLWNhbnZhcyBwb3NpdGlvbiBjbGFzc2VzXG4gIC5wb3NpdGlvbi1sZWZ0ICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihsZWZ0LCAgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi1yaWdodCAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbihyaWdodCwgIGhvcml6b250YWwpOyB9XG4gIC5wb3NpdGlvbi10b3AgICAgIHsgQGluY2x1ZGUgb2ZmLWNhbnZhcy1wb3NpdGlvbih0b3AsICAgIHZlcnRpY2FsKTsgfVxuICAucG9zaXRpb24tYm90dG9tICB7IEBpbmNsdWRlIG9mZi1jYW52YXMtcG9zaXRpb24oYm90dG9tLCB2ZXJ0aWNhbCk7IH1cblxuICAub2ZmLWNhbnZhcy1jb250ZW50IHtcbiAgICBAaW5jbHVkZSBvZmYtY2FudmFzLWNvbnRlbnQ7XG4gIH1cblxuICAvLyBSZXZlYWwgb2ZmLWNhbnZhcyBwYW5lbCBvbiBsYXJnZXIgc2NyZWVuc1xuICBAZWFjaCAkbmFtZSwgJHZhbHVlIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgIEBpZiAkbmFtZSAhPSAkLXpmLXplcm8tYnJlYWtwb2ludCB7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRuYW1lKSB7XG4gICAgICAgIC5wb3NpdGlvbi1sZWZ0LnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKGxlZnQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tcmlnaHQucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwocmlnaHQsICRvZmZjYW52YXMtcmV2ZWFsLXppbmRleCwgJG1haW5jb250ZW50LWNsYXNzLCAkbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAucG9zaXRpb24tdG9wLnJldmVhbC1mb3ItI3skbmFtZX0ge1xuICAgICAgICAgIEBpbmNsdWRlIG9mZi1jYW52YXMtcmV2ZWFsKHRvcCwgJG9mZmNhbnZhcy1yZXZlYWwtemluZGV4LCAkbWFpbmNvbnRlbnQtY2xhc3MsICRuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wb3NpdGlvbi1ib3R0b20ucmV2ZWFsLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgb2ZmLWNhbnZhcy1yZXZlYWwoYm90dG9tLCAkb2ZmY2FudmFzLXJldmVhbC16aW5kZXgsICRtYWluY29udGVudC1jbGFzcywgJG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW92ZSBpbi1jYW52YXMgZm9yIGxhcmdlciBzY3JlZW5zXG4gIEBlYWNoICRuYW1lLCAkdmFsdWUgaW4gJGJyZWFrcG9pbnQtY2xhc3NlcyB7XG4gICAgQGlmICRuYW1lICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG5hbWUpIHtcbiAgICAgICAgLm9mZi1jYW52YXMuaW4tY2FudmFzLWZvci0jeyRuYW1lfSB7XG4gICAgICAgICAgQGluY2x1ZGUgaW4tY2FudmFzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuQG1peGluIGZvdW5kYXRpb24tc3RpY2t5IHtcbiAgLnN0aWNreS1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5zdGlja3kge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICAuc3RpY2t5LmlzLXN0dWNrIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogNTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuaXMtYXQtdG9wIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgLnN0aWNreS5pcy1hbmNob3JlZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87XG5cbiAgICAmLmlzLWF0LWJvdHRvbSB7XG4gICAgICBib3R0b206IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdGl0bGUtYmFyXG4vLy8vXG5cbi8vLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItYmFja2dyb3VuZDogJGJsYWNrICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gUGFkZGluZyBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItcGFkZGluZzogMC41cmVtICFkZWZhdWx0O1xuXG4vLy8gRm9udCB3ZWlnaHQgb2YgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgV2VpZ2h0XG4kdGl0bGViYXItdGV4dC1mb250LXdlaWdodDogYm9sZCAhZGVmYXVsdDtcblxuLy8vIENvbG9yIG9mIG1lbnUgaWNvbnMgaW5zaWRlIGEgdGl0bGUgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdGl0bGViYXItaWNvbi1jb2xvcjogJHdoaXRlICFkZWZhdWx0O1xuXG4vLy8gQ29sb3Igb2YgbWVudSBpY29ucyBpbnNpZGUgYSB0aXRsZSBiYXIgb24gaG92ZXIuXG4vLy8gQHR5cGUgQ29sb3JcbiR0aXRsZWJhci1pY29uLWNvbG9yLWhvdmVyOiAkbWVkaXVtLWdyYXkgIWRlZmF1bHQ7XG5cbi8vLyBTcGFjaW5nIGJldHdlZW4gdGhlIG1lbnUgaWNvbiBhbmQgdGV4dCBpbnNpZGUgYSB0aXRsZSBiYXIuXG4vLy8gQHR5cGUgTGVuZ3RoXG4kdGl0bGViYXItaWNvbi1zcGFjaW5nOiAwLjI1cmVtICFkZWZhdWx0O1xuXG5AbWl4aW4gZm91bmRhdGlvbi10aXRsZS1iYXIge1xuICAudGl0bGUtYmFyIHtcbiAgICBwYWRkaW5nOiAkdGl0bGViYXItcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkdGl0bGViYXItYmFja2dyb3VuZDtcbiAgICBjb2xvcjogJHRpdGxlYmFyLWNvbG9yO1xuXG4gICAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gICAgfVxuXG4gICAgLm1lbnUtaWNvbiB7XG4gICAgICBtYXJnaW4tI3skZ2xvYmFsLWxlZnR9OiAkdGl0bGViYXItaWNvbi1zcGFjaW5nO1xuICAgICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06ICR0aXRsZWJhci1pY29uLXNwYWNpbmc7XG4gICAgfVxuICB9XG5cbiAgQGlmICRnbG9iYWwtZmxleGJveCB7XG4gICAgLnRpdGxlLWJhci1sZWZ0LFxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxleDogMSAxIDBweDsgLy8gc2Fzcy1saW50OmRpc2FibGUtbGluZSB6ZXJvLXVuaXRcbiAgICB9XG5cbiAgICAudGl0bGUtYmFyLXJpZ2h0IHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgLnRpdGxlLWJhci1sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC50aXRsZS1iYXItcmlnaHQge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLnRpdGxlLWJhci10aXRsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC13ZWlnaHQ6ICR0aXRsZWJhci10ZXh0LWZvbnQtd2VpZ2h0O1xuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgdG9wLWJhclxuLy8vL1xuXG4vLy8gUGFkZGluZyBmb3IgdGhlIHRvcCBiYXIuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXBhZGRpbmc6IDAuNXJlbSAhZGVmYXVsdDtcblxuLy8vIEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB0b3AgYmFyLiBUaGlzIGNvbG9yIGFsc28gY2FzY2FkZXMgdG8gbWVudXMgd2l0aGluIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLWJhY2tncm91bmQ6ICRsaWdodC1ncmF5ICFkZWZhdWx0O1xuXG4vLy8gQmFja2dyb3VuZCBjb2xvciBzdWJtZW51cyB3aXRoaW4gdGhlIHRvcCBiYXIuIFVzZWZ1bGwgaWYgJHRvcGJhci1iYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50LlxuLy8vIEB0eXBlIENvbG9yXG4kdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZDogJHRvcGJhci1iYWNrZ3JvdW5kICFkZWZhdWx0O1xuXG4vLy8gU3BhY2luZyBmb3IgdGhlIHRvcCBiYXIgdGl0bGUuXG4vLy8gQHR5cGUgTnVtYmVyXG4kdG9wYmFyLXRpdGxlLXNwYWNpbmc6IDAuNXJlbSAxcmVtIDAuNXJlbSAwICFkZWZhdWx0O1xuXG4vLy8gTWF4aW11bSB3aWR0aCBvZiBgPGlucHV0PmAgZWxlbWVudHMgaW5zaWRlIHRoZSB0b3AgYmFyLlxuLy8vIEB0eXBlIE51bWJlclxuJHRvcGJhci1pbnB1dC13aWR0aDogMjAwcHggIWRlZmF1bHQ7XG5cbi8vLyBCcmVha3BvaW50IGF0IHdoaWNoIHRvcCBiYXIgc3dpdGNoZXMgZnJvbSBtb2JpbGUgdG8gZGVza3RvcCB2aWV3LlxuLy8vIEB0eXBlIEJyZWFrcG9pbnRcbiR0b3BiYXItdW5zdGFjay1icmVha3BvaW50OiBtZWRpdW0gIWRlZmF1bHQ7XG5cbi8vLyBBZGRzIHN0eWxlcyBmb3IgYSB0b3AgYmFyIGNvbnRhaW5lci5cbkBtaXhpbiB0b3AtYmFyLWNvbnRhaW5lciB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9XG5cbiAgcGFkZGluZzogJHRvcGJhci1wYWRkaW5nO1xuXG4gICYsXG4gIHVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9wYmFyLWJhY2tncm91bmQ7XG4gIH1cblxuICAvLyBDaGVjayBpZiAkdG9wYmFyLWJhY2tncm91bmQgaXMgZGlmZmVybnQgZnJvbSAkdG9wYmFyLWJhY2tncm91bmQtc3VibWVudVxuICBAaWYgKCR0b3BiYXItYmFja2dyb3VuZCAhPSAkdG9wYmFyLXN1Ym1lbnUtYmFja2dyb3VuZCkge1xuICAgIHVsIHVsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0b3BiYXItc3VibWVudS1iYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RyYWluIHdpZHRoIG9mIGlucHV0cyBieSBkZWZhdWx0IHRvIG1ha2UgdGhlbSBlYXNpZXIgdG8gYXJyYW5nZVxuICBpbnB1dCB7XG4gICAgbWF4LXdpZHRoOiAkdG9wYmFyLWlucHV0LXdpZHRoO1xuICAgIG1hcmdpbi0jeyRnbG9iYWwtcmlnaHR9OiAxcmVtO1xuICB9XG5cbiAgLy8gVGhlIGFib3ZlIHN0eWxlcyBzaG91bGRuJ3QgYXBwbHkgdG8gaW5wdXQgZ3JvdXAgZmllbGRzXG4gIC5pbnB1dC1ncm91cC1maWVsZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLSN7JGdsb2JhbC1yaWdodH06IDA7XG4gIH1cblxuICBpbnB1dC5idXR0b24geyAvLyBzYXNzLWxpbnQ6ZGlzYWJsZS1saW5lIG5vLXF1YWxpZnlpbmctZWxlbWVudHNcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4vLy8gTWFrZXMgc2VjdGlvbnMgb2YgYSB0b3AgYmFyIHN0YWNrIG9uIHRvcCBvZiBlYWNoIG90aGVyLlxuQG1peGluIHRvcC1iYXItc3RhY2tlZCB7XG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgIC8vIFN1Yi1zZWN0aW9uc1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAvLyBTdWItc2VjdGlvbnNcbiAgICAudG9wLWJhci1sZWZ0LFxuICAgIC50b3AtYmFyLXJpZ2h0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4vLy8gVW5kb2VzIHRoZSBDU1MgYXBwbGllZCBieSB0aGUgYHRvcC1iYXItc3RhY2tlZCgpYCBtaXhpbi5cbkBtaXhpbiB0b3AtYmFyLXVuc3RhY2sge1xuICBAaWYgJGdsb2JhbC1mbGV4Ym94IHtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcblxuICAgIC50b3AtYmFyLWxlZnQge1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLWxlZnQsXG4gICAgLnRvcC1iYXItcmlnaHQge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXRvcC1iYXIge1xuICAvLyBUb3AgYmFyIGNvbnRhaW5lclxuICAudG9wLWJhciB7XG4gICAgQGluY2x1ZGUgdG9wLWJhci1jb250YWluZXI7XG5cbiAgICAvLyBTdGFjayBvbiBzbWFsbCBzY3JlZW5zIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0b3BiYXItdW5zdGFjay1icmVha3BvaW50KSB7XG4gICAgICBAaW5jbHVkZSB0b3AtYmFyLXVuc3RhY2s7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2xhc3NlcyBmb3Igc3RhY2tpbmcgb24gZWFjaCBzY3JlZW4gc2l6ZSAoZGVmaW5lZCBpbiAkYnJlYWtwb2ludC1jbGFzc2VzKVxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50LWNsYXNzZXMge1xuICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgJi5zdGFja2VkLWZvci0jeyRzaXplfSB7XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBkb3duKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSB0b3AtYmFyLXN0YWNrZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3ViLXNlY3Rpb25zXG4gIEBpZiAkZ2xvYmFsLWZsZXhib3gge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgbWFyZ2luOiAkdG9wYmFyLXRpdGxlLXNwYWNpbmc7XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCxcbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIC50b3AtYmFyLXRpdGxlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgcGFkZGluZzogJHRvcGJhci10aXRsZS1zcGFjaW5nO1xuXG4gICAgICAubWVudS1pY29uIHtcbiAgICAgICAgYm90dG9tOiAycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnRvcC1iYXItbGVmdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG5cbiAgICAudG9wLWJhci1yaWdodCB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG59XG4iLCIvLyBGb3VuZGF0aW9uIGZvciBTaXRlc1xuLy8gaHR0cHM6Ly9nZXQuZm91bmRhdGlvblxuLy8gTGljZW5zZWQgdW5kZXIgTUlUIE9wZW4gU291cmNlXG5cbi8vLy9cbi8vLyBAZ3JvdXAgZmxvYXRcbi8vLy9cblxuQG1peGluIGZvdW5kYXRpb24tZmxvYXQtY2xhc3NlcyB7XG4gIC5mbG9hdC1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmZsb2F0LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5mbG9hdC1jZW50ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5jbGVhcmZpeCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH1cbn1cbiIsIkBmdW5jdGlvbiAtemYtZmxleC1qdXN0aWZ5KCR0ZXh0LWRpcmVjdGlvbil7XG4gICQtemYtZmxleC1qdXN0aWZ5OiAoXG4gICAgJ2xlZnQnOiBpZigkdGV4dC1kaXJlY3Rpb24gPT0gcnRsLCBmbGV4LWVuZCwgZmxleC1zdGFydCksXG4gICAgJ3JpZ2h0JzogaWYoJHRleHQtZGlyZWN0aW9uID09IHJ0bCwgZmxleC1zdGFydCwgZmxleC1lbmQpLFxuICAgICdjZW50ZXInOiBjZW50ZXIsXG4gICAgJ2p1c3RpZnknOiBzcGFjZS1iZXR3ZWVuLFxuICAgICdzcGFjZWQnOiBzcGFjZS1hcm91bmQsXG4gICk7XG5cbiAgQHJldHVybiAkLXpmLWZsZXgtanVzdGlmeTtcbn1cblxuXG4kLXpmLWZsZXgtYWxpZ246IChcbiAgJ3RvcCc6IGZsZXgtc3RhcnQsXG4gICdib3R0b20nOiBmbGV4LWVuZCxcbiAgJ21pZGRsZSc6IGNlbnRlcixcbiAgJ3N0cmV0Y2gnOiBzdHJldGNoLFxuKTtcblxuJC16Zi1mbGV4LWRpcmVjdGlvbjogKFxuICAncm93Jzogcm93LFxuICAncm93LXJldmVyc2UnOiByb3ctcmV2ZXJzZSxcbiAgJ2NvbHVtbic6IGNvbHVtbixcbiAgJ2NvbHVtbi1yZXZlcnNlJzogY29sdW1uLXJldmVyc2UsXG4pO1xuXG4vLy8gRW5hYmxlcyBmbGV4Ym94IGJ5IGFkZGluZyBgZGlzcGxheTogZmxleGAgdG8gdGhlIGVsZW1lbnQuXG5AbWl4aW4gZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi8vLyBIb3Jpem9udGFsbHkgb3IgdmVydGljYWxseSBhbGlnbnMgdGhlIGl0ZW1zIHdpdGhpbiBhIGZsZXggY29udGFpbmVyLlxuLy8vXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeCBbbnVsbF0gLSBIb3Jpem9udGFsIGFsaWdubWVudCB0byB1c2UuIENhbiBiZSBgbGVmdGAsIGByaWdodGAsIGBjZW50ZXJgLCBganVzdGlmeWAsIG9yIGBzcGFjZWRgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgaG9yaXpvbnRhbCBhbGlnbm1lbnQuXG4vLy8gQHBhcmFtIHtLZXl3b3JkfSAkeSBbbnVsbF0gLSBWZXJ0aWNhbCBhbGlnbm1lbnQgdG8gdXNlLiBDYW4gYmUgYHRvcGAsIGBib3R0b21gLCBgbWlkZGxlYCwgb3IgYHN0cmV0Y2hgLiBPciwgc2V0IGl0IHRvIGBudWxsYCAodGhlIGRlZmF1bHQpIHRvIG5vdCBzZXQgdmVydGljYWwgYWxpZ25tZW50LlxuQG1peGluIGZsZXgtYWxpZ24oJHg6IG51bGwsICR5OiBudWxsKSB7XG4gIEBpZiAkeCB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCQtemYtZmxleC1qdXN0aWZ5LCAkeCkge1xuICAgICAgJHg6IG1hcC1nZXQoJC16Zi1mbGV4LWp1c3RpZnksICR4KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHdhcm4gJ2ZsZXgtZ3JpZC1yb3ctYWxpZ24oKTogI3skeH0gaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGhvcml6b250YWwgYWxpZ25tZW50LiBVc2UgbGVmdCwgcmlnaHQsIGNlbnRlciwganVzdGlmeSwgb3Igc3BhY2VkLic7XG4gICAgfVxuICB9XG5cbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtcm93LWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB2ZXJ0aWNhbCBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAganVzdGlmeS1jb250ZW50OiAkeDtcbiAgYWxpZ24taXRlbXM6ICR5O1xufVxuXG4vLy8gVmVydGljYWxseSBhbGlnbiBhIHNpbmdsZSBjb2x1bW4gd2l0aGluIGEgZmxleCByb3cuIEFwcGx5IHRoaXMgbWl4aW4gdG8gYSBmbGV4IGNvbHVtbi5cbi8vL1xuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHkgW251bGxdIC0gVmVydGljYWwgYWxpZ25tZW50IHRvIHVzZS4gQ2FuIGJlIGB0b3BgLCBgYm90dG9tYCwgYG1pZGRsZWAsIG9yIGBzdHJldGNoYC4gT3IsIHNldCBpdCB0byBgbnVsbGAgKHRoZSBkZWZhdWx0KSB0byBub3Qgc2V0IHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiBmbGV4LWFsaWduLXNlbGYoJHk6IG51bGwpIHtcbiAgQGlmICR5IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJC16Zi1mbGV4LWFsaWduLCAkeSkge1xuICAgICAgJHk6IG1hcC1nZXQoJC16Zi1mbGV4LWFsaWduLCAkeSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICdmbGV4LWdyaWQtY29sdW1uLWFsaWduKCk6ICN7JHl9IGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBhbGlnbm1lbnQuIFVzZSB0b3AsIGJvdHRvbSwgbWlkZGxlLCBvciBzdHJldGNoLic7XG4gICAgfVxuICB9XG5cbiAgYWxpZ24tc2VsZjogJHk7XG59XG5cbi8vLyBDaGFuZ2VzIHRoZSBzb3VyY2Ugb3JkZXIgb2YgYSBmbGV4IGNoaWxkLiBDaGlsZHJlbiB3aXRoIGxvd2VyIG51bWJlcnMgYXBwZWFyIGZpcnN0IGluIHRoZSBsYXlvdXQuXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRvcmRlciBbMF0gLSBPcmRlciBudW1iZXIgdG8gYXBwbHkuXG5AbWl4aW4gZmxleC1vcmRlcigkb3JkZXI6IDApIHtcbiAgb3JkZXI6ICRvcmRlcjtcbn1cblxuLy8vIENoYW5nZSBmbGV4LWRpcmVjdGlvblxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJGRpcmVjdGlvbiBbcm93XSAtIEZsZXggZGlyZWN0aW9uIHRvIHVzZS4gQ2FuIGJlXG4vLy8gICAtIHJvdyAoZGVmYXVsdCk6IHNhbWUgYXMgdGV4dCBkaXJlY3Rpb25cbi8vLyAgIC0gcm93LXJldmVyc2U6IG9wcG9zaXRlIHRvIHRleHQgZGlyZWN0aW9uXG4vLy8gICAtIGNvbHVtbjogc2FtZSBhcyByb3cgYnV0IHRvcCB0byBib3R0b21cbi8vLyAgIC0gY29sdW1uLXJldmVyc2U6IHNhbWUgYXMgcm93LXJldmVyc2UgdG9wIHRvIGJvdHRvbVxuQG1peGluIGZsZXgtZGlyZWN0aW9uKCRkaXJlY3Rpb246IHJvdykge1xuICBmbGV4LWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vL1xuLy8vIEBncm91cCBGbGV4Ym94IFV0aWxpdGllc1xuLy8vL1xuLy9cbi8vLyBEZWZhdWx0IHZhbHVlIGZvciB0aGUgY291bnQgb2Ygc291cmNlIG9yZGVyaW5nYFxuLy8vIEB0eXBlIE51bWJlclxuJGZsZXgtc291cmNlLW9yZGVyaW5nLWNvdW50OiA2ICFkZWZhdWx0O1xuXG4vLy8gUXVpY2tseSBkaXNhYmxlL2VuYWJsZSBSZXNwb25zaXZlIGJyZWFrcG9pbnRzIGZvciBWYW5pbGxhIEZsZXggSGVscGVycy5cbi8vLyBAdHlwZSBCb29sZWFuXG4kZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzOiB0cnVlICFkZWZhdWx0O1xuXG5AbWl4aW4gZmxleC1oZWxwZXJzIHtcbiAgLmZsZXgtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBmbGV4O1xuICB9XG5cbiAgLmZsZXgtY2hpbGQtYXV0byB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gIH1cblxuICAuZmxleC1jaGlsZC1ncm93IHtcbiAgICBmbGV4OiAxIDAgYXV0bztcbiAgfVxuXG4gIC5mbGV4LWNoaWxkLXNocmluayB7XG4gICAgZmxleDogMCAxIGF1dG87XG4gIH1cblxuICBAZWFjaCAkZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtZGlyZWN0aW9uIHtcbiAgICAuZmxleC1kaXItI3skZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgfVxuICB9XG5cbiAgQGlmICgkZmxleGJveC1yZXNwb25zaXZlLWJyZWFrcG9pbnRzKSB7XG4gICAgLy8gTG9vcCB0aHJvdWdoIFJlc3BvbnNpdmUgQnJlYWtwb2ludHNcbiAgICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHNpemUpIHtcbiAgICAgICAgQGlmICRzaXplICE9ICQtemYtemVyby1icmVha3BvaW50IHtcbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jb250YWluZXIge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAuI3skc2l6ZX0tZmxleC1jaGlsZC1hdXRvIHtcbiAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC4jeyRzaXplfS1mbGV4LWNoaWxkLWdyb3cge1xuICAgICAgICAgICAgZmxleDogMSAwIGF1dG87XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLiN7JHNpemV9LWZsZXgtY2hpbGQtc2hyaW5rIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEBlYWNoICRkaXIsICRwcm9wIGluICQtemYtZmxleC1kaXJlY3Rpb24ge1xuICAgICAgICAgICAgLiN7JHNpemV9LWZsZXgtZGlyLSN7JGRpcn0ge1xuICAgICAgICAgICAgICBAaW5jbHVkZSBmbGV4LWRpcmVjdGlvbigkcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLWZsZXgtY2xhc3NlcyB7XG4gIC8vIEhvcml6b250YWwgYWxpZ25tZW50IHVzaW5nIGp1c3RpZnktY29udGVudFxuICBAZWFjaCAkaGRpciwgJHByb3AgaW4gJC16Zi1mbGV4LWp1c3RpZnkge1xuICAgIC5hbGlnbi0jeyRoZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR4OiAkaGRpcik7XG4gICAgfVxuICB9XG4gIFxuICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBTcGVjaWZpY2FsbHkgZm9yIFZlcnRpY2FsIE1lbnVcbiAgQGVhY2ggJGhkaXIsICRwcm9wIGluIG1hcC1yZW1vdmUoJC16Zi1mbGV4LWp1c3RpZnksICdqdXN0aWZ5JywgJ3NwYWNlZCcpIHtcbiAgICAuYWxpZ24tI3skaGRpcn0ge1xuICAgICAgJi52ZXJ0aWNhbCB7XG4gICAgICAgICYubWVudSA+IGxpID4gYSB7XG4gICAgICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogJGhkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWwgYWxpZ25tZW50IHVzaW5nIGFsaWduLWl0ZW1zIGFuZCBhbGlnbi1zZWxmXG4gIEBlYWNoICR2ZGlyLCAkcHJvcCBpbiAkLXpmLWZsZXgtYWxpZ24ge1xuICAgIC5hbGlnbi0jeyR2ZGlyfSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWFsaWduKCR5OiAkdmRpcik7XG4gICAgfVxuXG4gICAgLmFsaWduLXNlbGYtI3skdmRpcn0ge1xuICAgICAgQGluY2x1ZGUgZmxleC1hbGlnbi1zZWxmKCR5OiAkdmRpcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VudHJhbCBhbGlnbm1lbnQgb2YgY29udGVudFxuICAuYWxpZ24tY2VudGVyLW1pZGRsZSB7XG4gICAgQGluY2x1ZGUgZmxleC1hbGlnbigkeDogY2VudGVyLCAkeTogbWlkZGxlKTtcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAvLyBTb3VyY2Ugb3JkZXJpbmdcbiAgQGluY2x1ZGUgLXpmLWVhY2gtYnJlYWtwb2ludCB7XG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZmxleC1zb3VyY2Utb3JkZXJpbmctY291bnQge1xuICAgICAgLiN7JC16Zi1zaXplfS1vcmRlci0jeyRpfSB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtb3JkZXIoJGkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbmlsbGEgRmxleGJveCBIZWxwZXJzXG4gIEBpbmNsdWRlIGZsZXgtaGVscGVycztcbn1cbiIsIi8vIEZvdW5kYXRpb24gZm9yIFNpdGVzXG4vLyBodHRwczovL2dldC5mb3VuZGF0aW9uXG4vLyBMaWNlbnNlZCB1bmRlciBNSVQgT3BlbiBTb3VyY2VcblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3IoJHNpemUpIHtcbiAgJHNpemU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkc2l6ZSk7XG4gIC8vIE1heCB2YWx1ZSBpcyAwLjJweCB1bmRlciB0aGUgbmV4dCBicmVha3BvaW50ICgwLjAyIC8gMTYgPSAwLjAwMTI1KS5cbiAgLy8gVXNlIGEgcHJlY2lzaW9uIHVuZGVyIDFweCB0byBzdXBwb3J0IGJyb3dzZXIgem9vbSwgYnV0IG5vdCB0byBsb3cgdG8gYXZvaWQgcm91bmRpbmcuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZm91bmRhdGlvbi9mb3VuZGF0aW9uLXNpdGVzL2lzc3Vlcy8xMTMxM1xuICAkc2l6ZTogLXpmLWJwLXRvLWVtKCRzaXplKSAtIC4wMDEyNTtcblxuICBAaW5jbHVkZSBicmVha3BvaW50KCRzaXplIGRvd24pIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLy8vIEhpZGUgYW4gZWxlbWVudCBieSBkZWZhdWx0LCBvbmx5IGRpc3BsYXlpbmcgaXQgd2l0aGluIGEgY2VydGFpbiBicmVha3BvaW50LlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gc2hvdy1mb3Itb25seSgkc2l6ZSkge1xuICAkbG93ZXItYm91bmQtc2l6ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKTtcbiAgJHVwcGVyLWJvdW5kLXNpemU6IC16Zi1tYXAtbmV4dCgkYnJlYWtwb2ludHMsICRzaXplKTtcblxuICAvLyBtb3JlIG9mdGVuIHRoYW4gbm90IHRoaXMgd2lsbCBiZSBjb3JyZWN0LCBqdXN0IG9uZSB0aW1lIHJvdW5kIHRoZSBsb29wIGl0IHdvbid0IHNvIHNldCBpbiBzY29wZSBoZXJlXG4gICRsb3dlci1ib3VuZDogLXpmLWJwLXRvLWVtKCRsb3dlci1ib3VuZC1zaXplKSAtIC4wMDEyNTtcbiAgLy8gdGVzdCBhY3R1YWwgbG93ZXItYm91bmQtc2l6ZSwgaWYgMCBzZXQgaXQgdG8gMGVtXG4gIEBpZiBzdHJpcC11bml0KCRsb3dlci1ib3VuZC1zaXplKSA9PSAwIHtcbiAgICAkbG93ZXItYm91bmQ6IC16Zi1icC10by1lbSgkbG93ZXItYm91bmQtc2l6ZSk7XG4gIH1cblxuICBAaWYgJHVwcGVyLWJvdW5kLXNpemUgPT0gbnVsbCB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGxvd2VyLWJvdW5kKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAkdXBwZXItYm91bmQ6IC16Zi1icC10by1lbSgkdXBwZXItYm91bmQtc2l6ZSk7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbG93ZXItYm91bmQpLCBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICR1cHBlci1ib3VuZCkge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vLyBTaG93IGFuIGVsZW1lbnQgYnkgZGVmYXVsdCwgYW5kIGhpZGUgaXQgYWJvdmUgYSBjZXJ0YWluIHNjcmVlbiBzaXplLlxuLy8vIEBwYXJhbSB7S2V5d29yZH0gJHNpemUgLSBCcmVha3BvaW50IHRvIHVzZS4gKipNdXN0IGJlIGEgYnJlYWtwb2ludCBkZWZpbmVkIGluIGAkYnJlYWtwb2ludHNgLioqXG5AbWl4aW4gaGlkZS1mb3IoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vLy8gU2hvdyBhbiBlbGVtZW50IGJ5IGRlZmF1bHQsIGFuZCBoaWRlIGl0IGFib3ZlIGEgY2VydGFpbiBzY3JlZW4gc2l6ZS5cbi8vLyBAcGFyYW0ge0tleXdvcmR9ICRzaXplIC0gQnJlYWtwb2ludCB0byB1c2UuICoqTXVzdCBiZSBhIGJyZWFrcG9pbnQgZGVmaW5lZCBpbiBgJGJyZWFrcG9pbnRzYC4qKlxuQG1peGluIGhpZGUtZm9yLW9ubHkoJHNpemUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkc2l6ZSBvbmx5KSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtaXhpbiBmb3VuZGF0aW9uLXZpc2liaWxpdHktY2xhc3NlcyB7XG4gIC8vIEJhc2ljIGhpZGluZyBjbGFzc2VzXG4gIC5oaWRlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaW52aXNpYmxlIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIH1cblxuICAvLyBSZXNwb25zaXZlIHZpc2liaWxpdHkgY2xhc3Nlc1xuICBAZWFjaCAkc2l6ZSBpbiAkYnJlYWtwb2ludC1jbGFzc2VzIHtcbiAgICBAaWYgJHNpemUgIT0gJC16Zi16ZXJvLWJyZWFrcG9pbnQge1xuICAgICAgLmhpZGUtZm9yLSN7JHNpemV9IHtcbiAgICAgICAgQGluY2x1ZGUgaGlkZS1mb3IoJHNpemUpO1xuICAgICAgfVxuXG4gICAgICAuc2hvdy1mb3ItI3skc2l6ZX0ge1xuICAgICAgICBAaW5jbHVkZSBzaG93LWZvcigkc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhpZGUtZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgaGlkZS1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuXG4gICAgLnNob3ctZm9yLSN7JHNpemV9LW9ubHkge1xuICAgICAgQGluY2x1ZGUgc2hvdy1mb3Itb25seSgkc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2NyZWVuIHJlYWRlciB2aXNpYmlsaXR5IGNsYXNzZXNcbiAgLy8gTmVlZCBhIFwiaGlkZS1mb3Itc3JcIiBjbGFzcz8gQWRkIGFyaWEtaGlkZGVuPSd0cnVlJyB0byB0aGUgZWxlbWVudFxuICAuc2hvdy1mb3Itc3IsXG4gIC5zaG93LW9uLWZvY3VzIHtcbiAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZTtcbiAgfVxuXG4gIC8vIE9ubHkgZGlzcGxheSB0aGUgZWxlbWVudCB3aGVuIGl0J3MgZm9jdXNlZFxuICAuc2hvdy1vbi1mb2N1cyB7XG4gICAgJjphY3RpdmUsXG4gICAgJjpmb2N1cyB7XG4gICAgICBAaW5jbHVkZSBlbGVtZW50LWludmlzaWJsZS1vZmY7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFuZHNjYXBlIGFuZCBwb3J0cmFpdCB2aXNpYmlsaXR5XG4gIC5zaG93LWZvci1sYW5kc2NhcGUsXG4gIC5oaWRlLWZvci1wb3J0cmFpdCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQocG9ydHJhaXQpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAuaGlkZS1mb3ItbGFuZHNjYXBlLFxuICAuc2hvdy1mb3ItcG9ydHJhaXQge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChwb3J0cmFpdCkge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbiIsIiN0b2FzdC1jb250YWluZXIge1xuXG4gIHotaW5kZXg6IDEwMDAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuXG4gIHBhZGRpbmc6IDguNXZoIDAgMCAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICBkaXYudG9hc3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzO1xuXG4gICAgJi50b2FzdC10ZW1wbGF0ZSB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuXG4gICAgc3Bhbi5tZXNzYWdlIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG5cbiAgICAgIHotaW5kZXg6IDEwMDAxO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYm94LXNoYWRvdzogMnB4IDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7XG5cbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM2MjYyNjI7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmI2YjZiO1xuICAgICAgcGFkZGluZzogLjNlbSAuNmVtO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAvL29wYWNpdHk6IC45O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogLjQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufSIsIi5iYWNrZ3JvdW5kIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwMDAwO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU1LCA1NSwgNTUsIDAuNik7XG5cbiAgLm1vZGFsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHdpZHRoOiA4MCU7XG5cbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LWhlaWdodDogODAlO1xuICAgIG1heC13aWR0aDogbnRoKG50aCgkYnJlYWtwb2ludHMsIDQpLCAyKTtcblxuICAgICYuc21hbGwtbWFyZ2luIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICB3aWR0aDogOTUlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBlYWNoICRzaXplIGluICRicmVha3BvaW50cyB7XG4gICAgICAmLm1heC0je250aCgkc2l6ZSwgMSl9IHtcbiAgICAgICAgbWF4LXdpZHRoOiBudGgoJHNpemUsIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gICAgfVxuXG4gICAgLmNvbnRlbnQtY29udGFpbmVyIHtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuXG4gICAgICAubG9hZGVyIHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jbG9zZSB7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIC8vY29sb3I6ICNhYWE7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIC8vY29sb3I6IGJsYWNrO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuXG4gICAgICAuYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwLjZlbSAwLjhlbTtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jaG9vc2UtZGlhbG9nLXZhbHVlLXJvd3tcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgcGFkZGluZy10b3A6IDAuNWVtO1xuICAgICAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1MCwgMTUwLCAxNTAsIDAuMTUpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXRvcDogMC4zcmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgfVxuXG4gICAgLy9BZGRpdGlvbmFsIGNsYXNzZXNcbiAgICAmLm5vLXRpdGxlIHtcbiAgICAgIC50aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbn0iLCJAaW1wb3J0IFwibGliL2NvcmVTZXR0aW5nc1wiO1xuQGltcG9ydCBcImZvdW5kYXRpb25TZXR0aW5nc1wiO1xuXG4kZGVmYXVsdFRoZW1lVmFsdWVzOiAoXG4gICAgICAgIGNsYXNzOiBcIlwiLFxuICAvL3RoZW1lQ29sb3I6ICMzODM4MzgsXG4gICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgIG5hdkJhclRleHRDb2xvcjogaW5oZXJpdCxcbiAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNjYWNhY2EsXG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYsXG4gICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgaGlnaGxpZ2h0OiAjRDU2QjUyLFxuICAgICAgICB0ZXh0Q29sb3JPbmU6ICNiY2JiYmIsXG4gICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICBjb2xvclR3bzogIzNCM0IzQixcbiAgICAgICAgY29sb3JUaHJlZTogI0ZGRixcbiAgICAgICAgYnV0dG9uQm9yZGVyOiBub25lLFxuICAgICAgICBidXR0b25Db2xvcjogd2hpdGUsXG4pO1xuXG4kdGhlbWVzOiAoXG4gICAgICAgIGJsYWNrOihcbiAgICAgICAgICAgICAgICBjbGFzczogYmxhY2ssXG4gICAgICAgICAgLy90aGVtZUNvbG9yOiAjMDAwMDAwLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiBpbmhlcml0LFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgjM2IzYjNiLCAjMTkxOTE5KSxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6ICNENTZCNTIsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yT25lOiAjYmNiYmJiLFxuICAgICAgICAgICAgICAgIGNvbG9yT25lOiAjRjNGMUYxLFxuICAgICAgICAgICAgICAgIGNvbG9yVHdvOiAjM0IzQjNCLFxuICAgICAgICAgICAgICAgIGNvbG9yVGhyZWU6ICNGRkYsXG4gICAgICAgICAgICAgICAgYnV0dG9uQm9yZGVyOiAxcHggc29saWQgYmxhY2ssXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29sb3I6IGJsYWNrLFxuICAgICAgICApLFxuICAgICAgICByZWQ6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiByZWQsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmMDAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM4NzAwMTUsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2I3MWMxYSxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmx1ZTooXG4gICAgICAgICAgICAgICAgY2xhc3M6IGJsdWUsXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzJjNThhZSxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMxYTMwNjIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzY3M0FCNyxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZ3JlZW46KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBncmVlbixcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzAwMzYxMyxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDA4MDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBwaW5rOihcbiAgICAgICAgICAgICAgICBjbGFzczogcGluayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzcwMzc0YSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmY2OWI0LFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiBub25lLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZlxuICAgICAgICApLFxuICAgICAgICBkYXJrOiAoXG4gICAgICAgICAgICAgICAgY2xhc3M6IGRhcmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzM3MzczNyxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM5YjliOWIsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwXG4gICAgICAgIClcbik7XG5cbiR0aGVtZXM6IChcbiAgICAgICAgcmVkOihcbiAgICAgICAgICAgICAgICBjbGFzczogcmVkLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjAwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjODcwMDE1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNiNzFjMWEsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsdWU6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibHVlLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMyYzU4YWUsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMWEzMDYyLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICM2NzNBQjcsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGdyZWVuOihcbiAgICAgICAgICAgICAgICBjbGFzczogZ3JlZW4sXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMwMDM2MTMsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgcGluazooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHBpbmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM3MDM3NGEsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmxhY2s6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibGFjayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgIzAwMDAwMCxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzRlNGU0ZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjY2FjYWNhLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdDooXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMzUzNTM1LFxuICAgICAgICAgICAgICAgIG5hdmJhckNvbG9yOiByZ2JhKDAsIDIwNSwgMCwgMC41KSwgLy9UT0RPIGJlbnV0emVuXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDAsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM0ZTRlNGUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2NhY2FjYSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNmZWZlZmUsXG4gICAgICAgICksXG4gICAgICAgIGRhcms6IChcbiAgICAgICAgICAgICAgICBjbGFzczogZGFyayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzRiNGI0YixcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDAwMDBcbiAgICAgICAgKVxuKTtcblxuJHRoZW1lczogbWFwLW1lcmdlKCR0aGVtZXMsIChkYXJrOiAoXG4gICAgICAgIGNsYXNzOiBkYXJrLFxuICAgICAgICB0aGVtZUNvbG9yOiAjMzczNzM3LFxuICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM0YjRiNGIsXG4gICAgICAgIGxpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgc3Bpbm5lckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgIHRleHRDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgdGV4dENvbG9yMjogIzliOWI5YixcbiAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgIGxpbmtCb3JkZXJCb3R0b206IDFweCBzb2xpZCAjZmZmZmZmLFxuICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMFxuKSkpO1xuXG5AZnVuY3Rpb24gcmVjdXJzaXZlLW1hcC1tZXJnZSgkcGFyZW50LW1hcCwgJGNoaWxkLW1hcCkge1xuICAkcmVzdWx0OiAkcGFyZW50LW1hcDtcbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRjaGlsZC1tYXAge1xuICAgIEBpZiAobm90IG1hcC1oYXMta2V5KCRyZXN1bHQsICRrZXkpKSBvciAodHlwZS1vZihtYXAtZ2V0KCRyZXN1bHQsICRrZXkpKSAhPSB0eXBlLW9mKCR2YWx1ZSkpIG9yIChub3QgKHR5cGUtb2YobWFwLWdldCgkcmVzdWx0LCAka2V5KSkgPT0gbWFwIGFuZCB0eXBlLW9mKCR2YWx1ZSkgPT0gbWFwKSkge1xuICAgICAgJHJlc3VsdDogbWFwLW1lcmdlKCRyZXN1bHQsICgka2V5OiAkdmFsdWUpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRyZXN1bHQ6IG1hcC1tZXJnZSgkcmVzdWx0LCAoJGtleTogbm9uLWRlc3RydWN0aXZlLW1hcC1tZXJnZShtYXAtZ2V0KCRyZXN1bHQsICRrZXkpLCAkdmFsdWUpKSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuQGVhY2ggJHRoZW1lLCAkdmFsdWVzIGluICR0aGVtZXMge1xuICAkdGhlbWVNYXAgOiByZWN1cnNpdmUtbWFwLW1lcmdlKCRkZWZhdWx0VGhlbWVWYWx1ZXMsICR2YWx1ZXMpO1xuICAkdGhlbWVzOiBtYXAtbWVyZ2UoJHRoZW1lcywgKCR0aGVtZTogJHRoZW1lTWFwKSlcbn1cblxuJGJyZWFrcG9pbnRzOiAoXG4gICAgICAgIHNtYWxsOiAwLFxuICAgICAgICBzbWVkaXVtOiA0MDBweCxcbiAgICAgICAgbWVkaXVtOiA2NDBweCxcbiAgICAgICAgbGFyZ2U6IDEwMjRweCxcbiAgICAgICAgeGxhcmdlOiAxMjAwcHgsXG4gICAgICAgIHh4bGFyZ2U6IDE0NDBweCxcbik7XG5cbiRtYXJnaW5zOiAoXG4gICAgICAgIHNtYWxsOiAwLjYyNXJlbSxcbiAgLy9zbWVkaXVtOiAwLjYyNXJlbSxcbiAgICAgICAgbWVkaXVtOiAwLjkzNzVyZW0sXG4gIC8vbGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94bGFyZ2U6IDAuOTM3NXJlbSxcbiAgLy94eGxhcmdlOiAwLjkzNzVyZW0sXG4pO1xuXG4kcm90YXRpb25EZWdyZWVzOiAoOTAgMTgwIDI3MCAzNjApO1xuJGFuaW1hdGlvbkR1cmF0aW9uOiAuMjVzO1xuXG4vLyRkZWdyZWVNYXRyaXg6IChcbi8vICAgICAgICAvLzA6bWF0cml4KDEsIDAsIDAsIDEsIDAsIDApLFxuLy8gICAgICAgIDA6cm90YXRlKDBkZWcpLFxuLy8gICAgICAgIDkwOm1hdHJpeCgwLCAxLCAtMSwgMCwgMCwgMCksXG4vLyAgICAgICAgMTgwOm1hdHJpeCgtMSwgMCwgMCwgLTEsIDAsIDApLFxuLy8gICAgICAgIDI3MDptYXRyaXgoMCwgLTEsIDEsIDAsIDAsIDApLFxuLy8gICAgICAgIC8vMzYwOm1hdHJpeCgwLjk5OTk5LCAwLCAwLCAwLjk5OTk5LCAwLCAwKSxcbi8vICAgICAgICAvLzQ1MDptYXRyaXgoMCwgMSwgLTEsIDAsIDAsIDApLFxuLy8gICAgICAgICAgMzYwOnJvdGF0ZSgzNjBkZWcpLFxuLy8gICAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuLy8pO1xuJGRlZ3JlZU1hdHJpeDogKFxuICAgICAgICAwOnJvdGF0ZSgwZGVnKSxcbiAgICAgICAgOTA6cm90YXRlKDkwZGVnKSxcbiAgICAgICAgMTgwOnJvdGF0ZSgxODBkZWcpLFxuICAgICAgICAyNzA6cm90YXRlKDI3MGRlZyksXG4gICAgICAgIDM2MDpyb3RhdGUoMzYwZGVnKSxcbiAgICAgICAgNDUwOnJvdGF0ZSg0NTBkZWcpLFxuKTsiLCIkaW52YWxpZEJveFNoYWRvdzogMCAwIDJweCAycHggI2ZmNjc3NjtcbiRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjogcmdiKDIzMCwgMjMwLCAyMzApO1xuJGlucHV0Qm9yZGVyQm90dG9tOiBzb2xpZCAxcHggIzYyNjI2MjtcblxubGFiZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgW3R5cGU9J3RleHQnXSwgW3R5cGU9J3Bhc3N3b3JkJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdkYXRldGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J21vbnRoJ10sXG4gIFt0eXBlPSd3ZWVrJ10sIFt0eXBlPSdlbWFpbCddLCBbdHlwZT0nbnVtYmVyJ10sIFt0eXBlPSdzZWFyY2gnXSwgW3R5cGU9J3RlbCddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0ndXJsJ10sXG4gIFt0eXBlPSdjb2xvciddLCB0ZXh0YXJlYSwgaW5wdXRbdHlwZT0ndGV4dCddLCBpbnB1dDpub3QoW3R5cGVdKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAyLjQzNzVyZW07XG4gICAgcGFkZGluZzogMC41cmVtO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogJGlucHV0Qm9yZGVyQm90dG9tO1xuICAgIG91dGxpbmU6IDA7XG4gICAgbWFyZ2luOiAwIDAgMTVweDtcblxuICAgICY6aW52YWxpZCB7XG4gICAgICBib3gtc2hhZG93OiAkaW52YWxpZEJveFNoYWRvdztcbiAgICB9XG5cbiAgICAmOmRpc2FibGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1ib3R0b206ICRpbnB1dEJvcmRlckJvdHRvbTtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG5cbiAgICAgICY6aW52YWxpZCB7XG4gICAgICAgIGJveC1zaGFkb3c6ICRpbnZhbGlkQm94U2hhZG93O1xuICAgICAgfVxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzLCAmLm5vdEVtcHR5Om5vdCg6Zm9jdXMpLCAmOm5vdCg6ZW1wdHkpIHtcbiAgICAgIH4gc3BhbiB7XG4gICAgICAgIHRvcDogLTExcHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgfiBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIGJvdHRvbTogMTBweDtcbiAgICAgIHRvcDogN3B4O1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBlYXNlIGFsbDtcbiAgICAgIGNvbG9yOiAjNjI2MjYyO1xuICAgIH1cbiAgfVxuXG4gIHRleHRhcmVhIHtcbiAgICBoZWlnaHQ6IDEwcmVtO1xuICAgIC8vYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMzYsIDEzNiwgMTM2LCAwLjMxKTtcbiAgICAvL2JveC1zaGFkb3c6IDAgMCAzcHggMnB4IGhzbGEoMCwgMCUsIDUzJSwgLjMxKSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICB9XG5cbiAgW3R5cGU9XCJjaGVja2JveFwiXS5iZWZvcmUtdGV4dCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG5pbnB1dFt0eXBlPW51bWJlcl0ge1xuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcblxuICA6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sIDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufSIsIkBpbXBvcnQgXCJ+Zm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuJG5hdkNvbG9yQmxhY2s6ICMwMDAgIWRlZmF1bHQ7XG4kbmF2Qm9yZGVyQ29sb3JCbGFjazogIzdGN0Y3RiAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kQmxhY2s6ICNmZmYgIWRlZmF1bHQ7XG5cbiRuYXZDb2xvcldoaXRlOiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yV2hpdGU6ICMxZTFjMWMgIWRlZmF1bHQ7XG4kbmF2QmFja2dyb3VuZFdoaXRlOiAjMDAwICFkZWZhdWx0O1xuXG4kbmF2Q29sb3JEZWZhdWx0OiAjZmZmICFkZWZhdWx0O1xuJG5hdkJvcmRlckNvbG9yRGVmYXVsdDogIzFlMWMxYyAhZGVmYXVsdDtcbiRuYXZCYWNrZ3JvdW5kRGVmYXVsdDogIzAwMCAhZGVmYXVsdDtcblxuJG5hdkJhY2tncm91bmRXaXRoSW1hZ2U6IHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG5uYXYudG9wLWJhciB7XG4gIHotaW5kZXg6IDE7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmREZWZhdWx0O1xuICBjb2xvcjogJG5hdkNvbG9yRGVmYXVsdDtcbiAgc3Ryb2tlOiAkbmF2Q29sb3JEZWZhdWx0O1xuICBwYWRkaW5nOiAwO1xuXG4gICY6bm90KC53aXRoLWltYWdlKSB7XG5cbiAgICBAZWFjaCAkYnJlYWtwb2ludCwgJHZhbHVlIGluICRtYXJnaW5zIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0kdmFsdWU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLSR2YWx1ZTtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgKyAjezIqJHZhbHVlfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmJhY2tncm91bmQtaW1nIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgPiBzcGFuIHtcbiAgICA+IHNwYW4ge1xuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYmFjay1idXR0b24ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgd2lkdGg6IDAuNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgfVxuXG4gICAgICAmLmhpZGRlbiB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgZGlzcGxheTogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudG9wLWJhci10aXRsZSB7XG4gICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgIH1cblxuICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHotaW5kZXg6IDg5OTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgLm1lbnUtaWNvbiB7XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvckRlZmF1bHQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JEZWZhdWx0LCAwIDE0cHggMCAkbmF2Q29sb3JEZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5tZW51LWljb24ge1xuICAgICAgICAvL25vaW5zcGVjdGlvbiBDc3NJbnZhbGlkUHJvcGVydHlWYWx1ZVxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLXdlYmtpdC1iYXNlbGluZS1taWRkbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIC8vcmlnaHQ6IC0xMDAlO1xuICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC41cztcbiAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluLW91dDtcblxuICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkbmF2Qm9yZGVyQ29sb3JEZWZhdWx0O1xuICAgICAgICAvL3BhZGRpbmc6IDAuMnJlbTtcbiAgICAgICAgcGFkZGluZzogNC41cmVtIDEuNjVyZW0gMHJlbSAyLjc1cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgICAgICByaWdodDogLTEwMDAlOyAvL2bDvHIga2xlaW5lIEJpbGRzY2hpcm1lLCB0YXVjaHQgZXMgcmVjaHRzIHdpZWRlciBhdWYsIGZhbGxzIG51ciAxMDAlXG5cbiAgICAgICAgbGkge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4xNXJlbTtcblxuICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJi5pcy1kcm9wZG93bi1zdWJtZW51LXBhcmVudCB7XG4gICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuXG4gICAgICAgICAgICB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICAgICAgdG9wOiBhdXRvO1xuXG4gICAgICAgICAgICAgID4gbGksID4gLmNsb3NlLWxpc3RlbmVyIHtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiA5MDAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgID4gYTphZnRlciB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgICAgICBib3JkZXI6IDZweCBpbnNldDtcbiAgICAgICAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICAgICAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2ZmZmZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgcmlnaHQ6IDVweDtcbiAgICAgICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAgICAgKyBzcGFuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtZWRpdW0pIHtcbiAgICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgICAgICAgICAmLnNtZWRpdW0ge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlKSB7XG4gICAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAmLm1lZGl1bSB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAgICYubGFyZ2Uge1xuICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYubmV2ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmFsd2F5cyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5uYXZiYXItbWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiBpbml0aWFsO1xuXG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIHotaW5kZXg6IDkwMDA7XG5cbiAgICAgIGEge1xuICAgICAgICBpbWcgKyBzcGFuIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiA5MDAwO1xuXG4gICAgICAgICYuaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQge1xuICAgICAgICAgIHotaW5kZXg6IDkwMDE7XG4gICAgICAgIH1cblxuICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICYuc21lZGl1bSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgfVxuICAgICAgICAgICYubWVkaXVtIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtIGRvd24pIHtcbiAgICAgICAgICAmLmxhcmdlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5uZXZlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubWVudSwgJi5tZW51IHtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgei1pbmRleDogMTAwO1xuICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIC8vdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtZWRpdW0gZG93bikge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC42OHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOm5vdCguaXMtZHJvcGRvd24tc3VibWVudS1wYXJlbnQpIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21lZGl1bSBkb3duKSB7XG4gICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNjhyZW07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjIzNnJlbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuaW1nIGEge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDEuOHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkgPiB1bC5pcy1kcm9wZG93bi1zdWJtZW51IHtcbiAgICAgICAgICBtaW4td2lkdGg6IDA7XG5cbiAgICAgICAgICBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gbGkub3BlbnMtcmlnaHQgPiBhIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgcmlnaHQ6IDAuMXJlbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc3VibWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgfVxuICB9XG5cbiAgJi53aXRoLWltYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdpdGhJbWFnZTtcblxuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cywgYmFja2dyb3VuZCAwLjBzO1xuICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuXG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMsIGJhY2tncm91bmQgMC4wcztcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICAgIH1cblxuICAgIC5iYWNrZ3JvdW5kLWltZyB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnQpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLSR2YWx1ZTtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0kdmFsdWU7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSArICN7MiokdmFsdWV9KTtcbiAgICAgICAgICBtaW4td2lkdGg6IDIuNSokdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IHNwYW4ge1xuICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcblxuICAgICAgPiBzcGFuID4gc3BhbiB7XG4gICAgICAgIC8vQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgICAgIC8vICBAaW5jbHVkZSBicmVha3BvaW50KCRicmVha3BvaW50KSB7XG4gICAgICAgIC8vICAgIHBhZGRpbmctbGVmdDogJHZhbHVlO1xuICAgICAgICAvL3BhZGRpbmctcmlnaHQ6IDIqJHZhbHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIC8vfVxuICAgICAgICAvL31cbiAgICAgIH1cblxuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICB9XG5cbiAgICAgIC50b3AtYmFyLXRpdGxlIHtcblxuICAgICAgfVxuXG4gICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyLWNvbnRhaW5lciB7XG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXIge1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI25hdmJhci1tZW51LXZpc2libGUge1xuXG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgei1pbmRleDogOTEwMDtcbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG5cbiAgICAgIH1cblxuICAgICAgLm5hdmJhci1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZERlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5jb2xvci1ibGFjayB7XG4gICAgICBjb2xvcjogJG5hdkNvbG9yQmxhY2s7XG4gICAgICBzdHJva2U6ICRuYXZDb2xvckJsYWNrO1xuXG4gICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgLmhpZGRlbi1tZW51IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJG5hdkJvcmRlckNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuICAgICAgICAubWVudS1pY29uOjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA3cHggMCAkbmF2Q29sb3JCbGFjaywgMCAxNHB4IDAgJG5hdkNvbG9yQmxhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnN1Ym1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZEJsYWNrO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgY29sb3I6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgc3Ryb2tlOiAkbmF2Q29sb3JXaGl0ZTtcblxuICAgICAgI3Jlc3BvbnNpdmUtbWVudSB7XG4gICAgICAgIC5oaWRkZW4tbWVudSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRuYXZCb3JkZXJDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICNyZXNwb25zaXZlLW1lbnUtdG9nZ2xlIHtcbiAgICAgICAgLm1lbnUtaWNvbjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRuYXZDb2xvcldoaXRlO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgN3B4IDAgJG5hdkNvbG9yV2hpdGUsIDAgMTRweCAwICRuYXZDb2xvcldoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5zdWJtZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogJG5hdkJhY2tncm91bmRXaGl0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnNvbGlkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kRGVmYXVsdDtcblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgLy9iYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgICAgICAuYmFjay1idXR0b24ge1xuXG4gICAgICAgIH1cblxuICAgICAgICAudG9wLWJhci10aXRsZSB7XG5cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItY2xvc2UtbGlzdGVuZXItY29udGFpbmVyIHtcbiAgICAgICAgICAjbmF2YmFyLWNsb3NlLWxpc3RlbmVyIHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNuYXZiYXItbWVudS12aXNpYmxlIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUge1xuXG4gICAgICAgIH1cblxuICAgICAgICAjcmVzcG9uc2l2ZS1tZW51IHtcbiAgICAgICAgICAuaGlkZGVuLW1lbnUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2Qm9yZGVyQ29sb3JCbGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLW1lbnUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5jb2xvci1ibGFjayB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRuYXZCYWNrZ3JvdW5kQmxhY2s7XG4gICAgICB9XG5cbiAgICAgICYuY29sb3Itd2hpdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2QmFja2dyb3VuZFdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyNsb2dvIHtcbi8vICBtYXgtd2lkdGg6IDJyZW07XG4vLyAgdHJhbnNpdGlvbjogbm9uZTtcbi8vfVxuXG4ubWVudSwgLmRyb3Bkb3duLm1lbnUge1xuICBhIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMC41cmVtO1xuICB9XG59XG5cbi5kcm9wZG93bi5tZW51IC5hY2NvcmRpb24tbWVudSAuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50Om5vdCguaGFzLXN1Ym1lbnUtdG9nZ2xlKSxcbiNuYXZiYXItbWVudS1oaWRkZW4gLmFjY29yZGlvbi1tZW51IC5pcy1hY2NvcmRpb24tc3VibWVudS1wYXJlbnQ6bm90KC5oYXMtc3VibWVudS10b2dnbGUpID4ge1xuICBhIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIHJpZ2h0OiAwLjFyZW07XG4gICAgfVxuICB9XG5cbiAgdWwgYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLm1lbnUuaXMtYWNjb3JkaW9uLXN1Ym1lbnUge1xuICBtYXJnaW4tbGVmdDogMC43cmVtO1xufVxuXG4ubWVudSB7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgdHJhbnNpdGlvbjogMC4yNXM7XG4gIC8vb3ZlcmZsb3cteTpoaWRkZW47XG59XG5cblxuI3Jlc3BvbnNpdmUtbWVudS10b2dnbGUgYnV0dG9uIHtcbiAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XG59XG5cbi5kcm9wZG93bi5tZW51ID4gbGkuaXMtYWNjb3JkaW9uLXN1Ym1lbnUtcGFyZW50IHtcbiAgLy8+IGE6YWZ0ZXIge1xuICAvLyAgYm9yZGVyLWNvbG9yOiAjZmZmZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAvL31cblxuICA+IHVsLmlzLWRyb3Bkb3duLXN1Ym1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cblxuI25hdmJhci1mcmFnbWVudCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ubG9nbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAubG9nby1pbWcge1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICAgIG1heC13aWR0aDogMi4zNXJlbTtcbiAgfVxufVxuIiwiJGJvcmRlci1jb2xvcjogI0U2RTZFNjtcblxuLnRhYi1mcmFnbWVudCB7XG4gIC50YWItbmFtZXMge1xuICAgIC50YWItYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIHBhZGRpbmc6IDAuM3JlbTtcblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWItY29udGVudCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xuICAgIC50YWItc2l0ZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnRhYi1idXR0b24tdGVtcGxhdGUsIC50YWItc2l0ZS10ZW1wbGF0ZXtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmJvcmRlci1ib3R0b20ge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yO1xuICB9XG59IiwiLmFscGhhYmV0aWMtbGlzdHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1jb250YWluZXJ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgLmFscGhhYmV0aWMtbGlzdC1zaWRlYWxwaGFiZXR7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIC5hbHBoYWJldC1zY3JvbGwtdG8ge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgaGVpZ2h0OiAzLjglO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pe1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsIi53aW5kb3ctY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2IxYjFiMTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjdXJzb3I6IGdyYWI7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIG1pbi13aWR0aDogMTByZW07XG4gIG1pbi1oZWlnaHQ6IDNyZW07XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gICoge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB6LWluZGV4OiAxMDAwO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgJi5hY3RpdmUtd2luZG93e1xuICAgIHotaW5kZXg6IDExMDA7XG4gIH1cblxuICAud2luZG93LXJlc2l6ZSB7XG4gICAgJHJlc2l6ZVdpZHRoOiA0cHg7XG5cbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICYuZWRnZSB7XG4gICAgICB3aWR0aDogJHJlc2l6ZVdpZHRoO1xuICAgICAgaGVpZ2h0OiAkcmVzaXplV2lkdGg7XG5cbiAgICAgICYubnd7XG4gICAgICAgIGN1cnNvcjogbnctcmVzaXplO1xuICAgICAgfVxuICAgICAgJi5uZXtcbiAgICAgICAgY3Vyc29yOiBuZS1yZXNpemU7XG4gICAgICB9XG4gICAgICAmLnN3e1xuICAgICAgICBjdXJzb3I6IHN3LXJlc2l6ZTtcbiAgICAgIH1cbiAgICAgICYuc2V7XG4gICAgICAgIGN1cnNvcjogc2UtcmVzaXplO1xuICAgICAgfVxuICAgIH1cbiAgICAmLmJvdHRvbSwgJi50b3B7XG4gICAgICBjdXJzb3I6IG5zLXJlc2l6ZTtcbiAgICAgIGhlaWdodDogJHJlc2l6ZVdpZHRoO1xuICAgIH1cbiAgICAmLmxlZnQsICYucmlnaHR7XG4gICAgICBjdXJzb3I6IGV3LXJlc2l6ZTtcbiAgICAgIHdpZHRoOiAkcmVzaXplV2lkdGg7XG4gICAgfVxuICB9XG5cbiAgI3RpdGxlIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAvL21hcmdpbjogMCAwIDAuNXJlbTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMnJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAvL2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYjZiNmI2O1xuICB9XG5cbiAgI3RpdGxlLWJ1dHRvbnMge1xuICAgIC50aXRsZS1idXR0b24ge1xuICAgICAgbWF4LWhlaWdodDogMXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgJi5tb3Zpbmcge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gIH1cblxuICAmLm1pbmltaXplZCB7XG4gICAgcGFkZGluZzogMC4ycmVtO1xuICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiBmaXQtY29udGVudDtcbiAgICAud2luZG93IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxle1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAjdGl0bGUtYnV0dG9ucyAudGl0bGUtYnV0dG9uLmhpZGUtbWluaW1pemVke1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmLm1heGltaXplZCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLW1heGltaXplZHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5wb3B1cCB7XG4gICAgJG1heGltaXplZFBhZGRpbmc6IDAuMnJlbTtcblxuICAgIHBhZGRpbmc6ICRtYXhpbWl6ZWRQYWRkaW5nO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46MDtcblxuICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gI3syKiRtYXhpbWl6ZWRQYWRkaW5nfSkgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAjezIqJG1heGltaXplZFBhZGRpbmd9KSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcblxuICAgIC53aW5kb3ctcmVzaXple1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI3RpdGxlLWJ1dHRvbnMgLnRpdGxlLWJ1dHRvbi5oaWRlLXBvcHVwe1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAud2luZG93IHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBjdXJzb3I6IGluaXRpYWw7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8vbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgLy9tYXgtd2lkdGg6IGZpdC1jb250ZW50O1xuICB9XG59IiwiLmltYWdlLXNlbGVjdGlvbiB7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGhlaWdodDogMTAwJTtcblxuICAmLmhpZ2hsaWdodHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE3MywgMjE2LCAyMzAsIDAuNCk7XG4gIH1cblxuICA+IC5mbGV4LWNvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmltYWdlLXNlbGVjdGlvbi1jYXRlZ29yeS1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICAuaW1hZ2Utc2VsZWN0aW9uLWNhdGVnb3J5IHtcbiAgICAgIC5pbWFnZS1zZWxlY3Rpb24tY2F0ZWdvcnktbmFtZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5pbWFnZS1zZWxlY3Rpb24tcHJldmlldyB7XG4gICAgd2lkdGg6IDIwJTtcbiAgICBtaW4td2lkdGg6IDRyZW07XG5cbiAgICAuaW1hZ2Utc2VsZWN0aW9uLWltYWdlLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAuaW1hZ2Utc2VsZWN0aW9uLWltYWdlLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA0cmVtO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwLjE1cmVtO1xuXG4gICAgLmltYWdlLXNlbGVjdGlvbi1pbWFnZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMS41cmVtKTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICB9XG5cbiAgICAuaW1hZ2Utc2VsZWN0aW9uLWltYWdlLW5hbWUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEuNXJlbTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgfVxufVxuIiwiQGltcG9ydCBcInRvYXN0XCI7XG5AaW1wb3J0IFwiZGlhbG9nXCI7XG5AaW1wb3J0IFwiZm9ybVwiO1xuQGltcG9ydCBcIm5hdmJhclwiO1xuQGltcG9ydCBcInN3aXBlRnJhZ21lbnRcIjtcbkBpbXBvcnQgXCJ0YWJiZWRGcmFnbWVudFwiO1xuQGltcG9ydCBcImFscGhhYmV0aWNMaXN0XCI7XG5AaW1wb3J0IFwiYWJzdHJhY3RXaW5kb3dcIjtcbkBpbXBvcnQgXCJpbWFnZVNlbGVjdGlvbkVsZW1lbnRcIjtcblxuLm1heC1oZWlnaHQtMTAwe1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm92ZXJmbG93LWhpZGRlbntcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiIsIiRyaWdodHM6IFthZG1pbiwgbG9nZ2VkSW4sIGxvZ2dlZE91dCwgb25saW5lLCBvZmZsaW5lLCBkZWZhdWx0IF07XG5cbmJvZHkge1xuICBAZWFjaCAkcmlnaHQgaW4gJHJpZ2h0cyB7XG4gICAgJjpub3QoLmFjY2Vzcy0jeyRyaWdodH0pIC5hY2Nlc3MtI3skcmlnaHR9IHtcbiAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICB9XG4gIH1cbn1cbiIsIi5zaGFyZS1pY29uIHtcbiAgd2lkdGg6IDEuNXJlbTtcbiAgbWF4LXdpZHRoOiAxLjVyZW07XG4gIG1hcmdpbjogMC4xcmVtO1xuXG4gIHN2Z3tcbiAgICB3aWR0aDogMS41cmVtO1xuICAgIG1heC13aWR0aDogMS41cmVtO1xuICB9XG59XG4iLCIvL0BpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm91bmRhdGlvbi1zaXRlcy9zY3NzL2ZvdW5kYXRpb25cIjtcblxuKiwgOmFmdGVyLCA6YmVmb3JlIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuaHRtbCB7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC8vZm9udC1zaXplOiAxOHB4O1xuICBsZXR0ZXItc3BhY2luZzogMXB4O1xufVxuXG4ubWF4LWhlaWdodCB7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbn1cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIGJhY2tncm91bmQ6ICNmZWZlZmU7XG4gIGNvbG9yOiAjMGEwYTBhO1xufVxuXG5mb290ZXIge1xuICBib3JkZXItdG9wOiAjZDhkOGQ4IHNvbGlkIDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udG9wLWJhciAudG9wLWJhci10aXRsZSBzdHJvbmcge1xuICAvL21hcmdpbi10b3A6IDdweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAvKm1hcmdpbi1sZWZ0OiA4cHg7Ki9cbn1cblxubmF2LnRvcC1iYXIge1xuXG4gIGNvbG9yOiAjRkZGO1xuICAvL2JhY2tncm91bmQ6ICMzRjUxQjU7XG4gIC8vYmFja2dyb3VuZDogcmVkO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMnB4IDlweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCA0cHggMnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBwYWRkaW5nOiAwLjZyZW07XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5idXR0b24uYnV0dG9uLCBhLmJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgLy9iYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XG4gICYuZGlzYWJsZWQsICYuZGlzYWJsZWQ6aG92ZXIsICYuZGlzYWJsZWQ6Zm9jdXMge1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogcmVkO1xuICB9XG4gICY6Zm9jdXMsICY6aG92ZXIge1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogI2UwMDAwMDtcbiAgfVxufVxuXG4uZmlsbC1tZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICYudmVydGljYWwge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbiAgLmdyb3cge1xuICAgIGZsZXg6IDE7XG4gIH1cbn1cblxuLmZsZXgtY2VudGVyIHtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC8vbWFyZ2luOiBhdXRvO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICA+ICoge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuLm1lbnUgYSwgLmRyb3Bkb3duLm1lbnUgYSB7XG4gIHBhZGRpbmc6IC40cmVtIC41cmVtXG59XG5cbnN2ZyBwYXRoIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG5kaXYubWFpbkNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgZmxleDogMTtcbiAgbWFyZ2luOiAwLjVyZW07XG4gID4gLnJvdywgI21haW4tY29udGVudCwgI3NpdGUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIC8vbGVmdDogLjYyNXJlbTtcbiAgICByaWdodDogMDtcbiAgICAvL3JpZ2h0OiAuNjI1cmVtO1xuICB9XG59XG5cbi5pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5yaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbn1cblxuI2xvZ28taW1nIHtcbiAgbWF4LWhlaWdodDogMi4ycmVtO1xufVxuXG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5hLmhpZGRlbi1saW5rIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxubGFiZWwge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5hbGlnbi1yaWdodCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4udmlldy1wYW5lbCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sb2FkZXIge1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogNTAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgJi5pbmxpbmUge1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgdG9wOiBpbml0aWFsO1xuICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBpbml0aWFsO1xuICAgIHRyYW5zZm9ybTogaW5pdGlhbDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICB9XG5cbiAgJi5zbWFsbCAjc3Bpbm5lciB7XG5cbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7XG4gIH1cblxuICAjc3Bpbm5lciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBzdHJva2U6ICNiNzFjMWE7XG4gICAgc3Ryb2tlLXdpZHRoOiAzcHg7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xuICAgIGFuaW1hdGlvbjogbGluZSAxLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUsIHJvdGF0ZSAxLjZzIGxpbmVhciBpbmZpbml0ZTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJvdGF0ZSB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NTBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgbGluZSB7XG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCA4NS45NjQ7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7XG4gIH1cbiAgNTAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiA2NS45NzMsIDIxLjk5MTE7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgODUuOTY0O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtNjUuOTczO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgfVxufVxuXG4jcHJpbnQtY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5hY3Rpb24tYnV0dG9uIHtcbiAgbWF4LWhlaWdodDogMS43cmVtO1xuICBtYXJnaW4tbGVmdDogMC40cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNHJlbTtcbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogJGhvdmVyQ29sb3JEYXJrO1xuICB9XG59XG5cbi52Y2VudGVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvL2Rpc3BsYXk6IGZsZXg7XG4gIC8vanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vZmxleC13cmFwOiB3cmFwO1xuXG4gIC52Y2VudGVyIHtcbiAgICAvL2Rpc3BsYXk6IGZsZXg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cblxuLm1heC13aWR0aCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5pbnB1dCwgYnV0dG9uIHtcbiAgbGV0dGVyLXNwYWNpbmc6IDFweCAhaW1wb3J0YW50O1xufVxuXG4ubm8tcGFkZGluZyB7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLmNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgbmF2LCAubWFpbkNvbnRhaW5lciwgZm9vdGVyLCAjc3R5bGVzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgI3ByaW50LWNvbnRlbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLm92ZXJmbG93LXktYXV0byB7XG4gIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDtcbn1cblxuLnJvdy5uby1hZnRlcjphZnRlciB7XG4gIGNvbnRlbnQ6IGluaXRpYWw7XG59XG5cbi5tYXJnaW4tYm90dG9tIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgfVxuICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgIG1hcmdpbi1ib3R0b206IDNyZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChsYXJnZSkge1xuICAgIG1hcmdpbi1ib3R0b206IDRyZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCh4bGFyZ2UpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cmVtO1xuICB9XG59XG5cbi5mb250LXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjdlbTtcbn1cblxuLmJvcmRlci1ib3R0b20ge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHByb3RvdHlwZS1ib3JkZXItY29sb3I7XG59XG5cbi5ib3JkZXItcmlnaHQge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkcHJvdG90eXBlLWJvcmRlci1jb2xvcjtcbn1cblxuLmJvcmRlci1sZWZ0IHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkcHJvdG90eXBlLWJvcmRlci1jb2xvcjtcbn1cblxuaW1nLmxvZ28ge1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC13aWR0aDogMS4xcmVtO1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbn1cblxuLmFsaWduLWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuaHIuc2VwYXJhdG9yIHtcbiAgbWFyZ2luOiAxcmVtIDA7XG59XG5cbi5idXR0b24tbGluZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC5idXR0b24ge1xuICAgIGZsZXg6IDE7XG4gICAgbWFyZ2luLWxlZnQ6IDFweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFweDtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC43N3JlbTtcbiAgfVxufVxuXG4uc21hbGwtc21hbGwge1xuICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsIGRvd24pIHtcbiAgICBmb250LXNpemU6IHNtYWxsO1xuICB9XG59XG5cbnNlbGVjdCB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMC4zcmVtIDAuM3JlbTtcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5uby10cmFuc2l0aW9uIHtcbiAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5pbWcuYWN0aW9uLWltYWdlIHtcbiAgbWF4LWhlaWdodDogMS40cmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmltZy5iYWNrLWJ1dHRvbiB7XG4gIG1heC1oZWlnaHQ6IDAuNnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG59XG5cbi5uby1tYXJnaW4tYm90dG9tIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbiIsIlxuJGhvdmVyQ29sb3I6ICNmMmYyZjI7XG4kaG92ZXJDb2xvckRhcms6ICNlOGU4ZTg7XG5cbiR0aGVtZXM6IChcbiAgICAgICAgcmVkOihcbiAgICAgICAgICAgICAgICBjbGFzczogcmVkLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICNmZjAwMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjODcwMDE1LFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNiNzFjMWEsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmYzZDAwLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICNmZjNkMDAsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogI2ZmM2QwMCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGJsdWU6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibHVlLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMyYzU4YWUsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjMWEzMDYyLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICM2NzNBQjcsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogIzAwMCxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjNTU1NTU1LFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjNTQ2Y2ZlLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IG5vbmUsXG4gICAgICAgICAgICAgICAgbGlua0hvdmVyQ29sb3I6ICM1NDZjZmUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rSG92ZXJDb2xvcjogIzU0NmNmZSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmXG4gICAgICAgICksXG4gICAgICAgIGdyZWVuOihcbiAgICAgICAgICAgICAgICBjbGFzczogZ3JlZW4sXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICMwMDM2MTMsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogIzAwODAwMCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICMwMDk4MjksXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzAwOTgyOSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjMDA5ODI5LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgcGluazooXG4gICAgICAgICAgICAgICAgY2xhc3M6IHBpbmssXG4gICAgICAgICAgICAgICAgdGhlbWVDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBsaWdodFRoZW1lQ29sb3I6ICM3MDM3NGEsXG4gICAgICAgICAgICAgICAgbGlua0NvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvcjogI2ZmNjliNCxcbiAgICAgICAgICAgICAgICBuYXZCYXJUZXh0Q29sb3I6ICNmZmYsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjI6ICM1NTU1NTUsXG4gICAgICAgICAgICAgICAgbGlnaHRMaW5rQ29sb3I6ICNmZTY0YWYsXG4gICAgICAgICAgICAgICAgbGlua0JvcmRlckJvdHRvbTogbm9uZSxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogI2ZlNjRhZixcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjZmU2NGFmLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgYmxhY2s6KFxuICAgICAgICAgICAgICAgIGNsYXNzOiBibGFjayxcbiAgICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIGxpZ2h0VGhlbWVDb2xvcjogIzM1MzUzNSxcbiAgICAgICAgICAgICAgICBsaW5rQ29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yOiAjMDAwLFxuICAgICAgICAgICAgICAgIG5hdkJhclRleHRDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6ICMwMDAsXG4gICAgICAgICAgICAgICAgdGV4dENvbG9yMjogIzU1NTU1NSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBsaW5rQm9yZGVyQm90dG9tOiAxcHggc29saWQgIzAwMDAwMCxcbiAgICAgICAgICAgICAgICBsaW5rSG92ZXJDb2xvcjogIzRlNGU0ZSxcbiAgICAgICAgICAgICAgICBsaWdodExpbmtIb3ZlckNvbG9yOiAjY2FjYWNhLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgICAgKSxcbiAgICAgICAgZGFyazogKFxuICAgICAgICAgICAgICAgIGNsYXNzOiBkYXJrLFxuICAgICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICMzNzM3MzcsXG4gICAgICAgICAgICAgICAgbGlnaHRUaGVtZUNvbG9yOiAjNGI0YjRiLFxuICAgICAgICAgICAgICAgIGxpbmtDb2xvcjogI2ZmZixcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgbmF2QmFyVGV4dENvbG9yOiAjZmZmLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogI2ZmZmZmZixcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3IyOiAjOWI5YjliLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0NvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtCb3JkZXJCb3R0b206IDFweCBzb2xpZCAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGxpbmtIb3ZlckNvbG9yOiAjZmZmZmZmLFxuICAgICAgICAgICAgICAgIGxpZ2h0TGlua0hvdmVyQ29sb3I6ICNmZmZmZmYsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMFxuICAgICAgICApXG4pOyIsIi8vQGltcG9ydCBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm91bmRhdGlvblwiO1xuXG4uc2V0dGluZ3MtY29udGFpbmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgcGFkZGluZzogMC4zcmVtO1xuXG4gICNzZXR0aW5ncy1mcmFnbWVudHMtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1lZGl1bSkge1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkcHJvdG90eXBlLWJvcmRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAjc2V0dGluZ3MtZnJhZ21lbnRzIHtcbiAgICAgID4gKiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5zd2l0Y2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiBpbml0aWFsO1xuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIGZvbnQtc2l6ZTogMC42ZW07XG4gIH1cbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtIGRvd24pIHtcbiAgICBmb250LXNpemU6IDAuN2VtO1xuICB9XG5cbiAgaW5wdXQge1xuXG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgICY6Y2hlY2tlZCArIC5zbGlkZXIge1xuICAgICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NkYzO1xuICAgICAgJjpiZWZvcmUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS41ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6Zm9jdXMgKyAuc2xpZGVyIHtcbiAgICAgIC8vYm94LXNoYWRvdzogMCAwIDFweCAjMjE5NkYzO1xuICAgIH1cbiAgfVxuXG4gIC5zbGlkZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAzZW07XG4gICAgaGVpZ2h0OiAxLjVlbTtcbiAgICBib3JkZXItcmFkaXVzOiAxLjVlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICAgIHRyYW5zaXRpb246IC40cztcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi10b3A6IDA7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiAxLjFlbTtcbiAgICAgIHdpZHRoOiAxLjFlbTtcbiAgICAgIGxlZnQ6IDAuMTVlbTtcbiAgICAgIGJvdHRvbTogMC4xNWVtO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICB0cmFuc2l0aW9uOiAuNHM7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgfVxuICB9XG5cbiAgaW1nLCBzdmcge1xuICAgIHdpZHRoOiAxLjRlbTtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgdmVydGljYWwtYWxpZ246IGluaXRpYWw7XG5cbiAgICBwYXRoIHtcbiAgICAgIHN0cm9rZS1jb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cbn1cblxubGFiZWwge1xuICBmb250LXNpemU6IDFlbSAhaW1wb3J0YW50O1xuXG59XG5cbi5zZXR0aW5nLXJvdzpub3QoLmhpZGRlbikge1xuICBsaW5lLWhlaWdodDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMC41cmVtIDAuNHJlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICB3aWR0aDogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDE5NSwgMTk1LCAxOTUsIDAuMTMpO1xuXG4gID4gKiB7XG4gICAgZmxleDogMTtcbiAgfVxuXG4gIGlucHV0W3R5cGU9Y2hlY2tib3hdIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cblxuIiwiLnpmLWdyZWVuIHtcbiAgY29sb3I6ICM2OGI2MDRcbn1cblxuLmNvbHVtbjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLCAuY29sdW1uczpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgZmxvYXQ6IGxlZnRcbn1cblxuaW5wdXRbdHlwZT1jaGVja0JveF0uZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDEuNXJlbTtcbiAgd2lkdGg6IDEwMCVcbn1cblxuW3R5cGU9c3VibWl0XSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzOXB4O1xuICBoZWlnaHQ6IDIuNDM3NXJlbTtcbiAgcGFkZGluZzogOHB4O1xuICBwYWRkaW5nOiAuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NhY2FjYTtcbiAgbWFyZ2luOiAwIDAgMTZweDtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogIzBhMGEwYTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IGhzbGEoMCwgMCUsIDQlLCAuMSk7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjVzLCBib3JkZXItY29sb3IgLjI1cyBlYXNlLWluLW91dDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmVcbn1cblxuZm9ybSB1bCBsaSB7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc2l6ZTogMTIuOHB4O1xuICBmb250LXNpemU6IC44cmVtXG59XG5cbi5idXR0b24tZHJvcGRvd246YWZ0ZXIge1xuICBib3JkZXItY29sb3I6ICMwMDAgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci13aWR0aDogLjRlbTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC40ZW07XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHdpZHRoOiAwO1xuICByaWdodDogMWVtXG59XG5cbi5idXR0b24tZHJvcGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXJpZ2h0OiAyZW1cbn1cblxuLmJ1dHRvbi1kcm9wZG93bi5vcGVuOmFmdGVyIHtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMDAwO1xuICB0b3A6IDBcbn1cblxuYS51aS1kYXRlcGlja2VyLW5leHQsIGEudWktZGF0ZXBpY2tlci1wcmV2IHtcbiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnRcbn1cblxuZGl2LmNvbnRhaW5lciBhLm5hdmJhci1icmFuZCA+IGltZyB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgbWFyZ2luLXJpZ2h0OiA0cHhcbn1cblxudWwubWVudS5wbGFpbiBsaS5hY3RpdmUgYSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7XG4gIGNvbG9yOiAjMDAwXG59XG5cbnVsLm1lbnUucGxhaW4gbGkgYSB7XG4gIGNvbG9yOiAjMDAwXG59XG5cbnVsLm1lbnUucGxhaW4gbGkgYTpob3ZlciB7XG4gIGNvbG9yOiAjNTI1MjUyXG59XG5cbnVsLnN1Ym1lbnUge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2JjYmNiYztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNiY2JjYmM7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4XG59XG5cbiNjb29raWUtY29tcGxpYW5jZSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIDA7XG4gIHBhZGRpbmc6IDAuM3JlbSAwO1xuICAjY2xvc2UtY29va2llLW1zZyB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgcGFkZGluZzogMC40cmVtIDAuOHJlbTtcbiAgfVxufVxuXG4ubWVudS1jb250YWluZXIgLmJ1dHRvblxue1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG5AZm9yICRpIGZyb20gMSB0aHJvdWdoIDIwIHtcbiAgJGZhY3RvcjogJGkvMjA7XG4gICR2YWx1ZTogcGVyY2VudGFnZSgkZmFjdG9yKTtcbiAgLmhlaWdodC0jeyRmYWN0b3IqMTAwfSB7XG4gICAgaGVpZ2h0OiAkdmFsdWU7XG4gIH1cbiAgLm1heC1oZWlnaHQtI3skZmFjdG9yKjEwMH0ge1xuICAgIG1heC1oZWlnaHQ6ICR2YWx1ZTtcbiAgfVxuICAud2lkdGgtI3skZmFjdG9yKjEwMH0ge1xuICAgIHdpZHRoOiAkdmFsdWU7XG4gIH1cbiAgLm1heC13aWR0aC0jeyRmYWN0b3IqMTAwfSB7XG4gICAgbWF4LXdpZHRoOiAkdmFsdWU7XG4gIH1cbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn0iLCIqIHtcbiAgLy90cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgZWFzZS1vdXQsIGNvbG9yIC4yNXMgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IC4yNXMgZWFzZS1vdXQsIGNvbG9yIC4yNXMgZWFzZS1vdXQ7XG59XG5cbkBtaXhpbiBkZWZpbmVUaGVtZSgkdGhlbWUpIHtcbiAgYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpO1xuICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcik7XG5cbiAgI2Nvb2tpZS1jb21wbGlhbmNlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlnaHRUaGVtZUNvbG9yKTtcbiAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIG5hdkJhclRleHRDb2xvcik7XG4gICAgYS5saW5rIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlnaHRMaW5rQ29sb3IpO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0NvbG9yKTtcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpZ2h0TGlua0hvdmVyQ29sb3IpO1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlnaHRMaW5rSG92ZXJDb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGEubGluayB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiBtYXAtZ2V0KCR0aGVtZSwgbGlua0NvbG9yKTtcbiAgICBib3JkZXItYm90dG9tOiBtYXAtZ2V0KCR0aGVtZSwgbGlua0JvcmRlckJvdHRvbSk7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldCgkdGhlbWUsIGxpbmtIb3ZlckNvbG9yKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBsaW5rSG92ZXJDb2xvcik7XG4gICAgfVxuICB9XG4gIC5sb2FkZXIgI3NwaW5uZXIge1xuICAgIHN0cm9rZTogbWFwLWdldCgkdGhlbWUsIHNwaW5uZXJDb2xvcik7XG4gIH1cblxuICBuYXYudG9wLWJhciB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBuYXZCYXJUZXh0Q29sb3IpO1xuICAgIGJhY2tncm91bmQ6IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgfVxuICAudG9wLWJhciB7XG4gICAgdWwge1xuICAgICAgYmFja2dyb3VuZDogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpICFpbXBvcnRhbnQ7XG4gICAgICBhIHtcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJHRoZW1lLCBuYXZCYXJUZXh0Q29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBidXR0b24uYnV0dG9uLCBhLmJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpO1xuICAgICYuZGlzYWJsZWQsICYuZGlzYWJsZWQ6aG92ZXIsICYuZGlzYWJsZWQ6Zm9jdXMsICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpO1xuICAgIH1cbiAgfVxuICAuc3dpdGNoIHtcbiAgICBpbnB1dCB7XG4gICAgICAmOmNoZWNrZWQgKyAuc2xpZGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpO1xuICAgICAgfVxuICAgICAgJjpmb2N1cyArIC5zbGlkZXIge1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMXB4IG1hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGFiZWwge1xuICAgIGNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgfVxuICAuYmFja2dyb3VuZCAubW9kYWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gIH1cblxuICBzdmcge1xuICAgIC5maWxsLWNvbG9yLCAmLmZpbGwtY29sb3J7XG4gICAgICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gICAgfVxuICAgIC5maWxsLWJhY2tncm91bmQsICYuZmlsbC1iYWNrZ3JvdW5ke1xuICAgICAgZmlsbDogI2ZlZmVmZTtcbiAgICB9XG4gIH1cblxuICAvL0Zvcm1zXG4gIGxhYmVsIHtcbiAgICBbdHlwZT0ndGV4dCddLCBbdHlwZT0ncGFzc3dvcmQnXSwgW3R5cGU9J2RhdGUnXSwgW3R5cGU9J2RhdGV0aW1lJ10sIFt0eXBlPSdkYXRldGltZS1sb2NhbCddLCBbdHlwZT0nbW9udGgnXSwgW3R5cGU9J3dlZWsnXSwgW3R5cGU9J2VtYWlsJ10sIFt0eXBlPSdudW1iZXInXSwgW3R5cGU9J3NlYXJjaCddLCBbdHlwZT0ndGVsJ10sIFt0eXBlPSd0aW1lJ10sIFt0eXBlPSd1cmwnXSwgW3R5cGU9J2NvbG9yJ10sIHRleHRhcmVhLCBpbnB1dFt0eXBlPXRleHRdLCBpbnB1dDpub3QoW3R5cGVdKSB7XG4gICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgICAgIGJhY2tncm91bmQ6ICN7bWFwLWdldCgkdGhlbWUsIGJhY2tncm91bmQpfTtcbiAgICAgIGNvbG9yOiN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgICB9XG4gICAgICAmOmZvY3VzLCAmLm5vdEVtcHR5Om5vdCg6Zm9jdXMpIHtcbiAgICAgICAgfiBzcGFuIHtcbiAgICAgICAgICBjb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgdGV4dENvbG9yKX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIH4gc3BhbiB7XG4gICAgICAgIGNvbG9yOiAje2FkanVzdF9jb2xvciggbWFwLWdldCgkdGhlbWUsIHRleHRDb2xvciksICRhbHBoYTogLTAuMzUpfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGV4dGFyZWEge1xuICAgICAgYm94LXNoYWRvdzogMCAwIDNweCAycHggaHNsYSgwLCAwJSwgNTMlLCAuMzEpICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG4gIGlucHV0Lm5vdEVtcHR5OmludmFsaWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICN7YWRqdXN0X2NvbG9yKCBtYXAtZ2V0KCR0aGVtZSwgdGhlbWVDb2xvciksICRhbHBoYTogLTAuMzUpfTtcbiAgfVxufVxuXG5ib2R5IHtcbiAgQGVhY2ggJHRoZW1lLCAkdmFsdWVzIGluICR0aGVtZXMge1xuICAgIEBpZiAobWFwLWdldCgkdmFsdWVzLCBjbGFzcykgPT0gXCJcIikge1xuICAgICAgQGluY2x1ZGUgZGVmaW5lVGhlbWUoJHZhbHVlcylcbiAgICB9IEBlbHNlIHtcbiAgICAgICYuI3ttYXAtZ2V0KCR2YWx1ZXMsIGNsYXNzKX0ge1xuICAgICAgICBAaW5jbHVkZSBkZWZpbmVUaGVtZSgkdmFsdWVzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQGtleWZyYW1lcyB0dXRvcmlhbFBvaW50ZXIge1xuICAwJSB7XG4gICAgdG9wOiAyNSU7XG4gIH1cbiAgMTAwJSB7XG4gICAgdG9wOiA3NSU7XG4gIH1cbn1cblxuLnR1dG9yaWFsLWJsYW5rZXQge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcblxuICB6LWluZGV4OiA5MDAxO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDU1LCA1NSwgNTUsIDAuNTEpO1xufVxuXG4udHV0b3JpYWwge1xuICAudHV0b3JpYWwtYmxhbmtldCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAudHV0b3JpYWwtdGV4dCB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXG4gICAgKiB7XG4gICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG5cbiAgJi5zdGVwLTEge1xuICAgICNsZXZlbCB7XG4gICAgICAuc2VnbWVudC1yb3cge1xuICAgICAgICBwb3NpdGlvbjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLnNlZ21lbnQtcGFyZW50Om50aC1jaGlsZCgzKSwgLnNlZ21lbnQtcGFyZW50Om50aC1jaGlsZCgzKS5yb3RhdGluZyB7XG4gICAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudHV0b3JpYWwtdGV4dCAuc3RlcC0xIHtcbiAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICB9XG5cbiAgJi5zdGVwLTIge1xuICAgICNsZXZlbCB7XG4gICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtMiB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgfVxuXG4gICYuc3RlcC0zIHtcbiAgICAudHV0b3JpYWwtdGV4dCAuc3RlcC0zIHtcbiAgICAgIGRpc3BsYXk6IGluaXRpYWw7XG4gICAgICB6LWluZGV4OiA5OTAwICFpbXBvcnRhbnQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLnRvcC1iYXIge1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5oZWxwLWFjdGlvbiB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDEwcHg7XG5cbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIC8vei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMTBweCA1cHggI2ZmZjtcbiAgICB9XG4gIH1cblxuICAmLnN0ZXAtNCB7XG4gICAgLnR1dG9yaWFsLXRleHQgLnN0ZXAtNCB7XG4gICAgICBkaXNwbGF5OiBpbml0aWFsO1xuICAgICAgei1pbmRleDogOTkwMCAhaW1wb3J0YW50O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgICNsZXZlbCB7XG4gICAgICAuc2VnbWVudC1yb3cge1xuICAgICAgICBwb3NpdGlvbjogaW5oZXJpdDtcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgIC5zZWdtZW50LXBhcmVudC5sYXllci0yLCA+IC5zZWdtZW50LXBhcmVudC5sYXllci0yLnJvdGF0aW5nIHtcbiAgICAgICAgICAgIHotaW5kZXg6IDk5MDAgIWltcG9ydGFudDtcblxuICAgICAgICAgICAgI3R1dG9yaWFsLXBvaW50ZXIge1xuICAgICAgICAgICAgICB3aWR0aDogMC42ZW07XG4gICAgICAgICAgICAgIGhlaWdodDogMC42ZW07XG4gICAgICAgICAgICAgIC8vYmFja2dyb3VuZDogcmVkO1xuXG4gICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcblxuICAgICAgICAgICAgICBsZWZ0OiA3NSU7XG4gICAgICAgICAgICAgIC8vcmlnaHQ6IDUwJTtcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICB0b3A6IDc1JTtcbiAgICAgICAgICAgICAgLy9ib3R0b206IDUwJTtcbiAgICAgICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG5cbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0dXRvcmlhbFBvaW50ZXIgMnMgaW5maW5pdGU7XG4gICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4jdHV0b3JpYWwtc2l0ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICN0dXRvcmlhbC0xLCAjdHV0b3JpYWwtMiwgI3R1dG9yaWFsLTN7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDAuN3JlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIH1cblxuICAjdHV0b3JpYWwtMiAuaGVscC1hY3Rpb257XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICB9XG4gICN0dXRvcmlhbC0zIC50dXRvcmlhbC13cmFwcGVye1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAjdHV0b3JpYWwtcG9pbnRlciB7XG4gICAgICB3aWR0aDogMC42ZW07XG4gICAgICBoZWlnaHQ6IDAuNmVtO1xuXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgICAgIGxlZnQ6IDc1JTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNzUlO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXG4gICAgICBhbmltYXRpb246IHR1dG9yaWFsUG9pbnRlciAycyBpbmZpbml0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGFkZFRoZW1lRGVmaW5pdGlvbigkdGhlbWUpIHtcbiAgI3R1dG9yaWFsLXBvaW50ZXIge1xuICAgIGJhY2tncm91bmQ6ICN7bWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpfTtcbiAgfVxuXG4gICNsZXZlbC1udW1iZXItY29udGFpbmVyIHtcbiAgICAmLmluLW1haW4tbWVudSB7XG4gICAgICBiYWNrZ3JvdW5kOiAje21hcC1nZXQoJHRoZW1lLCBiYWNrZ3JvdW5kKX07XG4gICAgICBib3JkZXItY29sb3I6ICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAgIH1cbiAgfVxuICAuc2VnbWVudC5zZWdtZW50LXBhcmVudCB7XG4gICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IyKX07XG5cbiAgICAmLmxheWVyLTIge1xuICAgICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgICB9XG4gIH1cblxuICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgYm9yZGVyLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCBsaWdodFRoZW1lQ29sb3IpfTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAje21hcC1nZXQoJHRoZW1lLCB0aGVtZUNvbG9yKX0gIWltcG9ydGFudDtcblxuICAgID4gLmNoaWxkLWNvbnRhaW5lciA+IC5zZWdtZW50LWxlYWYge1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICAgICAvL2JvcmRlci1jb2xvcjogICN7bWFwLWdldCgkdGhlbWUsIGxpZ2h0VGhlbWVDb2xvcil9O1xuICAgICAgLy9iYWNrZ3JvdW5kLWNvbG9yOiN7bWFwLWdldCgkdGhlbWUsIHRoZW1lQ29sb3IpfSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICAuc2VnbWVudDpub3QoLnNlZ21lbnQtcm93KTpub3QoLnNlZ21lbnQtdHJpYW5nbGUpIHtcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9OztcblxuICAgICAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9OztcblxuICAgICAgICAgICAgQGZvciAkaiBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKTtcbiAgICAgICAgICAgICAgQGlmICRhbmltYXRpb25OYW1lPT0wIHtcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogMzYwO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI3ttYXAtZ2V0KCR0aGVtZSwgYmFja2dyb3VuZCl9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vLnNldHRpbmctcm93e1xuICAvLyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICAje21hcC1nZXQoJHRoZW1lLCB0ZXh0Q29sb3IpfTtcbiAgLy8gICY6bm90KC5oaWRkZW4pOmZpcnN0LWNoaWxke1xuICAvLyAgICBib3JkZXItdG9wOiAxcHggc29saWQgICN7bWFwLWdldCgkdGhlbWUsIHRleHRDb2xvcil9O1xuICAvLyAgfVxuICAvL31cbn1cblxuYm9keSB7XG4gIEBlYWNoICR0aGVtZSwgJHZhbHVlcyBpbiAkdGhlbWVzIHtcbiAgICBAaWYgKG1hcC1nZXQoJHZhbHVlcywgY2xhc3MpID09ICcnKSB7XG4gICAgICBAaW5jbHVkZSBhZGRUaGVtZURlZmluaXRpb24oJHZhbHVlcylcbiAgICB9IEBlbHNlIHtcbiAgICAgICYuI3ttYXAtZ2V0KCR2YWx1ZXMsIGNsYXNzKX0ge1xuICAgICAgICBAaW5jbHVkZSBhZGRUaGVtZURlZmluaXRpb24oJHZhbHVlcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRlZmF1bHQge1xuICAgIC8vYmFja2dyb3VuZDogIzA3MDc2ZDtcbiAgICBiYWNrZ3JvdW5kOiAjMGYwZjQ5O1xuICAgIC8vYmFja2dyb3VuZDogIzFjMWM0NDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgKiB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICAgIC8vYmFja2dyb3VuZDogdXJsKCcuLi9pbWcvYmFja2dyb3VuZC5wbmcnKTtcbiAgICAvL2JhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgLy9iYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG5cbiAgICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lciB7XG4gICAgICAmLmluLW1haW4tbWVudSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VnbWVudC5zZWdtZW50LXBhcmVudCB7XG4gICAgICAmOm5vdCgubGF5ZXItMikge1xuICAgICAgICBib3JkZXItY29sb3I6ICMwMDVkMDc7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTA5LCAyNTUsIDEyNywgMC4yKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAvL2JhY2tncm91bmQ6IHJnYmEoOTAsIDE2NCwgNjEsIDEpICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgI3NpdGUgPiA6bm90KC53b24pIC5zZWdtZW50LmxvY2tlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNDJmZjRhICFpbXBvcnRhbnQ7XG5cbiAgICAgID4gLmNoaWxkLWNvbnRhaW5lciA+IC5zZWdtZW50LWxlYWYge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGFyayB7XG4gICAgLnN3aXRjaCB7XG4gICAgICBpbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG4gICAgICB9XG5cbiAgICAgIC5zbGlkZXIge1xuICAgICAgICBib3JkZXI6IHNvbGlkIDFweCB3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICNzaXRlID4gOm5vdCgud29uKSAuc2VnbWVudC5sb2NrZWQubGF5ZXItMiB7XG4gICAgICBib3JkZXItY29sb3I6ICM1NjU2NTY7XG4gICAgfVxuXG4gICAgLm1vZGFsIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWZlZmU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICB9XG4gIH1cblxuICAmLmJsYWNrIHtcbiAgICAjc2l0ZSA+IDpub3QoLndvbikgLnNlZ21lbnQubG9ja2VkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5ZDlkOWQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1jb2xvcjogIzZlNmU2ZSAhaW1wb3J0YW50O1xuXG4gICAgICA+IC5jaGlsZC1jb250YWluZXIgPiAuc2VnbWVudC1sZWFmIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAjbG9nbyB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCBncmV5O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIH1cbiAgfVxuXG4gIC8vLnNldHRpbmctcm93Om5vdCguaGlkZGVuKSB7XG4gIC8vICBsaW5lLWhlaWdodDogMTtcbiAgLy8gIHBhZGRpbmctdG9wOiAwLjVlbTtcbiAgLy8gIHBhZGRpbmctYm90dG9tOiAwLjVlbTtcbiAgLy8gIHdpZHRoOiAxMDAlO1xuICAvLyAgY3Vyc29yOiBwb2ludGVyO1xuICAvLyAgYmFja2dyb3VuZDogcmdiYSgxOTUsIDE5NSwgMTk1LCAwLjEzKTtcbiAgLy8gIC8vZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAvL31cbn1cbiIsIi8vQGltcG9ydCBcImxpYi9fcm90YXRlLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3NoYXJlLnNjc3NcIjtcbi8vQGltcG9ydCBcImxpYi9fdGFicy5zY3NzXCI7XG5AaW1wb3J0IFwibGliL19jb3JlLnNjc3NcIjtcbi8vQGltcG9ydCBcImxpYi9fZmxhc2hNZXNzZW5nZXIuc2Nzc1wiO1xuLy9AaW1wb3J0IFwibGliL19mcmFtZXdvcmsuc2Nzc1wiO1xuQGltcG9ydCBcImxpYi9fc2V0dGluZ3NTaXRlLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3N0eWxlLnNjc3NcIjtcbkBpbXBvcnQgXCJsaWIvX3RoZW1lLnNjc3NcIjtcbkBpbXBvcnQgXCJ0dXRvcmlhbFwiO1xuQGltcG9ydCBcIndvcmRyb3RhdG9yVGhlbWVcIjtcblxuXG4kdGV4dC1zaGFkb3c6IDAgMC4ycmVtIDAuMnJlbSAjNDY0NjQ2LCAwLjZyZW0gMC44cmVtIDAuNHJlbSAjMDAwMDAwOTA7XG5cbi5uby10cmFuc2l0aW9ue1xuICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gICoge1xuICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4vL0FjdGlvbkJhclxubmF2LnRvcC1iYXIudGl0bGUtYmFyIHtcbiAgcGFkZGluZzogMC4zcmVtIDAuNnJlbSAwO1xufVxuXG4jbG9nbyB7XG4gIG1heC13aWR0aDogMnJlbTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbn1cblxuI2FjdGlvbi1iYXIgLnRvcC1iYXItcmlnaHQgLm1lbnUgLmFjdGlvbi5pbWcgYSB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xuXG4gIGltZyB7XG4gICAgbWF4LWhlaWdodDogMS44cmVtO1xuICB9XG59XG5cbi5tZW51LCAuZHJvcGRvd24ubWVudSB7XG4gIGEge1xuICAgIHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07XG4gIH1cbn1cblxuLnJlbGF0aXZlLWxldmVsLW51bWJlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lciB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIH1cbn1cblxuLy9ib2R5LmRlZmF1bHQgLndvbiAubGV2ZWwtY291bnRlciB7XG4vLyAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMXM7XG4vLyAgYmFja2dyb3VuZDogIzA2YmQwNjtcbi8vICBib3JkZXItY29sb3I6ICNjMTAwMDA7XG4vLyAgLy8+IGEge1xuLy8gIC8vICBjb2xvcjogYmxhY2s7XG4vLyAgLy99XG4vL31cblxuI2xldmVsLW51bWJlci1jb250YWluZXIsIC5sZXZlbC1jb3VudGVyIHtcbiAgei1pbmRleDogMTtcbiAgLy90cmFuc2l0aW9uOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSk7XG4gIGJvcmRlcjogM3B4IHNvbGlkIHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIC8vdmlzaWJpbGl0eTogaGlkZGVuO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXG5cbiAgaGVpZ2h0OiA0MHB4O1xuICB3aWR0aDogNDBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICYubGV2ZWwtY291bnRlciB7XG4gICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiAxLjhyZW07XG5cbiAgICAmLm51bS0xMCB7XG4gICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICB9XG5cbiAgICAmLm51bS0xMDAge1xuICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgfVxuXG4gICAgJi5udW0tMTAwMCB7XG4gICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgfVxuICB9XG5cbiAgJi5pbi1tYWluLW1lbnUge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1jb2xvcjogYmxhY2s7XG5cbiAgICBoZWlnaHQ6IDFlbTtcbiAgICB3aWR0aDogMWVtO1xuICAgIG1pbi1oZWlnaHQ6IDFlbTtcbiAgICBtaW4td2lkdGg6IDFlbTtcbiAgICBtYXgtaGVpZ2h0OiAxZW07XG4gICAgbWF4LXdpZHRoOiAxZW07XG4gIH1cblxuICBhIHtcbiAgICB3aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50O1xuICB9XG5cbiAgI2xldmVsLW51bWJlciwgYSB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG59XG5cbiRjb2luVG93ZXJEaW1lbnNpb246IDI4cHg7XG4vL2NvaW4gZWxlbWVudFxuLmNvaW4tY291bnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDEuNnJlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICB9XG5cbiAgOmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltZy9jb2luVG93ZXIucG5nJyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAkY29pblRvd2VyRGltZW5zaW9uICRjb2luVG93ZXJEaW1lbnNpb247XG4gICAgd2lkdGg6ICRjb2luVG93ZXJEaW1lbnNpb247XG4gICAgaGVpZ2h0OiAkY29pblRvd2VyRGltZW5zaW9uO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG59XG5cbiNjb2luLWNvbnRhaW5lciB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuXG4gIC5jb2luIHtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgIG1heC13aWR0aDogMjBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtKSB7XG4gICAgICBtYXgtd2lkdGg6IDI1cHg7XG4gICAgfVxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWVkaXVtKSB7XG4gICAgICBtYXgtd2lkdGg6IDMwcHg7XG4gICAgfVxuICB9XG59XG5cbi8vU2VnbWVudHNcblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHJvdGF0aW9uRGVncmVlcykge1xuICAkc3RhcnREZWdyZWU6ICgobnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSsyNzApJTM2MCk7XG5cbiAgQGtleWZyYW1lcyByb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfSB7XG4gICAgMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgjeyRzdGFydERlZ3JlZX1kZWcpO1xuICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgJHN0YXJ0RGVncmVlKX07XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgje250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9ZGVnKTtcbiAgICAgIHRyYW5zZm9ybTogI3ttYXAtZ2V0KCRkZWdyZWVNYXRyaXgsIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpfTtcbiAgICB9XG4gIH1cbiAgQGtleWZyYW1lcyByb3RhdGUtcmV2ZXJzZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAwJSB7XG4gICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7KG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpKzkwfWRlZyk7XG4gICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzkwKX1cbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7JHN0YXJ0RGVncmVlKzkwfWRlZyk7XG4gICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCAkc3RhcnREZWdyZWUrOTApfTtcbiAgICB9XG4gIH1cbn1cblxuLnNlZ21lbnQ6bm90KC5zZWdtZW50LXJvdyk6bm90KC5zZWdtZW50LXRyaWFuZ2xlKSB7XG4gICYucm90YXRpbmcge1xuICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICYucm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX0ge1xuICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX07XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGFuaW1hdGlvbkR1cmF0aW9uO1xuICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgPiAuc2VnbWVudCB7XG4gICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLSN7NDUwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfTtcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGFuaW1hdGlvbkR1cmF0aW9uO1xuICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgICAgICBAZm9yICRqIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAgICAgICAgICRhbmltYXRpb25OYW1lOiAoKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaiktIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkrMzYwKSUzNjApKzkwO1xuICAgICAgICAgICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkail9IHtcbiAgICAgICAgICAgICAgICBhbmltYXRpb24tbmFtZTogcm90YXRlLSN7JGFuaW1hdGlvbk5hbWV9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5yZXZlcnNlIHtcbiAgICAgICAgICAvL2FuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeyhudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKSUzNjArOTB9O1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9O1xuXG4gICAgICAgICAgPiAuY2hpbGQtY29udGFpbmVyIHtcbiAgICAgICAgICAgID4gLnNlZ21lbnQge1xuICAgICAgICAgICAgICAvL2FuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jezM2MC0gKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSklMzYwKX07XG4gICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeyg1NDAtIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpJTM2MCs5MH07XG4gICAgICAgICAgICAgIEBmb3IgJGogZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICAgICAgICAgICAkYW5pbWF0aW9uTmFtZTogKChudGgoJHJvdGF0aW9uRGVncmVlcywgJGopLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpKzM2MCklMzYwKSs5MDtcbiAgICAgICAgICAgICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkail9IHtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeygkYW5pbWF0aW9uTmFtZSs5MCklMzYwKzkwfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmOm5vdCgucm90YXRpbmcpIHtcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9IHtcbiAgICAgICAgLy90cmFuc2Zvcm06IHJvdGF0ZSgje250aCgkcm90YXRpb25EZWdyZWVzLCAkaSl9ZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtOiAje21hcC1nZXQoJGRlZ3JlZU1hdHJpeCwgbnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKSl9O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgPiAuc2VnbWVudCB7XG4gICAgICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7MzYwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCAzNjAtIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkpfTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAgICAgICBAZm9yICRqIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkcm90YXRpb25EZWdyZWVzKSB7XG4gICAgICAgICAgICAgICRhbmltYXRpb25OYW1lOiAoKG50aCgkcm90YXRpb25EZWdyZWVzLCAkaiktIG50aCgkcm90YXRpb25EZWdyZWVzLCAkaSkrMzYwKSUzNjApO1xuICAgICAgICAgICAgICBAaWYgJGFuaW1hdGlvbk5hbWU9PTAge1xuICAgICAgICAgICAgICAgICRhbmltYXRpb25OYW1lOiAzNjA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAmLnJvdGF0ZS0je250aCgkcm90YXRpb25EZWdyZWVzLCAkail9IHtcbiAgICAgICAgICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7JGFuaW1hdGlvbk5hbWV9ZGVnKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICN7bWFwLWdldCgkZGVncmVlTWF0cml4LCAkYW5pbWF0aW9uTmFtZSl9O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICAgICAgICAgICYucm90YXRpbmcge1xuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJvdGF0ZS0jeyRhbmltYXRpb25OYW1lfTtcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGFuaW1hdGlvbkR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICAgICAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG5cbiAgICAgICAgICAgICAgICAgICYucmV2ZXJzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiByb3RhdGUtcmV2ZXJzZS0jeyRhbmltYXRpb25OYW1lfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuI2xldmVsIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRyYW5zaXRpb246IG5vbmU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICAvL3dpZHRoOiAxMDAlO1xuXG4gICoge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICBvdmVyZmxvdy15OiB2aXNpYmxlO1xufVxuXG4uc2VnbWVudCB7XG5cbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2hpdGUtc3BhY2U6IGluaXRpYWw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuXG4gICYuc2VnbWVudC1yb3cge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmLnNlZ21lbnQtY29sdW1uIHtcbiAgICBwYWRkaW5nLXRvcDogNHB4O1xuXG4gICAgPiAuY2hpbGQtY29udGFpbmVyID4gLnNlZ21lbnQge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLnNlZ21lbnQtbGVhZiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBtaW4td2lkdGg6IDFlbTtcbiAgICBwYWRkaW5nOiAwLjhlbTtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nLXRvcDogMTAwJTtcbiAgICB9XG5cbiAgICAubGVhZi1lbGVtZW50IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcblxuICAgICAgLy90ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xuXG4gICAgfVxuICB9XG5cbiAgJi5zZWdtZW50LXBhcmVudCB7XG4gICAgYm9yZGVyOiBzb2xpZCAxcHggI2E5YTlhOTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgcGFkZGluZzogMXB4O1xuXG4gICAgJi5sYXllci0yIHtcbiAgICAgIGJvcmRlcjogc29saWQgM3B4ICMwMDAwMDA7XG4gICAgfVxuICB9XG5cbiAgJi5zZWdtZW50LXRyaWFuZ2xlIHtcbiAgICA+IC5jaGlsZC1jb250YWluZXIge1xuICAgICAgPiAuc2VnbWVudC1wYXJlbnQge1xuICAgICAgICAvL2JvcmRlcjogc29saWQgM3B4ICMwMDAwMDA7XG4gICAgICAgIC8vcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vL1dvbi1zY3JlZW5cbiNzaXRlID4gOm5vdCgud29uKSB7XG4gIC5zaG93LXdoZW4td29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5sZXZlbC1jb250YWluZXIge1xuICAvL2ZsZXg6IDE7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbi53b24ge1xuICAubGV2ZWwtY29udGFpbmVyIHtcbiAgICAvL2hlaWdodDogNjAlO1xuICB9XG5cbiAgLnNob3ctd2hlbi13b24ge1xuICAgIC8vdmlzaWJpbGl0eTogaW5pdGlhbDtcbiAgfVxuXG4gIC5zaG93LXdoaWxlLXBsYXlpbmcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAjd29uLXRleHQge1xuICAgIHRleHQtc2hhZG93OiAkdGV4dC1zaGFkb3c7XG4gIH1cblxuXG4gIC5zZWdtZW50Om5vdCguc2VnbWVudC1yb3cpOm5vdCguc2VnbWVudC10cmlhbmdsZSk6bm90KC5yb3RhdGluZykge1xuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICYucm90YXRlLSN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX0ge1xuICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7bnRoKCRyb3RhdGlvbkRlZ3JlZXMsICRpKX1kZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgID4gLmNoaWxkLWNvbnRhaW5lciB7XG4gICAgICAgICAgPiAuc2VnbWVudCB7XG4gICAgICAgICAgICAvL3RyYW5zZm9ybTogcm90YXRlKCN7MzYwLSBudGgoJHJvdGF0aW9uRGVncmVlcywgJGkpfWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG5cbiAgICAgICAgICAgIEBmb3IgJGogZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRyb3RhdGlvbkRlZ3JlZXMpIHtcbiAgICAgICAgICAgICAgJi5yb3RhdGUtI3tudGgoJHJvdGF0aW9uRGVncmVlcywgJGopfSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuLnRleHQtcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuI2NvbnRpbnVlLWJ1dHRvbiB7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWFsbCBkb3duKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAwLjNlbSAuNmVtO1xuICB9XG59XG5cbiNwbGF5LWJ1dHRvbiB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoc21hbGwgZG93bikge1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgfVxufVxuXG4jaGVscC1idXR0b24ge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAuNGVtIDAuNGVtO1xuICBtYXgtd2lkdGg6IDNlbTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludChzbWVkaXVtIGRvd24pIHtcbiAgICBwYWRkaW5nOiAwLjJlbSAwLjJlbTtcbiAgICBtYXgtd2lkdGg6IDJlbTtcbiAgfVxufVxuXG4ubGluZS1oZWlnaHQtMSB7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG5ib2R5IHtcbiAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbiNzaXRlIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbmRpdi5tYWluQ29udGFpbmVyIHtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuXG59XG5cbi8vI2ltZy1zb3VuZDpiZWZvcmUge1xuLy8gIGNvbnRlbnQ6IFwiXCI7XG4vLyAgbWF4LXdpZHRoOiAxLjRlbTtcbi8vICBiYWNrZ3JvdW5kOiB1cmwoJy4uL2ltZy9zcGVha2VyLnN2ZycpXG4vL31cblxuLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuI3NoYXJlLWJ1dHRvbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgc3ZnIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWF4LXdpZHRoOiAxLjVyZW07XG4gIH1cbn1cblxuc3ZnIHtcbiAgY29sb3I6IGJsYWNrO1xuXG4gIC5maWxsLWJhY2tncm91bmQge1xuICAgIGZpbGw6IHdoaXRlO1xuICB9XG59XG4iLCJAa2V5ZnJhbWVzIGp1bXAtYW5pbWF0aW9uIHtcbiAgMCUge1xuICAgIC8vdHJhbnNmb3JtOiByb3RhdGUoI3skc3RhcnREZWdyZWV9ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgyKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5qdW1wLWFuaW1hdGlvbiB7XG4gIC8vPiAubGVhZi1lbGVtZW50IHtcbiAgICBhbmltYXRpb24tbmFtZToganVtcC1hbmltYXRpb247XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IG5vbmU7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICAgIGFuaW1hdGlvbi1kZWxheTogaW5oZXJpdDtcbiAgLy99XG59XG5cbiRkZWc6IDEwZGVnO1xuXG5Aa2V5ZnJhbWVzIHNoYWtlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDMzJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLSRkZWcpO1xuICB9XG4gIDY2JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoJGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbn1cblxuLnNoYWtlIC5sZWFmLWVsZW1lbnQge1xuXG4gIC8qIFN0YXJ0IHRoZSBzaGFrZSBhbmltYXRpb24gYW5kIG1ha2UgdGhlIGFuaW1hdGlvbiBsYXN0IGZvciAwLjUgc2Vjb25kcyAqL1xuICBhbmltYXRpb246IHNoYWtlIDAuMTVzO1xuXG4gIC8qIFdoZW4gdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZCwgc3RhcnQgYWdhaW4gKi9cbiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG59XG4iLCJuYXYudG9wLWJhciB7XG4gIHBhZGRpbmc6IDA7XG5cbiAgQGVhY2ggJGJyZWFrcG9pbnQsICR2YWx1ZSBpbiAkbWFyZ2lucyB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnJlYWtwb2ludCkge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kdmFsdWU7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0kdmFsdWU7XG4gICAgICAvL3dpZHRoOiBjYWxjKDEwMCUgKyAjezQqJHZhbHVlfSk7XG4gICAgICAvL21heC13aWR0aDogY2FsYygxMDAlICsgI3s0KiR2YWx1ZX0pO1xuICAgIH1cbiAgfVxuXG4gICYud2l0aC1pbWFnZSAuYmFja2dyb3VuZC1pbWcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuYmFja2dyb3VuZC1pbWcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICA+IC5ncmlkLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgLy9wYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgPiAuZ3JpZC1wYWRkaW5nLXgge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuXG4gICAgICA+IC5zbWFsbC0xMntcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHVsID4gbGkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICYubGV2ZWwtY291bnRlciB7XG4gICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG4gICAgfVxuICB9XG5cbn1cbiIsIlxuLy8gQmx1ZVxuLy8kcHJpbWFyeUNvbG9yOiAjNDI3MDgxO1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICM0ZDU3NWE7XG4vLyRhY2NlbnRDb2xvcjogI2UzYWI2ZTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogYmxhY2s7XG5cbiAvL0JsdWUgZGlmZmVyZW50IEFjY2VudFxuJHByaW1hcnlDb2xvcjogIzQyNzA4MTtcbiRzZWNvbmRhcnlDb2xvcjogIzRkNTc1YTtcbiRhY2NlbnRDb2xvcjogI2QzZTdlYjtcbiR0ZXh0Q29sb3I6IHdoaXRlO1xuJHN2Z0NvbG9yOiBibGFjaztcblxuJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjogcmdiYSg2NiwgMTEyLCAxMjksIDEpO1xuJHNlY29uZGFyeUJhY2tncm91bmRDb2xvcjogcmdiYSg2NiwgMTEyLCAxMjksIDAuOTUpO1xuXG4vLyBCbGF1IEludmVyc1xuLy8kcHJpbWFyeUNvbG9yOiAjNGQ1NzVhO1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICM0MjcwODE7XG4vLyRhY2NlbnRDb2xvcjogI2UzYWI2ZTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogYmxhY2s7XG5cbi8vIEdyw7xuXG4vLyRwcmltYXJ5Q29sb3I6ICM2Yjg3Nzg7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzAxMmYyNTtcbi8vJGFjY2VudENvbG9yOiAjYzJjZWNhO1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiBibGFjaztcblxuLy8gR3LDvG4gMlxuLy8kcHJpbWFyeUNvbG9yOiAjMjM0YzQyO1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICMwMTJmMjU7XG4vLyRhY2NlbnRDb2xvcjogI2I4YWNhYTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogYmxhY2s7XG5cbi8vIEdyw7xuIGludmVyc1xuLy8kcHJpbWFyeUNvbG9yOiAjMDEyZjI1O1xuLy8kc2Vjb25kYXJ5Q29sb3I6ICMyMzRjNDI7XG4vLyRhY2NlbnRDb2xvcjogI2I4YWNhYTtcbi8vJHRleHRDb2xvcjogd2hpdGU7XG4vLyRzdmdDb2xvcjogd2hpdGU7XG5cbi8vIEdyw7xuIGludmVycyBhbmRlcmUgQWNjZW50XG4vLyRwcmltYXJ5Q29sb3I6ICMwMTJmMjU7XG4vLyRzZWNvbmRhcnlDb2xvcjogIzIzNGM0Mjtcbi8vJGFjY2VudENvbG9yOiAjNmI4Nzc4O1xuLy8kdGV4dENvbG9yOiB3aGl0ZTtcbi8vJHN2Z0NvbG9yOiB3aGl0ZTtcblxuYm9keS50aGVtZS1ibHVle1xuICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgICAgICAgICAgICAgICAgMzAwZGVnLFxuICAgICAgICAgICAgICAgICAgJHByaW1hcnlDb2xvcixcbiAgICAgICAgICAgICAgICAgICRwcmltYXJ5Q29sb3IgOSUsXG4gICAgICAgICAgICAgICAgICAkc2Vjb25kYXJ5QmFja2dyb3VuZENvbG9yIDEzLjUlLFxuICAgICAgICAgICAgICAgICAgJHNlY29uZGFyeUJhY2tncm91bmRDb2xvciAyMS41JSxcbiAgICAgICAgICAgICAgICAgICRwcmltYXJ5Q29sb3IgMjYlLFxuICApO1xuXG4gIC8vYmFja2dyb3VuZDogJHByaW1hcnlDb2xvcjtcbiAgY29sb3I6ICR0ZXh0Q29sb3I7XG5cbiAgbGFiZWx7XG4gICAgY29sb3I6ICR0ZXh0Q29sb3I7XG4gIH1cblxuICAudG9hc3QgLm1lc3NhZ2V7XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUNvbG9yO1xuICB9XG5cbiAgbmF2LnRvcC1iYXIsIG5hdi50b3AtYmFyLndpdGgtaW1hZ2UsIG5hdi50b3AtYmFyLndpdGgtaW1hZ2Uuc29saWR7XG4gICAgYmFja2dyb3VuZDogJHNlY29uZGFyeUNvbG9yO1xuICB9XG5cbiAgLmJ1dHRvbntcbiAgICBiYWNrZ3JvdW5kOiAkc2Vjb25kYXJ5Q29sb3I7XG4gIH1cblxuICAuc3dpdGNoIGlucHV0OmNoZWNrZWQgKyAuc2xpZGVye1xuICAgIGJhY2tncm91bmQ6ICRhY2NlbnRDb2xvcjtcbiAgfVxuICAjbGV2ZWwtbnVtYmVyLWNvbnRhaW5lcntcbiAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeUNvbG9yO1xuICB9XG4gIHN2ZyB7XG4gICAgY29sb3I6ICRzdmdDb2xvcjtcbiAgfVxuXG4gIHVsLm1lbnUgbGkgYSB7XG4gICAgY29sb3I6ICR0ZXh0Q29sb3I7XG4gIH1cblxuICBhe1xuICAgIGNvbG9yOiAkYWNjZW50Q29sb3I7XG4gICAgJi5oaWRkZW4tbGlua3tcbiAgICAgIGNvbG9yOiAkdGV4dENvbG9yO1xuICAgIH1cbiAgfVxuXG4gICNzaXRlID4gOm5vdCgud29uKSAuc2VnbWVudC5sb2NrZWQge1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogJGFjY2VudENvbG9yO1xuICAgIC8vYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeUNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAzMDtcbiAgICAvL2JhY2tncm91bmQtY29sb3I6ICM4MWFjYjU7XG4gIH1cblxuICAjdHV0b3JpYWwtcG9pbnRlcntcbiAgICBiYWNrZ3JvdW5kOiAkYWNjZW50Q29sb3I7XG4gIH1cblxufVxuIiwiQGltcG9ydCBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mb3VuZGF0aW9uLXNpdGVzL3Njc3MvZm91bmRhdGlvblwiO1xuXG4vL1NldHRpbmdzIG5hY2ggZm91bmRhdGlvbiBmw7xyIG1peGlucyBpbiBzZXR0aW5nc1xuQGltcG9ydCBcInNldHRpbmdzXCI7XG5cbi8vSW5jbHVkZSBmb3VuZGF0aW9uIGJlZm9yZSBvdGhlciBzdHlsZXMsIHNvIHRoYXQgb3RoZXIgb25lIGNhbiBvdmVycmlkZSBmb3VuZGF0aW9uXG5AaW5jbHVkZSBmb3VuZGF0aW9uLWV2ZXJ5dGhpbmc7XG5cbi8vRnJvbSBmcmFtZXdvcmtcbkBpbXBvcnQgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZG92YS1zaXRlcy9jb3Jkb3ZhLXNpdGVzXCI7XG5AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmRvdmEtc2l0ZXMtdXNlci1tYW5hZ2VtZW50L2NvcmRvdmEtc2l0ZXMtdXNlci1tYW5hZ2VtZW50XCI7XG5cbi8vQW5kZXJlcyBuYWNoIFNldHRpbmdzLCBkYW1pdCBTZXR0aW5ncyBiZXJlaXRzIGFuZ2V3ZW5kZXQgd2VyZGVuXG5AaW1wb3J0IFwid29yZFJvdGF0b3JcIjtcbkBpbXBvcnQgXCJhbmltYXRpb25zXCI7XG5AaW1wb3J0IFwibmF2YmFyT3ZlcnJpZGVcIjtcbkBpbXBvcnQgXCJ0aGVtZUJsdWVcIjtcblxuLnRyYW5zbGF0aW9ue31cblxuQGtleWZyYW1lcyByb3RhdGUge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDUwZGVnKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGxpbmUge1xuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgODUuOTY0O1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogNjUuOTczLCAyMS45OTExO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDg1Ljk2NDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTY1Ljk3MztcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIH1cbn1cblxuaHRtbCwgYm9keSB7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IG5vbmU7XG59XG5cblxuYSwgYTpob3ZlciB7XG4gIGNvbG9yOiAjZmZjYTAwO1xufVxuXG4jc2l0ZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvL292ZXJmbG93OiBhdXRvO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICAvL2Rpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0XG59XG5cbi5ncm93IHtcbiAgZmxleDogMTtcbn1cblxuLmxvYWRlciB7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAmLm92ZXJsYXkge1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE5MiwgMTkyLCAxOTIsIDAuNSk7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICAgIHotaW5kZXg6IDEwMDAwO1xuXG4gICAgc3ZnIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gICYuaW5saW5lIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHRvcDogaW5pdGlhbDtcbiAgICBwb3NpdGlvbjogaW5pdGlhbDtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IGluaXRpYWw7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxuXG4gICYuc21hbGwgLnNwaW5uZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTtcbiAgfVxuXG4gIC5zcGlubmVyIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC8vc3Ryb2tlOiAjYjcxYzFhO1xuICAgIHN0cm9rZTogIzAwMDtcbiAgICBzdHJva2Utd2lkdGg6IDNweDtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCU7XG4gICAgYW5pbWF0aW9uOiBsaW5lIDEuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSwgcm90YXRlIDEuNnMgbGluZWFyIGluZmluaXRlO1xuICB9XG59XG5cbi5vdmVyZmxvdy1hdXRvIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3ZlcmZsb3ctaGlkZGVue1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uaGVpZ2h0LTEwMCB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vVmlld0luZmxhdGVyXG4uaW5qZWN0ZWQtc3BhbiB7XG59XG5cbi52ZXJ0aWNhbC1taWRkbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udmVydGljYWwtYm90dG9tIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGVuZDtcbn1cblxuLmhvcml6b250YWwtY2VudGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi53aWR0aC0xMDAge1xuICB3aWR0aDogMTAwJTtcbn1cblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCA2IHtcbiAgaCN7JGl9LmlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG59XG5cbmltZy5iYWNrLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWF4LWhlaWdodDogMS4xcmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC42NXJlbTtcbn1cblxuYS5oaWRkZW4tbGluayB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4jbWFpbi1jb250ZW50LWNvbnRhaW5lciB7XG4gIG92ZXJmbG93OiBhdXRvO1xuICB3aWR0aDogMTAwJTtcblxuICA+IC5ncmlkLXh7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogMC41cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgfVxuXG4gICNtYWluLWNvbnRlbnQge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5cbmJvZHl7XG4gIC8vYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2JhY2tncm91bmQucG5nXCIpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== */ \ No newline at end of file diff --git a/src/server/public/index.html b/src/server/public/index.html index 7d94dc7..3720bba 100644 --- a/src/server/public/index.html +++ b/src/server/public/index.html @@ -1 +1 @@ -WordRotator
\ No newline at end of file +WordRotator
\ No newline at end of file diff --git a/src/server/public/manifest.json b/src/server/public/manifest.json index 5093117..ccc885a 100644 --- a/src/server/public/manifest.json +++ b/src/server/public/manifest.json @@ -1,8 +1,8 @@ { "background_color": "#FFF", "display": "standalone", - "name": "WordRotator", - "short_name": "WordRotator", + "name": "WordRotator - Test", + "short_name": "WordRotator - Test", "version": "link.silas.wordrotator", "description": "A word-game", "author": "Silas Günther", diff --git a/src/server/public/wordRotator.apk b/src/server/public/wordRotator.apk index 876ec25..3f47026 100644 Binary files a/src/server/public/wordRotator.apk and b/src/server/public/wordRotator.apk differ diff --git a/tests/wdio.config.browser.js b/tests/wdio.config.browser.js index 4fd5ead..79e25f5 100644 --- a/tests/wdio.config.browser.js +++ b/tests/wdio.config.browser.js @@ -32,7 +32,7 @@ exports.config = { bail: 0, - baseUrl: "http://127.0.0.1:8000", + baseUrl: "http://127.0.0.1:8001", waitforTimeout: 10000,