smoosic 1.0.27 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -378,7 +378,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
378
378
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
379
379
 
380
380
  "use strict";
381
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _select_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select.vue */ \"./src/ui/components/dialogs/select.vue\");\n/* harmony import */ var _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./numberInput.vue */ \"./src/ui/components/dialogs/numberInput.vue\");\n/* harmony import */ var _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../smo/data/partInfo */ \"./src/smo/data/partInfo.ts\");\n/* harmony import */ var _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dialogContainer.vue */ \"./src/ui/components/dialogs/dialogContainer.vue\");\nvar __awaiter = (undefined && undefined.__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};\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*@__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({\n __name: 'partInfo',\n props: {\n domId: { type: String, required: true },\n label: { type: String, required: true },\n partInfo: { type: Object, required: true },\n updatePartInfoCb: { type: Function, required: true },\n commitCb: { type: Function, required: true },\n cancelCb: { type: Function, required: true }\n },\n setup(__props, { expose: __expose }) {\n __expose();\n const props = __props;\n const { domId, label, commitCb, cancelCb, updatePartInfoCb } = Object.assign({}, props);\n const partInfo = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)(new _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_3__.SmoPartInfo(props.partInfo));\n const writeStringValue = (attr, value) => __awaiter(this, void 0, void 0, function* () {\n if (partInfo[attr] === value) {\n return;\n }\n partInfo[attr] = value;\n yield updatePartInfoCb(partInfo);\n });\n const writeNumberValue = (attr, value) => __awaiter(this, void 0, void 0, function* () {\n if (partInfo[attr] === value) {\n return;\n }\n partInfo[attr] = value;\n yield updatePartInfoCb(partInfo);\n });\n const writeBooleanValue = (attr, value) => __awaiter(this, void 0, void 0, function* () {\n if (partInfo[attr] === value) {\n return;\n }\n partInfo[attr] = value;\n yield updatePartInfoCb(partInfo);\n });\n const writeLayoutValue = (attr, value) => __awaiter(this, void 0, void 0, function* () {\n // no change?\n if (partInfo.layoutManager.globalLayout[attr] === value) {\n return;\n }\n partInfo.layoutManager.globalLayout[attr] = value;\n yield updatePartInfoCb(partInfo);\n });\n const pageSizes = [\n { label: 'Letter', value: 'letter' },\n { label: 'Legal', value: 'legal' },\n { label: 'Tabloid', value: 'tabloid' },\n { label: 'A4', value: 'a4' },\n { label: 'Custom', value: 'custom' }\n ];\n const predefinedDimensions = {\n 'letter': { width: 816, height: 1056 },\n 'legal': { width: 816, height: 1344 },\n 'tabloid': { width: 1056, height: 1632 },\n 'a4': { width: 794, height: 1123 }\n };\n // Page size is in pixels, but if it matches a preset we just show that.\n // User chooses 'custom' to unlock width/height editing.\n const pageSize = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('custom');\n const pageChange = () => {\n Object.keys(predefinedDimensions).forEach((key) => {\n const dims = predefinedDimensions[key];\n if (dims.width === partInfo.layoutManager.globalLayout.pageWidth &&\n dims.height === partInfo.layoutManager.globalLayout.pageHeight) {\n pageSize.value = key;\n }\n });\n };\n const lockDimensions = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false);\n pageChange();\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(pageSize, (newVal) => __awaiter(this, void 0, void 0, function* () {\n if (predefinedDimensions[newVal]) {\n lockDimensions.value = true;\n const dims = predefinedDimensions[newVal];\n partInfo.layoutManager.globalLayout.pageWidth = dims.width;\n partInfo.layoutManager.globalLayout.pageHeight = dims.height;\n }\n else {\n lockDimensions.value = false;\n }\n yield updatePartInfoCb(partInfo);\n }));\n if (predefinedDimensions[pageSize.value]) {\n lockDimensions.value = true;\n }\n const update = () => __awaiter(this, void 0, void 0, function* () {\n yield updatePartInfoCb(partInfo);\n });\n const includeNext = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false);\n if (partInfo.stavesAfter > 0) {\n includeNext.value = true;\n }\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(includeNext, (newVal, oldVal) => __awaiter(this, void 0, void 0, function* () {\n if (newVal !== oldVal) {\n partInfo.stavesAfter = newVal ? 1 : 0;\n yield updatePartInfoCb(partInfo);\n }\n }));\n const updateLayoutFunc = (param) => {\n const cb = (value) => __awaiter(this, void 0, void 0, function* () {\n yield writeLayoutValue(param, value);\n });\n return cb;\n };\n const getId = (str) => {\n return `${domId}-${str}`;\n };\n const __returned__ = { props, domId, label, commitCb, cancelCb, updatePartInfoCb, partInfo, writeStringValue, writeNumberValue, writeBooleanValue, writeLayoutValue, pageSizes, predefinedDimensions, pageSize, pageChange, lockDimensions, update, includeNext, updateLayoutFunc, getId, selectComp: _select_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"], numberInputApp: _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"], dialogContainer: _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"] };\n Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true });\n return __returned__;\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1s2XS51c2VbMF0hLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3BhcnRJbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RDtBQ0NUO0FBQ1Y7QUFDUztBQUU2RTtBQUV4RTtBRG1CcEQsOEVBQTRCLG9EQUFnQixDQUFDO0lBQzNDLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUN2QyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDdkMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQzFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ3BELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM1QyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7S0FDN0M7SUFDRCxLQUFLLENBQUMsT0FBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUN4QyxRQUFRLEVBQUUsQ0FBQztRQ3BCYixNQUFNLEtBQUssR0FBRyxPQUFvQixDQUFDO1FBQ25DLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUscUJBQVEsS0FBSyxDQUFFLENBQUM7UUFDNUUsTUFBTSxRQUFRLEdBQUcsNkNBQVEsQ0FBQyxJQUFJLDJEQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFHM0QsTUFBTSxnQkFBZ0IsR0FBRyxDQUFPLElBQTJCLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDNUUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzdCLE9BQU87WUFDVCxDQUFDO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN2QixNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLENBQU8sSUFBd0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUN6RSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsT0FBTztZQUNULENBQUM7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0saUJBQWlCLEdBQUcsQ0FBTyxJQUE0QixFQUFFLEtBQWMsRUFBRSxFQUFFO1lBQy9FLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUM3QixPQUFPO1lBQ1QsQ0FBQztZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdkIsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxDQUFPLElBQTRCLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDM0UsYUFBYTtZQUNiLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3hELE9BQU87WUFDVCxDQUFDO1lBQ0QsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2xELE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFtQjtZQUNoQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNwQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNsQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUN0QyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUM1QixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtTQUNyQyxDQUFDO1FBS0YsTUFBTSxvQkFBb0IsR0FBa0M7WUFDMUQsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ3RDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUNyQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDeEMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1NBQ25DLENBQUM7UUFDRix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELE1BQU0sUUFBUSxHQUFHLHdDQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTO29CQUM5RCxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNqRSxRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQUcsd0NBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxVQUFVLEVBQUUsQ0FBQztRQUNiLDBDQUFLLENBQUUsUUFBUSxFQUFFLENBQU8sTUFBTSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUMzRCxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sY0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztZQUNELE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUFDLENBQUM7UUFDSCxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUM3QixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUUsR0FBUyxFQUFFO1lBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLHdDQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFDRCwwQ0FBSyxDQUFFLFdBQVcsRUFBRSxDQUFPLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDLEVBQUMsQ0FBQztRQUlILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUE2QixFQUFvQixFQUFFO1lBQzNFLE1BQU0sRUFBRSxHQUFHLENBQU8sS0FBYSxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQzVCLE9BQU8sR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRRGlCRCxNQUFNLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxVQUFVLHVEQUFFLGNBQWMsNERBQUUsZUFBZSxnRUFBRTtRQUN2VSxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFGLE9BQU8sWUFBWTtJQUNuQixDQUFDO0NBRUEsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL1Ntby8uL3NyYy91aS9jb21wb25lbnRzL2RpYWxvZ3MvcGFydEluZm8udnVlPzBhNTMiLCJ3ZWJwYWNrOi8vU21vLy4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9wYXJ0SW5mby52dWU/YzVhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQgYXMgX2RlZmluZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IHJlZiwgUmVmLCB3YXRjaCwgcmVhY3RpdmUgfSBmcm9tICd2dWUnO1xyXG5pbXBvcnQgc2VsZWN0Q29tcCBmcm9tICcuL3NlbGVjdC52dWUnO1xyXG5pbXBvcnQgbnVtYmVySW5wdXRBcHAgZnJvbSAnLi9udW1iZXJJbnB1dC52dWUnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9jb21tb24nO1xyXG5pbXBvcnQgeyBTbW9QYXJ0SW5mbywgU21vUGFydEluZm9TdHJpbmdUeXBlLCBTbW9QYXJ0SW5mb051bVR5cGUsIFNtb1BhcnRJbmZvQm9vbGVhblR5cGUgfSBmcm9tICcuLi8uLi8uLi9zbW8vZGF0YS9wYXJ0SW5mbyc7XHJcbmltcG9ydCB7IEdsb2JhbExheW91dEF0dHJpYnV0ZXMsIFNtb0xheW91dE1hbmFnZXIsIEdsb2JhbExheW91dEF0dHJpYnV0ZXNBcnJheSB9IGZyb20gJy4uLy4uLy4uL3Ntby9kYXRhL3Njb3JlTW9kaWZpZXJzJztcclxuaW1wb3J0IGRpYWxvZ0NvbnRhaW5lciBmcm9tICcuL2RpYWxvZ0NvbnRhaW5lci52dWUnO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkb21JZDogc3RyaW5nLFxyXG4gIGxhYmVsOiBzdHJpbmcsXHJcbiAgcGFydEluZm86IFNtb1BhcnRJbmZvLFxyXG4gIHVwZGF0ZVBhcnRJbmZvQ2I6IChwaTogU21vUGFydEluZm8pID0+IFByb21pc2U8dm9pZD4sXHJcbiAgY29tbWl0Q2I6ICgpID0+IFByb21pc2U8dm9pZD4sXHJcbiAgY2FuY2VsQ2I6ICgpID0+IFByb21pc2U8dm9pZD5cclxufVxyXG50eXBlIG51bWJlclR5cGVzID0gJ3BhZ2VXaWR0aCcgfCAncGFnZUhlaWdodCcgfCAnem9vbVNjYWxlJyB8ICdzdmdTY2FsZScgfCAnbm90ZVNwYWNpbmcnIHwgJ21heE1lYXN1cmVTeXN0ZW0nO1xyXG5cclxuaW50ZXJmYWNlIGRpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXIsXHJcbiAgaGVpZ2h0OiBudW1iZXJcclxufVxyXG50eXBlIG51bWJlcldyaXRlclR5cGUgPSAodmFsdWU6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPjtcclxuXHJcblxuZXhwb3J0IGRlZmF1bHQgLypAX19QVVJFX18qL19kZWZpbmVDb21wb25lbnQoe1xuICBfX25hbWU6ICdwYXJ0SW5mbycsXG4gIHByb3BzOiB7XG4gICAgZG9tSWQ6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXJ0SW5mbzogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdXBkYXRlUGFydEluZm9DYjogeyB0eXBlOiBGdW5jdGlvbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb21taXRDYjogeyB0eXBlOiBGdW5jdGlvbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjYW5jZWxDYjogeyB0eXBlOiBGdW5jdGlvbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuICBzZXR1cChfX3Byb3BzOiBhbnksIHsgZXhwb3NlOiBfX2V4cG9zZSB9KSB7XG4gIF9fZXhwb3NlKCk7XG5cclxuY29uc3QgcHJvcHMgPSBfX3Byb3BzO1xyXG5jb25zdCB7IGRvbUlkLCBsYWJlbCwgY29tbWl0Q2IsIGNhbmNlbENiLCB1cGRhdGVQYXJ0SW5mb0NiIH0gPSB7IC4uLnByb3BzIH07XHJcbmNvbnN0IHBhcnRJbmZvID0gcmVhY3RpdmUobmV3IFNtb1BhcnRJbmZvKHByb3BzLnBhcnRJbmZvKSk7XHJcbmNvbnN0IHdyaXRlU3RyaW5nVmFsdWUgPSBhc3luYyAoYXR0cjogU21vUGFydEluZm9TdHJpbmdUeXBlLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgaWYgKHBhcnRJbmZvW2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlTnVtYmVyVmFsdWUgPSBhc3luYyAoYXR0cjogU21vUGFydEluZm9OdW1UeXBlLCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgaWYgKHBhcnRJbmZvW2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlQm9vbGVhblZhbHVlID0gYXN5bmMgKGF0dHI6IFNtb1BhcnRJbmZvQm9vbGVhblR5cGUsIHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgaWYgKHBhcnRJbmZvW2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlTGF5b3V0VmFsdWUgPSBhc3luYyAoYXR0cjogR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgLy8gbm8gY2hhbmdlP1xyXG4gICAgaWYgKHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0W2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dFthdHRyXSA9IHZhbHVlO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgcGFnZVNpemVzOiBTZWxlY3RPcHRpb25bXSA9IFtcclxuICB7IGxhYmVsOiAnTGV0dGVyJywgdmFsdWU6ICdsZXR0ZXInIH0sXHJcbiAgeyBsYWJlbDogJ0xlZ2FsJywgdmFsdWU6ICdsZWdhbCcgfSxcclxuICB7IGxhYmVsOiAnVGFibG9pZCcsIHZhbHVlOiAndGFibG9pZCcgfSxcclxuICB7IGxhYmVsOiAnQTQnLCB2YWx1ZTogJ2E0JyB9LFxyXG4gIHsgbGFiZWw6ICdDdXN0b20nLCB2YWx1ZTogJ2N1c3RvbScgfVxyXG5dO1xyXG5jb25zdCBwcmVkZWZpbmVkRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBkaW1lbnNpb25zIH0gPSB7XHJcbiAgJ2xldHRlcic6IHsgd2lkdGg6IDgxNiwgaGVpZ2h0OiAxMDU2IH0sXHJcbiAgJ2xlZ2FsJzogeyB3aWR0aDogODE2LCBoZWlnaHQ6IDEzNDQgfSxcclxuICAndGFibG9pZCc6IHsgd2lkdGg6IDEwNTYsIGhlaWdodDogMTYzMiB9LFxyXG4gICdhNCc6IHsgd2lkdGg6IDc5NCwgaGVpZ2h0OiAxMTIzIH1cclxufTtcclxuLy8gUGFnZSBzaXplIGlzIGluIHBpeGVscywgYnV0IGlmIGl0IG1hdGNoZXMgYSBwcmVzZXQgd2UganVzdCBzaG93IHRoYXQuXHJcbi8vIFVzZXIgY2hvb3NlcyAnY3VzdG9tJyB0byB1bmxvY2sgd2lkdGgvaGVpZ2h0IGVkaXRpbmcuXHJcbmNvbnN0IHBhZ2VTaXplID0gcmVmKCdjdXN0b20nKTtcclxuY29uc3QgcGFnZUNoYW5nZSA9ICgpID0+IHtcclxuIE9iamVjdC5rZXlzKHByZWRlZmluZWREaW1lbnNpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1trZXldO1xyXG4gICAgaWYgKGRpbXMud2lkdGggPT09IHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VXaWR0aCAmJlxyXG4gICAgICBkaW1zLmhlaWdodCA9PT0gcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodCkge1xyXG4gICAgICBwYWdlU2l6ZS52YWx1ZSA9IGtleTtcclxuICAgIH1cclxuICB9KTtcclxufTtcclxuY29uc3QgbG9ja0RpbWVuc2lvbnMgPSByZWYoZmFsc2UpO1xyXG5wYWdlQ2hhbmdlKCk7XHJcbndhdGNoIChwYWdlU2l6ZSwgYXN5bmMgKG5ld1ZhbCkgPT4ge1xyXG4gIGlmIChwcmVkZWZpbmVkRGltZW5zaW9uc1tuZXdWYWxdKSB7XHJcbiAgICBsb2NrRGltZW5zaW9ucy52YWx1ZSA9IHRydWU7XHJcbiAgICBjb25zdCBkaW1zID0gcHJlZGVmaW5lZERpbWVuc2lvbnNbbmV3VmFsXTtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VXaWR0aCA9IGRpbXMud2lkdGg7XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlSGVpZ2h0ID0gZGltcy5oZWlnaHQ7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gZmFsc2U7XHJcbiAgfVxyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59KTtcclxuaWYgKHByZWRlZmluZWREaW1lbnNpb25zW3BhZ2VTaXplLnZhbHVlXSkge1xyXG4gIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gdHJ1ZVxyXG59XHJcbmNvbnN0IHVwZGF0ZSA9YXN5bmMgKCkgPT4ge1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IGluY2x1ZGVOZXh0ID0gcmVmKGZhbHNlKTtcclxuaWYgKHBhcnRJbmZvLnN0YXZlc0FmdGVyID4gMCkge1xyXG4gIGluY2x1ZGVOZXh0LnZhbHVlID0gdHJ1ZTtcclxufVxyXG53YXRjaCAoaW5jbHVkZU5leHQsIGFzeW5jIChuZXdWYWwsIG9sZFZhbCkgPT4ge1xyXG4gIGlmIChuZXdWYWwgIT09IG9sZFZhbCkge1xyXG4gICAgcGFydEluZm8uc3RhdmVzQWZ0ZXIgPSBuZXdWYWwgPyAxIDogMDtcclxuICAgIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG4gIH1cclxufSk7XHJcblxyXG5jb25zdCB1cGRhdGVMYXlvdXRGdW5jID0gKHBhcmFtOiBHbG9iYWxMYXlvdXRBdHRyaWJ1dGVzKTogbnVtYmVyV3JpdGVyVHlwZSA9PiB7XHJcbiAgY29uc3QgY2IgPSBhc3luYyAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgYXdhaXQgd3JpdGVMYXlvdXRWYWx1ZShwYXJhbSwgdmFsdWUpO1xyXG4gIH1cclxuICByZXR1cm4gY2I7XHJcbn1cclxuXHJcbmNvbnN0IGdldElkID0gKHN0cjogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGAke2RvbUlkfS0ke3N0cn1gO1xyXG59XHJcblxyXG5cbmNvbnN0IF9fcmV0dXJuZWRfXyA9IHsgcHJvcHMsIGRvbUlkLCBsYWJlbCwgY29tbWl0Q2IsIGNhbmNlbENiLCB1cGRhdGVQYXJ0SW5mb0NiLCBwYXJ0SW5mbywgd3JpdGVTdHJpbmdWYWx1ZSwgd3JpdGVOdW1iZXJWYWx1ZSwgd3JpdGVCb29sZWFuVmFsdWUsIHdyaXRlTGF5b3V0VmFsdWUsIHBhZ2VTaXplcywgcHJlZGVmaW5lZERpbWVuc2lvbnMsIHBhZ2VTaXplLCBwYWdlQ2hhbmdlLCBsb2NrRGltZW5zaW9ucywgdXBkYXRlLCBpbmNsdWRlTmV4dCwgdXBkYXRlTGF5b3V0RnVuYywgZ2V0SWQsIHNlbGVjdENvbXAsIG51bWJlcklucHV0QXBwLCBkaWFsb2dDb250YWluZXIgfVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pXG5yZXR1cm4gX19yZXR1cm5lZF9fXG59XG5cbn0pIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVmLCBSZWYsIHdhdGNoLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSc7XHJcbmltcG9ydCBzZWxlY3RDb21wIGZyb20gJy4vc2VsZWN0LnZ1ZSc7XHJcbmltcG9ydCBudW1iZXJJbnB1dEFwcCBmcm9tICcuL251bWJlcklucHV0LnZ1ZSc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XHJcbmltcG9ydCB7IFNtb1BhcnRJbmZvLCBTbW9QYXJ0SW5mb1N0cmluZ1R5cGUsIFNtb1BhcnRJbmZvTnVtVHlwZSwgU21vUGFydEluZm9Cb29sZWFuVHlwZSB9IGZyb20gJy4uLy4uLy4uL3Ntby9kYXRhL3BhcnRJbmZvJztcclxuaW1wb3J0IHsgR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgU21vTGF5b3V0TWFuYWdlciwgR2xvYmFsTGF5b3V0QXR0cmlidXRlc0FycmF5IH0gZnJvbSAnLi4vLi4vLi4vc21vL2RhdGEvc2NvcmVNb2RpZmllcnMnO1xyXG5pbXBvcnQgZGlhbG9nQ29udGFpbmVyIGZyb20gJy4vZGlhbG9nQ29udGFpbmVyLnZ1ZSc7XHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRvbUlkOiBzdHJpbmcsXHJcbiAgbGFiZWw6IHN0cmluZyxcclxuICBwYXJ0SW5mbzogU21vUGFydEluZm8sXHJcbiAgdXBkYXRlUGFydEluZm9DYjogKHBpOiBTbW9QYXJ0SW5mbykgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjb21taXRDYjogKCkgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjYW5jZWxDYjogKCkgPT4gUHJvbWlzZTx2b2lkPlxyXG59XHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8UHJvcHM+KCk7XHJcbmNvbnN0IHsgZG9tSWQsIGxhYmVsLCBjb21taXRDYiwgY2FuY2VsQ2IsIHVwZGF0ZVBhcnRJbmZvQ2IgfSA9IHsgLi4ucHJvcHMgfTtcclxuY29uc3QgcGFydEluZm8gPSByZWFjdGl2ZShuZXcgU21vUGFydEluZm8ocHJvcHMucGFydEluZm8pKTtcclxudHlwZSBudW1iZXJUeXBlcyA9ICdwYWdlV2lkdGgnIHwgJ3BhZ2VIZWlnaHQnIHwgJ3pvb21TY2FsZScgfCAnc3ZnU2NhbGUnIHwgJ25vdGVTcGFjaW5nJyB8ICdtYXhNZWFzdXJlU3lzdGVtJztcclxuXHJcbmNvbnN0IHdyaXRlU3RyaW5nVmFsdWUgPSBhc3luYyAoYXR0cjogU21vUGFydEluZm9TdHJpbmdUeXBlLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgaWYgKHBhcnRJbmZvW2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlTnVtYmVyVmFsdWUgPSBhc3luYyAoYXR0cjogU21vUGFydEluZm9OdW1UeXBlLCB2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgaWYgKHBhcnRJbmZvW2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlQm9vbGVhblZhbHVlID0gYXN5bmMgKGF0dHI6IFNtb1BhcnRJbmZvQm9vbGVhblR5cGUsIHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgaWYgKHBhcnRJbmZvW2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlTGF5b3V0VmFsdWUgPSBhc3luYyAoYXR0cjogR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgLy8gbm8gY2hhbmdlP1xyXG4gICAgaWYgKHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0W2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dFthdHRyXSA9IHZhbHVlO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgcGFnZVNpemVzOiBTZWxlY3RPcHRpb25bXSA9IFtcclxuICB7IGxhYmVsOiAnTGV0dGVyJywgdmFsdWU6ICdsZXR0ZXInIH0sXHJcbiAgeyBsYWJlbDogJ0xlZ2FsJywgdmFsdWU6ICdsZWdhbCcgfSxcclxuICB7IGxhYmVsOiAnVGFibG9pZCcsIHZhbHVlOiAndGFibG9pZCcgfSxcclxuICB7IGxhYmVsOiAnQTQnLCB2YWx1ZTogJ2E0JyB9LFxyXG4gIHsgbGFiZWw6ICdDdXN0b20nLCB2YWx1ZTogJ2N1c3RvbScgfVxyXG5dO1xyXG5pbnRlcmZhY2UgZGltZW5zaW9ucyB7XHJcbiAgd2lkdGg6IG51bWJlcixcclxuICBoZWlnaHQ6IG51bWJlclxyXG59XHJcbmNvbnN0IHByZWRlZmluZWREaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IGRpbWVuc2lvbnMgfSA9IHtcclxuICAnbGV0dGVyJzogeyB3aWR0aDogODE2LCBoZWlnaHQ6IDEwNTYgfSxcclxuICAnbGVnYWwnOiB7IHdpZHRoOiA4MTYsIGhlaWdodDogMTM0NCB9LFxyXG4gICd0YWJsb2lkJzogeyB3aWR0aDogMTA1NiwgaGVpZ2h0OiAxNjMyIH0sXHJcbiAgJ2E0JzogeyB3aWR0aDogNzk0LCBoZWlnaHQ6IDExMjMgfVxyXG59O1xyXG4vLyBQYWdlIHNpemUgaXMgaW4gcGl4ZWxzLCBidXQgaWYgaXQgbWF0Y2hlcyBhIHByZXNldCB3ZSBqdXN0IHNob3cgdGhhdC5cclxuLy8gVXNlciBjaG9vc2VzICdjdXN0b20nIHRvIHVubG9jayB3aWR0aC9oZWlnaHQgZWRpdGluZy5cclxuY29uc3QgcGFnZVNpemUgPSByZWYoJ2N1c3RvbScpO1xyXG5jb25zdCBwYWdlQ2hhbmdlID0gKCkgPT4ge1xyXG4gT2JqZWN0LmtleXMocHJlZGVmaW5lZERpbWVuc2lvbnMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgY29uc3QgZGltcyA9IHByZWRlZmluZWREaW1lbnNpb25zW2tleV07XHJcbiAgICBpZiAoZGltcy53aWR0aCA9PT0gcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoICYmXHJcbiAgICAgIGRpbXMuaGVpZ2h0ID09PSBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlSGVpZ2h0KSB7XHJcbiAgICAgIHBhZ2VTaXplLnZhbHVlID0ga2V5O1xyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5jb25zdCBsb2NrRGltZW5zaW9ucyA9IHJlZihmYWxzZSk7XHJcbnBhZ2VDaGFuZ2UoKTtcclxud2F0Y2ggKHBhZ2VTaXplLCBhc3luYyAobmV3VmFsKSA9PiB7XHJcbiAgaWYgKHByZWRlZmluZWREaW1lbnNpb25zW25ld1ZhbF0pIHtcclxuICAgIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1tuZXdWYWxdO1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoID0gZGltcy53aWR0aDtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQgPSBkaW1zLmhlaWdodDtcclxuICB9IGVsc2Uge1xyXG4gICAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSBmYWxzZTtcclxuICB9XHJcbiAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn0pO1xyXG5pZiAocHJlZGVmaW5lZERpbWVuc2lvbnNbcGFnZVNpemUudmFsdWVdKSB7XHJcbiAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSB0cnVlXHJcbn1cclxuY29uc3QgdXBkYXRlID1hc3luYyAoKSA9PiB7XHJcbiAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgaW5jbHVkZU5leHQgPSByZWYoZmFsc2UpO1xyXG5pZiAocGFydEluZm8uc3RhdmVzQWZ0ZXIgPiAwKSB7XHJcbiAgaW5jbHVkZU5leHQudmFsdWUgPSB0cnVlO1xyXG59XHJcbndhdGNoIChpbmNsdWRlTmV4dCwgYXN5bmMgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XHJcbiAgICBwYXJ0SW5mby5zdGF2ZXNBZnRlciA9IG5ld1ZhbCA/IDEgOiAwO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbiAgfVxyXG59KTtcclxuXHJcbnR5cGUgbnVtYmVyV3JpdGVyVHlwZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuY29uc3QgdXBkYXRlTGF5b3V0RnVuYyA9IChwYXJhbTogR2xvYmFsTGF5b3V0QXR0cmlidXRlcyk6IG51bWJlcldyaXRlclR5cGUgPT4ge1xyXG4gIGNvbnN0IGNiID0gYXN5bmMgKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgIGF3YWl0IHdyaXRlTGF5b3V0VmFsdWUocGFyYW0sIHZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIGNiO1xyXG59XHJcblxyXG5jb25zdCBnZXRJZCA9IChzdHI6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBgJHtkb21JZH0tJHtzdHJ9YDtcclxufVxyXG5cclxuPC9zY3JpcHQ+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGlhbG9nQ29udGFpbmVyIDpkb21JZD1cImRvbUlkXCIgOmNvbW1pdENiPVwiY29tbWl0Q2JcIiA6Y2FuY2VsQ2I9XCJjYW5jZWxDYlwiIDpsYWJlbD1cImxhYmVsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLThcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIDpwbGFjZWhvbGRlcj1cInBhcnRJbmZvLnBhcnROYW1lXCIgYXJpYS1sYWJlbD1cIlBhcnQgTmFtZVwiXHJcbiAgICAgICAgICA6aWQ9XCJnZXRJZCgncGFydC1uYW1lLWlucHV0JylcIiB2LW1vZGVsPVwicGFydEluZm8ucGFydE5hbWVcIiBAY2hhbmdlPVwidXBkYXRlXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIlwiIDppZD1cImdldElkKCdwYXJ0LW5hbWUtbGFiZWwnKVwiPlBhcnQgTmFtZTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtOFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgOnBsYWNlaG9sZGVyPVwicGFydEluZm8ucGFydEFiYnJldmlhdGlvblwiIGFyaWEtbGFiZWw9XCJQYXJ0IEFiYnJldmlhdGlvblwiXHJcbiAgICAgICAgICA6aWQ9XCJnZXRJZCgncGFydC1hYmJyZXZpYXRpb24taW5wdXQnKVwiIHYtbW9kZWw9XCJwYXJ0SW5mby5wYXJ0QWJicmV2aWF0aW9uXCIgQGNoYW5nZT1cInVwZGF0ZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJcIiA6aWQ9XCJnZXRJZCgncGFydC1hYmJyZXZpYXRpb24tbGFiZWwnKVwiPlBhcnQgQWJicmV2aWF0aW9uPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0xXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJwYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHNcIiA6aWQ9XCJnZXRJZCgncHJlc2VydmVUZXh0JylcIlxyXG4gICAgICAgICAgQGNoYW5nZT1cIndyaXRlQm9vbGVhblZhbHVlKCdwcmVzZXJ2ZVRleHRHcm91cHMnLCBwYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHMpXCI+PC9pbnB1dD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTVcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgOmZvcj1cImdldElkKCdwcmVzZXJ2ZVRleHQnKVwiPlByZXNlcnZlIFRleHQgR3JvdXBzPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTFcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cInBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzXCIgOmlkPVwiZ2V0SWQoJ2V4cGFuZE11bHRpbWVhc3VyZVJlc3RzJylcIlxyXG4gICAgICAgICAgQGNoYW5nZT1cIndyaXRlQm9vbGVhblZhbHVlKCdleHBhbmRNdWx0aW1lYXN1cmVSZXN0cycsIHBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzKVwiPjwvaW5wdXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC01XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIDpmb3I9XCJnZXRJZCgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnKVwiPkV4cGFuZCBNdWx0aW1lYXN1cmUgUmVzdHM8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0xXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJwYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHNcIiA6aWQ9XCJnZXRJZCgncHJlc2VydmVUZXh0JylcIlxyXG4gICAgICAgICAgQGNoYW5nZT1cIndyaXRlQm9vbGVhblZhbHVlKCdwcmVzZXJ2ZVRleHRHcm91cHMnLCBwYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHMpXCI+PC9pbnB1dD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTVcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgOmZvcj1cImdldElkKCdwcmVzZXJ2ZVRleHQnKVwiPkluY2x1ZGUgTmV4dCBTdGF2ZTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMyB0ZXh0LWVuZFwiPlBhZ2UgU2l6ZTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC02XCI+XHJcbiAgICAgICAgPHNlbGVjdENvbXAgOmRvbUlkPVwiZ2V0SWQoJ3BhZ2Utc2l6ZS1zZWxlY3QnKVwiIDpsYWJlbD1cIicnXCIgOnNlbGVjdGlvbnM9XCJwYWdlU2l6ZXNcIiA6aW5pdGlhbFZhbHVlPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgOmNoYW5nZUNiPVwicGFnZUNoYW5nZVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3BhZ2Utd2lkdGgtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlV2lkdGhcIiA6cHJlY2lzaW9uPVwiMFwiXHJcbiAgICAgICAgICA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCdwYWdlV2lkdGgnKVwiIDpkaXNhYmxlZD1cImxvY2tEaW1lbnNpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5QYWdlIFdpZHRoPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNCBtcy1uNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgncGFnZS1oZWlnaHQtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlSGVpZ2h0XCIgOnByZWNpc2lvbj1cIjBcIlxyXG4gICAgICAgICAgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygncGFnZUhlaWdodCcpXCIgOmRpc2FibGVkPVwibG9ja0RpbWVuc2lvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlBhZ2UgSGVpZ2h0PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCd6b29tLXNjYWxlLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQuem9vbVNjYWxlXCIgOnByZWNpc2lvbj1cIjBcIlxyXG4gICAgICAgICAgOnBlcmNlbnQ9dHJ1ZSA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCd6b29tU2NhbGUnKVwiIDptaW5WYWx1ZT1cIjAuMjVcIiA6bWF4VmFsdWU9XCI4XCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5ab29tIFNjYWxlICglKTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTQgbXMtbjRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3N2Zy1zY2FsZS1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnN2Z1NjYWxlXCIgOnByZWNpc2lvbj1cIjBcIlxyXG4gICAgICAgICAgOnBlcmNlbnQ9XCJ0cnVlXCIgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygnc3ZnU2NhbGUnKVwiIDptaW5WYWx1ZT1cIjAuMjVcIiA6bWF4VmFsdWU9XCIyXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5Ob3RlIFNpemUgKCUpPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdub3RlLXNwYWNpbmctaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5ub3RlU3BhY2luZ1wiIDpwcmVjaXNpb249XCIyXCJcclxuICAgICAgICAgIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ25vdGVTcGFjaW5nJylcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPk5vdGUgU3BhY2luZzwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTQgbXMtbjRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ21heC1tZWFzdXJlLXN5c3RlbS1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lm1heE1lYXN1cmVTeXN0ZW1cIlxyXG4gICAgICAgICAgOnByZWNpc2lvbj1cIjBcIiA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCdtYXhNZWFzdXJlU3lzdGVtJylcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPk1lYXN1cmVzL1N5c3RlbTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2RpYWxvZ0NvbnRhaW5lcj5cclxuPC90ZW1wbGF0ZT4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/partInfo.vue?vue&type=script&setup=true&lang=ts\n\n}");
381
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _select_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select.vue */ \"./src/ui/components/dialogs/select.vue\");\n/* harmony import */ var _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./numberInput.vue */ \"./src/ui/components/dialogs/numberInput.vue\");\n/* harmony import */ var _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../smo/data/partInfo */ \"./src/smo/data/partInfo.ts\");\n/* harmony import */ var _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dialogContainer.vue */ \"./src/ui/components/dialogs/dialogContainer.vue\");\nvar __awaiter = (undefined && undefined.__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};\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*@__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({\n __name: 'partInfo',\n props: {\n domId: { type: String, required: true },\n label: { type: String, required: true },\n partInfo: { type: Object, required: true },\n updatePartInfoCb: { type: Function, required: true },\n commitCb: { type: Function, required: true },\n cancelCb: { type: Function, required: true }\n },\n setup(__props, { expose: __expose }) {\n __expose();\n const props = __props;\n const { domId, label, commitCb, cancelCb, updatePartInfoCb } = Object.assign({}, props);\n const partInfo = (0,vue__WEBPACK_IMPORTED_MODULE_0__.reactive)(new _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_3__.SmoPartInfo(props.partInfo));\n const writeBooleanValue = (attr, value) => __awaiter(this, void 0, void 0, function* () {\n partInfo[attr] = value;\n yield updatePartInfoCb(partInfo);\n });\n const writeLayoutValue = (attr, value) => __awaiter(this, void 0, void 0, function* () {\n // no change?\n if (partInfo.layoutManager.globalLayout[attr] === value) {\n return;\n }\n partInfo.layoutManager.globalLayout[attr] = value;\n yield updatePartInfoCb(partInfo);\n });\n const pageSizes = [\n { label: 'Letter', value: 'letter' },\n { label: 'Legal', value: 'legal' },\n { label: 'Tabloid', value: 'tabloid' },\n { label: 'A4', value: 'a4' },\n { label: 'Custom', value: 'custom' }\n ];\n const predefinedDimensions = {\n 'letter': { width: 816, height: 1056 },\n 'legal': { width: 816, height: 1344 },\n 'tabloid': { width: 1056, height: 1632 },\n 'a4': { width: 794, height: 1123 }\n };\n // Page size is in pixels, but if it matches a preset we just show that.\n // User chooses 'custom' to unlock width/height editing.\n const pageSize = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)('custom');\n const pageChange = () => {\n Object.keys(predefinedDimensions).forEach((key) => {\n const dims = predefinedDimensions[key];\n if (dims.width === partInfo.layoutManager.globalLayout.pageWidth &&\n dims.height === partInfo.layoutManager.globalLayout.pageHeight) {\n pageSize.value = key;\n }\n });\n };\n const pageSizeCb = (val) => __awaiter(this, void 0, void 0, function* () {\n const dims = predefinedDimensions[val];\n if (dims) {\n partInfo.layoutManager.globalLayout.pageWidth = dims.width;\n partInfo.layoutManager.globalLayout.pageHeight = dims.height;\n }\n pageSize.value = val;\n // The watch will trigger the callback\n });\n const lockDimensions = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false);\n pageChange();\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(pageSize, (newVal) => __awaiter(this, void 0, void 0, function* () {\n if (predefinedDimensions[newVal]) {\n lockDimensions.value = true;\n const dims = predefinedDimensions[newVal];\n partInfo.layoutManager.globalLayout.pageWidth = dims.width;\n partInfo.layoutManager.globalLayout.pageHeight = dims.height;\n }\n else {\n lockDimensions.value = false;\n }\n yield updatePartInfoCb(partInfo);\n }));\n if (predefinedDimensions[pageSize.value]) {\n lockDimensions.value = true;\n }\n const update = () => __awaiter(this, void 0, void 0, function* () {\n yield updatePartInfoCb(partInfo);\n });\n const includeNext = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)(false);\n if (partInfo.stavesAfter > 0) {\n includeNext.value = true;\n }\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(includeNext, (newVal, oldVal) => __awaiter(this, void 0, void 0, function* () {\n if (newVal !== oldVal) {\n partInfo.stavesAfter = newVal ? 1 : 0;\n yield updatePartInfoCb(partInfo);\n }\n }));\n const updateLayoutFunc = (param) => {\n const cb = (value) => __awaiter(this, void 0, void 0, function* () {\n yield writeLayoutValue(param, value);\n });\n return cb;\n };\n const getId = (str) => {\n return `${domId}-${str}`;\n };\n const __returned__ = { props, domId, label, commitCb, cancelCb, updatePartInfoCb, partInfo, writeBooleanValue, writeLayoutValue, pageSizes, predefinedDimensions, pageSize, pageChange, pageSizeCb, lockDimensions, update, includeNext, updateLayoutFunc, getId, selectComp: _select_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"], numberInputApp: _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"], dialogContainer: _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"] };\n Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true });\n return __returned__;\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1s2XS51c2VbMF0hLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3BhcnRJbmZvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RDtBQ0NUO0FBQ1Y7QUFDUztBQUU2RTtBQUV4RTtBRGlCcEQsOEVBQTRCLG9EQUFnQixDQUFDO0lBQzNDLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUN2QyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDdkMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQzFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ3BELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM1QyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7S0FDN0M7SUFDRCxLQUFLLENBQUMsT0FBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUN4QyxRQUFRLEVBQUUsQ0FBQztRQ2xCYixNQUFNLEtBQUssR0FBRyxPQUFvQixDQUFDO1FBQ25DLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUscUJBQVEs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cy9wYXJ0SW5mby52dWU/MGE1MyIsIndlYnBhY2s6Ly9TbW8vLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3BhcnRJbmZvLnZ1ZT9jNWFkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCBhcyBfZGVmaW5lQ29tcG9uZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgcmVmLCBSZWYsIHdhdGNoLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSc7XHJcbmltcG9ydCBzZWxlY3RDb21wIGZyb20gJy4vc2VsZWN0LnZ1ZSc7XHJcbmltcG9ydCBudW1iZXJJbnB1dEFwcCBmcm9tICcuL251bWJlcklucHV0LnZ1ZSc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XHJcbmltcG9ydCB7IFNtb1BhcnRJbmZvLCBTbW9QYXJ0SW5mb1N0cmluZ1R5cGUsIFNtb1BhcnRJbmZvTnVtVHlwZSwgU21vUGFydEluZm9Cb29sZWFuVHlwZSB9IGZyb20gJy4uLy4uLy4uL3Ntby9kYXRhL3BhcnRJbmZvJztcclxuaW1wb3J0IHsgR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgU21vTGF5b3V0TWFuYWdlciwgR2xvYmFsTGF5b3V0QXR0cmlidXRlc0FycmF5IH0gZnJvbSAnLi4vLi4vLi4vc21vL2RhdGEvc2NvcmVNb2RpZmllcnMnO1xyXG5pbXBvcnQgZGlhbG9nQ29udGFpbmVyIGZyb20gJy4vZGlhbG9nQ29udGFpbmVyLnZ1ZSc7XHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRvbUlkOiBzdHJpbmcsXHJcbiAgbGFiZWw6IHN0cmluZyxcclxuICBwYXJ0SW5mbzogU21vUGFydEluZm8sXHJcbiAgdXBkYXRlUGFydEluZm9DYjogKHBpOiBTbW9QYXJ0SW5mbykgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjb21taXRDYjogKCkgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjYW5jZWxDYjogKCkgPT4gUHJvbWlzZTx2b2lkPlxyXG59XHJcbmludGVyZmFjZSBkaW1lbnNpb25zIHtcclxuICB3aWR0aDogbnVtYmVyLFxyXG4gIGhlaWdodDogbnVtYmVyXHJcbn1cclxudHlwZSBudW1iZXJXcml0ZXJUeXBlID0gKHZhbHVlOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG5cbmV4cG9ydCBkZWZhdWx0IC8qQF9fUFVSRV9fKi9fZGVmaW5lQ29tcG9uZW50KHtcbiAgX19uYW1lOiAncGFydEluZm8nLFxuICBwcm9wczoge1xuICAgIGRvbUlkOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFydEluZm86IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHVwZGF0ZVBhcnRJbmZvQ2I6IHsgdHlwZTogRnVuY3Rpb24sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29tbWl0Q2I6IHsgdHlwZTogRnVuY3Rpb24sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY2FuY2VsQ2I6IHsgdHlwZTogRnVuY3Rpb24sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcbiAgc2V0dXAoX19wcm9wczogYW55LCB7IGV4cG9zZTogX19leHBvc2UgfSkge1xuICBfX2V4cG9zZSgpO1xuXHJcbmNvbnN0IHByb3BzID0gX19wcm9wcztcclxuY29uc3QgeyBkb21JZCwgbGFiZWwsIGNvbW1pdENiLCBjYW5jZWxDYiwgdXBkYXRlUGFydEluZm9DYiB9ID0geyAuLi5wcm9wcyB9O1xyXG5jb25zdCBwYXJ0SW5mbyA9IHJlYWN0aXZlKG5ldyBTbW9QYXJ0SW5mbyhwcm9wcy5wYXJ0SW5mbykpO1xyXG5cclxuY29uc3Qgd3JpdGVCb29sZWFuVmFsdWUgPSBhc3luYyAoYXR0cjogU21vUGFydEluZm9Cb29sZWFuVHlwZSwgdmFsdWU6IGJvb2xlYW4pID0+IHtcclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlTGF5b3V0VmFsdWUgPSBhc3luYyAoYXR0cjogR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgLy8gbm8gY2hhbmdlP1xyXG4gICAgaWYgKHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0W2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dFthdHRyXSA9IHZhbHVlO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgcGFnZVNpemVzOiBTZWxlY3RPcHRpb25bXSA9IFtcclxuICB7IGxhYmVsOiAnTGV0dGVyJywgdmFsdWU6ICdsZXR0ZXInIH0sXHJcbiAgeyBsYWJlbDogJ0xlZ2FsJywgdmFsdWU6ICdsZWdhbCcgfSxcclxuICB7IGxhYmVsOiAnVGFibG9pZCcsIHZhbHVlOiAndGFibG9pZCcgfSxcclxuICB7IGxhYmVsOiAnQTQnLCB2YWx1ZTogJ2E0JyB9LFxyXG4gIHsgbGFiZWw6ICdDdXN0b20nLCB2YWx1ZTogJ2N1c3RvbScgfVxyXG5dO1xyXG5jb25zdCBwcmVkZWZpbmVkRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBkaW1lbnNpb25zIH0gPSB7XHJcbiAgJ2xldHRlcic6IHsgd2lkdGg6IDgxNiwgaGVpZ2h0OiAxMDU2IH0sXHJcbiAgJ2xlZ2FsJzogeyB3aWR0aDogODE2LCBoZWlnaHQ6IDEzNDQgfSxcclxuICAndGFibG9pZCc6IHsgd2lkdGg6IDEwNTYsIGhlaWdodDogMTYzMiB9LFxyXG4gICdhNCc6IHsgd2lkdGg6IDc5NCwgaGVpZ2h0OiAxMTIzIH1cclxufTtcclxuLy8gUGFnZSBzaXplIGlzIGluIHBpeGVscywgYnV0IGlmIGl0IG1hdGNoZXMgYSBwcmVzZXQgd2UganVzdCBzaG93IHRoYXQuXHJcbi8vIFVzZXIgY2hvb3NlcyAnY3VzdG9tJyB0byB1bmxvY2sgd2lkdGgvaGVpZ2h0IGVkaXRpbmcuXHJcbmNvbnN0IHBhZ2VTaXplID0gcmVmKCdjdXN0b20nKTtcclxuXHJcbmNvbnN0IHBhZ2VDaGFuZ2UgPSAoKSA9PiB7XHJcbiBPYmplY3Qua2V5cyhwcmVkZWZpbmVkRGltZW5zaW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICBjb25zdCBkaW1zID0gcHJlZGVmaW5lZERpbWVuc2lvbnNba2V5XTtcclxuICAgIGlmIChkaW1zLndpZHRoID09PSBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlV2lkdGggJiZcclxuICAgICAgZGltcy5oZWlnaHQgPT09IHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQpIHtcclxuICAgICAgcGFnZVNpemUudmFsdWUgPSBrZXk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcbmNvbnN0IHBhZ2VTaXplQ2IgPSBhc3luYyAodmFsOiBzdHJpbmcpID0+IHtcclxuICBjb25zdCBkaW1zID0gcHJlZGVmaW5lZERpbWVuc2lvbnNbdmFsXTtcclxuICBpZiAoZGltcykge1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoID0gZGltcy53aWR0aDtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQgPSBkaW1zLmhlaWdodDtcclxuICB9XHJcbiAgcGFnZVNpemUudmFsdWUgPSB2YWw7XHJcbiAgLy8gVGhlIHdhdGNoIHdpbGwgdHJpZ2dlciB0aGUgY2FsbGJhY2tcclxufVxyXG5jb25zdCBsb2NrRGltZW5zaW9ucyA9IHJlZihmYWxzZSk7XHJcbnBhZ2VDaGFuZ2UoKTtcclxud2F0Y2ggKHBhZ2VTaXplLCBhc3luYyAobmV3VmFsKSA9PiB7XHJcbiAgaWYgKHByZWRlZmluZWREaW1lbnNpb25zW25ld1ZhbF0pIHtcclxuICAgIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1tuZXdWYWxdO1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoID0gZGltcy53aWR0aDtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQgPSBkaW1zLmhlaWdodDtcclxuICB9IGVsc2Uge1xyXG4gICAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSBmYWxzZTtcclxuICB9XHJcbiAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn0pO1xyXG5pZiAocHJlZGVmaW5lZERpbWVuc2lvbnNbcGFnZVNpemUudmFsdWVdKSB7XHJcbiAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSB0cnVlXHJcbn1cclxuY29uc3QgdXBkYXRlID1hc3luYyAoKSA9PiB7XHJcbiAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgaW5jbHVkZU5leHQgPSByZWYoZmFsc2UpO1xyXG5pZiAocGFydEluZm8uc3RhdmVzQWZ0ZXIgPiAwKSB7XHJcbiAgaW5jbHVkZU5leHQudmFsdWUgPSB0cnVlO1xyXG59XHJcbndhdGNoIChpbmNsdWRlTmV4dCwgYXN5bmMgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XHJcbiAgICBwYXJ0SW5mby5zdGF2ZXNBZnRlciA9IG5ld1ZhbCA/IDEgOiAwO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbiAgfVxyXG59KTtcclxuXHJcbmNvbnN0IHVwZGF0ZUxheW91dEZ1bmMgPSAocGFyYW06IEdsb2JhbExheW91dEF0dHJpYnV0ZXMpOiBudW1iZXJXcml0ZXJUeXBlID0+IHtcclxuICBjb25zdCBjYiA9IGFzeW5jICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICBhd2FpdCB3cml0ZUxheW91dFZhbHVlKHBhcmFtLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIHJldHVybiBjYjtcclxufVxyXG5cclxuY29uc3QgZ2V0SWQgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYCR7ZG9tSWR9LSR7c3RyfWA7XHJcbn1cclxuXHJcblxuY29uc3QgX19yZXR1cm5lZF9fID0geyBwcm9wcywgZG9tSWQsIGxhYmVsLCBjb21taXRDYiwgY2FuY2VsQ2IsIHVwZGF0ZVBhcnRJbmZvQ2IsIHBhcnRJbmZvLCB3cml0ZUJvb2xlYW5WYWx1ZSwgd3JpdGVMYXlvdXRWYWx1ZSwgcGFnZVNpemVzLCBwcmVkZWZpbmVkRGltZW5zaW9ucywgcGFnZVNpemUsIHBhZ2VDaGFuZ2UsIHBhZ2VTaXplQ2IsIGxvY2tEaW1lbnNpb25zLCB1cGRhdGUsIGluY2x1ZGVOZXh0LCB1cGRhdGVMYXlvdXRGdW5jLCBnZXRJZCwgc2VsZWN0Q29tcCwgbnVtYmVySW5wdXRBcHAsIGRpYWxvZ0NvbnRhaW5lciB9XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX19yZXR1cm5lZF9fLCAnX19pc1NjcmlwdFNldHVwJywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWUgfSlcbnJldHVybiBfX3JldHVybmVkX19cbn1cblxufSkiLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWYsIFJlZiwgd2F0Y2gsIHJlYWN0aXZlIH0gZnJvbSAndnVlJztcclxuaW1wb3J0IHNlbGVjdENvbXAgZnJvbSAnLi9zZWxlY3QudnVlJztcclxuaW1wb3J0IG51bWJlcklucHV0QXBwIGZyb20gJy4vbnVtYmVySW5wdXQudnVlJztcclxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcclxuaW1wb3J0IHsgU21vUGFydEluZm8sIFNtb1BhcnRJbmZvU3RyaW5nVHlwZSwgU21vUGFydEluZm9OdW1UeXBlLCBTbW9QYXJ0SW5mb0Jvb2xlYW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vc21vL2RhdGEvcGFydEluZm8nO1xyXG5pbXBvcnQgeyBHbG9iYWxMYXlvdXRBdHRyaWJ1dGVzLCBTbW9MYXlvdXRNYW5hZ2VyLCBHbG9iYWxMYXlvdXRBdHRyaWJ1dGVzQXJyYXkgfSBmcm9tICcuLi8uLi8uLi9zbW8vZGF0YS9zY29yZU1vZGlmaWVycyc7XHJcbmltcG9ydCBkaWFsb2dDb250YWluZXIgZnJvbSAnLi9kaWFsb2dDb250YWluZXIudnVlJztcclxuXHJcbmludGVyZmFjZSBQcm9wcyB7XHJcbiAgZG9tSWQ6IHN0cmluZyxcclxuICBsYWJlbDogc3RyaW5nLFxyXG4gIHBhcnRJbmZvOiBTbW9QYXJ0SW5mbyxcclxuICB1cGRhdGVQYXJ0SW5mb0NiOiAocGk6IFNtb1BhcnRJbmZvKSA9PiBQcm9taXNlPHZvaWQ+LFxyXG4gIGNvbW1pdENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxyXG4gIGNhbmNlbENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+XHJcbn1cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczxQcm9wcz4oKTtcclxuY29uc3QgeyBkb21JZCwgbGFiZWwsIGNvbW1pdENiLCBjYW5jZWxDYiwgdXBkYXRlUGFydEluZm9DYiB9ID0geyAuLi5wcm9wcyB9O1xyXG5jb25zdCBwYXJ0SW5mbyA9IHJlYWN0aXZlKG5ldyBTbW9QYXJ0SW5mbyhwcm9wcy5wYXJ0SW5mbykpO1xyXG5cclxuY29uc3Qgd3JpdGVCb29sZWFuVmFsdWUgPSBhc3luYyAoYXR0cjogU21vUGFydEluZm9Cb29sZWFuVHlwZSwgdmFsdWU6IGJvb2xlYW4pID0+IHtcclxuICBwYXJ0SW5mb1thdHRyXSA9IHZhbHVlO1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHdyaXRlTGF5b3V0VmFsdWUgPSBhc3luYyAoYXR0cjogR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgLy8gbm8gY2hhbmdlP1xyXG4gICAgaWYgKHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0W2F0dHJdID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dFthdHRyXSA9IHZhbHVlO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgcGFnZVNpemVzOiBTZWxlY3RPcHRpb25bXSA9IFtcclxuICB7IGxhYmVsOiAnTGV0dGVyJywgdmFsdWU6ICdsZXR0ZXInIH0sXHJcbiAgeyBsYWJlbDogJ0xlZ2FsJywgdmFsdWU6ICdsZWdhbCcgfSxcclxuICB7IGxhYmVsOiAnVGFibG9pZCcsIHZhbHVlOiAndGFibG9pZCcgfSxcclxuICB7IGxhYmVsOiAnQTQnLCB2YWx1ZTogJ2E0JyB9LFxyXG4gIHsgbGFiZWw6ICdDdXN0b20nLCB2YWx1ZTogJ2N1c3RvbScgfVxyXG5dO1xyXG5pbnRlcmZhY2UgZGltZW5zaW9ucyB7XHJcbiAgd2lkdGg6IG51bWJlcixcclxuICBoZWlnaHQ6IG51bWJlclxyXG59XHJcbmNvbnN0IHByZWRlZmluZWREaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IGRpbWVuc2lvbnMgfSA9IHtcclxuICAnbGV0dGVyJzogeyB3aWR0aDogODE2LCBoZWlnaHQ6IDEwNTYgfSxcclxuICAnbGVnYWwnOiB7IHdpZHRoOiA4MTYsIGhlaWdodDogMTM0NCB9LFxyXG4gICd0YWJsb2lkJzogeyB3aWR0aDogMTA1NiwgaGVpZ2h0OiAxNjMyIH0sXHJcbiAgJ2E0JzogeyB3aWR0aDogNzk0LCBoZWlnaHQ6IDExMjMgfVxyXG59O1xyXG4vLyBQYWdlIHNpemUgaXMgaW4gcGl4ZWxzLCBidXQgaWYgaXQgbWF0Y2hlcyBhIHByZXNldCB3ZSBqdXN0IHNob3cgdGhhdC5cclxuLy8gVXNlciBjaG9vc2VzICdjdXN0b20nIHRvIHVubG9jayB3aWR0aC9oZWlnaHQgZWRpdGluZy5cclxuY29uc3QgcGFnZVNpemUgPSByZWYoJ2N1c3RvbScpO1xyXG5cclxuY29uc3QgcGFnZUNoYW5nZSA9ICgpID0+IHtcclxuIE9iamVjdC5rZXlzKHByZWRlZmluZWREaW1lbnNpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1trZXldO1xyXG4gICAgaWYgKGRpbXMud2lkdGggPT09IHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VXaWR0aCAmJlxyXG4gICAgICBkaW1zLmhlaWdodCA9PT0gcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodCkge1xyXG4gICAgICBwYWdlU2l6ZS52YWx1ZSA9IGtleTtcclxuICAgIH1cclxuICB9KTtcclxufTtcclxuY29uc3QgcGFnZVNpemVDYiA9IGFzeW5jICh2YWw6IHN0cmluZykgPT4ge1xyXG4gIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1t2YWxdO1xyXG4gIGlmIChkaW1zKSB7XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlV2lkdGggPSBkaW1zLndpZHRoO1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodCA9IGRpbXMuaGVpZ2h0O1xyXG4gIH1cclxuICBwYWdlU2l6ZS52YWx1ZSA9IHZhbDtcclxuICAvLyBUaGUgd2F0Y2ggd2lsbCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xyXG59XHJcbmNvbnN0IGxvY2tEaW1lbnNpb25zID0gcmVmKGZhbHNlKTtcclxucGFnZUNoYW5nZSgpO1xyXG53YXRjaCAocGFnZVNpemUsIGFzeW5jIChuZXdWYWwpID0+IHtcclxuICBpZiAocHJlZGVmaW5lZERpbWVuc2lvbnNbbmV3VmFsXSkge1xyXG4gICAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSB0cnVlO1xyXG4gICAgY29uc3QgZGltcyA9IHByZWRlZmluZWREaW1lbnNpb25zW25ld1ZhbF07XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlV2lkdGggPSBkaW1zLndpZHRoO1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodCA9IGRpbXMuaGVpZ2h0O1xyXG4gIH0gZWxzZSB7XHJcbiAgICBsb2NrRGltZW5zaW9ucy52YWx1ZSA9IGZhbHNlO1xyXG4gIH1cclxuICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxufSk7XHJcbmlmIChwcmVkZWZpbmVkRGltZW5zaW9uc1twYWdlU2l6ZS52YWx1ZV0pIHtcclxuICBsb2NrRGltZW5zaW9ucy52YWx1ZSA9IHRydWVcclxufVxyXG5jb25zdCB1cGRhdGUgPWFzeW5jICgpID0+IHtcclxuICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxufVxyXG5jb25zdCBpbmNsdWRlTmV4dCA9IHJlZihmYWxzZSk7XHJcbmlmIChwYXJ0SW5mby5zdGF2ZXNBZnRlciA+IDApIHtcclxuICBpbmNsdWRlTmV4dC52YWx1ZSA9IHRydWU7XHJcbn1cclxud2F0Y2ggKGluY2x1ZGVOZXh0LCBhc3luYyAobmV3VmFsLCBvbGRWYWwpID0+IHtcclxuICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcclxuICAgIHBhcnRJbmZvLnN0YXZlc0FmdGVyID0gbmV3VmFsID8gMSA6IDA7XHJcbiAgICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxuICB9XHJcbn0pO1xyXG5cclxudHlwZSBudW1iZXJXcml0ZXJUeXBlID0gKHZhbHVlOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG5jb25zdCB1cGRhdGVMYXlvdXRGdW5jID0gKHBhcmFtOiBHbG9iYWxMYXlvdXRBdHRyaWJ1dGVzKTogbnVtYmVyV3JpdGVyVHlwZSA9PiB7XHJcbiAgY29uc3QgY2IgPSBhc3luYyAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgYXdhaXQgd3JpdGVMYXlvdXRWYWx1ZShwYXJhbSwgdmFsdWUpO1xyXG4gIH1cclxuICByZXR1cm4gY2I7XHJcbn1cclxuXHJcbmNvbnN0IGdldElkID0gKHN0cjogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGAke2RvbUlkfS0ke3N0cn1gO1xyXG59XHJcblxyXG48L3NjcmlwdD5cclxuPHRlbXBsYXRlPlxyXG4gIDxkaWFsb2dDb250YWluZXIgOmRvbUlkPVwiZG9tSWRcIiA6Y29tbWl0Q2I9XCJjb21taXRDYlwiIDpjYW5jZWxDYj1cImNhbmNlbENiXCIgOmxhYmVsPVwibGFiZWxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtOFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgOnBsYWNlaG9sZGVyPVwicGFydEluZm8ucGFydE5hbWVcIiBhcmlhLWxhYmVsPVwiUGFydCBOYW1lXCJcclxuICAgICAgICAgIDppZD1cImdldElkKCdwYXJ0LW5hbWUtaW5wdXQnKVwiIHYtbW9kZWw9XCJwYXJ0SW5mby5wYXJ0TmFtZVwiIEBjaGFuZ2U9XCJ1cGRhdGVcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTQgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiXCIgOmlkPVwiZ2V0SWQoJ3BhcnQtbmFtZS1sYWJlbCcpXCI+UGFydCBOYW1lPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC04XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiA6cGxhY2Vob2xkZXI9XCJwYXJ0SW5mby5wYXJ0QWJicmV2aWF0aW9uXCIgYXJpYS1sYWJlbD1cIlBhcnQgQWJicmV2aWF0aW9uXCJcclxuICAgICAgICAgIDppZD1cImdldElkKCdwYXJ0LWFiYnJldmlhdGlvbi1pbnB1dCcpXCIgdi1tb2RlbD1cInBhcnRJbmZvLnBhcnRBYmJyZXZpYXRpb25cIiBAY2hhbmdlPVwidXBkYXRlXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIlwiIDppZD1cImdldElkKCdwYXJ0LWFiYnJldmlhdGlvbi1sYWJlbCcpXCI+UGFydCBBYmJyZXZpYXRpb248L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTFcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cInBhcnRJbmZvLnByZXNlcnZlVGV4dEdyb3Vwc1wiIDppZD1cImdldElkKCdwcmVzZXJ2ZVRleHQnKVwiXHJcbiAgICAgICAgICBAY2hhbmdlPVwid3JpdGVCb29sZWFuVmFsdWUoJ3ByZXNlcnZlVGV4dEdyb3VwcycsIHBhcnRJbmZvLnByZXNlcnZlVGV4dEdyb3VwcylcIj48L2lucHV0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiA6Zm9yPVwiZ2V0SWQoJ3ByZXNlcnZlVGV4dCcpXCI+UHJlc2VydmUgVGV4dCBHcm91cHM8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMVwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2LW1vZGVsPVwicGFydEluZm8uZXhwYW5kTXVsdGltZWFzdXJlUmVzdHNcIiA6aWQ9XCJnZXRJZCgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnKVwiXHJcbiAgICAgICAgICBAY2hhbmdlPVwid3JpdGVCb29sZWFuVmFsdWUoJ2V4cGFuZE11bHRpbWVhc3VyZVJlc3RzJywgcGFydEluZm8uZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMpXCI+PC9pbnB1dD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTVcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgOmZvcj1cImdldElkKCdleHBhbmRNdWx0aW1lYXN1cmVSZXN0cycpXCI+RXhwYW5kIE11bHRpbWVhc3VyZSBSZXN0czwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTFcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cImluY2x1ZGVOZXh0XCIgOmlkPVwiZ2V0SWQoJ2luY2x1ZGVOZXh0JylcIj48L2lucHV0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiA6Zm9yPVwiZ2V0SWQoJ2luY2x1ZGVOZXh0JylcIj5JbmNsdWRlIE5leHQgU3RhdmU8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTMgdGV4dC1lbmRcIj5QYWdlIFNpemU8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNlwiPlxyXG4gICAgICAgIDxzZWxlY3RDb21wIDpkb21JZD1cImdldElkKCdwYWdlLXNpemUtc2VsZWN0JylcIiA6bGFiZWw9XCInJ1wiIDpzZWxlY3Rpb25zPVwicGFnZVNpemVzXCIgOmluaXRpYWxWYWx1ZT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgIDpjaGFuZ2VDYj1cInBhZ2VTaXplQ2JcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdwYWdlLXdpZHRoLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoXCIgOnByZWNpc2lvbj1cIjBcIlxyXG4gICAgICAgICAgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygncGFnZVdpZHRoJylcIiA6ZGlzYWJsZWQ9XCJsb2NrRGltZW5zaW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UGFnZSBXaWR0aDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTQgbXMtbjRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3BhZ2UtaGVpZ2h0LWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodFwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ3BhZ2VIZWlnaHQnKVwiIDpkaXNhYmxlZD1cImxvY2tEaW1lbnNpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5QYWdlIEhlaWdodDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgnem9vbS1zY2FsZS1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lnpvb21TY2FsZVwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpwZXJjZW50PXRydWUgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygnem9vbVNjYWxlJylcIiA6bWluVmFsdWU9XCIwLjI1XCIgOm1heFZhbHVlPVwiOFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+Wm9vbSBTY2FsZSAoJSk8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IG1zLW40XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdzdmctc2NhbGUtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5zdmdTY2FsZVwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpwZXJjZW50PVwidHJ1ZVwiIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ3N2Z1NjYWxlJylcIiA6bWluVmFsdWU9XCIwLjI1XCIgOm1heFZhbHVlPVwiMlwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+Tm90ZSBTaXplICglKTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgnbm90ZS1zcGFjaW5nLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQubm90ZVNwYWNpbmdcIiA6cHJlY2lzaW9uPVwiMlwiXHJcbiAgICAgICAgICA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCdub3RlU3BhY2luZycpXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5Ob3RlIFNwYWNpbmc8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IG1zLW40XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdtYXgtbWVhc3VyZS1zeXN0ZW0taW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5tYXhNZWFzdXJlU3lzdGVtXCJcclxuICAgICAgICAgIDpwcmVjaXNpb249XCIwXCIgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygnbWF4TWVhc3VyZVN5c3RlbScpXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5NZWFzdXJlcy9TeXN0ZW08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaWFsb2dDb250YWluZXI+XHJcbjwvdGVtcGxhdGU+Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/partInfo.vue?vue&type=script&setup=true&lang=ts\n\n}");
382
382
 
383
383
  /***/ },
384
384
 
@@ -455,7 +455,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
455
455
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
456
456
 
457
457
  "use strict";
458
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dialogContainer.vue */ \"./src/ui/components/dialogs/dialogContainer.vue\");\n/* harmony import */ var _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./numberInput.vue */ \"./src/ui/components/dialogs/numberInput.vue\");\nvar __awaiter = (undefined && undefined.__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};\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*@__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({\n __name: 'scoreTranspose',\n props: {\n domId: { type: String, required: true },\n label: { type: String, required: true },\n getTranspose: { type: Function, required: true },\n commitCb: { type: Function, required: true },\n cancelCb: { type: Function, required: true }\n },\n setup(__props, { expose: __expose }) {\n __expose();\n ;\n const props = __props;\n const { domId, getTranspose } = Object.assign({}, props);\n const transposeIndex = getTranspose();\n const xposeCb = (val) => __awaiter(this, void 0, void 0, function* () {\n transposeIndex.value = val;\n });\n const getDomId = () => {\n return `attr-modal-dialog-${domId}`;\n };\n const getId = (str) => {\n return `${domId}-${str}`;\n };\n const __returned__ = { props, domId, getTranspose, transposeIndex, xposeCb, getDomId, getId, dialogContainer: _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"], numberInputApp: _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"] };\n Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true });\n return __returned__;\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1s2XS51c2VbMF0hLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3Njb3JlVHJhbnNwb3NlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBeUQ7QUNFTDtBQUNMO0FEUy9DLDhFQUE0QixvREFBZ0IsQ0FBQztJQUMzQyxNQUFNLEVBQUUsZ0JBQWdCO0lBQ3hCLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUN2QyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDdkMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ2hELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM1QyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7S0FDN0M7SUFDRCxLQUFLLENBQUMsT0FBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUN4QyxRQUFRLEVBQUUsQ0FBQztRQ1haLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxPQUFvQixDQUFDO1FBRW5DLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLHFCQUFRLEtBQUssQ0FBRSxDQUFDO1FBRTdDLE1BQU0sY0FBYyxHQUFnQixZQUFZLEVBQUUsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFPLEdBQVcsRUFBRSxFQUFFO1lBQ3BDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzdCLENBQUMsRUFBQztRQUNGLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNwQixPQUFPLHFCQUFxQixLQUFLLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUM1QixPQUFPLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzNCLENBQUM7UURlRCxNQUFNLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxlQUFlLGdFQUFFLGNBQWMsNERBQUU7UUFDOUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMxRixPQUFPLFlBQVk7SUFDbkIsQ0FBQztDQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbW8vLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3Njb3JlVHJhbnNwb3NlLnZ1ZT81YzE3Iiwid2VicGFjazovL1Ntby8uL3NyYy91aS9jb21wb25lbnRzL2RpYWxvZ3Mvc2NvcmVUcmFuc3Bvc2UudnVlPzY4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBkcmFnZ2FibGVTZXNzaW9uIH0gZnJvbSAnLi4vLi4vY29tcG9zYWJsZS9kcmFnZ2FibGUnO1xyXG5pbXBvcnQgZGlhbG9nQ29udGFpbmVyIGZyb20gJy4vZGlhbG9nQ29udGFpbmVyLnZ1ZSc7XHJcbmltcG9ydCBudW1iZXJJbnB1dEFwcCBmcm9tICcuL251bWJlcklucHV0LnZ1ZSc7XHJcbmltcG9ydCB7IHJlZiwgUmVmLCByZWFjdGl2ZSwgd2F0Y2ggfSBmcm9tICd2dWUnO1xyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRvbUlkOiBzdHJpbmcsXHJcbiAgbGFiZWw6IHN0cmluZyxcclxuICBnZXRUcmFuc3Bvc2U6ICgpID0+IFJlZjxudW1iZXI+LFxyXG4gIGNvbW1pdENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxyXG4gIGNhbmNlbENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+XHJcbn1cbmV4cG9ydCBkZWZhdWx0IC8qQF9fUFVSRV9fKi9fZGVmaW5lQ29tcG9uZW50KHtcbiAgX19uYW1lOiAnc2NvcmVUcmFuc3Bvc2UnLFxuICBwcm9wczoge1xuICAgIGRvbUlkOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2V0VHJhbnNwb3NlOiB7IHR5cGU6IEZ1bmN0aW9uLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbW1pdENiOiB7IHR5cGU6IEZ1bmN0aW9uLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNhbmNlbENiOiB7IHR5cGU6IEZ1bmN0aW9uLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG4gIHNldHVwKF9fcHJvcHM6IGFueSwgeyBleHBvc2U6IF9fZXhwb3NlIH0pIHtcbiAgX19leHBvc2UoKTtcblxyXG47XHJcbmNvbnN0IHByb3BzID0gX19wcm9wcztcclxuXHJcbmNvbnN0IHsgZG9tSWQsIGdldFRyYW5zcG9zZSB9ID0geyAuLi5wcm9wcyB9O1xyXG5cclxuY29uc3QgdHJhbnNwb3NlSW5kZXg6IFJlZjxudW1iZXI+ID0gZ2V0VHJhbnNwb3NlKCk7XHJcbmNvbnN0IHhwb3NlQ2IgPSBhc3luYyAodmFsOiBudW1iZXIpID0+IHtcclxuICB0cmFuc3Bvc2VJbmRleC52YWx1ZSA9IHZhbDtcclxufTtcclxuY29uc3QgZ2V0RG9tSWQgPSAoKSA9PiB7XHJcbiAgcmV0dXJuIGBhdHRyLW1vZGFsLWRpYWxvZy0ke2RvbUlkfWA7XHJcbn1cclxuY29uc3QgZ2V0SWQgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYCR7ZG9tSWR9LSR7c3RyfWA7XHJcbn1cclxuXG5jb25zdCBfX3JldHVybmVkX18gPSB7IHByb3BzLCBkb21JZCwgZ2V0VHJhbnNwb3NlLCB0cmFuc3Bvc2VJbmRleCwgeHBvc2VDYiwgZ2V0RG9tSWQsIGdldElkLCBkaWFsb2dDb250YWluZXIsIG51bWJlcklucHV0QXBwIH1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3JldHVybmVkX18sICdfX2lzU2NyaXB0U2V0dXAnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZSB9KVxucmV0dXJuIF9fcmV0dXJuZWRfX1xufVxuXG59KSIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IGRyYWdnYWJsZVNlc3Npb24gfSBmcm9tICcuLi8uLi9jb21wb3NhYmxlL2RyYWdnYWJsZSc7XHJcbmltcG9ydCBkaWFsb2dDb250YWluZXIgZnJvbSAnLi9kaWFsb2dDb250YWluZXIudnVlJztcclxuaW1wb3J0IG51bWJlcklucHV0QXBwIGZyb20gJy4vbnVtYmVySW5wdXQudnVlJztcclxuaW1wb3J0IHsgcmVmLCBSZWYsIHJlYWN0aXZlLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XHJcbmludGVyZmFjZSBQcm9wcyB7XHJcbiAgZG9tSWQ6IHN0cmluZyxcclxuICBsYWJlbDogc3RyaW5nLFxyXG4gIGdldFRyYW5zcG9zZTogKCkgPT4gUmVmPG51bWJlcj4sXHJcbiAgY29tbWl0Q2I6ICgpID0+IFByb21pc2U8dm9pZD4sXHJcbiAgY2FuY2VsQ2I6ICgpID0+IFByb21pc2U8dm9pZD5cclxufTtcclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczxQcm9wcz4oKTtcclxuXHJcbmNvbnN0IHsgZG9tSWQsIGdldFRyYW5zcG9zZSB9ID0geyAuLi5wcm9wcyB9O1xyXG5cclxuY29uc3QgdHJhbnNwb3NlSW5kZXg6IFJlZjxudW1iZXI+ID0gZ2V0VHJhbnNwb3NlKCk7XHJcbmNvbnN0IHhwb3NlQ2IgPSBhc3luYyAodmFsOiBudW1iZXIpID0+IHtcclxuICB0cmFuc3Bvc2VJbmRleC52YWx1ZSA9IHZhbDtcclxufTtcclxuY29uc3QgZ2V0RG9tSWQgPSAoKSA9PiB7XHJcbiAgcmV0dXJuIGBhdHRyLW1vZGFsLWRpYWxvZy0ke2RvbUlkfWA7XHJcbn1cclxuY29uc3QgZ2V0SWQgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYCR7ZG9tSWR9LSR7c3RyfWA7XHJcbn1cclxuPC9zY3JpcHQ+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGlhbG9nQ29udGFpbmVyIDpkb21JZD1cImRvbUlkXCIgOmxhYmVsPVwibGFiZWxcIiA6Y29tbWl0Q2I9XCJwcm9wcy5jb21taXRDYlwiIDpjYW5jZWxDYj1cInByb3BzLmNhbmNlbENiXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBtcy0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtOSBwZS0wIG1lLW4yXCI+XHJcbiAgICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3BhZ2Utd2lkdGgtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJ0cmFuc3Bvc2VJbmRleFwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgICAgOmNoYW5nZUNiPVwieHBvc2VDYlwiIDpkaXNhYmxlZD1cImZhbHNlXCIvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTMgdGV4dC1zdGFydCBwcy0wIHBlLTAgbXMtbjRcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiA6Zm9yPVwiZ2V0SWQoJ3BhZ2Utd2lkdGgtaW5wdXQtdGV4dCcpXCI+U2VtaXRvbmVzPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaWFsb2dDb250YWluZXI+XHJcbjwvdGVtcGxhdGU+Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/scoreTranspose.vue?vue&type=script&setup=true&lang=ts\n\n}");
458
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dialogContainer.vue */ \"./src/ui/components/dialogs/dialogContainer.vue\");\n/* harmony import */ var _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./numberInput.vue */ \"./src/ui/components/dialogs/numberInput.vue\");\nvar __awaiter = (undefined && undefined.__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};\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*@__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({\n __name: 'scoreTranspose',\n props: {\n domId: { type: String, required: true },\n label: { type: String, required: true },\n getTranspose: { type: Function, required: true },\n commitCb: { type: Function, required: true },\n cancelCb: { type: Function, required: true }\n },\n setup(__props, { expose: __expose }) {\n __expose();\n ;\n const props = __props;\n const { domId, getTranspose } = Object.assign({}, props);\n const transposeIndex = getTranspose();\n const xposeCb = (val) => __awaiter(this, void 0, void 0, function* () {\n transposeIndex.value = val;\n });\n const getId = (str) => {\n return `${domId}-${str}`;\n };\n const __returned__ = { props, domId, getTranspose, transposeIndex, xposeCb, getId, dialogContainer: _dialogContainer_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"], numberInputApp: _numberInput_vue__WEBPACK_IMPORTED_MODULE_2__[\"default\"] };\n Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true });\n return __returned__;\n }\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1s2XS51c2VbMF0hLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3Njb3JlVHJhbnNwb3NlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmc2V0dXA9dHJ1ZSZsYW5nPXRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBeUQ7QUNFTDtBQUNMO0FEUy9DLDhFQUE0QixvREFBZ0IsQ0FBQztJQUMzQyxNQUFNLEVBQUUsZ0JBQWdCO0lBQ3hCLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUN2QyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDdkMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ2hELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM1QyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7S0FDN0M7SUFDRCxLQUFLLENBQUMsT0FBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUN4QyxRQUFRLEVBQUUsQ0FBQztRQ1haLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxPQUFvQixDQUFDO1FBRW5DLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLHFCQUFRLEtBQUssQ0FBRSxDQUFDO1FBRTdDLE1BQU0sY0FBYyxHQUFnQixZQUFZLEVBQUUsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFPLEdBQVcsRUFBRSxFQUFFO1lBQ3BDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzdCLENBQUMsRUFBQztRQUNGLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDNUIsT0FBTyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FEZUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLGdFQUFFLGNBQWMsNERBQUU7UUFDcEgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMxRixPQUFPLFlBQVk7SUFDbkIsQ0FBQztDQUVBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbW8vLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3Njb3JlVHJhbnNwb3NlLnZ1ZT81YzE3Iiwid2VicGFjazovL1Ntby8uL3NyYy91aS9jb21wb25lbnRzL2RpYWxvZ3Mvc2NvcmVUcmFuc3Bvc2UudnVlPzY4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50IGFzIF9kZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBkcmFnZ2FibGVTZXNzaW9uIH0gZnJvbSAnLi4vLi4vY29tcG9zYWJsZS9kcmFnZ2FibGUnO1xyXG5pbXBvcnQgZGlhbG9nQ29udGFpbmVyIGZyb20gJy4vZGlhbG9nQ29udGFpbmVyLnZ1ZSc7XHJcbmltcG9ydCBudW1iZXJJbnB1dEFwcCBmcm9tICcuL251bWJlcklucHV0LnZ1ZSc7XHJcbmltcG9ydCB7IHJlZiwgUmVmLCByZWFjdGl2ZSwgd2F0Y2ggfSBmcm9tICd2dWUnO1xyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRvbUlkOiBzdHJpbmcsXHJcbiAgbGFiZWw6IHN0cmluZyxcclxuICBnZXRUcmFuc3Bvc2U6ICgpID0+IFJlZjxudW1iZXI+LFxyXG4gIGNvbW1pdENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxyXG4gIGNhbmNlbENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+XHJcbn1cbmV4cG9ydCBkZWZhdWx0IC8qQF9fUFVSRV9fKi9fZGVmaW5lQ29tcG9uZW50KHtcbiAgX19uYW1lOiAnc2NvcmVUcmFuc3Bvc2UnLFxuICBwcm9wczoge1xuICAgIGRvbUlkOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2V0VHJhbnNwb3NlOiB7IHR5cGU6IEZ1bmN0aW9uLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbW1pdENiOiB7IHR5cGU6IEZ1bmN0aW9uLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNhbmNlbENiOiB7IHR5cGU6IEZ1bmN0aW9uLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG4gIHNldHVwKF9fcHJvcHM6IGFueSwgeyBleHBvc2U6IF9fZXhwb3NlIH0pIHtcbiAgX19leHBvc2UoKTtcblxyXG47XHJcbmNvbnN0IHByb3BzID0gX19wcm9wcztcclxuXHJcbmNvbnN0IHsgZG9tSWQsIGdldFRyYW5zcG9zZSB9ID0geyAuLi5wcm9wcyB9O1xyXG5cclxuY29uc3QgdHJhbnNwb3NlSW5kZXg6IFJlZjxudW1iZXI+ID0gZ2V0VHJhbnNwb3NlKCk7XHJcbmNvbnN0IHhwb3NlQ2IgPSBhc3luYyAodmFsOiBudW1iZXIpID0+IHtcclxuICB0cmFuc3Bvc2VJbmRleC52YWx1ZSA9IHZhbDtcclxufTtcclxuY29uc3QgZ2V0SWQgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYCR7ZG9tSWR9LSR7c3RyfWA7XHJcbn1cclxuXG5jb25zdCBfX3JldHVybmVkX18gPSB7IHByb3BzLCBkb21JZCwgZ2V0VHJhbnNwb3NlLCB0cmFuc3Bvc2VJbmRleCwgeHBvc2VDYiwgZ2V0SWQsIGRpYWxvZ0NvbnRhaW5lciwgbnVtYmVySW5wdXRBcHAgfVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fcmV0dXJuZWRfXywgJ19faXNTY3JpcHRTZXR1cCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB0cnVlIH0pXG5yZXR1cm4gX19yZXR1cm5lZF9fXG59XG5cbn0pIiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgZHJhZ2dhYmxlU2Vzc2lvbiB9IGZyb20gJy4uLy4uL2NvbXBvc2FibGUvZHJhZ2dhYmxlJztcclxuaW1wb3J0IGRpYWxvZ0NvbnRhaW5lciBmcm9tICcuL2RpYWxvZ0NvbnRhaW5lci52dWUnO1xyXG5pbXBvcnQgbnVtYmVySW5wdXRBcHAgZnJvbSAnLi9udW1iZXJJbnB1dC52dWUnO1xyXG5pbXBvcnQgeyByZWYsIFJlZiwgcmVhY3RpdmUsIHdhdGNoIH0gZnJvbSAndnVlJztcclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkb21JZDogc3RyaW5nLFxyXG4gIGxhYmVsOiBzdHJpbmcsXHJcbiAgZ2V0VHJhbnNwb3NlOiAoKSA9PiBSZWY8bnVtYmVyPixcclxuICBjb21taXRDYjogKCkgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjYW5jZWxDYjogKCkgPT4gUHJvbWlzZTx2b2lkPlxyXG59O1xyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPFByb3BzPigpO1xyXG5cclxuY29uc3QgeyBkb21JZCwgZ2V0VHJhbnNwb3NlIH0gPSB7IC4uLnByb3BzIH07XHJcblxyXG5jb25zdCB0cmFuc3Bvc2VJbmRleDogUmVmPG51bWJlcj4gPSBnZXRUcmFuc3Bvc2UoKTtcclxuY29uc3QgeHBvc2VDYiA9IGFzeW5jICh2YWw6IG51bWJlcikgPT4ge1xyXG4gIHRyYW5zcG9zZUluZGV4LnZhbHVlID0gdmFsO1xyXG59O1xyXG5jb25zdCBnZXRJZCA9IChzdHI6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBgJHtkb21JZH0tJHtzdHJ9YDtcclxufVxyXG48L3NjcmlwdD5cclxuPHRlbXBsYXRlPlxyXG4gIDxkaWFsb2dDb250YWluZXIgOmRvbUlkPVwiZG9tSWRcIiA6bGFiZWw9XCJsYWJlbFwiIDpjb21taXRDYj1cInByb3BzLmNvbW1pdENiXCIgOmNhbmNlbENiPVwicHJvcHMuY2FuY2VsQ2JcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIG1zLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC05IHBlLTAgbWUtbjJcIj5cclxuICAgICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgncGFnZS13aWR0aC1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInRyYW5zcG9zZUluZGV4XCIgOnByZWNpc2lvbj1cIjBcIlxyXG4gICAgICAgICAgICA6bWluVmFsdWU9XCItMTJcIiA6bWF4VmFsdWU9XCIxMlwiXHJcbiAgICAgICAgICAgIDpjaGFuZ2VDYj1cInhwb3NlQ2JcIiA6ZGlzYWJsZWQ9XCJmYWxzZVwiLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0zIHRleHQtc3RhcnQgcHMtMCBwZS0wIG1zLW40XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgOmZvcj1cImdldElkKCdwYWdlLXdpZHRoLWlucHV0LXRleHQnKVwiPlNlbWl0b25lczwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGlhbG9nQ29udGFpbmVyPlxyXG48L3RlbXBsYXRlPiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/scoreTranspose.vue?vue&type=script&setup=true&lang=ts\n\n}");
459
459
 
460
460
  /***/ },
461
461
 
@@ -807,7 +807,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
807
807
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
808
808
 
809
809
  "use strict";
810
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: () => (/* binding */ render)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_2 = { class: \"col col-8\" };\nconst _hoisted_3 = [\"placeholder\", \"id\"];\nconst _hoisted_4 = { class: \"col col-4 text-start\" };\nconst _hoisted_5 = [\"id\"];\nconst _hoisted_6 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_7 = { class: \"col col-8\" };\nconst _hoisted_8 = [\"placeholder\", \"id\"];\nconst _hoisted_9 = { class: \"col col-4 text-start\" };\nconst _hoisted_10 = [\"id\"];\nconst _hoisted_11 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_12 = { class: \"col col-1\" };\nconst _hoisted_13 = [\"id\"];\nconst _hoisted_14 = { class: \"col col-5\" };\nconst _hoisted_15 = [\"for\"];\nconst _hoisted_16 = { class: \"col col-1\" };\nconst _hoisted_17 = [\"id\"];\nconst _hoisted_18 = { class: \"col col-5\" };\nconst _hoisted_19 = [\"for\"];\nconst _hoisted_20 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_21 = { class: \"col col-1\" };\nconst _hoisted_22 = [\"id\"];\nconst _hoisted_23 = { class: \"col col-5\" };\nconst _hoisted_24 = [\"for\"];\nconst _hoisted_25 = { class: \"row mb-2\" };\nconst _hoisted_26 = { class: \"col col-6\" };\nconst _hoisted_27 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_28 = { class: \"col col-4\" };\nconst _hoisted_29 = { class: \"col col-4 ms-n4\" };\nconst _hoisted_30 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_31 = { class: \"col col-4\" };\nconst _hoisted_32 = { class: \"col col-4 ms-n4\" };\nconst _hoisted_33 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_34 = { class: \"col col-4\" };\nconst _hoisted_35 = { class: \"col col-4 ms-n4\" };\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"dialogContainer\"], {\n domId: $setup.domId,\n commitCb: $setup.commitCb,\n cancelCb: $setup.cancelCb,\n label: $setup.label\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n class: \"form-control\",\n placeholder: $setup.partInfo.partName,\n \"aria-label\": \"Part Name\",\n id: $setup.getId('part-name-input'),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => (($setup.partInfo.partName) = $event)),\n onChange: $setup.update\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_3), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.partInfo.partName]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"\",\n id: $setup.getId('part-name-label')\n }, \"Part Name\", 8 /* PROPS */, _hoisted_5)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n class: \"form-control\",\n placeholder: $setup.partInfo.partAbbreviation,\n \"aria-label\": \"Part Abbreviation\",\n id: $setup.getId('part-abbreviation-input'),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event) => (($setup.partInfo.partAbbreviation) = $event)),\n onChange: $setup.update\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_8), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.partInfo.partAbbreviation]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"\",\n id: $setup.getId('part-abbreviation-label')\n }, \"Part Abbreviation\", 8 /* PROPS */, _hoisted_10)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_11, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_12, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event) => (($setup.partInfo.preserveTextGroups) = $event)),\n id: $setup.getId('preserveText'),\n onChange: _cache[3] || (_cache[3] = ($event) => ($setup.writeBooleanValue('preserveTextGroups', $setup.partInfo.preserveTextGroups)))\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_13), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.partInfo.preserveTextGroups]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_14, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-check-label\",\n for: $setup.getId('preserveText')\n }, \"Preserve Text Groups\", 8 /* PROPS */, _hoisted_15)\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event) => (($setup.partInfo.expandMultimeasureRests) = $event)),\n id: $setup.getId('expandMultimeasureRests'),\n onChange: _cache[5] || (_cache[5] = ($event) => ($setup.writeBooleanValue('expandMultimeasureRests', $setup.partInfo.expandMultimeasureRests)))\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_17), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.partInfo.expandMultimeasureRests]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_18, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-check-label\",\n for: $setup.getId('expandMultimeasureRests')\n }, \"Expand Multimeasure Rests\", 8 /* PROPS */, _hoisted_19)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event) => (($setup.partInfo.preserveTextGroups) = $event)),\n id: $setup.getId('preserveText'),\n onChange: _cache[7] || (_cache[7] = ($event) => ($setup.writeBooleanValue('preserveTextGroups', $setup.partInfo.preserveTextGroups)))\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_22), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.partInfo.preserveTextGroups]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_23, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-check-label\",\n for: $setup.getId('preserveText')\n }, \"Include Next Stave\", 8 /* PROPS */, _hoisted_24)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_25, [\n _cache[8] || (_cache[8] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-3 text-end\" }, \"Page Size\", -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_26, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"selectComp\"], {\n domId: $setup.getId('page-size-select'),\n label: '',\n selections: $setup.pageSizes,\n initialValue: $setup.pageSize,\n changeCb: $setup.pageChange\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\"])\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_27, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_28, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('page-width-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.pageWidth,\n precision: 0,\n changeCb: $setup.updateLayoutFunc('pageWidth'),\n disabled: $setup.lockDimensions\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\", \"disabled\"])\n ]),\n _cache[9] || (_cache[9] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Page Width\")\n ], -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_29, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('page-height-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.pageHeight,\n precision: 0,\n changeCb: $setup.updateLayoutFunc('pageHeight'),\n disabled: $setup.lockDimensions\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\", \"disabled\"])\n ]),\n _cache[10] || (_cache[10] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Page Height\")\n ], -1 /* CACHED */))\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_30, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_31, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('zoom-scale-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.zoomScale,\n precision: 0,\n percent: true,\n changeCb: $setup.updateLayoutFunc('zoomScale'),\n minValue: 0.25,\n maxValue: 8\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[11] || (_cache[11] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Zoom Scale (%)\")\n ], -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_32, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('svg-scale-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.svgScale,\n precision: 0,\n percent: true,\n changeCb: $setup.updateLayoutFunc('svgScale'),\n minValue: 0.25,\n maxValue: 2\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[12] || (_cache[12] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Note Size (%)\")\n ], -1 /* CACHED */))\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_33, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_34, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('note-spacing-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.noteSpacing,\n precision: 2,\n changeCb: $setup.updateLayoutFunc('noteSpacing')\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[13] || (_cache[13] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Note Spacing\")\n ], -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_35, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('max-measure-system-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.maxMeasureSystem,\n precision: 0,\n changeCb: $setup.updateLayoutFunc('maxMeasureSystem')\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[14] || (_cache[14] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Measures/System\")\n ], -1 /* CACHED */))\n ])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"domId\", \"commitCb\", \"cancelCb\", \"label\"]));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMV0ucnVsZXNbNl0udXNlWzBdIS4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9wYXJ0SW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2M0MTdhMWMmdHM9dHJ1ZSIsIm1hcHBpbmdzIjoiOzs7OztBQUF3UTtBQUV4USxNQUFNLFVBQVUsR0FBRyxFQzRIVixLQUFLLEVBQUMsNkJBQTZCO0FEM0g1QyxNQUFNLFVBQVUsR0FBRyxFQzRIUixLQUFLLEVBQUMsV0FBVztBRDNINUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sVUFBVSxHQUFHLEVDOEhSLEtBQUssRUFBQyxzQkFBc0I7QUQ3SHZDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sVUFBVSxHQUFHLEVDZ0lWLEtBQUssRUFBQyw2QkFBNkI7QUQvSDVDLE1BQU0sVUFBVSxHQUFHLEVDZ0lSLEtBQUssRUFBQyxXQUFXO0FEL0g1QixNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7QUFDeEMsTUFBTSxVQUFVLEdBQUcsRUNrSVIsS0FBSyxFQUFDLHNCQUFzQjtBRGpJdkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDMUIsTUFBTSxXQUFXLEdBQUcsRUNvSVgsS0FBSyxFQUFDLDZCQUE2QjtBRG5JNUMsTUFBTSxXQUFXLEdBQUcsRUNvSVQsS0FBSyxFQUFDLFdBQVc7QURuSTVCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQzFCLE1BQU0sV0FBVyxHQUFHLEVDc0lU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Q3JCLENBQUM7U0FDSCxDQUFDO1FBQ0YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZO0tBQ2xCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL1Ntby8uL3NyYy91aS9jb21wb25lbnRzL2RpYWxvZ3MvcGFydEluZm8udnVlP2MwNmMiLCJ3ZWJwYWNrOi8vU21vLy4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9wYXJ0SW5mby52dWU/YzVhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2TW9kZWxUZXh0IGFzIF92TW9kZWxUZXh0LCBjcmVhdGVFbGVtZW50Vk5vZGUgYXMgX2NyZWF0ZUVsZW1lbnRWTm9kZSwgd2l0aERpcmVjdGl2ZXMgYXMgX3dpdGhEaXJlY3RpdmVzLCB2TW9kZWxDaGVja2JveCBhcyBfdk1vZGVsQ2hlY2tib3gsIGNyZWF0ZVZOb2RlIGFzIF9jcmVhdGVWTm9kZSwgd2l0aEN0eCBhcyBfd2l0aEN0eCwgb3BlbkJsb2NrIGFzIF9vcGVuQmxvY2ssIGNyZWF0ZUJsb2NrIGFzIF9jcmVhdGVCbG9jayB9IGZyb20gXCJ2dWVcIlxuXG5jb25zdCBfaG9pc3RlZF8xID0geyBjbGFzczogXCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF8yID0geyBjbGFzczogXCJjb2wgY29sLThcIiB9XG5jb25zdCBfaG9pc3RlZF8zID0gW1wicGxhY2Vob2xkZXJcIiwgXCJpZFwiXVxuY29uc3QgX2hvaXN0ZWRfNCA9IHsgY2xhc3M6IFwiY29sIGNvbC00IHRleHQtc3RhcnRcIiB9XG5jb25zdCBfaG9pc3RlZF81ID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzYgPSB7IGNsYXNzOiBcInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiIH1cbmNvbnN0IF9ob2lzdGVkXzcgPSB7IGNsYXNzOiBcImNvbCBjb2wtOFwiIH1cbmNvbnN0IF9ob2lzdGVkXzggPSBbXCJwbGFjZWhvbGRlclwiLCBcImlkXCJdXG5jb25zdCBfaG9pc3RlZF85ID0geyBjbGFzczogXCJjb2wgY29sLTQgdGV4dC1zdGFydFwiIH1cbmNvbnN0IF9ob2lzdGVkXzEwID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzExID0geyBjbGFzczogXCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF8xMiA9IHsgY2xhc3M6IFwiY29sIGNvbC0xXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTMgPSBbXCJpZFwiXVxuY29uc3QgX2hvaXN0ZWRfMTQgPSB7IGNsYXNzOiBcImNvbCBjb2wtNVwiIH1cbmNvbnN0IF9ob2lzdGVkXzE1ID0gW1wiZm9yXCJdXG5jb25zdCBfaG9pc3RlZF8xNiA9IHsgY2xhc3M6IFwiY29sIGNvbC0xXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTcgPSBbXCJpZFwiXVxuY29uc3QgX2hvaXN0ZWRfMTggPSB7IGNsYXNzOiBcImNvbCBjb2wtNVwiIH1cbmNvbnN0IF9ob2lzdGVkXzE5ID0gW1wiZm9yXCJdXG5jb25zdCBfaG9pc3RlZF8yMCA9IHsgY2xhc3M6IFwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjEgPSB7IGNsYXNzOiBcImNvbCBjb2wtMVwiIH1cbmNvbnN0IF9ob2lzdGVkXzIyID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzIzID0geyBjbGFzczogXCJjb2wgY29sLTVcIiB9XG5jb25zdCBfaG9pc3RlZF8yNCA9IFtcImZvclwiXVxuY29uc3QgX2hvaXN0ZWRfMjUgPSB7IGNsYXNzOiBcInJvdyBtYi0yXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjYgPSB7IGNsYXNzOiBcImNvbCBjb2wtNlwiIH1cbmNvbnN0IF9ob2lzdGVkXzI3ID0geyBjbGFzczogXCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF8yOCA9IHsgY2xhc3M6IFwiY29sIGNvbC00XCIgfVxuY29uc3QgX2hvaXN0ZWRfMjkgPSB7IGNsYXNzOiBcImNvbCBjb2wtNCBtcy1uNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzMwID0geyBjbGFzczogXCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF8zMSA9IHsgY2xhc3M6IFwiY29sIGNvbC00XCIgfVxuY29uc3QgX2hvaXN0ZWRfMzIgPSB7IGNsYXNzOiBcImNvbCBjb2wtNCBtcy1uNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzMzID0geyBjbGFzczogXCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF8zNCA9IHsgY2xhc3M6IFwiY29sIGNvbC00XCIgfVxuY29uc3QgX2hvaXN0ZWRfMzUgPSB7IGNsYXNzOiBcImNvbCBjb2wtNCBtcy1uNFwiIH1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihfY3R4OiBhbnksX2NhY2hlOiBhbnksJHByb3BzOiBhbnksJHNldHVwOiBhbnksJGRhdGE6IGFueSwkb3B0aW9uczogYW55KSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soJHNldHVwW1wiZGlhbG9nQ29udGFpbmVyXCJdLCB7XG4gICAgZG9tSWQ6ICRzZXR1cC5kb21JZCxcbiAgICBjb21taXRDYjogJHNldHVwLmNvbW1pdENiLFxuICAgIGNhbmNlbENiOiAkc2V0dXAuY2FuY2VsQ2IsXG4gICAgbGFiZWw6ICRzZXR1cC5sYWJlbFxuICB9LCB7XG4gICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMiwgW1xuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAkc2V0dXAucGFydEluZm8ucGFydE5hbWUsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogXCJQYXJ0IE5hbWVcIixcbiAgICAgICAgICAgIGlkOiAkc2V0dXAuZ2V0SWQoJ3BhcnQtbmFtZS1pbnB1dCcpLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVswXSB8fCAoX2NhY2hlWzBdID0gKCRldmVudDogYW55KSA9PiAoKCRzZXR1cC5wYXJ0SW5mby5wYXJ0TmFtZSkgPSAkZXZlbnQpKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAkc2V0dXAudXBkYXRlXG4gICAgICAgICAgfSwgbnVsbCwgNDAgLyogUFJPUFMsIE5FRURfSFlEUkFUSU9OICovLCBfaG9pc3RlZF8zKSwgW1xuICAgICAgICAgICAgW192TW9kZWxUZXh0LCAkc2V0dXAucGFydEluZm8ucGFydE5hbWVdXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfNCwgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcIlwiLFxuICAgICAgICAgICAgaWQ6ICRzZXR1cC5nZXRJZCgncGFydC1uYW1lLWxhYmVsJylcbiAgICAgICAgICB9LCBcIlBhcnQgTmFtZVwiLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF81KVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzYsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF83LCBbXG4gICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICRzZXR1cC5wYXJ0SW5mby5wYXJ0QWJicmV2aWF0aW9uLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiUGFydCBBYmJyZXZpYXRpb25cIixcbiAgICAgICAgICAgIGlkOiAkc2V0dXAuZ2V0SWQoJ3BhcnQtYWJicmV2aWF0aW9uLWlucHV0JyksXG4gICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogX2NhY2hlWzFdIHx8IChfY2FjaGVbMV0gPSAoJGV2ZW50OiBhbnkpID0+ICgoJHNldHVwLnBhcnRJbmZvLnBhcnRBYmJyZXZpYXRpb24pID0gJGV2ZW50KSksXG4gICAgICAgICAgICBvbkNoYW5nZTogJHNldHVwLnVwZGF0ZVxuICAgICAgICAgIH0sIG51bGwsIDQwIC8qIFBST1BTLCBORUVEX0hZRFJBVElPTiAqLywgX2hvaXN0ZWRfOCksIFtcbiAgICAgICAgICAgIFtfdk1vZGVsVGV4dCwgJHNldHVwLnBhcnRJbmZvLnBhcnRBYmJyZXZpYXRpb25dXG4gICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfOSwgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcIlwiLFxuICAgICAgICAgICAgaWQ6ICRzZXR1cC5nZXRJZCgncGFydC1hYmJyZXZpYXRpb24tbGFiZWwnKVxuICAgICAgICAgIH0sIFwiUGFydCBBYmJyZXZpYXRpb25cIiwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfMTApXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTEsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xMiwgW1xuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiZm9ybS1jaGVjay1pbnB1dFwiLFxuICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVsyXSB8fCAoX2NhY2hlWzJdID0gKCRldmVudDogYW55KSA9PiAoKCRzZXR1cC5wYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHMpID0gJGV2ZW50KSksXG4gICAgICAgICAgICBpZDogJHNldHVwLmdldElkKCdwcmVzZXJ2ZVRleHQnKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfY2FjaGVbM10gfHwgKF9jYWNoZVszXSA9ICgkZXZlbnQ6IGFueSkgPT4gKCRzZXR1cC53cml0ZUJvb2xlYW5WYWx1ZSgncHJlc2VydmVUZXh0R3JvdXBzJywgJHNldHVwLnBhcnRJbmZvLnByZXNlcnZlVGV4dEdyb3VwcykpKVxuICAgICAgICAgIH0sIG51bGwsIDQwIC8qIFBST1BTLCBORUVEX0hZRFJBVElPTiAqLywgX2hvaXN0ZWRfMTMpLCBbXG4gICAgICAgICAgICBbX3ZNb2RlbENoZWNrYm94LCAkc2V0dXAucGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzXVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE0LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImxhYmVsXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIixcbiAgICAgICAgICAgIGZvcjogJHNldHVwLmdldElkKCdwcmVzZXJ2ZVRleHQnKVxuICAgICAgICAgIH0sIFwiUHJlc2VydmUgVGV4dCBHcm91cHNcIiwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfMTUpXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE2LCBbXG4gICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNoZWNrLWlucHV0XCIsXG4gICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogX2NhY2hlWzRdIHx8IChfY2FjaGVbNF0gPSAoJGV2ZW50OiBhbnkpID0+ICgoJHNldHVwLnBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzKSA9ICRldmVudCkpLFxuICAgICAgICAgICAgaWQ6ICRzZXR1cC5nZXRJZCgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfY2FjaGVbNV0gfHwgKF9jYWNoZVs1XSA9ICgkZXZlbnQ6IGFueSkgPT4gKCRzZXR1cC53cml0ZUJvb2xlYW5WYWx1ZSgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnLCAkc2V0dXAucGFydEluZm8uZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMpKSlcbiAgICAgICAgICB9LCBudWxsLCA0MCAvKiBQUk9QUywgTkVFRF9IWURSQVRJT04gKi8sIF9ob2lzdGVkXzE3KSwgW1xuICAgICAgICAgICAgW192TW9kZWxDaGVja2JveCwgJHNldHVwLnBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzXVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzE4LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImxhYmVsXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIixcbiAgICAgICAgICAgIGZvcjogJHNldHVwLmdldElkKCdleHBhbmRNdWx0aW1lYXN1cmVSZXN0cycpXG4gICAgICAgICAgfSwgXCJFeHBhbmQgTXVsdGltZWFzdXJlIFJlc3RzXCIsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzE5KVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIwLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjEsIFtcbiAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tY2hlY2staW5wdXRcIixcbiAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBfY2FjaGVbNl0gfHwgKF9jYWNoZVs2XSA9ICgkZXZlbnQ6IGFueSkgPT4gKCgkc2V0dXAucGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzKSA9ICRldmVudCkpLFxuICAgICAgICAgICAgaWQ6ICRzZXR1cC5nZXRJZCgncHJlc2VydmVUZXh0JyksXG4gICAgICAgICAgICBvbkNoYW5nZTogX2NhY2hlWzddIHx8IChfY2FjaGVbN10gPSAoJGV2ZW50OiBhbnkpID0+ICgkc2V0dXAud3JpdGVCb29sZWFuVmFsdWUoJ3ByZXNlcnZlVGV4dEdyb3VwcycsICRzZXR1cC5wYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHMpKSlcbiAgICAgICAgICB9LCBudWxsLCA0MCAvKiBQUk9QUywgTkVFRF9IWURSQVRJT04gKi8sIF9ob2lzdGVkXzIyKSwgW1xuICAgICAgICAgICAgW192TW9kZWxDaGVja2JveCwgJHNldHVwLnBhcnRJbmZvLnByZXNlcnZlVGV4dEdyb3Vwc11cbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yMywgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJsYWJlbFwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIsXG4gICAgICAgICAgICBmb3I6ICRzZXR1cC5nZXRJZCgncHJlc2VydmVUZXh0JylcbiAgICAgICAgICB9LCBcIkluY2x1ZGUgTmV4dCBTdGF2ZVwiLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8yNClcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yNSwgW1xuICAgICAgICBfY2FjaGVbOF0gfHwgKF9jYWNoZVs4XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJjb2wgY29sLTMgdGV4dC1lbmRcIiB9LCBcIlBhZ2UgU2l6ZVwiLCAtMSAvKiBDQUNIRUQgKi8pKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yNiwgW1xuICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJzZWxlY3RDb21wXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdwYWdlLXNpemUtc2VsZWN0JyksXG4gICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICBzZWxlY3Rpb25zOiAkc2V0dXAucGFnZVNpemVzLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAkc2V0dXAucGFnZVNpemUsXG4gICAgICAgICAgICBjaGFuZ2VDYjogJHNldHVwLnBhZ2VDaGFuZ2VcbiAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBbXCJkb21JZFwiLCBcImluaXRpYWxWYWx1ZVwiXSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yNywgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI4LCBbXG4gICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIm51bWJlcklucHV0QXBwXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdwYWdlLXdpZHRoLWlucHV0JyksXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6ICRzZXR1cC5wYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlV2lkdGgsXG4gICAgICAgICAgICBwcmVjaXNpb246IDAsXG4gICAgICAgICAgICBjaGFuZ2VDYjogJHNldHVwLnVwZGF0ZUxheW91dEZ1bmMoJ3BhZ2VXaWR0aCcpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICRzZXR1cC5sb2NrRGltZW5zaW9uc1xuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwiY2hhbmdlQ2JcIiwgXCJkaXNhYmxlZFwiXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jYWNoZVs5XSB8fCAoX2NhY2hlWzldID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIiB9LCBcIlBhZ2UgV2lkdGhcIilcbiAgICAgICAgXSwgLTEgLyogQ0FDSEVEICovKSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjksIFtcbiAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wibnVtYmVySW5wdXRBcHBcIl0sIHtcbiAgICAgICAgICAgIGRvbUlkOiAkc2V0dXAuZ2V0SWQoJ3BhZ2UtaGVpZ2h0LWlucHV0JyksXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6ICRzZXR1cC5wYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlSGVpZ2h0LFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC51cGRhdGVMYXlvdXRGdW5jKCdwYWdlSGVpZ2h0JyksXG4gICAgICAgICAgICBkaXNhYmxlZDogJHNldHVwLmxvY2tEaW1lbnNpb25zXG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJpbml0aWFsVmFsdWVcIiwgXCJjaGFuZ2VDYlwiLCBcImRpc2FibGVkXCJdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NhY2hlWzEwXSB8fCAoX2NhY2hlWzEwXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIiB9LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIgfSwgXCJQYWdlIEhlaWdodFwiKVxuICAgICAgICBdLCAtMSAvKiBDQUNIRUQgKi8pKVxuICAgICAgXSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzMwLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMzEsIFtcbiAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wibnVtYmVySW5wdXRBcHBcIl0sIHtcbiAgICAgICAgICAgIGRvbUlkOiAkc2V0dXAuZ2V0SWQoJ3pvb20tc2NhbGUtaW5wdXQnKSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogJHNldHVwLnBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lnpvb21TY2FsZSxcbiAgICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgICAgIHBlcmNlbnQ6IHRydWUsXG4gICAgICAgICAgICBjaGFuZ2VDYjogJHNldHVwLnVwZGF0ZUxheW91dEZ1bmMoJ3pvb21TY2FsZScpLFxuICAgICAgICAgICAgbWluVmFsdWU6IDAuMjUsXG4gICAgICAgICAgICBtYXhWYWx1ZTogOFxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwiY2hhbmdlQ2JcIl0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY2FjaGVbMTFdIHx8IChfY2FjaGVbMTFdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIiB9LCBcIlpvb20gU2NhbGUgKCUpXCIpXG4gICAgICAgIF0sIC0xIC8qIENBQ0hFRCAqLykpLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzMyLCBbXG4gICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIm51bWJlcklucHV0QXBwXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdzdmctc2NhbGUtaW5wdXQnKSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogJHNldHVwLnBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnN2Z1NjYWxlLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgICAgcGVyY2VudDogdHJ1ZSxcbiAgICAgICAgICAgIGNoYW5nZUNiOiAkc2V0dXAudXBkYXRlTGF5b3V0RnVuYygnc3ZnU2NhbGUnKSxcbiAgICAgICAgICAgIG1pblZhbHVlOiAwLjI1LFxuICAgICAgICAgICAgbWF4VmFsdWU6IDJcbiAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBbXCJkb21JZFwiLCBcImluaXRpYWxWYWx1ZVwiLCBcImNoYW5nZUNiXCJdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NhY2hlWzEyXSB8fCAoX2NhY2hlWzEyXSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIiB9LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIgfSwgXCJOb3RlIFNpemUgKCUpXCIpXG4gICAgICAgIF0sIC0xIC8qIENBQ0hFRCAqLykpXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMzMsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zNCwgW1xuICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJudW1iZXJJbnB1dEFwcFwiXSwge1xuICAgICAgICAgICAgZG9tSWQ6ICRzZXR1cC5nZXRJZCgnbm90ZS1zcGFjaW5nLWlucHV0JyksXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6ICRzZXR1cC5wYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5ub3RlU3BhY2luZyxcbiAgICAgICAgICAgIHByZWNpc2lvbjogMixcbiAgICAgICAgICAgIGNoYW5nZUNiOiAkc2V0dXAudXBkYXRlTGF5b3V0RnVuYygnbm90ZVNwYWNpbmcnKVxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwiY2hhbmdlQ2JcIl0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY2FjaGVbMTNdIHx8IChfY2FjaGVbMTNdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIiB9LCBcIk5vdGUgU3BhY2luZ1wiKVxuICAgICAgICBdLCAtMSAvKiBDQUNIRUQgKi8pKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zNSwgW1xuICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJudW1iZXJJbnB1dEFwcFwiXSwge1xuICAgICAgICAgICAgZG9tSWQ6ICRzZXR1cC5nZXRJZCgnbWF4LW1lYXN1cmUtc3lzdGVtLWlucHV0JyksXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6ICRzZXR1cC5wYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5tYXhNZWFzdXJlU3lzdGVtLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC51cGRhdGVMYXlvdXRGdW5jKCdtYXhNZWFzdXJlU3lzdGVtJylcbiAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBbXCJkb21JZFwiLCBcImluaXRpYWxWYWx1ZVwiLCBcImNoYW5nZUNiXCJdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NhY2hlWzE0XSB8fCAoX2NhY2hlWzE0XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIiB9LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIgfSwgXCJNZWFzdXJlcy9TeXN0ZW1cIilcbiAgICAgICAgXSwgLTEgLyogQ0FDSEVEICovKSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgfSwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJjb21taXRDYlwiLCBcImNhbmNlbENiXCIsIFwibGFiZWxcIl0pKVxufSIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IHJlZiwgUmVmLCB3YXRjaCwgcmVhY3RpdmUgfSBmcm9tICd2dWUnO1xyXG5pbXBvcnQgc2VsZWN0Q29tcCBmcm9tICcuL3NlbGVjdC52dWUnO1xyXG5pbXBvcnQgbnVtYmVySW5wdXRBcHAgZnJvbSAnLi9udW1iZXJJbnB1dC52dWUnO1xyXG5pbXBvcnQgeyBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9jb21tb24nO1xyXG5pbXBvcnQgeyBTbW9QYXJ0SW5mbywgU21vUGFydEluZm9TdHJpbmdUeXBlLCBTbW9QYXJ0SW5mb051bVR5cGUsIFNtb1BhcnRJbmZvQm9vbGVhblR5cGUgfSBmcm9tICcuLi8uLi8uLi9zbW8vZGF0YS9wYXJ0SW5mbyc7XHJcbmltcG9ydCB7IEdsb2JhbExheW91dEF0dHJpYnV0ZXMsIFNtb0xheW91dE1hbmFnZXIsIEdsb2JhbExheW91dEF0dHJpYnV0ZXNBcnJheSB9IGZyb20gJy4uLy4uLy4uL3Ntby9kYXRhL3Njb3JlTW9kaWZpZXJzJztcclxuaW1wb3J0IGRpYWxvZ0NvbnRhaW5lciBmcm9tICcuL2RpYWxvZ0NvbnRhaW5lci52dWUnO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkb21JZDogc3RyaW5nLFxyXG4gIGxhYmVsOiBzdHJpbmcsXHJcbiAgcGFydEluZm86IFNtb1BhcnRJbmZvLFxyXG4gIHVwZGF0ZVBhcnRJbmZvQ2I6IChwaTogU21vUGFydEluZm8pID0+IFByb21pc2U8dm9pZD4sXHJcbiAgY29tbWl0Q2I6ICgpID0+IFByb21pc2U8dm9pZD4sXHJcbiAgY2FuY2VsQ2I6ICgpID0+IFByb21pc2U8dm9pZD5cclxufVxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPFByb3BzPigpO1xyXG5jb25zdCB7IGRvbUlkLCBsYWJlbCwgY29tbWl0Q2IsIGNhbmNlbENiLCB1cGRhdGVQYXJ0SW5mb0NiIH0gPSB7IC4uLnByb3BzIH07XHJcbmNvbnN0IHBhcnRJbmZvID0gcmVhY3RpdmUobmV3IFNtb1BhcnRJbmZvKHByb3BzLnBhcnRJbmZvKSk7XHJcbnR5cGUgbnVtYmVyVHlwZXMgPSAncGFnZVdpZHRoJyB8ICdwYWdlSGVpZ2h0JyB8ICd6b29tU2NhbGUnIHwgJ3N2Z1NjYWxlJyB8ICdub3RlU3BhY2luZycgfCAnbWF4TWVhc3VyZVN5c3RlbSc7XHJcblxyXG5jb25zdCB3cml0ZVN0cmluZ1ZhbHVlID0gYXN5bmMgKGF0dHI6IFNtb1BhcnRJbmZvU3RyaW5nVHlwZSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gIGlmIChwYXJ0SW5mb1thdHRyXSA9PT0gdmFsdWUpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgcGFydEluZm9bYXR0cl0gPSB2YWx1ZTtcclxuICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxufVxyXG5jb25zdCB3cml0ZU51bWJlclZhbHVlID0gYXN5bmMgKGF0dHI6IFNtb1BhcnRJbmZvTnVtVHlwZSwgdmFsdWU6IG51bWJlcikgPT4ge1xyXG4gIGlmIChwYXJ0SW5mb1thdHRyXSA9PT0gdmFsdWUpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgcGFydEluZm9bYXR0cl0gPSB2YWx1ZTtcclxuICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxufVxyXG5jb25zdCB3cml0ZUJvb2xlYW5WYWx1ZSA9IGFzeW5jIChhdHRyOiBTbW9QYXJ0SW5mb0Jvb2xlYW5UeXBlLCB2YWx1ZTogYm9vbGVhbikgPT4ge1xyXG4gIGlmIChwYXJ0SW5mb1thdHRyXSA9PT0gdmFsdWUpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgcGFydEluZm9bYXR0cl0gPSB2YWx1ZTtcclxuICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxufVxyXG5jb25zdCB3cml0ZUxheW91dFZhbHVlID0gYXN5bmMgKGF0dHI6IEdsb2JhbExheW91dEF0dHJpYnV0ZXMsIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgIC8vIG5vIGNoYW5nZT9cclxuICAgIGlmIChwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dFthdHRyXSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXRbYXR0cl0gPSB2YWx1ZTtcclxuICAgIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHBhZ2VTaXplczogU2VsZWN0T3B0aW9uW10gPSBbXHJcbiAgeyBsYWJlbDogJ0xldHRlcicsIHZhbHVlOiAnbGV0dGVyJyB9LFxyXG4gIHsgbGFiZWw6ICdMZWdhbCcsIHZhbHVlOiAnbGVnYWwnIH0sXHJcbiAgeyBsYWJlbDogJ1RhYmxvaWQnLCB2YWx1ZTogJ3RhYmxvaWQnIH0sXHJcbiAgeyBsYWJlbDogJ0E0JywgdmFsdWU6ICdhNCcgfSxcclxuICB7IGxhYmVsOiAnQ3VzdG9tJywgdmFsdWU6ICdjdXN0b20nIH1cclxuXTtcclxuaW50ZXJmYWNlIGRpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXIsXHJcbiAgaGVpZ2h0OiBudW1iZXJcclxufVxyXG5jb25zdCBwcmVkZWZpbmVkRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBkaW1lbnNpb25zIH0gPSB7XHJcbiAgJ2xldHRlcic6IHsgd2lkdGg6IDgxNiwgaGVpZ2h0OiAxMDU2IH0sXHJcbiAgJ2xlZ2FsJzogeyB3aWR0aDogODE2LCBoZWlnaHQ6IDEzNDQgfSxcclxuICAndGFibG9pZCc6IHsgd2lkdGg6IDEwNTYsIGhlaWdodDogMTYzMiB9LFxyXG4gICdhNCc6IHsgd2lkdGg6IDc5NCwgaGVpZ2h0OiAxMTIzIH1cclxufTtcclxuLy8gUGFnZSBzaXplIGlzIGluIHBpeGVscywgYnV0IGlmIGl0IG1hdGNoZXMgYSBwcmVzZXQgd2UganVzdCBzaG93IHRoYXQuXHJcbi8vIFVzZXIgY2hvb3NlcyAnY3VzdG9tJyB0byB1bmxvY2sgd2lkdGgvaGVpZ2h0IGVkaXRpbmcuXHJcbmNvbnN0IHBhZ2VTaXplID0gcmVmKCdjdXN0b20nKTtcclxuY29uc3QgcGFnZUNoYW5nZSA9ICgpID0+IHtcclxuIE9iamVjdC5rZXlzKHByZWRlZmluZWREaW1lbnNpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1trZXldO1xyXG4gICAgaWYgKGRpbXMud2lkdGggPT09IHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VXaWR0aCAmJlxyXG4gICAgICBkaW1zLmhlaWdodCA9PT0gcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodCkge1xyXG4gICAgICBwYWdlU2l6ZS52YWx1ZSA9IGtleTtcclxuICAgIH1cclxuICB9KTtcclxufTtcclxuY29uc3QgbG9ja0RpbWVuc2lvbnMgPSByZWYoZmFsc2UpO1xyXG5wYWdlQ2hhbmdlKCk7XHJcbndhdGNoIChwYWdlU2l6ZSwgYXN5bmMgKG5ld1ZhbCkgPT4ge1xyXG4gIGlmIChwcmVkZWZpbmVkRGltZW5zaW9uc1tuZXdWYWxdKSB7XHJcbiAgICBsb2NrRGltZW5zaW9ucy52YWx1ZSA9IHRydWU7XHJcbiAgICBjb25zdCBkaW1zID0gcHJlZGVmaW5lZERpbWVuc2lvbnNbbmV3VmFsXTtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VXaWR0aCA9IGRpbXMud2lkdGg7XHJcbiAgICBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlSGVpZ2h0ID0gZGltcy5oZWlnaHQ7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gZmFsc2U7XHJcbiAgfVxyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59KTtcclxuaWYgKHByZWRlZmluZWREaW1lbnNpb25zW3BhZ2VTaXplLnZhbHVlXSkge1xyXG4gIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gdHJ1ZVxyXG59XHJcbmNvbnN0IHVwZGF0ZSA9YXN5bmMgKCkgPT4ge1xyXG4gIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IGluY2x1ZGVOZXh0ID0gcmVmKGZhbHNlKTtcclxuaWYgKHBhcnRJbmZvLnN0YXZlc0FmdGVyID4gMCkge1xyXG4gIGluY2x1ZGVOZXh0LnZhbHVlID0gdHJ1ZTtcclxufVxyXG53YXRjaCAoaW5jbHVkZU5leHQsIGFzeW5jIChuZXdWYWwsIG9sZFZhbCkgPT4ge1xyXG4gIGlmIChuZXdWYWwgIT09IG9sZFZhbCkge1xyXG4gICAgcGFydEluZm8uc3RhdmVzQWZ0ZXIgPSBuZXdWYWwgPyAxIDogMDtcclxuICAgIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG4gIH1cclxufSk7XHJcblxyXG50eXBlIG51bWJlcldyaXRlclR5cGUgPSAodmFsdWU6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPjtcclxuXHJcbmNvbnN0IHVwZGF0ZUxheW91dEZ1bmMgPSAocGFyYW06IEdsb2JhbExheW91dEF0dHJpYnV0ZXMpOiBudW1iZXJXcml0ZXJUeXBlID0+IHtcclxuICBjb25zdCBjYiA9IGFzeW5jICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICBhd2FpdCB3cml0ZUxheW91dFZhbHVlKHBhcmFtLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIHJldHVybiBjYjtcclxufVxyXG5cclxuY29uc3QgZ2V0SWQgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYCR7ZG9tSWR9LSR7c3RyfWA7XHJcbn1cclxuXHJcbjwvc2NyaXB0PlxyXG48dGVtcGxhdGU+XHJcbiAgPGRpYWxvZ0NvbnRhaW5lciA6ZG9tSWQ9XCJkb21JZFwiIDpjb21taXRDYj1cImNvbW1pdENiXCIgOmNhbmNlbENiPVwiY2FuY2VsQ2JcIiA6bGFiZWw9XCJsYWJlbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC04XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiA6cGxhY2Vob2xkZXI9XCJwYXJ0SW5mby5wYXJ0TmFtZVwiIGFyaWEtbGFiZWw9XCJQYXJ0IE5hbWVcIlxyXG4gICAgICAgICAgOmlkPVwiZ2V0SWQoJ3BhcnQtbmFtZS1pbnB1dCcpXCIgdi1tb2RlbD1cInBhcnRJbmZvLnBhcnROYW1lXCIgQGNoYW5nZT1cInVwZGF0ZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJcIiA6aWQ9XCJnZXRJZCgncGFydC1uYW1lLWxhYmVsJylcIj5QYXJ0IE5hbWU8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLThcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIDpwbGFjZWhvbGRlcj1cInBhcnRJbmZvLnBhcnRBYmJyZXZpYXRpb25cIiBhcmlhLWxhYmVsPVwiUGFydCBBYmJyZXZpYXRpb25cIlxyXG4gICAgICAgICAgOmlkPVwiZ2V0SWQoJ3BhcnQtYWJicmV2aWF0aW9uLWlucHV0JylcIiB2LW1vZGVsPVwicGFydEluZm8ucGFydEFiYnJldmlhdGlvblwiIEBjaGFuZ2U9XCJ1cGRhdGVcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTQgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiXCIgOmlkPVwiZ2V0SWQoJ3BhcnQtYWJicmV2aWF0aW9uLWxhYmVsJylcIj5QYXJ0IEFiYnJldmlhdGlvbjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMVwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2LW1vZGVsPVwicGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzXCIgOmlkPVwiZ2V0SWQoJ3ByZXNlcnZlVGV4dCcpXCJcclxuICAgICAgICAgIEBjaGFuZ2U9XCJ3cml0ZUJvb2xlYW5WYWx1ZSgncHJlc2VydmVUZXh0R3JvdXBzJywgcGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzKVwiPjwvaW5wdXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC01XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIDpmb3I9XCJnZXRJZCgncHJlc2VydmVUZXh0JylcIj5QcmVzZXJ2ZSBUZXh0IEdyb3VwczwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0xXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJwYXJ0SW5mby5leHBhbmRNdWx0aW1lYXN1cmVSZXN0c1wiIDppZD1cImdldElkKCdleHBhbmRNdWx0aW1lYXN1cmVSZXN0cycpXCJcclxuICAgICAgICAgIEBjaGFuZ2U9XCJ3cml0ZUJvb2xlYW5WYWx1ZSgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnLCBwYXJ0SW5mby5leHBhbmRNdWx0aW1lYXN1cmVSZXN0cylcIj48L2lucHV0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiA6Zm9yPVwiZ2V0SWQoJ2V4cGFuZE11bHRpbWVhc3VyZVJlc3RzJylcIj5FeHBhbmQgTXVsdGltZWFzdXJlIFJlc3RzPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMVwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2LW1vZGVsPVwicGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzXCIgOmlkPVwiZ2V0SWQoJ3ByZXNlcnZlVGV4dCcpXCJcclxuICAgICAgICAgIEBjaGFuZ2U9XCJ3cml0ZUJvb2xlYW5WYWx1ZSgncHJlc2VydmVUZXh0R3JvdXBzJywgcGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzKVwiPjwvaW5wdXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC01XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIDpmb3I9XCJnZXRJZCgncHJlc2VydmVUZXh0JylcIj5JbmNsdWRlIE5leHQgU3RhdmU8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTMgdGV4dC1lbmRcIj5QYWdlIFNpemU8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNlwiPlxyXG4gICAgICAgIDxzZWxlY3RDb21wIDpkb21JZD1cImdldElkKCdwYWdlLXNpemUtc2VsZWN0JylcIiA6bGFiZWw9XCInJ1wiIDpzZWxlY3Rpb25zPVwicGFnZVNpemVzXCIgOmluaXRpYWxWYWx1ZT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgIDpjaGFuZ2VDYj1cInBhZ2VDaGFuZ2VcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdwYWdlLXdpZHRoLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoXCIgOnByZWNpc2lvbj1cIjBcIlxyXG4gICAgICAgICAgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygncGFnZVdpZHRoJylcIiA6ZGlzYWJsZWQ9XCJsb2NrRGltZW5zaW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UGFnZSBXaWR0aDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTQgbXMtbjRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3BhZ2UtaGVpZ2h0LWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodFwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ3BhZ2VIZWlnaHQnKVwiIDpkaXNhYmxlZD1cImxvY2tEaW1lbnNpb25zXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5QYWdlIEhlaWdodDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgnem9vbS1zY2FsZS1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lnpvb21TY2FsZVwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpwZXJjZW50PXRydWUgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygnem9vbVNjYWxlJylcIiA6bWluVmFsdWU9XCIwLjI1XCIgOm1heFZhbHVlPVwiOFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+Wm9vbSBTY2FsZSAoJSk8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IG1zLW40XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdzdmctc2NhbGUtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5zdmdTY2FsZVwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpwZXJjZW50PVwidHJ1ZVwiIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ3N2Z1NjYWxlJylcIiA6bWluVmFsdWU9XCIwLjI1XCIgOm1heFZhbHVlPVwiMlwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+Tm90ZSBTaXplICglKTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgnbm90ZS1zcGFjaW5nLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQubm90ZVNwYWNpbmdcIiA6cHJlY2lzaW9uPVwiMlwiXHJcbiAgICAgICAgICA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCdub3RlU3BhY2luZycpXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5Ob3RlIFNwYWNpbmc8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IG1zLW40XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdtYXgtbWVhc3VyZS1zeXN0ZW0taW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5tYXhNZWFzdXJlU3lzdGVtXCJcclxuICAgICAgICAgIDpwcmVjaXNpb249XCIwXCIgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygnbWF4TWVhc3VyZVN5c3RlbScpXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5NZWFzdXJlcy9TeXN0ZW08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaWFsb2dDb250YWluZXI+XHJcbjwvdGVtcGxhdGU+Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/partInfo.vue?vue&type=template&id=7c417a1c&ts=true\n\n}");
810
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: () => (/* binding */ render)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_2 = { class: \"col col-8\" };\nconst _hoisted_3 = [\"placeholder\", \"id\"];\nconst _hoisted_4 = { class: \"col col-4 text-start\" };\nconst _hoisted_5 = [\"id\"];\nconst _hoisted_6 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_7 = { class: \"col col-8\" };\nconst _hoisted_8 = [\"placeholder\", \"id\"];\nconst _hoisted_9 = { class: \"col col-4 text-start\" };\nconst _hoisted_10 = [\"id\"];\nconst _hoisted_11 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_12 = { class: \"col col-1\" };\nconst _hoisted_13 = [\"id\"];\nconst _hoisted_14 = { class: \"col col-5\" };\nconst _hoisted_15 = [\"for\"];\nconst _hoisted_16 = { class: \"col col-1\" };\nconst _hoisted_17 = [\"id\"];\nconst _hoisted_18 = { class: \"col col-5\" };\nconst _hoisted_19 = [\"for\"];\nconst _hoisted_20 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_21 = { class: \"col col-1\" };\nconst _hoisted_22 = [\"id\"];\nconst _hoisted_23 = { class: \"col col-5\" };\nconst _hoisted_24 = [\"for\"];\nconst _hoisted_25 = { class: \"row mb-2\" };\nconst _hoisted_26 = { class: \"col col-6\" };\nconst _hoisted_27 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_28 = { class: \"col col-4\" };\nconst _hoisted_29 = { class: \"col col-4 ms-n4\" };\nconst _hoisted_30 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_31 = { class: \"col col-4\" };\nconst _hoisted_32 = { class: \"col col-4 ms-n4\" };\nconst _hoisted_33 = { class: \"row mb-2 align-items-center\" };\nconst _hoisted_34 = { class: \"col col-4\" };\nconst _hoisted_35 = { class: \"col col-4 ms-n4\" };\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"dialogContainer\"], {\n domId: $setup.domId,\n commitCb: $setup.commitCb,\n cancelCb: $setup.cancelCb,\n label: $setup.label\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n class: \"form-control\",\n placeholder: $setup.partInfo.partName,\n \"aria-label\": \"Part Name\",\n id: $setup.getId('part-name-input'),\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => (($setup.partInfo.partName) = $event)),\n onChange: $setup.update\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_3), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.partInfo.partName]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_4, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"\",\n id: $setup.getId('part-name-label')\n }, \"Part Name\", 8 /* PROPS */, _hoisted_5)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_6, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_7, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n type: \"text\",\n class: \"form-control\",\n placeholder: $setup.partInfo.partAbbreviation,\n \"aria-label\": \"Part Abbreviation\",\n id: $setup.getId('part-abbreviation-input'),\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event) => (($setup.partInfo.partAbbreviation) = $event)),\n onChange: $setup.update\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_8), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelText, $setup.partInfo.partAbbreviation]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_9, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", {\n class: \"\",\n id: $setup.getId('part-abbreviation-label')\n }, \"Part Abbreviation\", 8 /* PROPS */, _hoisted_10)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_11, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_12, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event) => (($setup.partInfo.preserveTextGroups) = $event)),\n id: $setup.getId('preserveText'),\n onChange: _cache[3] || (_cache[3] = ($event) => ($setup.writeBooleanValue('preserveTextGroups', $setup.partInfo.preserveTextGroups)))\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_13), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.partInfo.preserveTextGroups]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_14, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-check-label\",\n for: $setup.getId('preserveText')\n }, \"Preserve Text Groups\", 8 /* PROPS */, _hoisted_15)\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_16, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event) => (($setup.partInfo.expandMultimeasureRests) = $event)),\n id: $setup.getId('expandMultimeasureRests'),\n onChange: _cache[5] || (_cache[5] = ($event) => ($setup.writeBooleanValue('expandMultimeasureRests', $setup.partInfo.expandMultimeasureRests)))\n }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_17), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.partInfo.expandMultimeasureRests]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_18, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-check-label\",\n for: $setup.getId('expandMultimeasureRests')\n }, \"Expand Multimeasure Rests\", 8 /* PROPS */, _hoisted_19)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_20, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_21, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = ($event) => (($setup.includeNext) = $event)),\n id: $setup.getId('includeNext')\n }, null, 8 /* PROPS */, _hoisted_22), [\n [vue__WEBPACK_IMPORTED_MODULE_0__.vModelCheckbox, $setup.includeNext]\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_23, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-check-label\",\n for: $setup.getId('includeNext')\n }, \"Include Next Stave\", 8 /* PROPS */, _hoisted_24)\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_25, [\n _cache[7] || (_cache[7] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-3 text-end\" }, \"Page Size\", -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_26, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"selectComp\"], {\n domId: $setup.getId('page-size-select'),\n label: '',\n selections: $setup.pageSizes,\n initialValue: $setup.pageSize,\n changeCb: $setup.pageSizeCb\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\"])\n ])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_27, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_28, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('page-width-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.pageWidth,\n precision: 0,\n changeCb: $setup.updateLayoutFunc('pageWidth'),\n disabled: $setup.lockDimensions\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\", \"disabled\"])\n ]),\n _cache[8] || (_cache[8] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Page Width\")\n ], -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_29, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('page-height-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.pageHeight,\n precision: 0,\n changeCb: $setup.updateLayoutFunc('pageHeight'),\n disabled: $setup.lockDimensions\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\", \"disabled\"])\n ]),\n _cache[9] || (_cache[9] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Page Height\")\n ], -1 /* CACHED */))\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_30, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_31, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('zoom-scale-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.zoomScale,\n precision: 0,\n percent: true,\n changeCb: $setup.updateLayoutFunc('zoomScale'),\n minValue: 0.25,\n maxValue: 8\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[10] || (_cache[10] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Zoom Scale (%)\")\n ], -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_32, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('svg-scale-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.svgScale,\n precision: 0,\n percent: true,\n changeCb: $setup.updateLayoutFunc('svgScale'),\n minValue: 0.25,\n maxValue: 2\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[11] || (_cache[11] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Note Size (%)\")\n ], -1 /* CACHED */))\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_33, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_34, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('note-spacing-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.noteSpacing,\n precision: 2,\n changeCb: $setup.updateLayoutFunc('noteSpacing')\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[12] || (_cache[12] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Note Spacing\")\n ], -1 /* CACHED */)),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_35, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('max-measure-system-input'),\n initialValue: $setup.partInfo.layoutManager.globalLayout.maxMeasureSystem,\n precision: 0,\n changeCb: $setup.updateLayoutFunc('maxMeasureSystem')\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\", \"changeCb\"])\n ]),\n _cache[13] || (_cache[13] = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", { class: \"col col-2 fs-7 ms-n4 ps-0 text-start\" }, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"span\", { class: \"form-check-label\" }, \"Measures/System\")\n ], -1 /* CACHED */))\n ])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"domId\", \"commitCb\", \"cancelCb\", \"label\"]));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMV0ucnVsZXNbNl0udXNlWzBdIS4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9wYXJ0SW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2M0MTdhMWMmdHM9dHJ1ZSIsIm1hcHBpbmdzIjoiOzs7OztBQUF3UTtBQUV4USxNQUFNLFVBQVUsR0FBRyxFQ29IVixLQUFLLEVBQUMsNkJBQTZCO0FEbkg1QyxNQUFNLFVBQVUsR0FBRyxFQ29IUixLQUFLLEVBQUMsV0FBVztBRG5INUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sVUFBVSxHQUFHLEVDc0hSLEtBQUssRUFBQyxzQkFBc0I7QURySHZDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sVUFBVSxHQUFHLEVDd0hWLEtBQUssRUFBQyw2QkFBNkI7QUR2SDVDLE1BQU0sVUFBVSxHQUFHLEVDd0hSLEtBQUssRUFBQyxXQUFXO0FEdkg1QixNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7QUFDeEMsTUFBTSxVQUFVLEdBQUcsRUMwSFIsS0FBSyxFQUFDLHNCQUFzQjtBRHpIdkMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDMUIsTUFBTSxXQUFXLEdBQUcsRUM0SFgsS0FBSyxFQUFDLDZCQUE2QjtBRDNINUMsTUFBTSxXQUFXLEdBQUcsRUM0SFQsS0FBSyxFQUFDLFdBQVc7QUQzSDVCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQzFCLE1BQU0sV0FBVyxHQUFHLEVDOEhU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LEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TbW8vLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3BhcnRJbmZvLnZ1ZT9jMDZjIiwid2VicGFjazovL1Ntby8uL3NyYy91aS9jb21wb25lbnRzL2RpYWxvZ3MvcGFydEluZm8udnVlP2M1YWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdk1vZGVsVGV4dCBhcyBfdk1vZGVsVGV4dCwgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUsIHdpdGhEaXJlY3RpdmVzIGFzIF93aXRoRGlyZWN0aXZlcywgdk1vZGVsQ2hlY2tib3ggYXMgX3ZNb2RlbENoZWNrYm94LCBjcmVhdGVWTm9kZSBhcyBfY3JlYXRlVk5vZGUsIHdpdGhDdHggYXMgX3dpdGhDdHgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVCbG9jayBhcyBfY3JlYXRlQmxvY2sgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IHsgY2xhc3M6IFwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMiA9IHsgY2xhc3M6IFwiY29sIGNvbC04XCIgfVxuY29uc3QgX2hvaXN0ZWRfMyA9IFtcInBsYWNlaG9sZGVyXCIsIFwiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzQgPSB7IGNsYXNzOiBcImNvbCBjb2wtNCB0ZXh0LXN0YXJ0XCIgfVxuY29uc3QgX2hvaXN0ZWRfNSA9IFtcImlkXCJdXG5jb25zdCBfaG9pc3RlZF82ID0geyBjbGFzczogXCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIiB9XG5jb25zdCBfaG9pc3RlZF83ID0geyBjbGFzczogXCJjb2wgY29sLThcIiB9XG5jb25zdCBfaG9pc3RlZF84ID0gW1wicGxhY2Vob2xkZXJcIiwgXCJpZFwiXVxuY29uc3QgX2hvaXN0ZWRfOSA9IHsgY2xhc3M6IFwiY29sIGNvbC00IHRleHQtc3RhcnRcIiB9XG5jb25zdCBfaG9pc3RlZF8xMCA9IFtcImlkXCJdXG5jb25zdCBfaG9pc3RlZF8xMSA9IHsgY2xhc3M6IFwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMTIgPSB7IGNsYXNzOiBcImNvbCBjb2wtMVwiIH1cbmNvbnN0IF9ob2lzdGVkXzEzID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzE0ID0geyBjbGFzczogXCJjb2wgY29sLTVcIiB9XG5jb25zdCBfaG9pc3RlZF8xNSA9IFtcImZvclwiXVxuY29uc3QgX2hvaXN0ZWRfMTYgPSB7IGNsYXNzOiBcImNvbCBjb2wtMVwiIH1cbmNvbnN0IF9ob2lzdGVkXzE3ID0gW1wiaWRcIl1cbmNvbnN0IF9ob2lzdGVkXzE4ID0geyBjbGFzczogXCJjb2wgY29sLTVcIiB9XG5jb25zdCBfaG9pc3RlZF8xOSA9IFtcImZvclwiXVxuY29uc3QgX2hvaXN0ZWRfMjAgPSB7IGNsYXNzOiBcInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiIH1cbmNvbnN0IF9ob2lzdGVkXzIxID0geyBjbGFzczogXCJjb2wgY29sLTFcIiB9XG5jb25zdCBfaG9pc3RlZF8yMiA9IFtcImlkXCJdXG5jb25zdCBfaG9pc3RlZF8yMyA9IHsgY2xhc3M6IFwiY29sIGNvbC01XCIgfVxuY29uc3QgX2hvaXN0ZWRfMjQgPSBbXCJmb3JcIl1cbmNvbnN0IF9ob2lzdGVkXzI1ID0geyBjbGFzczogXCJyb3cgbWItMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzI2ID0geyBjbGFzczogXCJjb2wgY29sLTZcIiB9XG5jb25zdCBfaG9pc3RlZF8yNyA9IHsgY2xhc3M6IFwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMjggPSB7IGNsYXNzOiBcImNvbCBjb2wtNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzI5ID0geyBjbGFzczogXCJjb2wgY29sLTQgbXMtbjRcIiB9XG5jb25zdCBfaG9pc3RlZF8zMCA9IHsgY2xhc3M6IFwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMzEgPSB7IGNsYXNzOiBcImNvbCBjb2wtNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzMyID0geyBjbGFzczogXCJjb2wgY29sLTQgbXMtbjRcIiB9XG5jb25zdCBfaG9pc3RlZF8zMyA9IHsgY2xhc3M6IFwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCIgfVxuY29uc3QgX2hvaXN0ZWRfMzQgPSB7IGNsYXNzOiBcImNvbCBjb2wtNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzM1ID0geyBjbGFzczogXCJjb2wgY29sLTQgbXMtbjRcIiB9XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoX2N0eDogYW55LF9jYWNoZTogYW55LCRwcm9wczogYW55LCRzZXR1cDogYW55LCRkYXRhOiBhbnksJG9wdGlvbnM6IGFueSkge1xuICByZXR1cm4gKF9vcGVuQmxvY2soKSwgX2NyZWF0ZUJsb2NrKCRzZXR1cFtcImRpYWxvZ0NvbnRhaW5lclwiXSwge1xuICAgIGRvbUlkOiAkc2V0dXAuZG9tSWQsXG4gICAgY29tbWl0Q2I6ICRzZXR1cC5jb21taXRDYixcbiAgICBjYW5jZWxDYjogJHNldHVwLmNhbmNlbENiLFxuICAgIGxhYmVsOiAkc2V0dXAubGFiZWxcbiAgfSwge1xuICAgIGRlZmF1bHQ6IF93aXRoQ3R4KCgpID0+IFtcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMSwgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIsIFtcbiAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImlucHV0XCIsIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgY2xhc3M6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJHNldHVwLnBhcnRJbmZvLnBhcnROYW1lLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiUGFydCBOYW1lXCIsXG4gICAgICAgICAgICBpZDogJHNldHVwLmdldElkKCdwYXJ0LW5hbWUtaW5wdXQnKSxcbiAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBfY2FjaGVbMF0gfHwgKF9jYWNoZVswXSA9ICgkZXZlbnQ6IGFueSkgPT4gKCgkc2V0dXAucGFydEluZm8ucGFydE5hbWUpID0gJGV2ZW50KSksXG4gICAgICAgICAgICBvbkNoYW5nZTogJHNldHVwLnVwZGF0ZVxuICAgICAgICAgIH0sIG51bGwsIDQwIC8qIFBST1BTLCBORUVEX0hZRFJBVElPTiAqLywgX2hvaXN0ZWRfMyksIFtcbiAgICAgICAgICAgIFtfdk1vZGVsVGV4dCwgJHNldHVwLnBhcnRJbmZvLnBhcnROYW1lXVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzQsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJcIixcbiAgICAgICAgICAgIGlkOiAkc2V0dXAuZ2V0SWQoJ3BhcnQtbmFtZS1sYWJlbCcpXG4gICAgICAgICAgfSwgXCJQYXJ0IE5hbWVcIiwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfNSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF82LCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfNywgW1xuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAkc2V0dXAucGFydEluZm8ucGFydEFiYnJldmlhdGlvbixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBcIlBhcnQgQWJicmV2aWF0aW9uXCIsXG4gICAgICAgICAgICBpZDogJHNldHVwLmdldElkKCdwYXJ0LWFiYnJldmlhdGlvbi1pbnB1dCcpLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVsxXSB8fCAoX2NhY2hlWzFdID0gKCRldmVudDogYW55KSA9PiAoKCRzZXR1cC5wYXJ0SW5mby5wYXJ0QWJicmV2aWF0aW9uKSA9ICRldmVudCkpLFxuICAgICAgICAgICAgb25DaGFuZ2U6ICRzZXR1cC51cGRhdGVcbiAgICAgICAgICB9LCBudWxsLCA0MCAvKiBQUk9QUywgTkVFRF9IWURSQVRJT04gKi8sIF9ob2lzdGVkXzgpLCBbXG4gICAgICAgICAgICBbX3ZNb2RlbFRleHQsICRzZXR1cC5wYXJ0SW5mby5wYXJ0QWJicmV2aWF0aW9uXVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzksIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJcIixcbiAgICAgICAgICAgIGlkOiAkc2V0dXAuZ2V0SWQoJ3BhcnQtYWJicmV2aWF0aW9uLWxhYmVsJylcbiAgICAgICAgICB9LCBcIlBhcnQgQWJicmV2aWF0aW9uXCIsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzEwKVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzExLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMTIsIFtcbiAgICAgICAgICBfd2l0aERpcmVjdGl2ZXMoX2NyZWF0ZUVsZW1lbnRWTm9kZShcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tY2hlY2staW5wdXRcIixcbiAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgIFwib25VcGRhdGU6bW9kZWxWYWx1ZVwiOiBfY2FjaGVbMl0gfHwgKF9jYWNoZVsyXSA9ICgkZXZlbnQ6IGFueSkgPT4gKCgkc2V0dXAucGFydEluZm8ucHJlc2VydmVUZXh0R3JvdXBzKSA9ICRldmVudCkpLFxuICAgICAgICAgICAgaWQ6ICRzZXR1cC5nZXRJZCgncHJlc2VydmVUZXh0JyksXG4gICAgICAgICAgICBvbkNoYW5nZTogX2NhY2hlWzNdIHx8IChfY2FjaGVbM10gPSAoJGV2ZW50OiBhbnkpID0+ICgkc2V0dXAud3JpdGVCb29sZWFuVmFsdWUoJ3ByZXNlcnZlVGV4dEdyb3VwcycsICRzZXR1cC5wYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHMpKSlcbiAgICAgICAgICB9LCBudWxsLCA0MCAvKiBQUk9QUywgTkVFRF9IWURSQVRJT04gKi8sIF9ob2lzdGVkXzEzKSwgW1xuICAgICAgICAgICAgW192TW9kZWxDaGVja2JveCwgJHNldHVwLnBhcnRJbmZvLnByZXNlcnZlVGV4dEdyb3Vwc11cbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xNCwgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJsYWJlbFwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIsXG4gICAgICAgICAgICBmb3I6ICRzZXR1cC5nZXRJZCgncHJlc2VydmVUZXh0JylcbiAgICAgICAgICB9LCBcIlByZXNlcnZlIFRleHQgR3JvdXBzXCIsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzE1KVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xNiwgW1xuICAgICAgICAgIF93aXRoRGlyZWN0aXZlcyhfY3JlYXRlRWxlbWVudFZOb2RlKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiZm9ybS1jaGVjay1pbnB1dFwiLFxuICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgXCJvblVwZGF0ZTptb2RlbFZhbHVlXCI6IF9jYWNoZVs0XSB8fCAoX2NhY2hlWzRdID0gKCRldmVudDogYW55KSA9PiAoKCRzZXR1cC5wYXJ0SW5mby5leHBhbmRNdWx0aW1lYXN1cmVSZXN0cykgPSAkZXZlbnQpKSxcbiAgICAgICAgICAgIGlkOiAkc2V0dXAuZ2V0SWQoJ2V4cGFuZE11bHRpbWVhc3VyZVJlc3RzJyksXG4gICAgICAgICAgICBvbkNoYW5nZTogX2NhY2hlWzVdIHx8IChfY2FjaGVbNV0gPSAoJGV2ZW50OiBhbnkpID0+ICgkc2V0dXAud3JpdGVCb29sZWFuVmFsdWUoJ2V4cGFuZE11bHRpbWVhc3VyZVJlc3RzJywgJHNldHVwLnBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzKSkpXG4gICAgICAgICAgfSwgbnVsbCwgNDAgLyogUFJPUFMsIE5FRURfSFlEUkFUSU9OICovLCBfaG9pc3RlZF8xNyksIFtcbiAgICAgICAgICAgIFtfdk1vZGVsQ2hlY2tib3gsICRzZXR1cC5wYXJ0SW5mby5leHBhbmRNdWx0aW1lYXN1cmVSZXN0c11cbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xOCwgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJsYWJlbFwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIsXG4gICAgICAgICAgICBmb3I6ICRzZXR1cC5nZXRJZCgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnKVxuICAgICAgICAgIH0sIFwiRXhwYW5kIE11bHRpbWVhc3VyZSBSZXN0c1wiLCA4IC8qIFBST1BTICovLCBfaG9pc3RlZF8xOSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yMCwgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIxLCBbXG4gICAgICAgICAgX3dpdGhEaXJlY3RpdmVzKF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBjbGFzczogXCJmb3JtLWNoZWNrLWlucHV0XCIsXG4gICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICBcIm9uVXBkYXRlOm1vZGVsVmFsdWVcIjogX2NhY2hlWzZdIHx8IChfY2FjaGVbNl0gPSAoJGV2ZW50OiBhbnkpID0+ICgoJHNldHVwLmluY2x1ZGVOZXh0KSA9ICRldmVudCkpLFxuICAgICAgICAgICAgaWQ6ICRzZXR1cC5nZXRJZCgnaW5jbHVkZU5leHQnKVxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzIyKSwgW1xuICAgICAgICAgICAgW192TW9kZWxDaGVja2JveCwgJHNldHVwLmluY2x1ZGVOZXh0XVxuICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzIzLCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImxhYmVsXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIixcbiAgICAgICAgICAgIGZvcjogJHNldHVwLmdldElkKCdpbmNsdWRlTmV4dCcpXG4gICAgICAgICAgfSwgXCJJbmNsdWRlIE5leHQgU3RhdmVcIiwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfMjQpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjUsIFtcbiAgICAgICAgX2NhY2hlWzddIHx8IChfY2FjaGVbN10gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHsgY2xhc3M6IFwiY29sIGNvbC0zIHRleHQtZW5kXCIgfSwgXCJQYWdlIFNpemVcIiwgLTEgLyogQ0FDSEVEICovKSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjYsIFtcbiAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wic2VsZWN0Q29tcFwiXSwge1xuICAgICAgICAgICAgZG9tSWQ6ICRzZXR1cC5nZXRJZCgncGFnZS1zaXplLXNlbGVjdCcpLFxuICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogJHNldHVwLnBhZ2VTaXplcyxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogJHNldHVwLnBhZ2VTaXplLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC5wYWdlU2l6ZUNiXG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJpbml0aWFsVmFsdWVcIl0pXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMjcsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yOCwgW1xuICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJudW1iZXJJbnB1dEFwcFwiXSwge1xuICAgICAgICAgICAgZG9tSWQ6ICRzZXR1cC5nZXRJZCgncGFnZS13aWR0aC1pbnB1dCcpLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAkc2V0dXAucGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC51cGRhdGVMYXlvdXRGdW5jKCdwYWdlV2lkdGgnKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiAkc2V0dXAubG9ja0RpbWVuc2lvbnNcbiAgICAgICAgICB9LCBudWxsLCA4IC8qIFBST1BTICovLCBbXCJkb21JZFwiLCBcImluaXRpYWxWYWx1ZVwiLCBcImNoYW5nZUNiXCIsIFwiZGlzYWJsZWRcIl0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY2FjaGVbOF0gfHwgKF9jYWNoZVs4XSA9IF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgeyBjbGFzczogXCJjb2wgY29sLTIgZnMtNyBtcy1uNCBwcy0wIHRleHQtc3RhcnRcIiB9LCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcInNwYW5cIiwgeyBjbGFzczogXCJmb3JtLWNoZWNrLWxhYmVsXCIgfSwgXCJQYWdlIFdpZHRoXCIpXG4gICAgICAgIF0sIC0xIC8qIENBQ0hFRCAqLykpLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzI5LCBbXG4gICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIm51bWJlcklucHV0QXBwXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdwYWdlLWhlaWdodC1pbnB1dCcpLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAkc2V0dXAucGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZUhlaWdodCxcbiAgICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgICAgIGNoYW5nZUNiOiAkc2V0dXAudXBkYXRlTGF5b3V0RnVuYygncGFnZUhlaWdodCcpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICRzZXR1cC5sb2NrRGltZW5zaW9uc1xuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwiY2hhbmdlQ2JcIiwgXCJkaXNhYmxlZFwiXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jYWNoZVs5XSB8fCAoX2NhY2hlWzldID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIiB9LCBcIlBhZ2UgSGVpZ2h0XCIpXG4gICAgICAgIF0sIC0xIC8qIENBQ0hFRCAqLykpXG4gICAgICBdKSxcbiAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMzAsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zMSwgW1xuICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJudW1iZXJJbnB1dEFwcFwiXSwge1xuICAgICAgICAgICAgZG9tSWQ6ICRzZXR1cC5nZXRJZCgnem9vbS1zY2FsZS1pbnB1dCcpLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAkc2V0dXAucGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQuem9vbVNjYWxlLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgICAgcGVyY2VudDogdHJ1ZSxcbiAgICAgICAgICAgIGNoYW5nZUNiOiAkc2V0dXAudXBkYXRlTGF5b3V0RnVuYygnem9vbVNjYWxlJyksXG4gICAgICAgICAgICBtaW5WYWx1ZTogMC4yNSxcbiAgICAgICAgICAgIG1heFZhbHVlOiA4XG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJpbml0aWFsVmFsdWVcIiwgXCJjaGFuZ2VDYlwiXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jYWNoZVsxMF0gfHwgKF9jYWNoZVsxMF0gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHsgY2xhc3M6IFwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCIgfSwgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiZm9ybS1jaGVjay1sYWJlbFwiIH0sIFwiWm9vbSBTY2FsZSAoJSlcIilcbiAgICAgICAgXSwgLTEgLyogQ0FDSEVEICovKSksXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMzIsIFtcbiAgICAgICAgICBfY3JlYXRlVk5vZGUoJHNldHVwW1wibnVtYmVySW5wdXRBcHBcIl0sIHtcbiAgICAgICAgICAgIGRvbUlkOiAkc2V0dXAuZ2V0SWQoJ3N2Zy1zY2FsZS1pbnB1dCcpLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAkc2V0dXAucGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQuc3ZnU2NhbGUsXG4gICAgICAgICAgICBwcmVjaXNpb246IDAsXG4gICAgICAgICAgICBwZXJjZW50OiB0cnVlLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC51cGRhdGVMYXlvdXRGdW5jKCdzdmdTY2FsZScpLFxuICAgICAgICAgICAgbWluVmFsdWU6IDAuMjUsXG4gICAgICAgICAgICBtYXhWYWx1ZTogMlxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwiY2hhbmdlQ2JcIl0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY2FjaGVbMTFdIHx8IChfY2FjaGVbMTFdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIiB9LCBcIk5vdGUgU2l6ZSAoJSlcIilcbiAgICAgICAgXSwgLTEgLyogQ0FDSEVEICovKSlcbiAgICAgIF0pLFxuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zMywgW1xuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzM0LCBbXG4gICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIm51bWJlcklucHV0QXBwXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdub3RlLXNwYWNpbmctaW5wdXQnKSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogJHNldHVwLnBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lm5vdGVTcGFjaW5nLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiAyLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC51cGRhdGVMYXlvdXRGdW5jKCdub3RlU3BhY2luZycpXG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJpbml0aWFsVmFsdWVcIiwgXCJjaGFuZ2VDYlwiXSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jYWNoZVsxMl0gfHwgKF9jYWNoZVsxMl0gPSBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIHsgY2xhc3M6IFwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCIgfSwgW1xuICAgICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHsgY2xhc3M6IFwiZm9ybS1jaGVjay1sYWJlbFwiIH0sIFwiTm90ZSBTcGFjaW5nXCIpXG4gICAgICAgIF0sIC0xIC8qIENBQ0hFRCAqLykpLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzM1LCBbXG4gICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIm51bWJlcklucHV0QXBwXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdtYXgtbWVhc3VyZS1zeXN0ZW0taW5wdXQnKSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogJHNldHVwLnBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lm1heE1lYXN1cmVTeXN0ZW0sXG4gICAgICAgICAgICBwcmVjaXNpb246IDAsXG4gICAgICAgICAgICBjaGFuZ2VDYjogJHNldHVwLnVwZGF0ZUxheW91dEZ1bmMoJ21heE1lYXN1cmVTeXN0ZW0nKVxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCIsIFwiY2hhbmdlQ2JcIl0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY2FjaGVbMTNdIHx8IChfY2FjaGVbMTNdID0gX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCB7IGNsYXNzOiBcImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiIH0sIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwic3BhblwiLCB7IGNsYXNzOiBcImZvcm0tY2hlY2stbGFiZWxcIiB9LCBcIk1lYXN1cmVzL1N5c3RlbVwiKVxuICAgICAgICBdLCAtMSAvKiBDQUNIRUQgKi8pKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfOiAxIC8qIFNUQUJMRSAqL1xuICB9LCA4IC8qIFBST1BTICovLCBbXCJkb21JZFwiLCBcImNvbW1pdENiXCIsIFwiY2FuY2VsQ2JcIiwgXCJsYWJlbFwiXSkpXG59IiwiPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHsgcmVmLCBSZWYsIHdhdGNoLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSc7XHJcbmltcG9ydCBzZWxlY3RDb21wIGZyb20gJy4vc2VsZWN0LnZ1ZSc7XHJcbmltcG9ydCBudW1iZXJJbnB1dEFwcCBmcm9tICcuL251bWJlcklucHV0LnZ1ZSc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XHJcbmltcG9ydCB7IFNtb1BhcnRJbmZvLCBTbW9QYXJ0SW5mb1N0cmluZ1R5cGUsIFNtb1BhcnRJbmZvTnVtVHlwZSwgU21vUGFydEluZm9Cb29sZWFuVHlwZSB9IGZyb20gJy4uLy4uLy4uL3Ntby9kYXRhL3BhcnRJbmZvJztcclxuaW1wb3J0IHsgR2xvYmFsTGF5b3V0QXR0cmlidXRlcywgU21vTGF5b3V0TWFuYWdlciwgR2xvYmFsTGF5b3V0QXR0cmlidXRlc0FycmF5IH0gZnJvbSAnLi4vLi4vLi4vc21vL2RhdGEvc2NvcmVNb2RpZmllcnMnO1xyXG5pbXBvcnQgZGlhbG9nQ29udGFpbmVyIGZyb20gJy4vZGlhbG9nQ29udGFpbmVyLnZ1ZSc7XHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRvbUlkOiBzdHJpbmcsXHJcbiAgbGFiZWw6IHN0cmluZyxcclxuICBwYXJ0SW5mbzogU21vUGFydEluZm8sXHJcbiAgdXBkYXRlUGFydEluZm9DYjogKHBpOiBTbW9QYXJ0SW5mbykgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjb21taXRDYjogKCkgPT4gUHJvbWlzZTx2b2lkPixcclxuICBjYW5jZWxDYjogKCkgPT4gUHJvbWlzZTx2b2lkPlxyXG59XHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8UHJvcHM+KCk7XHJcbmNvbnN0IHsgZG9tSWQsIGxhYmVsLCBjb21taXRDYiwgY2FuY2VsQ2IsIHVwZGF0ZVBhcnRJbmZvQ2IgfSA9IHsgLi4ucHJvcHMgfTtcclxuY29uc3QgcGFydEluZm8gPSByZWFjdGl2ZShuZXcgU21vUGFydEluZm8ocHJvcHMucGFydEluZm8pKTtcclxuXHJcbmNvbnN0IHdyaXRlQm9vbGVhblZhbHVlID0gYXN5bmMgKGF0dHI6IFNtb1BhcnRJbmZvQm9vbGVhblR5cGUsIHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgcGFydEluZm9bYXR0cl0gPSB2YWx1ZTtcclxuICBhd2FpdCB1cGRhdGVQYXJ0SW5mb0NiKHBhcnRJbmZvKTtcclxufVxyXG5jb25zdCB3cml0ZUxheW91dFZhbHVlID0gYXN5bmMgKGF0dHI6IEdsb2JhbExheW91dEF0dHJpYnV0ZXMsIHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgIC8vIG5vIGNoYW5nZT9cclxuICAgIGlmIChwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dFthdHRyXSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXRbYXR0cl0gPSB2YWx1ZTtcclxuICAgIGF3YWl0IHVwZGF0ZVBhcnRJbmZvQ2IocGFydEluZm8pO1xyXG59XHJcbmNvbnN0IHBhZ2VTaXplczogU2VsZWN0T3B0aW9uW10gPSBbXHJcbiAgeyBsYWJlbDogJ0xldHRlcicsIHZhbHVlOiAnbGV0dGVyJyB9LFxyXG4gIHsgbGFiZWw6ICdMZWdhbCcsIHZhbHVlOiAnbGVnYWwnIH0sXHJcbiAgeyBsYWJlbDogJ1RhYmxvaWQnLCB2YWx1ZTogJ3RhYmxvaWQnIH0sXHJcbiAgeyBsYWJlbDogJ0E0JywgdmFsdWU6ICdhNCcgfSxcclxuICB7IGxhYmVsOiAnQ3VzdG9tJywgdmFsdWU6ICdjdXN0b20nIH1cclxuXTtcclxuaW50ZXJmYWNlIGRpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXIsXHJcbiAgaGVpZ2h0OiBudW1iZXJcclxufVxyXG5jb25zdCBwcmVkZWZpbmVkRGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBkaW1lbnNpb25zIH0gPSB7XHJcbiAgJ2xldHRlcic6IHsgd2lkdGg6IDgxNiwgaGVpZ2h0OiAxMDU2IH0sXHJcbiAgJ2xlZ2FsJzogeyB3aWR0aDogODE2LCBoZWlnaHQ6IDEzNDQgfSxcclxuICAndGFibG9pZCc6IHsgd2lkdGg6IDEwNTYsIGhlaWdodDogMTYzMiB9LFxyXG4gICdhNCc6IHsgd2lkdGg6IDc5NCwgaGVpZ2h0OiAxMTIzIH1cclxufTtcclxuLy8gUGFnZSBzaXplIGlzIGluIHBpeGVscywgYnV0IGlmIGl0IG1hdGNoZXMgYSBwcmVzZXQgd2UganVzdCBzaG93IHRoYXQuXHJcbi8vIFVzZXIgY2hvb3NlcyAnY3VzdG9tJyB0byB1bmxvY2sgd2lkdGgvaGVpZ2h0IGVkaXRpbmcuXHJcbmNvbnN0IHBhZ2VTaXplID0gcmVmKCdjdXN0b20nKTtcclxuXHJcbmNvbnN0IHBhZ2VDaGFuZ2UgPSAoKSA9PiB7XHJcbiBPYmplY3Qua2V5cyhwcmVkZWZpbmVkRGltZW5zaW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICBjb25zdCBkaW1zID0gcHJlZGVmaW5lZERpbWVuc2lvbnNba2V5XTtcclxuICAgIGlmIChkaW1zLndpZHRoID09PSBwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC5wYWdlV2lkdGggJiZcclxuICAgICAgZGltcy5oZWlnaHQgPT09IHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQpIHtcclxuICAgICAgcGFnZVNpemUudmFsdWUgPSBrZXk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn07XHJcbmNvbnN0IHBhZ2VTaXplQ2IgPSBhc3luYyAodmFsOiBzdHJpbmcpID0+IHtcclxuICBjb25zdCBkaW1zID0gcHJlZGVmaW5lZERpbWVuc2lvbnNbdmFsXTtcclxuICBpZiAoZGltcykge1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoID0gZGltcy53aWR0aDtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQgPSBkaW1zLmhlaWdodDtcclxuICB9XHJcbiAgcGFnZVNpemUudmFsdWUgPSB2YWw7XHJcbiAgLy8gVGhlIHdhdGNoIHdpbGwgdHJpZ2dlciB0aGUgY2FsbGJhY2tcclxufVxyXG5jb25zdCBsb2NrRGltZW5zaW9ucyA9IHJlZihmYWxzZSk7XHJcbnBhZ2VDaGFuZ2UoKTtcclxud2F0Y2ggKHBhZ2VTaXplLCBhc3luYyAobmV3VmFsKSA9PiB7XHJcbiAgaWYgKHByZWRlZmluZWREaW1lbnNpb25zW25ld1ZhbF0pIHtcclxuICAgIGxvY2tEaW1lbnNpb25zLnZhbHVlID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRpbXMgPSBwcmVkZWZpbmVkRGltZW5zaW9uc1tuZXdWYWxdO1xyXG4gICAgcGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQucGFnZVdpZHRoID0gZGltcy53aWR0aDtcclxuICAgIHBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHQgPSBkaW1zLmhlaWdodDtcclxuICB9IGVsc2Uge1xyXG4gICAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSBmYWxzZTtcclxuICB9XHJcbiAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn0pO1xyXG5pZiAocHJlZGVmaW5lZERpbWVuc2lvbnNbcGFnZVNpemUudmFsdWVdKSB7XHJcbiAgbG9ja0RpbWVuc2lvbnMudmFsdWUgPSB0cnVlXHJcbn1cclxuY29uc3QgdXBkYXRlID1hc3luYyAoKSA9PiB7XHJcbiAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbn1cclxuY29uc3QgaW5jbHVkZU5leHQgPSByZWYoZmFsc2UpO1xyXG5pZiAocGFydEluZm8uc3RhdmVzQWZ0ZXIgPiAwKSB7XHJcbiAgaW5jbHVkZU5leHQudmFsdWUgPSB0cnVlO1xyXG59XHJcbndhdGNoIChpbmNsdWRlTmV4dCwgYXN5bmMgKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XHJcbiAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XHJcbiAgICBwYXJ0SW5mby5zdGF2ZXNBZnRlciA9IG5ld1ZhbCA/IDEgOiAwO1xyXG4gICAgYXdhaXQgdXBkYXRlUGFydEluZm9DYihwYXJ0SW5mbyk7XHJcbiAgfVxyXG59KTtcclxuXHJcbnR5cGUgbnVtYmVyV3JpdGVyVHlwZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuY29uc3QgdXBkYXRlTGF5b3V0RnVuYyA9IChwYXJhbTogR2xvYmFsTGF5b3V0QXR0cmlidXRlcyk6IG51bWJlcldyaXRlclR5cGUgPT4ge1xyXG4gIGNvbnN0IGNiID0gYXN5bmMgKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgIGF3YWl0IHdyaXRlTGF5b3V0VmFsdWUocGFyYW0sIHZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIGNiO1xyXG59XHJcblxyXG5jb25zdCBnZXRJZCA9IChzdHI6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBgJHtkb21JZH0tJHtzdHJ9YDtcclxufVxyXG5cclxuPC9zY3JpcHQ+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGlhbG9nQ29udGFpbmVyIDpkb21JZD1cImRvbUlkXCIgOmNvbW1pdENiPVwiY29tbWl0Q2JcIiA6Y2FuY2VsQ2I9XCJjYW5jZWxDYlwiIDpsYWJlbD1cImxhYmVsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLThcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIDpwbGFjZWhvbGRlcj1cInBhcnRJbmZvLnBhcnROYW1lXCIgYXJpYS1sYWJlbD1cIlBhcnQgTmFtZVwiXHJcbiAgICAgICAgICA6aWQ9XCJnZXRJZCgncGFydC1uYW1lLWlucHV0JylcIiB2LW1vZGVsPVwicGFydEluZm8ucGFydE5hbWVcIiBAY2hhbmdlPVwidXBkYXRlXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IHRleHQtc3RhcnRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIlwiIDppZD1cImdldElkKCdwYXJ0LW5hbWUtbGFiZWwnKVwiPlBhcnQgTmFtZTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtOFwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgOnBsYWNlaG9sZGVyPVwicGFydEluZm8ucGFydEFiYnJldmlhdGlvblwiIGFyaWEtbGFiZWw9XCJQYXJ0IEFiYnJldmlhdGlvblwiXHJcbiAgICAgICAgICA6aWQ9XCJnZXRJZCgncGFydC1hYmJyZXZpYXRpb24taW5wdXQnKVwiIHYtbW9kZWw9XCJwYXJ0SW5mby5wYXJ0QWJicmV2aWF0aW9uXCIgQGNoYW5nZT1cInVwZGF0ZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJcIiA6aWQ9XCJnZXRJZCgncGFydC1hYmJyZXZpYXRpb24tbGFiZWwnKVwiPlBhcnQgQWJicmV2aWF0aW9uPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0xXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJwYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHNcIiA6aWQ9XCJnZXRJZCgncHJlc2VydmVUZXh0JylcIlxyXG4gICAgICAgICAgQGNoYW5nZT1cIndyaXRlQm9vbGVhblZhbHVlKCdwcmVzZXJ2ZVRleHRHcm91cHMnLCBwYXJ0SW5mby5wcmVzZXJ2ZVRleHRHcm91cHMpXCI+PC9pbnB1dD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTVcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgOmZvcj1cImdldElkKCdwcmVzZXJ2ZVRleHQnKVwiPlByZXNlcnZlIFRleHQgR3JvdXBzPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTFcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cInBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzXCIgOmlkPVwiZ2V0SWQoJ2V4cGFuZE11bHRpbWVhc3VyZVJlc3RzJylcIlxyXG4gICAgICAgICAgQGNoYW5nZT1cIndyaXRlQm9vbGVhblZhbHVlKCdleHBhbmRNdWx0aW1lYXN1cmVSZXN0cycsIHBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzKVwiPjwvaW5wdXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC01XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIDpmb3I9XCJnZXRJZCgnZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMnKVwiPkV4cGFuZCBNdWx0aW1lYXN1cmUgUmVzdHM8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0xXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJpbmNsdWRlTmV4dFwiIDppZD1cImdldElkKCdpbmNsdWRlTmV4dCcpXCI+PC9pbnB1dD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTVcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgOmZvcj1cImdldElkKCdpbmNsdWRlTmV4dCcpXCI+SW5jbHVkZSBOZXh0IFN0YXZlPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0zIHRleHQtZW5kXCI+UGFnZSBTaXplPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTZcIj5cclxuICAgICAgICA8c2VsZWN0Q29tcCA6ZG9tSWQ9XCJnZXRJZCgncGFnZS1zaXplLXNlbGVjdCcpXCIgOmxhYmVsPVwiJydcIiA6c2VsZWN0aW9ucz1cInBhZ2VTaXplc1wiIDppbml0aWFsVmFsdWU9XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICA6Y2hhbmdlQ2I9XCJwYWdlU2l6ZUNiXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgncGFnZS13aWR0aC1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VXaWR0aFwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ3BhZ2VXaWR0aCcpXCIgOmRpc2FibGVkPVwibG9ja0RpbWVuc2lvbnNcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlBhZ2UgV2lkdGg8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC00IG1zLW40XCI+XHJcbiAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdwYWdlLWhlaWdodC1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0LnBhZ2VIZWlnaHRcIiA6cHJlY2lzaW9uPVwiMFwiXHJcbiAgICAgICAgICA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCdwYWdlSGVpZ2h0JylcIiA6ZGlzYWJsZWQ9XCJsb2NrRGltZW5zaW9uc1wiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UGFnZSBIZWlnaHQ8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3pvb20tc2NhbGUtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJwYXJ0SW5mby5sYXlvdXRNYW5hZ2VyLmdsb2JhbExheW91dC56b29tU2NhbGVcIiA6cHJlY2lzaW9uPVwiMFwiXHJcbiAgICAgICAgICA6cGVyY2VudD10cnVlIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ3pvb21TY2FsZScpXCIgOm1pblZhbHVlPVwiMC4yNVwiIDptYXhWYWx1ZT1cIjhcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlpvb20gU2NhbGUgKCUpPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNCBtcy1uNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgnc3ZnLXNjYWxlLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQuc3ZnU2NhbGVcIiA6cHJlY2lzaW9uPVwiMFwiXHJcbiAgICAgICAgICA6cGVyY2VudD1cInRydWVcIiA6Y2hhbmdlQ2I9XCJ1cGRhdGVMYXlvdXRGdW5jKCdzdmdTY2FsZScpXCIgOm1pblZhbHVlPVwiMC4yNVwiIDptYXhWYWx1ZT1cIjJcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMiBmcy03IG1zLW40IHBzLTAgdGV4dC1zdGFydFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPk5vdGUgU2l6ZSAoJSk8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTRcIj5cclxuICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ25vdGUtc3BhY2luZy1pbnB1dCcpXCIgOmluaXRpYWxWYWx1ZT1cInBhcnRJbmZvLmxheW91dE1hbmFnZXIuZ2xvYmFsTGF5b3V0Lm5vdGVTcGFjaW5nXCIgOnByZWNpc2lvbj1cIjJcIlxyXG4gICAgICAgICAgOmNoYW5nZUNiPVwidXBkYXRlTGF5b3V0RnVuYygnbm90ZVNwYWNpbmcnKVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+Tm90ZSBTcGFjaW5nPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtNCBtcy1uNFwiPlxyXG4gICAgICAgIDxudW1iZXJJbnB1dEFwcCA6ZG9tSWQ9XCJnZXRJZCgnbWF4LW1lYXN1cmUtc3lzdGVtLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwicGFydEluZm8ubGF5b3V0TWFuYWdlci5nbG9iYWxMYXlvdXQubWF4TWVhc3VyZVN5c3RlbVwiXHJcbiAgICAgICAgICA6cHJlY2lzaW9uPVwiMFwiIDpjaGFuZ2VDYj1cInVwZGF0ZUxheW91dEZ1bmMoJ21heE1lYXN1cmVTeXN0ZW0nKVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0yIGZzLTcgbXMtbjQgcHMtMCB0ZXh0LXN0YXJ0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+TWVhc3VyZXMvU3lzdGVtPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGlhbG9nQ29udGFpbmVyPlxyXG48L3RlbXBsYXRlPiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/partInfo.vue?vue&type=template&id=7c417a1c&ts=true\n\n}");
811
811
 
812
812
  /***/ },
813
813
 
@@ -884,7 +884,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
884
884
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
885
885
 
886
886
  "use strict";
887
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: () => (/* binding */ render)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = { class: \"row mb-2 ms-2\" };\nconst _hoisted_2 = { class: \"col col-9 pe-0 me-n2\" };\nconst _hoisted_3 = { class: \"col col-3 text-start ps-0 pe-0 ms-n4\" };\nconst _hoisted_4 = [\"for\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"dialogContainer\"], {\n domId: $setup.domId,\n label: $props.label,\n commitCb: $setup.props.commitCb,\n cancelCb: $setup.props.cancelCb\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('page-width-input'),\n initialValue: $setup.transposeIndex,\n precision: 0,\n changeCb: $setup.xposeCb,\n disabled: false\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\"])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-label\",\n for: $setup.getId('page-width-input-text')\n }, \"Semitones\", 8 /* PROPS */, _hoisted_4)\n ])\n ])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"domId\", \"label\", \"commitCb\", \"cancelCb\"]));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMV0ucnVsZXNbNl0udXNlWzBdIS4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9zY29yZVRyYW5zcG9zZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2I1OTdhNjImdHM9dHJ1ZSIsIm1hcHBpbmdzIjoiOzs7OztBQUF1SztBQUV2SyxNQUFNLFVBQVUsR0FBRyxFQzJCUixLQUFLLEVBQUMsZUFBZTtBRDFCaEMsTUFBTSxVQUFVLEdBQUcsRUMyQk4sS0FBSyxFQUFDLHNCQUFzQjtBRDFCekMsTUFBTSxVQUFVLEdBQUcsRUM4Qk4sS0FBSyxFQUFDLHNDQUFzQztBRDdCekQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFFbkIsU0FBUyxNQUFNLENBQUMsSUFBUyxFQUFDLE1BQVcsRUFBQyxNQUFXLEVBQUMsTUFBVyxFQUFDLEtBQVUsRUFBQyxRQUFhO0lBQzNGLE9BQU8sQ0FBQyw4Q0FBVSxFQUFFLEVDb0JwQixpREFVa0I7UUFWQSxLQUFLLEVBQUUsWUFBSztRQUFHLEtBQUssRUFBRSxZQUFLO1FBQUcsUUFBUSxFQUFFLFlBQUssQ0FBQyxRQUFRO1FBQUcsUUFBUSxFQUFFLFlBQUssQ0FBQyxRQUFRO0tEZmxHLEVBQUU7UUFDRCxPQUFPLEVBQUUsNENBQVEsQ0NlZixHQVFNO1lBUk4sd0RBUU0sT0FSTixVQVFNO2dCQVBKLHdEQUdNLE9BSE4sVUFHTTtvQkFGSixpREFDeUM7d0JBRHhCLEtBQUssRUFBRSxZQUFLO3dCQUF1QixZQUFZLEVBQUUscUJBQWM7d0JBQUcsU0FBUyxFQUFFLENBQUM7d0JBQzVGLFFBQVEsRUFBRSxjQUFPO3dCQUFHLFFBQVEsRUFBRSxLQUFLO3FCRFRyQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2lCQUNuRCxDQUFDO2dCQ1VGLHdEQUVNLE9BRk4sVUFFTTtvQkFESix3REFBaUY7d0JBQTFFLEtBQUssRUFBQyxZQUFZO3dCQUFFLEdBQUcsRUFBRSxZQUFLO3FCRE5wQyxFQ00rRCxXQUFTO2lCREwxRSxDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUM7UUFDRixDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVk7S0FDbEIsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU21vLy4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9zY29yZVRyYW5zcG9zZS52dWU/NTRlZSIsIndlYnBhY2s6Ly9TbW8vLi9zcmMvdWkvY29tcG9uZW50cy9kaWFsb2dzL3Njb3JlVHJhbnNwb3NlLnZ1ZT82OGZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVZOb2RlIGFzIF9jcmVhdGVWTm9kZSwgY3JlYXRlRWxlbWVudFZOb2RlIGFzIF9jcmVhdGVFbGVtZW50Vk5vZGUsIHdpdGhDdHggYXMgX3dpdGhDdHgsIG9wZW5CbG9jayBhcyBfb3BlbkJsb2NrLCBjcmVhdGVCbG9jayBhcyBfY3JlYXRlQmxvY2sgfSBmcm9tIFwidnVlXCJcblxuY29uc3QgX2hvaXN0ZWRfMSA9IHsgY2xhc3M6IFwicm93IG1iLTIgbXMtMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzIgPSB7IGNsYXNzOiBcImNvbCBjb2wtOSBwZS0wIG1lLW4yXCIgfVxuY29uc3QgX2hvaXN0ZWRfMyA9IHsgY2xhc3M6IFwiY29sIGNvbC0zIHRleHQtc3RhcnQgcHMtMCBwZS0wIG1zLW40XCIgfVxuY29uc3QgX2hvaXN0ZWRfNCA9IFtcImZvclwiXVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKF9jdHg6IGFueSxfY2FjaGU6IGFueSwkcHJvcHM6IGFueSwkc2V0dXA6IGFueSwkZGF0YTogYW55LCRvcHRpb25zOiBhbnkpIHtcbiAgcmV0dXJuIChfb3BlbkJsb2NrKCksIF9jcmVhdGVCbG9jaygkc2V0dXBbXCJkaWFsb2dDb250YWluZXJcIl0sIHtcbiAgICBkb21JZDogJHNldHVwLmRvbUlkLFxuICAgIGxhYmVsOiAkcHJvcHMubGFiZWwsXG4gICAgY29tbWl0Q2I6ICRzZXR1cC5wcm9wcy5jb21taXRDYixcbiAgICBjYW5jZWxDYjogJHNldHVwLnByb3BzLmNhbmNlbENiXG4gIH0sIHtcbiAgICBkZWZhdWx0OiBfd2l0aEN0eCgoKSA9PiBbXG4gICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzEsIFtcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8yLCBbXG4gICAgICAgICAgX2NyZWF0ZVZOb2RlKCRzZXR1cFtcIm51bWJlcklucHV0QXBwXCJdLCB7XG4gICAgICAgICAgICBkb21JZDogJHNldHVwLmdldElkKCdwYWdlLXdpZHRoLWlucHV0JyksXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6ICRzZXR1cC50cmFuc3Bvc2VJbmRleCxcbiAgICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgICAgIGNoYW5nZUNiOiAkc2V0dXAueHBvc2VDYixcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICAgIH0sIG51bGwsIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwiaW5pdGlhbFZhbHVlXCJdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8zLCBbXG4gICAgICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImxhYmVsXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBcImZvcm0tbGFiZWxcIixcbiAgICAgICAgICAgIGZvcjogJHNldHVwLmdldElkKCdwYWdlLXdpZHRoLWlucHV0LXRleHQnKVxuICAgICAgICAgIH0sIFwiU2VtaXRvbmVzXCIsIDggLyogUFJPUFMgKi8sIF9ob2lzdGVkXzQpXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pLFxuICAgIF86IDEgLyogU1RBQkxFICovXG4gIH0sIDggLyogUFJPUFMgKi8sIFtcImRvbUlkXCIsIFwibGFiZWxcIiwgXCJjb21taXRDYlwiLCBcImNhbmNlbENiXCJdKSlcbn0iLCI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBkcmFnZ2FibGVTZXNzaW9uIH0gZnJvbSAnLi4vLi4vY29tcG9zYWJsZS9kcmFnZ2FibGUnO1xyXG5pbXBvcnQgZGlhbG9nQ29udGFpbmVyIGZyb20gJy4vZGlhbG9nQ29udGFpbmVyLnZ1ZSc7XHJcbmltcG9ydCBudW1iZXJJbnB1dEFwcCBmcm9tICcuL251bWJlcklucHV0LnZ1ZSc7XHJcbmltcG9ydCB7IHJlZiwgUmVmLCByZWFjdGl2ZSwgd2F0Y2ggfSBmcm9tICd2dWUnO1xyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRvbUlkOiBzdHJpbmcsXHJcbiAgbGFiZWw6IHN0cmluZyxcclxuICBnZXRUcmFuc3Bvc2U6ICgpID0+IFJlZjxudW1iZXI+LFxyXG4gIGNvbW1pdENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxyXG4gIGNhbmNlbENiOiAoKSA9PiBQcm9taXNlPHZvaWQ+XHJcbn07XHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8UHJvcHM+KCk7XHJcblxyXG5jb25zdCB7IGRvbUlkLCBnZXRUcmFuc3Bvc2UgfSA9IHsgLi4ucHJvcHMgfTtcclxuXHJcbmNvbnN0IHRyYW5zcG9zZUluZGV4OiBSZWY8bnVtYmVyPiA9IGdldFRyYW5zcG9zZSgpO1xyXG5jb25zdCB4cG9zZUNiID0gYXN5bmMgKHZhbDogbnVtYmVyKSA9PiB7XHJcbiAgdHJhbnNwb3NlSW5kZXgudmFsdWUgPSB2YWw7XHJcbn07XHJcbmNvbnN0IGdldERvbUlkID0gKCkgPT4ge1xyXG4gIHJldHVybiBgYXR0ci1tb2RhbC1kaWFsb2ctJHtkb21JZH1gO1xyXG59XHJcbmNvbnN0IGdldElkID0gKHN0cjogc3RyaW5nKSA9PiB7XHJcbiAgcmV0dXJuIGAke2RvbUlkfS0ke3N0cn1gO1xyXG59XHJcbjwvc2NyaXB0PlxyXG48dGVtcGxhdGU+XHJcbiAgPGRpYWxvZ0NvbnRhaW5lciA6ZG9tSWQ9XCJkb21JZFwiIDpsYWJlbD1cImxhYmVsXCIgOmNvbW1pdENiPVwicHJvcHMuY29tbWl0Q2JcIiA6Y2FuY2VsQ2I9XCJwcm9wcy5jYW5jZWxDYlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgbXMtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLTkgcGUtMCBtZS1uMlwiPlxyXG4gICAgICAgICAgPG51bWJlcklucHV0QXBwIDpkb21JZD1cImdldElkKCdwYWdlLXdpZHRoLWlucHV0JylcIiA6aW5pdGlhbFZhbHVlPVwidHJhbnNwb3NlSW5kZXhcIiA6cHJlY2lzaW9uPVwiMFwiXHJcbiAgICAgICAgICAgIDpjaGFuZ2VDYj1cInhwb3NlQ2JcIiA6ZGlzYWJsZWQ9XCJmYWxzZVwiLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC0zIHRleHQtc3RhcnQgcHMtMCBwZS0wIG1zLW40XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgOmZvcj1cImdldElkKCdwYWdlLXdpZHRoLWlucHV0LXRleHQnKVwiPlNlbWl0b25lczwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGlhbG9nQ29udGFpbmVyPlxyXG48L3RlbXBsYXRlPiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/scoreTranspose.vue?vue&type=template&id=7b597a62&ts=true\n\n}");
887
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: () => (/* binding */ render)\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _hoisted_1 = { class: \"row mb-2 ms-2\" };\nconst _hoisted_2 = { class: \"col col-9 pe-0 me-n2\" };\nconst _hoisted_3 = { class: \"col col-3 text-start ps-0 pe-0 ms-n4\" };\nconst _hoisted_4 = [\"for\"];\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup[\"dialogContainer\"], {\n domId: $setup.domId,\n label: $props.label,\n commitCb: $setup.props.commitCb,\n cancelCb: $setup.props.cancelCb\n }, {\n default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_1, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_2, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup[\"numberInputApp\"], {\n domId: $setup.getId('page-width-input'),\n initialValue: $setup.transposeIndex,\n precision: 0,\n minValue: -12,\n maxValue: 12,\n changeCb: $setup.xposeCb,\n disabled: false\n }, null, 8 /* PROPS */, [\"domId\", \"initialValue\"])\n ]),\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"div\", _hoisted_3, [\n (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"label\", {\n class: \"form-label\",\n for: $setup.getId('page-width-input-text')\n }, \"Semitones\", 8 /* PROPS */, _hoisted_4)\n ])\n ])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"domId\", \"label\", \"commitCb\", \"cancelCb\"]));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTEudXNlWzBdIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvZGlzdC90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2Rpc3QvaW5kZXguanM/P3J1bGVTZXRbMV0ucnVsZXNbNl0udXNlWzBdIS4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9zY29yZVRyYW5zcG9zZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2I1OTdhNjImdHM9dHJ1ZSIsIm1hcHBpbmdzIjoiOzs7OztBQUF1SztBQUV2SyxNQUFNLFVBQVUsR0FBRyxFQ3dCUixLQUFLLEVBQUMsZUFBZTtBRHZCaEMsTUFBTSxVQUFVLEdBQUcsRUN3Qk4sS0FBSyxFQUFDLHNCQUFzQjtBRHZCekMsTUFBTSxVQUFVLEdBQUcsRUM0Qk4sS0FBSyxFQUFDLHNDQUFzQztBRDNCekQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFFbkIsU0FBUyxNQUFNLENBQUMsSUFBUyxFQUFDLE1BQVcsRUFBQyxNQUFXLEVBQUMsTUFBVyxFQUFDLEtBQVUsRUFBQyxRQUFhO0lBQzNGLE9BQU8sQ0FBQyw4Q0FBVSxFQUFFLEVDaUJwQixpREFXa0I7UUFYQSxLQUFLLEVBQUUsWUFBSztRQUFHLEtBQUssRUFBRSxZQUFLO1FBQUcsUUFBUSxFQUFFLFlBQUssQ0FBQyxRQUFRO1FBQUcsUUFBUSxFQUFFLFlBQUssQ0FBQyxRQUFRO0tEWmxHLEVBQUU7UUFDRCxPQUFPLEVBQUUsNENBQVEsQ0NZZixHQVNNO1lBVE4sd0RBU00sT0FUTixVQVNNO2dCQVJKLHdEQUlNLE9BSk4sVUFJTTtvQkFISixpREFFeUM7d0JBRnhCLEtBQUssRUFBRSxZQUFLO3dCQUF1QixZQUFZLEVBQUUscUJBQWM7d0JBQUcsU0FBUyxFQUFFLENBQUM7d0JBQzVGLFFBQVEsRUFBRSxHQUFHO3dCQUFHLFFBQVEsRUFBRSxFQUFFO3dCQUM1QixRQUFRLEVBQUUsY0FBTzt3QkFBRyxRQUFRLEVBQUUsS0FBSztxQkRMckMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDbkQsQ0FBQztnQkNNRix3REFFTSxPQUZOLFVBRU07b0JBREosd0RBQWlGO3dCQUExRSxLQUFLLEVBQUMsWUFBWTt3QkFBRSxHQUFHLEVBQUUsWUFBSztxQkRGcEMsRUNFK0QsV0FBUztpQkREMUUsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDO1FBQ0YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZO0tBQ2xCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL1Ntby8uL3NyYy91aS9jb21wb25lbnRzL2RpYWxvZ3Mvc2NvcmVUcmFuc3Bvc2UudnVlPzU0ZWUiLCJ3ZWJwYWNrOi8vU21vLy4vc3JjL3VpL2NvbXBvbmVudHMvZGlhbG9ncy9zY29yZVRyYW5zcG9zZS52dWU/NjhmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVWTm9kZSBhcyBfY3JlYXRlVk5vZGUsIGNyZWF0ZUVsZW1lbnRWTm9kZSBhcyBfY3JlYXRlRWxlbWVudFZOb2RlLCB3aXRoQ3R4IGFzIF93aXRoQ3R4LCBvcGVuQmxvY2sgYXMgX29wZW5CbG9jaywgY3JlYXRlQmxvY2sgYXMgX2NyZWF0ZUJsb2NrIH0gZnJvbSBcInZ1ZVwiXG5cbmNvbnN0IF9ob2lzdGVkXzEgPSB7IGNsYXNzOiBcInJvdyBtYi0yIG1zLTJcIiB9XG5jb25zdCBfaG9pc3RlZF8yID0geyBjbGFzczogXCJjb2wgY29sLTkgcGUtMCBtZS1uMlwiIH1cbmNvbnN0IF9ob2lzdGVkXzMgPSB7IGNsYXNzOiBcImNvbCBjb2wtMyB0ZXh0LXN0YXJ0IHBzLTAgcGUtMCBtcy1uNFwiIH1cbmNvbnN0IF9ob2lzdGVkXzQgPSBbXCJmb3JcIl1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihfY3R4OiBhbnksX2NhY2hlOiBhbnksJHByb3BzOiBhbnksJHNldHVwOiBhbnksJGRhdGE6IGFueSwkb3B0aW9uczogYW55KSB7XG4gIHJldHVybiAoX29wZW5CbG9jaygpLCBfY3JlYXRlQmxvY2soJHNldHVwW1wiZGlhbG9nQ29udGFpbmVyXCJdLCB7XG4gICAgZG9tSWQ6ICRzZXR1cC5kb21JZCxcbiAgICBsYWJlbDogJHByb3BzLmxhYmVsLFxuICAgIGNvbW1pdENiOiAkc2V0dXAucHJvcHMuY29tbWl0Q2IsXG4gICAgY2FuY2VsQ2I6ICRzZXR1cC5wcm9wcy5jYW5jZWxDYlxuICB9LCB7XG4gICAgZGVmYXVsdDogX3dpdGhDdHgoKCkgPT4gW1xuICAgICAgX2NyZWF0ZUVsZW1lbnRWTm9kZShcImRpdlwiLCBfaG9pc3RlZF8xLCBbXG4gICAgICAgIF9jcmVhdGVFbGVtZW50Vk5vZGUoXCJkaXZcIiwgX2hvaXN0ZWRfMiwgW1xuICAgICAgICAgIF9jcmVhdGVWTm9kZSgkc2V0dXBbXCJudW1iZXJJbnB1dEFwcFwiXSwge1xuICAgICAgICAgICAgZG9tSWQ6ICRzZXR1cC5nZXRJZCgncGFnZS13aWR0aC1pbnB1dCcpLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiAkc2V0dXAudHJhbnNwb3NlSW5kZXgsXG4gICAgICAgICAgICBwcmVjaXNpb246IDAsXG4gICAgICAgICAgICBtaW5WYWx1ZTogLTEyLFxuICAgICAgICAgICAgbWF4VmFsdWU6IDEyLFxuICAgICAgICAgICAgY2hhbmdlQ2I6ICRzZXR1cC54cG9zZUNiLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSwgbnVsbCwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJpbml0aWFsVmFsdWVcIl0pXG4gICAgICAgIF0pLFxuICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwiZGl2XCIsIF9ob2lzdGVkXzMsIFtcbiAgICAgICAgICBfY3JlYXRlRWxlbWVudFZOb2RlKFwibGFiZWxcIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiZm9ybS1sYWJlbFwiLFxuICAgICAgICAgICAgZm9yOiAkc2V0dXAuZ2V0SWQoJ3BhZ2Utd2lkdGgtaW5wdXQtdGV4dCcpXG4gICAgICAgICAgfSwgXCJTZW1pdG9uZXNcIiwgOCAvKiBQUk9QUyAqLywgX2hvaXN0ZWRfNClcbiAgICAgICAgXSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgXzogMSAvKiBTVEFCTEUgKi9cbiAgfSwgOCAvKiBQUk9QUyAqLywgW1wiZG9tSWRcIiwgXCJsYWJlbFwiLCBcImNvbW1pdENiXCIsIFwiY2FuY2VsQ2JcIl0pKVxufSIsIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7IGRyYWdnYWJsZVNlc3Npb24gfSBmcm9tICcuLi8uLi9jb21wb3NhYmxlL2RyYWdnYWJsZSc7XHJcbmltcG9ydCBkaWFsb2dDb250YWluZXIgZnJvbSAnLi9kaWFsb2dDb250YWluZXIudnVlJztcclxuaW1wb3J0IG51bWJlcklucHV0QXBwIGZyb20gJy4vbnVtYmVySW5wdXQudnVlJztcclxuaW1wb3J0IHsgcmVmLCBSZWYsIHJlYWN0aXZlLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XHJcbmludGVyZmFjZSBQcm9wcyB7XHJcbiAgZG9tSWQ6IHN0cmluZyxcclxuICBsYWJlbDogc3RyaW5nLFxyXG4gIGdldFRyYW5zcG9zZTogKCkgPT4gUmVmPG51bWJlcj4sXHJcbiAgY29tbWl0Q2I6ICgpID0+IFByb21pc2U8dm9pZD4sXHJcbiAgY2FuY2VsQ2I6ICgpID0+IFByb21pc2U8dm9pZD5cclxufTtcclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczxQcm9wcz4oKTtcclxuXHJcbmNvbnN0IHsgZG9tSWQsIGdldFRyYW5zcG9zZSB9ID0geyAuLi5wcm9wcyB9O1xyXG5cclxuY29uc3QgdHJhbnNwb3NlSW5kZXg6IFJlZjxudW1iZXI+ID0gZ2V0VHJhbnNwb3NlKCk7XHJcbmNvbnN0IHhwb3NlQ2IgPSBhc3luYyAodmFsOiBudW1iZXIpID0+IHtcclxuICB0cmFuc3Bvc2VJbmRleC52YWx1ZSA9IHZhbDtcclxufTtcclxuY29uc3QgZ2V0SWQgPSAoc3RyOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYCR7ZG9tSWR9LSR7c3RyfWA7XHJcbn1cclxuPC9zY3JpcHQ+XHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGlhbG9nQ29udGFpbmVyIDpkb21JZD1cImRvbUlkXCIgOmxhYmVsPVwibGFiZWxcIiA6Y29tbWl0Q2I9XCJwcm9wcy5jb21taXRDYlwiIDpjYW5jZWxDYj1cInByb3BzLmNhbmNlbENiXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBtcy0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtOSBwZS0wIG1lLW4yXCI+XHJcbiAgICAgICAgICA8bnVtYmVySW5wdXRBcHAgOmRvbUlkPVwiZ2V0SWQoJ3BhZ2Utd2lkdGgtaW5wdXQnKVwiIDppbml0aWFsVmFsdWU9XCJ0cmFuc3Bvc2VJbmRleFwiIDpwcmVjaXNpb249XCIwXCJcclxuICAgICAgICAgICAgOm1pblZhbHVlPVwiLTEyXCIgOm1heFZhbHVlPVwiMTJcIlxyXG4gICAgICAgICAgICA6Y2hhbmdlQ2I9XCJ4cG9zZUNiXCIgOmRpc2FibGVkPVwiZmFsc2VcIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtMyB0ZXh0LXN0YXJ0IHBzLTAgcGUtMCBtcy1uNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIDpmb3I9XCJnZXRJZCgncGFnZS13aWR0aC1pbnB1dC10ZXh0JylcIj5TZW1pdG9uZXM8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2RpYWxvZ0NvbnRhaW5lcj5cclxuPC90ZW1wbGF0ZT4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/ts-loader/index.js??clonedRuleSet-1.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[1].rules[6].use[0]!./src/ui/components/dialogs/scoreTranspose.vue?vue&type=template&id=7b597a62&ts=true\n\n}");
888
888
 
889
889
  /***/ },
890
890
 
@@ -1226,7 +1226,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
1226
1226
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1227
1227
 
1228
1228
  "use strict";
1229
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SuiMapper: () => (/* binding */ SuiMapper)\n/* harmony export */ });\n/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/xform/selections */ \"./src/smo/xform/selections.ts\");\n/* harmony import */ var _svgHelpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgHelpers */ \"./src/render/sui/svgHelpers.ts\");\n/* harmony import */ var _layoutDebug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layoutDebug */ \"./src/render/sui/layoutDebug.ts\");\n/* harmony import */ var _smo_data_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/common */ \"./src/smo/data/common.ts\");\n/* harmony import */ var _svgPageMap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./svgPageMap */ \"./src/render/sui/svgPageMap.ts\");\n// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\n// Copyright (c) Aaron David Newman 2021.\n\n\n\n\n\n/**\n * Map the notes in the svg so they can respond to events and interact\n * with the mouse/keyboard\n * @category SuiRender\n */\nclass SuiMapper {\n constructor(renderer, scroller) {\n // measure to selector map\n this.measureNoteMap = {};\n // notes currently selected. Something is always selected\n // modifiers (text etc.) that have been selected\n this.modifierSelections = [];\n this.selections = [];\n // The list of modifiers near the current selection\n this.localModifiers = [];\n this.modifierIndex = -1;\n this.modifierSuggestion = null;\n this.pitchIndex = -1;\n // By default, defer highlights for performance.\n this.deferHighlightMode = true;\n this.suggestion = null;\n this.mouseHintBox = null;\n this.selectionRects = {};\n this.outlines = {};\n this.mapping = false;\n // renderer renders the music when it changes\n this.renderer = renderer;\n this.scroller = scroller;\n this.modifierIndex = -1;\n this.localModifiers = [];\n // index if a single pitch of a chord is selected\n this.pitchIndex = -1;\n // the current selection, which is also the copy/paste destination\n this.highlightQueue = { selectionCount: 0, deferred: false };\n }\n updateHighlight() {\n const self = this;\n if (this.selections.length === 0) {\n this.highlightQueue.deferred = false;\n this.highlightQueue.selectionCount = 0;\n return;\n }\n if (this.highlightQueue.selectionCount === this.selections.length) {\n this.highlightSelection();\n this.highlightQueue.deferred = false;\n }\n else {\n this.highlightQueue.selectionCount = this.selections.length;\n setTimeout(() => {\n self.updateHighlight();\n }, 50);\n }\n }\n deferHighlight() {\n if (!this.deferHighlightMode) {\n this.highlightSelection();\n }\n const self = this;\n if (!this.highlightQueue.deferred) {\n this.highlightQueue.deferred = true;\n setTimeout(() => {\n self.updateHighlight();\n }, 50);\n }\n }\n _createLocalModifiersList() {\n this.localModifiers = [];\n let index = 0;\n this.selections.forEach((sel) => {\n var _a, _b;\n (_a = sel.note) === null || _a === void 0 ? void 0 : _a.getGraceNotes().forEach((gg) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: gg, box: (_a = gg.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n (_b = sel.note) === null || _b === void 0 ? void 0 : _b.getModifiers('SmoDynamicText').forEach((dyn) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: dyn, box: (_a = dyn.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n sel.measure.getModifiersByType('SmoVolta').forEach((volta) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: volta, box: (_a = volta.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n sel.measure.getModifiersByType('SmoTempoText').forEach((tempo) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: tempo, box: (_a = tempo.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n sel.staff.renderableModifiers.forEach((mod) => {\n if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.gteq(sel.selector, mod.startSelector) &&\n _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.lteq(sel.selector, mod.endSelector) && mod.logicalBox) {\n const exists = this.localModifiers.find((mm) => mm.modifier.ctor === mod.ctor);\n if (!exists) {\n this.localModifiers.push({ index, selection: sel, modifier: mod, box: mod.logicalBox });\n index += 1;\n }\n }\n });\n });\n }\n /**\n * When a modifier is selected graphically, update the selection list\n * and create a local modifier list\n * @param modifierTabs\n */\n createLocalModifiersFromModifierTabs(modifierTabs) {\n const selections = [];\n const modMap = {};\n modifierTabs.forEach((mt) => {\n if (mt.selection) {\n const key = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.getNoteKey(mt.selection.selector);\n if (!modMap[key]) {\n selections.push(mt.selection);\n modMap[key] = true;\n }\n }\n });\n if (selections.length) {\n this.selections = selections;\n this._createLocalModifiersList();\n this.deferHighlight();\n }\n }\n removeModifierSelectionBox() {\n if (this.outlines['staffModifier'] && this.outlines['staffModifier'].element) {\n this.outlines['staffModifier'].element.remove();\n this.outlines['staffModifier'].element = undefined;\n }\n }\n // used by remove dialogs to clear removed thing\n clearModifierSelections() {\n this.modifierSelections = [];\n this._createLocalModifiersList();\n this.modifierIndex = -1;\n this.removeModifierSelectionBox();\n }\n // ### loadScore\n // We are loading a new score. clear the maps so we can rebuild them after\n // rendering\n loadScore() {\n this.measureNoteMap = {};\n this.clearModifierSelections();\n this.selections = [];\n this.highlightQueue = { selectionCount: 0, deferred: false };\n }\n // ### _clearMeasureArtifacts\n // clear the measure from the measure and note maps so we can rebuild it.\n clearMeasureMap(measure) {\n const selector = { staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] };\n // Unselect selections in this measure so we can reselect them when re-tracked\n const ar = [];\n this.selections.forEach((selection) => {\n if (selection.selector.staff !== selector.staff || selection.selector.measure !== selector.measure) {\n ar.push(selection);\n }\n });\n this.selections = ar;\n }\n _copySelectionsByMeasure(staffIndex, measureIndex) {\n const rv = this.selections.filter((sel) => sel.selector.staff === staffIndex && sel.selector.measure === measureIndex);\n const ticks = rv.length < 1 ? 0 : rv.map((sel) => sel.note.tickCount).reduce((a, b) => a + b);\n const selectors = [];\n rv.forEach((sel) => {\n const nsel = JSON.parse(JSON.stringify(sel.selector));\n if (!nsel.pitches) {\n nsel.pitches = [];\n }\n selectors.push(nsel);\n });\n return { ticks, selectors };\n }\n deleteMeasure(selection) {\n const selCopy = this._copySelectionsByMeasure(selection.selector.staff, selection.selector.measure)\n .selectors;\n this.clearMeasureMap(selection.measure);\n if (selCopy.length) {\n selCopy.forEach((selector) => {\n const nsel = JSON.parse(JSON.stringify(selector));\n if (selector.measure === 0) {\n nsel.measure += 1;\n }\n else {\n nsel.measure -= 1;\n }\n this.selections.push(this._getClosestTick(nsel));\n });\n }\n }\n _updateNoteModifier(selection, modMap, modifier, ix) {\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection,\n box: modifier.logicalBox,\n index: ix\n });\n ix += 1;\n const context = this.renderer.pageMap.getRendererFromModifier(modifier);\n modMap[modifier.attrs.id] = true;\n }\n return ix;\n }\n _updateModifiers() {\n let ix = 0;\n const modMap = {};\n if (!this.renderer.score) {\n return;\n }\n this.renderer.score.textGroups.forEach((modifier) => {\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection: null,\n box: modifier.logicalBox,\n index: ix\n });\n ix += 1;\n }\n });\n const keys = Object.keys(this.measureNoteMap);\n keys.forEach((selKey) => {\n var _a, _b;\n const selection = this.measureNoteMap[selKey];\n selection.staff.renderableModifiers.forEach((modifier) => {\n if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.contains(selection.selector, modifier.startSelector, modifier.endSelector)) {\n if (!modMap[modifier.attrs.id]) {\n if (modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection,\n box: modifier.logicalBox,\n index: ix\n });\n ix += 1;\n modMap[modifier.attrs.id] = true;\n }\n }\n }\n });\n selection.measure.modifiers.forEach((modifier) => {\n if (modifier.attrs.id\n && !modMap[modifier.attrs.id]\n && modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection,\n box: _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(modifier.logicalBox),\n index: ix\n });\n ix += 1;\n modMap[modifier.attrs.id] = true;\n }\n });\n (_a = selection.note) === null || _a === void 0 ? void 0 : _a.textModifiers.forEach((modifier) => {\n if (modifier.logicalBox) {\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\n }\n });\n (_b = selection.note) === null || _b === void 0 ? void 0 : _b.graceNotes.forEach((modifier) => {\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\n });\n });\n }\n // ### _getClosestTick\n // given a musical selector, find the note artifact that is closest to it,\n // if an exact match is not available\n _getClosestTick(selector) {\n let tickKey = '';\n const measureKey = Object.keys(this.measureNoteMap).find((k) => _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.sameMeasure(this.measureNoteMap[k].selector, selector)\n && this.measureNoteMap[k].selector.tick === 0);\n tickKey = Object.keys(this.measureNoteMap).find((k) => _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.sameNote(this.measureNoteMap[k].selector, selector));\n const firstObj = this.measureNoteMap[Object.keys(this.measureNoteMap)[0]];\n if (tickKey) {\n return this.measureNoteMap[tickKey];\n }\n if (measureKey) {\n return this.measureNoteMap[measureKey];\n }\n return firstObj;\n }\n // ### _setModifierBoxes\n // Create the DOM modifiers for the lyrics and other modifiers\n _setModifierBoxes(measure) {\n const context = this.renderer.pageMap.getRenderer(measure.svg.logicalBox);\n measure.voices.forEach((voice) => {\n voice.notes.forEach((smoNote) => {\n if (context) {\n const el = context.svg.getElementById(smoNote.renderId);\n if (el) {\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, el, smoNote);\n // TODO: fix this, only works on the first line.\n smoNote.getModifiers('SmoLyric').forEach((lyrict) => {\n const lyric = lyrict;\n if (lyric.getText().length || lyric.isHyphenated()) {\n const lyricElement = context.svg.getElementById('vf-' + lyric.attrs.id);\n if (lyricElement) {\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, lyricElement, lyric);\n }\n }\n });\n }\n smoNote.graceNotes.forEach((g) => {\n if (g.element) {\n }\n var gel = context.svg.getElementById('vf-' + g.renderId);\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, gel, g);\n });\n smoNote.textModifiers.forEach((modifier) => {\n if (modifier.logicalBox && modifier.element) {\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, modifier.element, modifier);\n }\n });\n }\n });\n });\n }\n /**\n * returns true of the selections are adjacent\n * @param s1 a selections\n * @param s2 another election\n * @returns\n */\n isAdjacentSelection(s1, s2) {\n if (!this.renderer.score) {\n return false;\n }\n const nextSel = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.advanceTicks(this.renderer.score, s1, 1);\n if (!nextSel) {\n return false;\n }\n return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.eq(nextSel.selector, s2.selector);\n }\n areSelectionsAdjacent() {\n let selectionIx = 0;\n for (selectionIx = 0; this.selections.length > 1 && selectionIx < this.selections.length - 1; ++selectionIx) {\n if (!this.isAdjacentSelection(this.selections[selectionIx], this.selections[selectionIx + 1])) {\n return false;\n }\n }\n return true;\n }\n /**\n * This is the logic that stores the screen location of music after it's rendered\n */\n mapMeasure(staff, measure, printing) {\n let voiceIx = 0;\n let selectedTicks = 0;\n // We try to restore block selections. If all the selections in this block are not adjacent, only restore individual selections\n // if possible\n let adjacentSels = this.areSelectionsAdjacent();\n const lastResortSelection = [];\n let selectionChanged = false;\n let vix = 0;\n let replacedSelectors = 0;\n if (!measure.svg.logicalBox) {\n return;\n }\n this._setModifierBoxes(measure);\n const timestamp = new Date().valueOf();\n // Keep track of any current selections in this measure, we will try to restore them.\n const sels = this._copySelectionsByMeasure(staff.staffId, measure.measureNumber.measureIndex);\n this.clearMeasureMap(measure);\n if (sels.selectors.length) {\n vix = sels.selectors[0].voice;\n }\n sels.selectors.forEach((sel) => {\n sel.voice = vix;\n });\n measure.voices.forEach((voice) => {\n let tick = 0;\n voice.notes.forEach((note) => {\n const selector = {\n staff: staff.staffId,\n measure: measure.measureNumber.measureIndex,\n voice: voiceIx,\n tick,\n pitches: []\n };\n if (measure.repeatSymbol) {\n // Some measures have a symbol that replaces the notes. This allows us to select\n // the measure\n const x = measure.svg.logicalBox.x + (measure.svg.logicalBox.width / voice.notes.length) * tick;\n const width = measure.svg.logicalBox.width / voice.notes.length;\n note.logicalBox = { x, y: measure.svg.logicalBox.y, width, height: measure.svg.logicalBox.height };\n }\n // create a selection for the newly rendered note\n const selection = new _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection({\n selector,\n _staff: staff,\n _measure: measure,\n _note: note,\n _pitches: [],\n box: _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(_svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(note.logicalBox)),\n type: 'rendered'\n });\n // and add it to the map\n this._updateMeasureNoteMap(selection, printing);\n // If this note is the same location as something that was selected, reselect it\n if (replacedSelectors < sels.selectors.length && selection.selector.tick === sels.selectors[replacedSelectors].tick &&\n selection.selector.voice === vix) {\n this.selections.push(selection);\n // Reselect any pitches.\n if (sels.selectors[replacedSelectors].pitches.length > 0) {\n sels.selectors[replacedSelectors].pitches.forEach((pitchIx) => {\n if (selection.note && selection.note.pitches.length > pitchIx) {\n selection.selector.pitches.push(pitchIx);\n }\n });\n }\n const note = selection.note;\n selectedTicks += note.tickCount;\n replacedSelectors += 1;\n selectionChanged = true;\n }\n else if (adjacentSels && selectedTicks > 0 && selectedTicks < sels.ticks && selection.selector.voice === vix) {\n // try to select the same length of music as was previously selected. So a 1/4 to 2 1/8, both\n // are selected\n replacedSelectors += 1;\n this.selections.push(selection);\n selectedTicks += note.tickCount;\n }\n else if (this.selections.length === 0 && sels.selectors.length === 0 && lastResortSelection.length === 0) {\n lastResortSelection.push(selection);\n }\n tick += 1;\n });\n voiceIx += 1;\n });\n // We deleted all the notes that were selected, select something else\n if (this.selections.length === 0) {\n selectionChanged = true;\n this.selections = lastResortSelection;\n }\n // If there were selections on this measure, highlight them.\n if (selectionChanged) {\n this.deferHighlight();\n }\n _layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.setTimestamp(_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.codeRegions.MAP, new Date().valueOf() - timestamp);\n }\n _getTicksFromSelections() {\n let rv = 0;\n this.selections.forEach((sel) => {\n if (sel.note) {\n rv += sel.note.tickCount;\n }\n });\n return rv;\n }\n _copySelections() {\n const rv = [];\n this.selections.forEach((sel) => {\n rv.push(sel.selector);\n });\n return rv;\n }\n // ### getExtremeSelection\n // Get the rightmost (1) or leftmost (-1) selection\n getExtremeSelection(sign) {\n let i = 0;\n let rv = this.selections[0];\n for (i = 1; i < this.selections.length; ++i) {\n const sa = this.selections[i].selector;\n if (sa.measure * sign > rv.selector.measure * sign) {\n rv = this.selections[i];\n }\n else if (sa.measure === rv.selector.measure && sa.tick * sign > rv.selector.tick * sign) {\n rv = this.selections[i];\n }\n }\n return rv;\n }\n _selectClosest(selector) {\n var artifact = this._getClosestTick(selector);\n if (!artifact) {\n return;\n }\n if (this.selections.find((sel) => JSON.stringify(sel.selector)\n === JSON.stringify(artifact.selector))) {\n return;\n }\n const note = artifact.note;\n if (selector.pitches && selector.pitches.length && selector.pitches.length <= note.pitches.length) {\n // If the old selection had only a single pitch, try to recreate that.\n artifact.selector.pitches = JSON.parse(JSON.stringify(selector.pitches));\n }\n this.selections.push(artifact);\n }\n // ### updateMap\n // This should be called after rendering the score. It updates the score to\n // graphics map and selects the first object.\n updateMap() {\n var _a;\n const ts = new Date().valueOf();\n this.mapping = true;\n let tickSelected = 0;\n const selCopy = this._copySelections();\n const ticksSelectedCopy = this._getTicksFromSelections();\n const firstSelection = this.getExtremeSelection(-1);\n this._updateModifiers();\n // Try to restore selection. If there were none, just select the fist\n // thing in the score\n const firstKey = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.getNoteKey(_smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.default);\n if (!selCopy.length && this.renderer.score) {\n // If there is nothing rendered, don't update tracker\n if (typeof (this.measureNoteMap[firstKey]) !== 'undefined' && !firstSelection)\n this.selections = [this.measureNoteMap[firstKey]];\n }\n else if (this.areSelectionsAdjacent() && this.selections.length > 1) {\n // If there are adjacent selections, restore selections to the ticks that are in the score now\n if (!firstSelection) {\n _layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.setTimestamp(_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\n return;\n }\n this.selections = [];\n this._selectClosest(firstSelection.selector);\n const first = this.selections[0];\n tickSelected = (_a = first.note.tickCount) !== null && _a !== void 0 ? _a : 0;\n while (tickSelected < ticksSelectedCopy && first) {\n let delta = this._growSelectionRight(true);\n if (!delta) {\n break;\n }\n tickSelected += delta;\n }\n }\n this.deferHighlight();\n this._createLocalModifiersList();\n this.mapping = false;\n _layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.setTimestamp(_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\n }\n createMousePositionBox(logicalBox) {\n const pageMap = this.renderer.pageMap;\n const page = pageMap.getRendererFromPoint(logicalBox);\n if (page) {\n const cof = (pageMap.zoomScale * pageMap.renderScale);\n const debugBox = _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(logicalBox);\n debugBox.y -= (page.box.y + 5 / cof);\n debugBox.x -= (page.box.x + 5 / cof);\n debugBox.width = 10 / cof;\n debugBox.height = 10 / cof;\n if (!this.mouseHintBox) {\n this.mouseHintBox = {\n stroke: _svgPageMap__WEBPACK_IMPORTED_MODULE_4__.SvgPageMap.strokes['debug-mouse-box'],\n classes: 'hide-print',\n box: debugBox,\n scroll: { x: 0, y: 0 },\n context: page,\n timeOff: 1000\n };\n }\n this.mouseHintBox.context = page;\n this.mouseHintBox.box = debugBox;\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.outlineRect(this.mouseHintBox);\n }\n }\n eraseMousePositionBox() {\n if (this.mouseHintBox && this.mouseHintBox.element) {\n this.mouseHintBox.element.remove();\n this.mouseHintBox.element = undefined;\n }\n }\n /**\n * Find any musical elements at the supplied screen coordinates and set them as the selection\n * @param bb\n * @returns\n */\n intersectingArtifact(bb) {\n const scrollState = this.scroller.scrollState;\n bb = _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.boxPoints(bb.x + scrollState.x, bb.y + scrollState.y, bb.width ? bb.width : 1, bb.height ? bb.height : 1);\n const logicalBox = this.renderer.pageMap.clientToSvg(bb);\n const { selections, page } = this.renderer.pageMap.findArtifact(logicalBox);\n if (page) {\n const artifacts = selections;\n // const artifacts = SvgHelpers.findIntersectingArtifactFromMap(bb, this.measureNoteMap, SvgHelpers.smoBox(this.scroller.scrollState.scroll));\n // TODO: handle overlapping suggestions\n const modifiers = this.renderer.pageMap.findModifierTabs(logicalBox);\n if (modifiers.length) {\n this._setModifierAsSuggestion(modifiers[0]);\n this.eraseMousePositionBox();\n }\n else if (artifacts.length) {\n const artifact = artifacts[0];\n this.eraseMousePositionBox();\n this._setArtifactAsSuggestion(artifact);\n }\n else {\n // no intersection, show mouse hint\n this.createMousePositionBox(logicalBox);\n }\n }\n }\n _getRectangleChain(selection) {\n const rv = [];\n if (!selection.note) {\n return rv;\n }\n rv.push(selection.measure.svg.pageIndex);\n rv.push(selection.measure.svg.lineIndex);\n rv.push(selection.measure.measureNumber.measureIndex);\n return rv;\n }\n _updateMeasureNoteMap(artifact, printing) {\n const note = artifact.note;\n const noteKey = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.getNoteKey(artifact.selector);\n const activeVoice = artifact.measure.getActiveVoice();\n // not has not been drawn yet.\n if ((!artifact.box) || (!artifact.measure.svg.logicalBox)) {\n return;\n }\n this.measureNoteMap[noteKey] = artifact;\n this.renderer.pageMap.addArtifact(artifact);\n artifact.scrollBox = { x: artifact.box.x,\n y: artifact.measure.svg.logicalBox.y };\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXMiOlsid2VicGFjazovL1Ntby8uL3NyYy9yZW5kZXIvc3VpL21hcHBlci50cz9iN2JjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFtTbW9vc2ljXShodHRwczovL2dpdGh1Yi5jb20vQWFyb25EYXZpZE5ld21hbi9TbW9vc2ljKVxyXG4vLyBDb3B5cmlnaHQgKGMpIEFhcm9uIERhdmlkIE5ld21hbiAyMDIxLlxyXG5pbXBvcnQgeyBTbW9TZWxlY3RvciwgU21vU2VsZWN0aW9uLCBNb2RpZmllclRhYiB9IGZyb20gJy4uLy4uL3Ntby94Zm9ybS9zZWxlY3Rpb25zJztcclxuaW1wb3J0IHsgT3V0bGluZUluZm8sIFN2Z0hlbHBlcnMgfSBmcm9tICcuL3N2Z0hlbHBlcnMnO1xyXG5pbXBvcnQgeyBsYXlvdXREZWJ1ZyB9IGZyb20gJy4vbGF5b3V0RGVidWcnO1xyXG5pbXBvcnQgeyBTdWlTY3JvbGxlciB9IGZyb20gJy4vc2Nyb2xsZXInO1xyXG5pbXBvcnQgeyBTbW9TeXN0ZW1TdGFmZiB9IGZyb20gJy4uLy4uL3Ntby9kYXRhL3N5c3RlbVN0YWZmJztcclxuaW1wb3J0IHsgU21vTWVhc3VyZSwgU21vVm9pY2UgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9tZWFzdXJlJztcclxuaW1wb3J0IHsgUGFzdGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zbW8veGZvcm0vY29weXBhc3RlJztcclxuaW1wb3J0IHsgU21vTm90ZU1vZGlmaWVyQmFzZSwgU21vTHlyaWMgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9ub3RlTW9kaWZpZXJzJztcclxuaW1wb3J0IHsgU3ZnQm94IH0gZnJvbSAnLi4vLi4vc21vL2RhdGEvY29tbW9uJztcclxuaW1wb3J0IHsgU21vTm90ZSB9IGZyb20gJy4uLy4uL3Ntby9kYXRhL25vdGUnO1xyXG5pbXBvcnQgeyBTbW9TY29yZSwgU21vTW9kaWZpZXIgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9zY29yZSc7XHJcbmltcG9ydCB7IFN2Z1BhZ2VNYXAgfSBmcm9tICcuL3N2Z1BhZ2VNYXAnO1xyXG5cclxuLyoqXHJcbiAqIERJIGluZm9ybWF0aW9uIGFib3V0IHJlbmRlcmVyLCBzbyB3ZSBjYW4gbm90aWZ5IHJlbmRlcmVyIGFuZCBpdCBjYW4gY29udGFpblxyXG4gKiBhIHRyYWNrZXIgb2JqZWN0XHJcbiAqIEBwYXJhbSBwYWdlTWFwIHtAbGluayBTdmdQYWdlTWFwfTogU3ZnUGFnZU1hcCAtIGNvbnRhaW5lciBvZiBTVkcgZWxlbWVudHMgYW5kIHZleCByZW5kZXJlcnNcclxuICogQHBhcmFtIHNjb3JlIHtAbGluayBTbW9TY29yZX1cclxuICogQHBhcmFtIGRpcnR5IGxldHMgdGhlIGNhbGxlciBrbm93IHRoZSBkaXNwbGF5IG5lZWRzIHVwZGF0ZVxyXG4gKiBAcGFyYW0gcGFzc1N0YXRlIHN0YXRlIG1hY2hpbmUgaW4gcmVuZGVyaW5nIHBhcnQvYWxsIG9mIHRoZSBzY29yZVxyXG4gKiBAcGFyYW0gcmVuZGVyUHJvbWlzZSBhd2FpdHMgb24gcmVuZGVyIGFsbFxyXG4gKiBAcGFyYW0gYWRkVG9SZXBsYWNlUXVldWUgYWRkcyBhIG1lYXN1cmUgdG8gdGhlIHF1aWNrIHVwZGF0ZSBxdWV1ZVxyXG4gKiBAcGFyYW0gcmVuZGVyRWxlbWVudCBhIGxpdHRsZSByZWR1bmRhbnQgd2l0aCBzdmdcclxuICogQGNhdGVnb3J5IFN1aVJlbmRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTdWlSZW5kZXJlckJhc2Uge1xyXG4gIHBhZ2VNYXA6IFN2Z1BhZ2VNYXAsXHJcbiAgc2NvcmU6IFNtb1Njb3JlIHwgbnVsbCxcclxuICBkaXJ0eTogYm9vbGVhbixcclxuICBwYXNzU3RhdGU6IG51bWJlcixcclxuICByZW5kZXJQcm9taXNlKCk6IFByb21pc2U8YW55PixcclxuICBhZGRUb1JlcGxhY2VRdWV1ZShtbTogU21vU2VsZWN0aW9uW10pOiB2b2lkLFxyXG4gIHJlbmRlckVsZW1lbnQ6IEVsZW1lbnRcclxufVxyXG4vKipcclxuICogdXNlZCB0byBwZXJmb3JtIGhpZ2hsaWdodHMgaW4gdGhlIGJhY2tncm91bmRkXHJcbiAqIEBjYXRlZ29yeSBTdWlSZW5kZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGlnaGxpZ2h0UXVldWUge1xyXG4gIHNlbGVjdGlvbkNvdW50OiBudW1iZXIsIGRlZmVycmVkOiBib29sZWFuXHJcbn1cclxuLyoqXHJcbiAqIE1hcCB0aGUgbm90ZXMgaW4gdGhlIHN2ZyBzbyB0aGV5IGNhbiByZXNwb25kIHRvIGV2ZW50cyBhbmQgaW50ZXJhY3RcclxuICogd2l0aCB0aGUgbW91c2Uva2V5Ym9hcmRcclxuICogQGNhdGVnb3J5IFN1aVJlbmRlclxyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1aU1hcHBlciB7XHJcbiAgcmVuZGVyZXI6IFN1aVJlbmRlcmVyQmFzZTtcclxuICBzY3JvbGxlcjogU3VpU2Nyb2xsZXI7XHJcbiAgLy8gbWVhc3VyZSB0byBzZWxlY3RvciBtYXBcclxuICBtZWFzdXJlTm90ZU1hcDogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgU21vU2VsZWN0aW9uPiA9IHt9O1xyXG4gIC8vIG5vdGVzIGN1cnJlbnRseSBzZWxlY3RlZC4gIFNvbWV0aGluZyBpcyBhbHdheXMgc2VsZWN0ZWRcclxuICAvLyBtb2RpZmllcnMgKHRleHQgZXRjLikgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWRcclxuICBtb2RpZmllclNlbGVjdGlvbnM6IE1vZGlmaWVyVGFiW10gPSBbXTtcclxuICBzZWxlY3Rpb25zOiBTbW9TZWxlY3Rpb25bXSA9IFtdO1xyXG4gIC8vIFRoZSBsaXN0IG9mIG1vZGlmaWVycyBuZWFyIHRoZSBjdXJyZW50IHNlbGVjdGlvblxyXG4gIGxvY2FsTW9kaWZpZXJzOiBNb2RpZmllclRhYltdID0gW107XHJcbiAgbW9kaWZpZXJJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgbW9kaWZpZXJTdWdnZXN0aW9uOiBNb2RpZmllclRhYiB8IG51bGwgPSBudWxsO1xyXG4gIHBpdGNoSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIC8vIEJ5IGRlZmF1bHQsIGRlZmVyIGhpZ2hsaWdodHMgZm9yIHBlcmZvcm1hbmNlLlxyXG4gIGRlZmVySGlnaGxpZ2h0TW9kZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc3VnZ2VzdGlvbjogU21vU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgaGlnaGxpZ2h0UXVldWU6IEhpZ2hsaWdodFF1ZXVlO1xyXG4gIG1vdXNlSGludEJveDogT3V0bGluZUluZm8gfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3Rpb25SZWN0czogUmVjb3JkPG51bWJlciwgT3V0bGluZUluZm9bXT4gPSB7fTtcclxuICBvdXRsaW5lczogUmVjb3JkPHN0cmluZywgT3V0bGluZUluZm8+ID0ge307XHJcbiAgbWFwcGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBTdWlSZW5kZXJlckJhc2UsIHNjcm9sbGVyOiBTdWlTY3JvbGxlcikge1xyXG4gICAgLy8gcmVuZGVyZXIgcmVuZGVycyB0aGUgbXVzaWMgd2hlbiBpdCBjaGFuZ2VzXHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICB0aGlzLnNjcm9sbGVyID0gc2Nyb2xsZXI7XHJcbiAgICB0aGlzLm1vZGlmaWVySW5kZXggPSAtMTtcclxuICAgIHRoaXMubG9jYWxNb2RpZmllcnMgPSBbXTtcclxuICAgIC8vIGluZGV4IGlmIGEgc2luZ2xlIHBpdGNoIG9mIGEgY2hvcmQgaXMgc2VsZWN0ZWRcclxuICAgIHRoaXMucGl0Y2hJbmRleCA9IC0xO1xyXG4gICAgLy8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCB3aGljaCBpcyBhbHNvIHRoZSBjb3B5L3Bhc3RlIGRlc3RpbmF0aW9uXHJcbiAgICB0aGlzLmhpZ2hsaWdodFF1ZXVlID0geyBzZWxlY3Rpb25Db3VudDogMCwgZGVmZXJyZWQ6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBoaWdobGlnaHRTZWxlY3Rpb24oKTogdm9pZDtcclxuICBhYnN0cmFjdCBfZ3Jvd1NlbGVjdGlvblJpZ2h0KGhvbGQ/OiBib29sZWFuKTogbnVtYmVyOyAgXHJcbiAgYWJzdHJhY3QgX3NldE1vZGlmaWVyQXNTdWdnZXN0aW9uKHNlbDogTW9kaWZpZXJUYWIpOiB2b2lkO1xyXG4gIGFic3RyYWN0IF9zZXRBcnRpZmFjdEFzU3VnZ2VzdGlvbihzZWw6IFNtb1NlbGVjdGlvbik6IHZvaWQ7XHJcbiAgYWJzdHJhY3QgZ2V0SWRsZVRpbWUoKTogbnVtYmVyO1xyXG4gIHVwZGF0ZUhpZ2hsaWdodCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHRRdWV1ZS5kZWZlcnJlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodFF1ZXVlLnNlbGVjdGlvbkNvdW50ID0gMDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0UXVldWUuc2VsZWN0aW9uQ291bnQgPT09IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHRTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy5oaWdobGlnaHRRdWV1ZS5kZWZlcnJlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHRRdWV1ZS5zZWxlY3Rpb25Db3VudCA9IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHNlbGYudXBkYXRlSGlnaGxpZ2h0KCk7XHJcbiAgICAgIH0sIDUwKTtcclxuICAgIH1cclxuICB9XHJcbiAgZGVmZXJIaWdobGlnaHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGVmZXJIaWdobGlnaHRNb2RlKSB7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGlmICghdGhpcy5oaWdobGlnaHRRdWV1ZS5kZWZlcnJlZCkge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodFF1ZXVlLmRlZmVycmVkID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc2VsZi51cGRhdGVIaWdobGlnaHQoKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgfVxyXG4gIH1cclxuICBfY3JlYXRlTG9jYWxNb2RpZmllcnNMaXN0KCkge1xyXG4gICAgdGhpcy5sb2NhbE1vZGlmaWVycyA9IFtdO1xyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIHRoaXMuc2VsZWN0aW9ucy5mb3JFYWNoKChzZWwpID0+IHtcclxuICAgICAgc2VsLm5vdGU/LmdldEdyYWNlTm90ZXMoKS5mb3JFYWNoKChnZykgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxNb2RpZmllcnMucHVzaCh7IGluZGV4LCBzZWxlY3Rpb246IHNlbCwgbW9kaWZpZXI6IGdnLCBib3g6IGdnLmxvZ2ljYWxCb3ggPz8gU3ZnQm94LmRlZmF1bHQgfSk7XHJcbiAgICAgICAgaW5kZXggKz0gMTtcclxuICAgICAgfSk7XHJcbiAgICAgIHNlbC5ub3RlPy5nZXRNb2RpZmllcnMoJ1Ntb0R5bmFtaWNUZXh0JykuZm9yRWFjaCgoZHluKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbE1vZGlmaWVycy5wdXNoKHsgaW5kZXgsIHNlbGVjdGlvbjogc2VsLCBtb2RpZmllcjogZHluLCBib3g6IGR5bi5sb2dpY2FsQm94ID8/IFN2Z0JveC5kZWZhdWx0IH0pO1xyXG4gICAgICAgIGluZGV4ICs9IDE7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWwubWVhc3VyZS5nZXRNb2RpZmllcnNCeVR5cGUoJ1Ntb1ZvbHRhJykuZm9yRWFjaCgodm9sdGEpID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsTW9kaWZpZXJzLnB1c2goeyBpbmRleCwgc2VsZWN0aW9uOiBzZWwsIG1vZGlmaWVyOiB2b2x0YSwgYm94OiB2b2x0YS5sb2dpY2FsQm94ID8/IFN2Z0JveC5kZWZhdWx0IH0pO1xyXG4gICAgICAgIGluZGV4ICs9IDE7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWwubWVhc3VyZS5nZXRNb2RpZmllcnNCeVR5cGUoJ1Ntb1RlbXBvVGV4dCcpLmZvckVhY2goKHRlbXBvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbE1vZGlmaWVycy5wdXNoKHsgaW5kZXgsIHNlbGVjdGlvbjogc2VsLCBtb2RpZmllcjogdGVtcG8sIGJveDogdGVtcG8ubG9naWNhbEJveCA/PyBTdmdCb3guZGVmYXVsdCB9KTtcclxuICAgICAgICBpbmRleCArPSAxO1xyXG4gICAgICB9KTtcclxuICAgICAgc2VsLnN0YWZmLnJlbmRlcmFibGVNb2RpZmllcnMuZm9yRWFjaCgobW9kKSA9PiB7XHJcbiAgICAgICAgaWYgKFNtb1NlbGVjdG9yLmd0ZXEoc2VsLnNlbGVjdG9yLCBtb2Quc3RhcnRTZWxlY3RvcikgJiZcclxuICAgICAgICAgIFNtb1NlbGVjdG9yLmx0ZXEoc2VsLnNlbGVjdG9yLCBtb2QuZW5kU2VsZWN0b3IpICYmIG1vZC5sb2dpY2FsQm94KSAge1xyXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5sb2NhbE1vZGlmaWVycy5maW5kKChtbSkgPT4gbW0ubW9kaWZpZXIuY3RvciA9PT0gbW9kLmN0b3IpO1xyXG4gICAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbE1vZGlmaWVycy5wdXNoKHsgaW5kZXgsIHNlbGVjdGlvbjogc2VsLCBtb2RpZmllcjogbW9kLCBib3g6IG1vZC5sb2dpY2FsQm94IH0pO1xyXG4gICAgICAgICAgICBpbmRleCArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIG1vZGlmaWVyIGlzIHNlbGVjdGVkIGdyYXBoaWNhbGx5LCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBsaXN0XHJcbiAgICogYW5kIGNyZWF0ZSBhIGxvY2FsIG1vZGlmaWVyIGxpc3RcclxuICAgKiBAcGFyYW0gbW9kaWZpZXJUYWJzIFxyXG4gICAqL1xyXG4gIGNyZWF0ZUxvY2FsTW9kaWZpZXJzRnJvbU1vZGlmaWVyVGFicyhtb2RpZmllclRhYnM6IE1vZGlmaWVyVGFiW10pIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbnM6IFNtb1NlbGVjdGlvbltdID0gW107XHJcbiAgICBjb25zdCBtb2RNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBtb2RpZmllclRhYnMuZm9yRWFjaCgobXQpID0+IHtcclxuICAgICAgaWYgKG10LnNlbGVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IFNtb1NlbGVjdG9yLmdldE5vdGVLZXkobXQuc2VsZWN0aW9uLnNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoIW1vZE1hcFtrZXldKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb25zLnB1c2gobXQuc2VsZWN0aW9uKTtcclxuICAgICAgICAgIG1vZE1hcFtrZXldID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHNlbGVjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IHNlbGVjdGlvbnM7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTW9kaWZpZXJzTGlzdCgpO1xyXG4gICAgICB0aGlzLmRlZmVySGlnaGxpZ2h0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbW92ZU1vZGlmaWVyU2VsZWN0aW9uQm94KCkge1xyXG4gICAgaWYgKHRoaXMub3V0bGluZXNbJ3N0YWZmTW9kaWZpZXInXSAmJiB0aGlzLm91dGxpbmVzWydzdGFmZk1vZGlmaWVyJ10uZWxlbWVudCkge1xyXG4gICAgICB0aGlzLm91dGxpbmVzWydzdGFmZk1vZGlmaWVyJ10uZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5vdXRsaW5lc1snc3RhZmZNb2RpZmllciddLmVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIHVzZWQgYnkgcmVtb3ZlIGRpYWxvZ3MgdG8gY2xlYXIgcmVtb3ZlZCB0aGluZ1xyXG4gIGNsZWFyTW9kaWZpZXJTZWxlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5tb2RpZmllclNlbGVjdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuX2NyZWF0ZUxvY2FsTW9kaWZpZXJzTGlzdCgpO1xyXG4gICAgdGhpcy5tb2RpZmllckluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnJlbW92ZU1vZGlmaWVyU2VsZWN0aW9uQm94KCk7XHJcbiAgfVxyXG4gIC8vICMjIyBsb2FkU2NvcmVcclxuICAvLyBXZSBhcmUgbG9hZGluZyBhIG5ldyBzY29yZS4gIGNsZWFyIHRoZSBtYXBzIHNvIHdlIGNhbiByZWJ1aWxkIHRoZW0gYWZ0ZXJcclxuICAvLyByZW5kZXJpbmdcclxuICBsb2FkU2NvcmUoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVOb3RlTWFwID0ge307XHJcbiAgICB0aGlzLmNsZWFyTW9kaWZpZXJTZWxlY3Rpb25zKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0UXVldWUgPSB7IHNlbGVjdGlvbkNvdW50OiAwLCBkZWZlcnJlZDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIC8vICMjIyBfY2xlYXJNZWFzdXJlQXJ0aWZhY3RzXHJcbiAgLy8gY2xlYXIgdGhlIG1lYXN1cmUgZnJvbSB0aGUgbWVhc3VyZSBhbmQgbm90ZSBtYXBzIHNvIHdlIGNhbiByZWJ1aWxkIGl0LlxyXG4gIGNsZWFyTWVhc3VyZU1hcChtZWFzdXJlOiBTbW9NZWFzdXJlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RvciA9IHsgc3RhZmY6IG1lYXN1cmUubWVhc3VyZU51bWJlci5zdGFmZklkLCBtZWFzdXJlOiBtZWFzdXJlLm1lYXN1cmVOdW1iZXIubWVhc3VyZUluZGV4LCB2b2ljZTogMCwgdGljazogMCwgcGl0Y2hlczogW10gfTtcclxuXHJcbiAgICAvLyBVbnNlbGVjdCBzZWxlY3Rpb25zIGluIHRoaXMgbWVhc3VyZSBzbyB3ZSBjYW4gcmVzZWxlY3QgdGhlbSB3aGVuIHJlLXRyYWNrZWRcclxuICAgIGNvbnN0IGFyOiBTbW9TZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdG9yLnN0YWZmICE9PSBzZWxlY3Rvci5zdGFmZiB8fCBzZWxlY3Rpb24uc2VsZWN0b3IubWVhc3VyZSAhPT0gc2VsZWN0b3IubWVhc3VyZSkge1xyXG4gICAgICAgIGFyLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMgPSBhcjtcclxuICB9XHJcblxyXG4gIF9jb3B5U2VsZWN0aW9uc0J5TWVhc3VyZShzdGFmZkluZGV4OiBudW1iZXIsIG1lYXN1cmVJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBydiA9IHRoaXMuc2VsZWN0aW9ucy5maWx0ZXIoKHNlbCkgPT4gc2VsLnNlbGVjdG9yLnN0YWZmID09PSBzdGFmZkluZGV4ICYmIHNlbC5zZWxlY3Rvci5tZWFzdXJlID09PSBtZWFzdXJlSW5kZXgpO1xyXG4gICAgY29uc3QgdGlja3MgPSBydi5sZW5ndGggPCAxID8gMCA6IHJ2Lm1hcCgoc2VsKSA9PiAoc2VsLm5vdGUgYXMgU21vTm90ZSkudGlja0NvdW50KS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKTtcclxuICAgIGNvbnN0IHNlbGVjdG9yczogU21vU2VsZWN0b3JbXSA9IFtdO1xyXG4gICAgcnYuZm9yRWFjaCgoc2VsKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5zZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbC5zZWxlY3RvcikpO1xyXG4gICAgICBpZiAoIW5zZWwucGl0Y2hlcykge1xyXG4gICAgICAgIG5zZWwucGl0Y2hlcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGVjdG9ycy5wdXNoKG5zZWwpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyB0aWNrcywgc2VsZWN0b3JzIH07XHJcbiAgfVxyXG4gIGRlbGV0ZU1lYXN1cmUoc2VsZWN0aW9uOiBTbW9TZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlbENvcHkgPSB0aGlzLl9jb3B5U2VsZWN0aW9uc0J5TWVhc3VyZShzZWxlY3Rpb24uc2VsZWN0b3Iuc3RhZmYsIHNlbGVjdGlvbi5zZWxlY3Rvci5tZWFzdXJlKVxyXG4gICAgICAuc2VsZWN0b3JzO1xyXG4gICAgdGhpcy5jbGVhck1lYXN1cmVNYXAoc2VsZWN0aW9uLm1lYXN1cmUpO1xyXG4gICAgaWYgKHNlbENvcHkubGVuZ3RoKSB7XHJcbiAgICAgIHNlbENvcHkuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICBjb25zdCBuc2VsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxlY3RvcikpO1xyXG4gICAgICAgIGlmIChzZWxlY3Rvci5tZWFzdXJlID09PSAwKSB7XHJcbiAgICAgICAgICBuc2VsLm1lYXN1cmUgKz0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbnNlbC5tZWFzdXJlIC09IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHRoaXMuX2dldENsb3Nlc3RUaWNrKG5zZWwpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIF91cGRhdGVOb3RlTW9kaWZpZXIoc2VsZWN0aW9uOiBTbW9TZWxlY3Rpb24sIG1vZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIG1vZGlmaWVyOiBTbW9Ob3RlTW9kaWZpZXJCYXNlLCBpeDogbnVtYmVyKSB7XHJcbiAgICBpZiAoIW1vZE1hcFttb2RpZmllci5hdHRycy5pZF0gJiYgbW9kaWZpZXIubG9naWNhbEJveCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuYWRkTW9kaWZpZXJUYWIoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbW9kaWZpZXIsXHJcbiAgICAgICAgICBzZWxlY3Rpb24sXHJcbiAgICAgICAgICBib3g6IG1vZGlmaWVyLmxvZ2ljYWxCb3gsXHJcbiAgICAgICAgICBpbmRleDogaXhcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGl4ICs9IDE7XHJcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuZ2V0UmVuZGVyZXJGcm9tTW9kaWZpZXIobW9kaWZpZXIpO1xyXG4gICAgICBtb2RNYXBbbW9kaWZpZXIuYXR0cnMuaWRdID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpeDtcclxuICB9XHJcblxyXG4gIF91cGRhdGVNb2RpZmllcnMoKSB7XHJcbiAgICBsZXQgaXggPSAwO1xyXG4gICAgY29uc3QgbW9kTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgaWYgKCF0aGlzLnJlbmRlcmVyLnNjb3JlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyZXIuc2NvcmUudGV4dEdyb3Vwcy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xyXG4gICAgICBpZiAoIW1vZE1hcFttb2RpZmllci5hdHRycy5pZF0gJiYgbW9kaWZpZXIubG9naWNhbEJveCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucGFnZU1hcC5hZGRNb2RpZmllclRhYih7XHJcbiAgICAgICAgICBtb2RpZmllcixcclxuICAgICAgICAgIHNlbGVjdGlvbjogbnVsbCxcclxuICAgICAgICAgIGJveDogbW9kaWZpZXIubG9naWNhbEJveCxcclxuICAgICAgICAgIGluZGV4OiBpeFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGl4ICs9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubWVhc3VyZU5vdGVNYXApOyAgICBcclxuICAgIGtleXMuZm9yRWFjaCgoc2VsS2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMubWVhc3VyZU5vdGVNYXBbc2VsS2V5XTtcclxuICAgICAgc2VsZWN0aW9uLnN0YWZmLnJlbmRlcmFibGVNb2RpZmllcnMuZm9yRWFjaCgobW9kaWZpZXIpID0+IHtcclxuICAgICAgICBpZiAoU21vU2VsZWN0b3IuY29udGFpbnMoc2VsZWN0aW9uLnNlbGVjdG9yLCBtb2RpZmllci5zdGFydFNlbGVjdG9yLCBtb2RpZmllci5lbmRTZWxlY3RvcikpIHtcclxuICAgICAgICAgIGlmICghbW9kTWFwW21vZGlmaWVyLmF0dHJzLmlkXSkge1xyXG4gICAgICAgICAgICBpZiAobW9kaWZpZXIubG9naWNhbEJveCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucGFnZU1hcC5hZGRNb2RpZmllclRhYih7XHJcbiAgICAgICAgICAgICAgICBtb2RpZmllcixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbixcclxuICAgICAgICAgICAgICAgIGJveDogbW9kaWZpZXIubG9naWNhbEJveCxcclxuICAgICAgICAgICAgICAgIGluZGV4OiBpeFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGl4ICs9IDE7XHJcbiAgICAgICAgICAgICAgbW9kTWFwW21vZGlmaWVyLmF0dHJzLmlkXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWxlY3Rpb24ubWVhc3VyZS5tb2RpZmllcnMuZm9yRWFjaCgobW9kaWZpZXIpID0+IHtcclxuICAgICAgICBpZiAobW9kaWZpZXIuYXR0cnMuaWRcclxuICAgICAgICAgICYmICFtb2RNYXBbbW9kaWZpZXIuYXR0cnMuaWRdXHJcbiAgICAgICAgICAmJiBtb2RpZmllci5sb2dpY2FsQm94KSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuYWRkTW9kaWZpZXJUYWIoe1xyXG4gICAgICAgICAgICBtb2RpZmllcixcclxuICAgICAgICAgICAgc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICBib3g6IFN2Z0hlbHBlcnMuc21vQm94KG1vZGlmaWVyLmxvZ2ljYWxCb3gpLFxyXG4gICAgICAgICAgICBpbmRleDogaXhcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaXggKz0gMTtcclxuICAgICAgICAgIG1vZE1hcFttb2RpZmllci5hdHRycy5pZF0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNlbGVjdGlvbi5ub3RlPy50ZXh0TW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XHJcbiAgICAgICAgaWYgKG1vZGlmaWVyLmxvZ2ljYWxCb3gpIHtcclxuICAgICAgICAgIGl4ID0gdGhpcy5fdXBkYXRlTm90ZU1vZGlmaWVyKHNlbGVjdGlvbiwgbW9kTWFwLCBtb2RpZmllciwgaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzZWxlY3Rpb24ubm90ZT8uZ3JhY2VOb3Rlcy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xyXG4gICAgICAgIGl4ID0gdGhpcy5fdXBkYXRlTm90ZU1vZGlmaWVyKHNlbGVjdGlvbiwgbW9kTWFwLCBtb2RpZmllciwgaXgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyAjIyMgX2dldENsb3Nlc3RUaWNrXHJcbiAgLy8gZ2l2ZW4gYSBtdXNpY2FsIHNlbGVjdG9yLCBmaW5kIHRoZSBub3RlIGFydGlmYWN0IHRoYXQgaXMgY2xvc2VzdCB0byBpdCxcclxuICAvLyBpZiBhbiBleGFjdCBtYXRjaCBpcyBub3QgYXZhaWxhYmxlXHJcbiAgX2dldENsb3Nlc3RUaWNrKHNlbGVjdG9yOiBTbW9TZWxlY3Rvcik6IFNtb1NlbGVjdGlvbiB7XHJcbiAgICBsZXQgdGlja0tleTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XHJcbiAgICBjb25zdCBtZWFzdXJlS2V5ID0gT2JqZWN0LmtleXModGhpcy5tZWFzdXJlTm90ZU1hcCkuZmluZCgoaykgPT5cclxuICAgICAgU21vU2VsZWN0b3Iuc2FtZU1lYXN1cmUodGhpcy5tZWFzdXJlTm90ZU1hcFtrXS5zZWxlY3Rvciwgc2VsZWN0b3IpXHJcbiAgICAgICAgJiYgdGhpcy5tZWFzdXJlTm90ZU1hcFtrXS5zZWxlY3Rvci50aWNrID09PSAwKTtcclxuICAgIHRpY2tLZXkgPSBPYmplY3Qua2V5cyh0aGlzLm1lYXN1cmVOb3RlTWFwKS5maW5kKChrKSA9PlxyXG4gICAgICBTbW9TZWxlY3Rvci5zYW1lTm90ZSh0aGlzLm1lYXN1cmVOb3RlTWFwW2tdLnNlbGVjdG9yLCBzZWxlY3RvcikpO1xyXG4gICAgY29uc3QgZmlyc3RPYmogPSB0aGlzLm1lYXN1cmVOb3RlTWFwW09iamVjdC5rZXlzKHRoaXMubWVhc3VyZU5vdGVNYXApWzBdXTtcclxuXHJcbiAgICBpZiAodGlja0tleSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tZWFzdXJlTm90ZU1hcFt0aWNrS2V5XTtcclxuICAgIH1cclxuICAgIGlmIChtZWFzdXJlS2V5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1lYXN1cmVOb3RlTWFwW21lYXN1cmVLZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpcnN0T2JqO1xyXG4gIH1cclxuXHJcbiAgLy8gIyMjIF9zZXRNb2RpZmllckJveGVzXHJcbiAgLy8gQ3JlYXRlIHRoZSBET00gbW9kaWZpZXJzIGZvciB0aGUgbHlyaWNzIGFuZCBvdGhlciBtb2RpZmllcnNcclxuICBfc2V0TW9kaWZpZXJCb3hlcyhtZWFzdXJlOiBTbW9NZWFzdXJlKSB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5yZW5kZXJlci5wYWdlTWFwLmdldFJlbmRlcmVyKG1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3gpO1xyXG4gICAgbWVhc3VyZS52b2ljZXMuZm9yRWFjaCgodm9pY2U6IFNtb1ZvaWNlKSA9PiB7XHJcbiAgICAgIHZvaWNlLm5vdGVzLmZvckVhY2goKHNtb05vdGU6IFNtb05vdGUpID0+ICB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcclxuICAgICAgICAgIGNvbnN0IGVsID0gY29udGV4dC5zdmcuZ2V0RWxlbWVudEJ5SWQoc21vTm90ZS5yZW5kZXJJZCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBTdmdIZWxwZXJzLnVwZGF0ZUFydGlmYWN0Qm94KGNvbnRleHQsIChlbCBhcyBhbnkpLCBzbW9Ob3RlKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogZml4IHRoaXMsIG9ubHkgd29ya3Mgb24gdGhlIGZpcnN0IGxpbmUuXHJcbiAgICAgICAgICAgIHNtb05vdGUuZ2V0TW9kaWZpZXJzKCdTbW9MeXJpYycpLmZvckVhY2goKGx5cmljdDogU21vTm90ZU1vZGlmaWVyQmFzZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGx5cmljOiBTbW9MeXJpYyA9IGx5cmljdCBhcyBTbW9MeXJpYztcclxuICAgICAgICAgICAgICBpZiAobHlyaWMuZ2V0VGV4dCgpLmxlbmd0aCB8fCBseXJpYy5pc0h5cGhlbmF0ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbHlyaWNFbGVtZW50ID0gY29udGV4dC5zdmcuZ2V0RWxlbWVudEJ5SWQoJ3ZmLScgKyBseXJpYy5hdHRycy5pZCkgYXMgU1ZHU1ZHRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChseXJpY0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgU3ZnSGVscGVycy51cGRhdGVBcnRpZmFjdEJveChjb250ZXh0LCBseXJpY0VsZW1lbnQsIGx5cmljIGFzIGFueSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNtb05vdGUuZ3JhY2VOb3Rlcy5mb3JFYWNoKChnKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ2VsID0gY29udGV4dC5zdmcuZ2V0RWxlbWVudEJ5SWQoJ3ZmLScgKyBnLnJlbmRlcklkKSBhcyBTVkdTVkdFbGVtZW50O1xyXG4gICAgICAgICAgICBTdmdIZWxwZXJzLnVwZGF0ZUFydGlmYWN0Qm94KGNvbnRleHQsIGdlbCwgZyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNtb05vdGUudGV4dE1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAobW9kaWZpZXIubG9naWNhbEJveCAmJiBtb2RpZmllci5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgU3ZnSGVscGVycy51cGRhdGVBcnRpZmFjdEJveChjb250ZXh0LCBtb2RpZmllci5lbGVtZW50LCBtb2RpZmllciBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIHRydWUgb2YgdGhlIHNlbGVjdGlvbnMgYXJlIGFkamFjZW50XHJcbiAgICogQHBhcmFtIHMxIGEgc2VsZWN0aW9uc1xyXG4gICAqIEBwYXJhbSBzMiBhbm90aGVyIGVsZWN0aW9uXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgaXNBZGphY2VudFNlbGVjdGlvbihzMTogU21vU2VsZWN0aW9uLCBzMjogU21vU2VsZWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMucmVuZGVyZXIuc2NvcmUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV4dFNlbCA9IFNtb1NlbGVjdGlvbi5hZHZhbmNlVGlja3ModGhpcy5yZW5kZXJlci5zY29yZSwgczEsIDEpO1xyXG4gICAgaWYgKCFuZXh0U2VsKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBTbW9TZWxlY3Rvci5lcShuZXh0U2VsLnNlbGVjdG9yLCBzMi5zZWxlY3Rvcik7XHJcbiAgfVxyXG4gIGFyZVNlbGVjdGlvbnNBZGphY2VudCgpIHtcclxuICAgIGxldCBzZWxlY3Rpb25JeCA9IDA7XHJcbiAgICBmb3IgKHNlbGVjdGlvbkl4ID0gMDsgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA+IDEgJiYgc2VsZWN0aW9uSXggPCB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoIC0gMTsgKytzZWxlY3Rpb25JeCkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNBZGphY2VudFNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbnNbc2VsZWN0aW9uSXhdLCB0aGlzLnNlbGVjdGlvbnNbc2VsZWN0aW9uSXggKyAxXSkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlOyAgICBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgaXMgdGhlIGxvZ2ljIHRoYXQgc3RvcmVzIHRoZSBzY3JlZW4gbG9jYXRpb24gb2YgbXVzaWMgYWZ0ZXIgaXQncyByZW5kZXJlZFxyXG4gICAqL1xyXG4gIG1hcE1lYXN1cmUoc3RhZmY6IFNtb1N5c3RlbVN0YWZmLCBtZWFzdXJlOiBTbW9NZWFzdXJlLCBwcmludGluZzogYm9vbGVhbikge1xyXG4gICAgbGV0IHZvaWNlSXggPSAwO1xyXG4gICAgbGV0IHNlbGVjdGVkVGlja3MgPSAwO1xyXG5cclxuICAgIC8vIFdlIHRyeSB0byByZXN0b3JlIGJsb2NrIHNlbGVjdGlvbnMuIElmIGFsbCB0aGUgc2VsZWN0aW9ucyBpbiB0aGlzIGJsb2NrIGFyZSBub3QgYWRqYWNlbnQsIG9ubHkgcmVzdG9yZSBpbmRpdmlkdWFsIHNlbGVjdGlvbnNcclxuICAgIC8vIGlmIHBvc3NpYmxlXHJcbiAgICBsZXQgYWRqYWNlbnRTZWxzID0gdGhpcy5hcmVTZWxlY3Rpb25zQWRqYWNlbnQoKTtcclxuICAgIGNvbnN0IGxhc3RSZXNvcnRTZWxlY3Rpb246IFNtb1NlbGVjdGlvbltdID0gW107XHJcbiAgICBsZXQgc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgbGV0IHZpeCA9IDA7XHJcbiAgICBsZXQgcmVwbGFjZWRTZWxlY3RvcnMgPSAwO1xyXG4gICAgaWYgKCFtZWFzdXJlLnN2Zy5sb2dpY2FsQm94KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3NldE1vZGlmaWVyQm94ZXMobWVhc3VyZSk7XHJcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcclxuICAgIC8vIEtlZXAgdHJhY2sgb2YgYW55IGN1cnJlbnQgc2VsZWN0aW9ucyBpbiB0aGlzIG1lYXN1cmUsIHdlIHdpbGwgdHJ5IHRvIHJlc3RvcmUgdGhlbS5cclxuICAgIGNvbnN0IHNlbHMgPSB0aGlzLl9jb3B5U2VsZWN0aW9uc0J5TWVhc3VyZShzdGFmZi5zdGFmZklkLCBtZWFzdXJlLm1lYXN1cmVOdW1iZXIubWVhc3VyZUluZGV4KTtcclxuICAgIHRoaXMuY2xlYXJNZWFzdXJlTWFwKG1lYXN1cmUpO1xyXG4gICAgaWYgKHNlbHMuc2VsZWN0b3JzLmxlbmd0aCkge1xyXG4gICAgICB2aXggPSBzZWxzLnNlbGVjdG9yc1swXS52b2ljZTtcclxuICAgIH1cclxuICAgIHNlbHMuc2VsZWN0b3JzLmZvckVhY2goKHNlbCkgPT4ge1xyXG4gICAgICBzZWwudm9pY2UgPSB2aXg7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZWFzdXJlLnZvaWNlcy5mb3JFYWNoKCh2b2ljZSkgPT4ge1xyXG4gICAgICBsZXQgdGljayA9IDA7XHJcbiAgICAgIHZvaWNlLm5vdGVzLmZvckVhY2goKG5vdGUpID0+IHtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHtcclxuICAgICAgICAgIHN0YWZmOiBzdGFmZi5zdGFmZklkLFxyXG4gICAgICAgICAgbWVhc3VyZTogbWVhc3VyZS5tZWFzdXJlTnVtYmVyLm1lYXN1cmVJbmRleCxcclxuICAgICAgICAgIHZvaWNlOiB2b2ljZUl4LFxyXG4gICAgICAgICAgdGljayxcclxuICAgICAgICAgIHBpdGNoZXM6IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobWVhc3VyZS5yZXBlYXRTeW1ib2wpIHtcclxuICAgICAgICAgIC8vIFNvbWUgbWVhc3VyZXMgaGF2ZSBhIHN5bWJvbCB0aGF0IHJlcGxhY2VzIHRoZSBub3Rlcy4gIFRoaXMgYWxsb3dzIHVzIHRvIHNlbGVjdFxyXG4gICAgICAgICAgLy8gdGhlIG1lYXN1cmVcclxuICAgICAgICAgIGNvbnN0IHggPSBtZWFzdXJlLnN2Zy5sb2dpY2FsQm94LnggKyAobWVhc3VyZS5zdmcubG9naWNhbEJveC53aWR0aCAvIHZvaWNlLm5vdGVzLmxlbmd0aCkgKiB0aWNrO1xyXG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBtZWFzdXJlLnN2Zy5sb2dpY2FsQm94LndpZHRoIC8gdm9pY2Uubm90ZXMubGVuZ3RoO1xyXG4gICAgICAgICAgbm90ZS5sb2dpY2FsQm94ID0geyB4LCB5OiBtZWFzdXJlLnN2Zy5sb2dpY2FsQm94LnksIHdpZHRoLCBoZWlnaHQ6IG1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3guaGVpZ2h0IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNyZWF0ZSBhIHNlbGVjdGlvbiBmb3IgdGhlIG5ld2x5IHJlbmRlcmVkIG5vdGVcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU21vU2VsZWN0aW9uKHtcclxuICAgICAgICAgIHNlbGVjdG9yLFxyXG4gICAgICAgICAgX3N0YWZmOiBzdGFmZixcclxuICAgICAgICAgIF9tZWFzdXJlOiBtZWFzdXJlLFxyXG4gICAgICAgICAgX25vdGU6IG5vdGUsXHJcbiAgICAgICAgICBfcGl0Y2hlczogW10sXHJcbiAgICAgICAgICBib3g6IFN2Z0hlbHBlcnMuc21vQm94KFN2Z0hlbHBlcnMuc21vQm94KG5vdGUubG9naWNhbEJveCkpLFxyXG4gICAgICAgICAgdHlwZTogJ3JlbmRlcmVkJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIG1hcFxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZU1lYXN1cmVOb3RlTWFwKHNlbGVjdGlvbiwgcHJpbnRpbmcpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGlzIG5vdGUgaXMgdGhlIHNhbWUgbG9jYXRpb24gYXMgc29tZXRoaW5nIHRoYXQgd2FzIHNlbGVjdGVkLCByZXNlbGVjdCBpdFxyXG4gICAgICAgIGlmIChyZXBsYWNlZFNlbGVjdG9ycyA8IHNlbHMuc2VsZWN0b3JzLmxlbmd0aCAmJiBzZWxlY3Rpb24uc2VsZWN0b3IudGljayA9PT0gc2Vscy5zZWxlY3RvcnNbcmVwbGFjZWRTZWxlY3RvcnNdLnRpY2sgJiZcclxuICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3Rvci52b2ljZSA9PT0gdml4KSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbnMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgLy8gUmVzZWxlY3QgYW55IHBpdGNoZXMuXHJcbiAgICAgICAgICBpZiAoc2Vscy5zZWxlY3RvcnNbcmVwbGFjZWRTZWxlY3RvcnNdLnBpdGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzZWxzLnNlbGVjdG9yc1tyZXBsYWNlZFNlbGVjdG9yc10ucGl0Y2hlcy5mb3JFYWNoKChwaXRjaEl4KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5ub3RlICYmIHNlbGVjdGlvbi5ub3RlLnBpdGNoZXMubGVuZ3RoID4gcGl0Y2hJeCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdG9yLnBpdGNoZXMucHVzaChwaXRjaEl4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgbm90ZSA9IHNlbGVjdGlvbi5ub3RlIGFzIFNtb05vdGU7XHJcbiAgICAgICAgICBzZWxlY3RlZFRpY2tzICs9IG5vdGUudGlja0NvdW50O1xyXG4gICAgICAgICAgcmVwbGFjZWRTZWxlY3RvcnMgKz0gMTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYWRqYWNlbnRTZWxzICYmIHNlbGVjdGVkVGlja3MgPiAwICYmIHNlbGVjdGVkVGlja3MgPCBzZWxzLnRpY2tzICYmIHNlbGVjdGlvbi5zZWxlY3Rvci52b2ljZSA9PT0gdml4KSB7XHJcbiAgICAgICAgICAvLyB0cnkgdG8gc2VsZWN0IHRoZSBzYW1lIGxlbmd0aCBvZiBtdXNpYyBhcyB3YXMgcHJldmlvdXNseSBzZWxlY3RlZC4gIFNvIGEgMS80IHRvIDIgMS84LCBib3RoXHJcbiAgICAgICAgICAvLyBhcmUgc2VsZWN0ZWRcclxuICAgICAgICAgIHJlcGxhY2VkU2VsZWN0b3JzICs9IDE7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbnMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgc2VsZWN0ZWRUaWNrcyArPSBub3RlLnRpY2tDb3VudDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPT09IDAgJiYgc2Vscy5zZWxlY3RvcnMubGVuZ3RoID09PSAwICYmIGxhc3RSZXNvcnRTZWxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBsYXN0UmVzb3J0U2VsZWN0aW9uLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGljayArPSAxO1xyXG4gICAgICB9KTtcclxuICAgICAgdm9pY2VJeCArPSAxO1xyXG4gICAgfSk7XHJcbiAgICAvLyBXZSBkZWxldGVkIGFsbCB0aGUgbm90ZXMgdGhhdCB3ZXJlIHNlbGVjdGVkLCBzZWxlY3Qgc29tZXRoaW5nIGVsc2VcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbnMgPSBsYXN0UmVzb3J0U2VsZWN0aW9uO1xyXG4gICAgfVxyXG4gICAgLy8gSWYgdGhlcmUgd2VyZSBzZWxlY3Rpb25zIG9uIHRoaXMgbWVhc3VyZSwgaGlnaGxpZ2h0IHRoZW0uXHJcbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmRlZmVySGlnaGxpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICBsYXlvdXREZWJ1Zy5zZXRUaW1lc3RhbXAobGF5b3V0RGVidWcuY29kZVJlZ2lvbnMuTUFQLCBuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRpbWVzdGFtcCk7XHJcbiAgfVxyXG5cclxuICBfZ2V0VGlja3NGcm9tU2VsZWN0aW9ucygpOiBudW1iZXIge1xyXG4gICAgbGV0IHJ2ID0gMDtcclxuICAgIHRoaXMuc2VsZWN0aW9ucy5mb3JFYWNoKChzZWwpID0+IHtcclxuICAgICAgaWYgKHNlbC5ub3RlKSB7XHJcbiAgICAgICAgcnYgKz0gc2VsLm5vdGUudGlja0NvdW50O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBydjtcclxuICB9XHJcbiAgX2NvcHlTZWxlY3Rpb25zKCk6IFNtb1NlbGVjdG9yW10ge1xyXG4gICAgY29uc3QgcnY6IFNtb1NlbGVjdG9yW10gPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0aW9ucy5mb3JFYWNoKChzZWwpID0+IHtcclxuICAgICAgcnYucHVzaChzZWwuc2VsZWN0b3IpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcnY7XHJcbiAgfVxyXG4gIC8vICMjIyBnZXRFeHRyZW1lU2VsZWN0aW9uXHJcbiAgLy8gR2V0IHRoZSByaWdodG1vc3QgKDEpIG9yIGxlZnRtb3N0ICgtMSkgc2VsZWN0aW9uXHJcbiAgZ2V0RXh0cmVtZVNlbGVjdGlvbihzaWduOiBudW1iZXIpOiBTbW9TZWxlY3Rpb24ge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IHJ2ID0gdGhpcy5zZWxlY3Rpb25zWzBdO1xyXG4gICAgZm9yIChpID0gMTsgaSA8IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCBzYSA9IHRoaXMuc2VsZWN0aW9uc1tpXS5zZWxlY3RvcjtcclxuICAgICAgaWYgKHNhLm1lYXN1cmUgKiBzaWduID4gcnYuc2VsZWN0b3IubWVhc3VyZSAqIHNpZ24pIHtcclxuICAgICAgICBydiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgfSBlbHNlIGlmIChzYS5tZWFzdXJlID09PSBydi5zZWxlY3Rvci5tZWFzdXJlICYmIHNhLnRpY2sgKiBzaWduID4gcnYuc2VsZWN0b3IudGljayAqIHNpZ24pIHtcclxuICAgICAgICBydiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ2O1xyXG4gIH1cclxuICBfc2VsZWN0Q2xvc2VzdChzZWxlY3RvcjogU21vU2VsZWN0b3IpIHtcclxuICAgIHZhciBhcnRpZmFjdCA9IHRoaXMuX2dldENsb3Nlc3RUaWNrKHNlbGVjdG9yKTtcclxuICAgIGlmICghYXJ0aWZhY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9ucy5maW5kKChzZWwpID0+IEpTT04uc3RyaW5naWZ5KHNlbC5zZWxlY3RvcilcclxuICAgICAgPT09IEpTT04uc3RyaW5naWZ5KGFydGlmYWN0LnNlbGVjdG9yKSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm90ZSA9IGFydGlmYWN0Lm5vdGUgYXMgU21vTm90ZTtcclxuICAgIGlmIChzZWxlY3Rvci5waXRjaGVzICYmIHNlbGVjdG9yLnBpdGNoZXMubGVuZ3RoICYmIHNlbGVjdG9yLnBpdGNoZXMubGVuZ3RoIDw9IG5vdGUucGl0Y2hlcy5sZW5ndGgpIHtcclxuICAgICAgLy8gSWYgdGhlIG9sZCBzZWxlY3Rpb24gaGFkIG9ubHkgYSBzaW5nbGUgcGl0Y2gsIHRyeSB0byByZWNyZWF0ZSB0aGF0LlxyXG4gICAgICBhcnRpZmFjdC5zZWxlY3Rvci5waXRjaGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxlY3Rvci5waXRjaGVzKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMucHVzaChhcnRpZmFjdCk7XHJcbiAgfVxyXG4gIC8vICMjIyB1cGRhdGVNYXBcclxuICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcmVuZGVyaW5nIHRoZSBzY29yZS4gIEl0IHVwZGF0ZXMgdGhlIHNjb3JlIHRvXHJcbiAgLy8gZ3JhcGhpY3MgbWFwIGFuZCBzZWxlY3RzIHRoZSBmaXJzdCBvYmplY3QuXHJcbiAgdXBkYXRlTWFwKCkge1xyXG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcclxuICAgIHRoaXMubWFwcGluZyA9IHRydWU7XHJcbiAgICBsZXQgdGlja1NlbGVjdGVkID0gMDtcclxuICAgIGNvbnN0IHNlbENvcHkgPSB0aGlzLl9jb3B5U2VsZWN0aW9ucygpO1xyXG4gICAgY29uc3QgdGlja3NTZWxlY3RlZENvcHkgPSB0aGlzLl9nZXRUaWNrc0Zyb21TZWxlY3Rpb25zKCk7XHJcbiAgICBjb25zdCBmaXJzdFNlbGVjdGlvbiA9IHRoaXMuZ2V0RXh0cmVtZVNlbGVjdGlvbigtMSk7XHJcbiAgICB0aGlzLl91cGRhdGVNb2RpZmllcnMoKTtcclxuXHJcbiAgICAvLyBUcnkgdG8gcmVzdG9yZSBzZWxlY3Rpb24uICBJZiB0aGVyZSB3ZXJlIG5vbmUsIGp1c3Qgc2VsZWN0IHRoZSBmaXN0XHJcbiAgICAvLyB0aGluZyBpbiB0aGUgc2NvcmVcclxuICAgIGNvbnN0IGZpcnN0S2V5ID0gU21vU2VsZWN0b3IuZ2V0Tm90ZUtleShTbW9TZWxlY3Rvci5kZWZhdWx0KTtcclxuICAgIGlmICghc2VsQ29weS5sZW5ndGggJiYgdGhpcy5yZW5kZXJlci5zY29yZSkge1xyXG4gICAgLy8gSWYgdGhlcmUgaXMgbm90aGluZyByZW5kZXJlZCwgZG9uJ3QgdXBkYXRlIHRyYWNrZXJcclxuICAgIGlmICh0eXBlb2YodGhpcy5tZWFzdXJlTm90ZU1hcFtmaXJzdEtleV0pICE9PSAndW5kZWZpbmVkJyAmJiAhZmlyc3RTZWxlY3Rpb24pXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IFt0aGlzLm1lYXN1cmVOb3RlTWFwW2ZpcnN0S2V5XV07XHJcbiAgICB9ICBlbHNlIGlmICh0aGlzLmFyZVNlbGVjdGlvbnNBZGphY2VudCgpICYmIHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBhZGphY2VudCBzZWxlY3Rpb25zLCByZXN0b3JlIHNlbGVjdGlvbnMgdG8gdGhlIHRpY2tzIHRoYXQgYXJlIGluIHRoZSBzY29yZSBub3dcclxuICAgICAgaWYgKCFmaXJzdFNlbGVjdGlvbikge1xyXG4gICAgICAgIGxheW91dERlYnVnLnNldFRpbWVzdGFtcChsYXlvdXREZWJ1Zy5jb2RlUmVnaW9ucy5VUERBVEVfTUFQLCBuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRzKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3Rpb25zID0gW107XHJcbiAgICAgIHRoaXMuX3NlbGVjdENsb3Nlc3QoZmlyc3RTZWxlY3Rpb24uc2VsZWN0b3IpO1xyXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuc2VsZWN0aW9uc1swXTtcclxuICAgICAgdGlja1NlbGVjdGVkID0gKGZpcnN0Lm5vdGUgYXMgU21vTm90ZSkudGlja0NvdW50ID8/ICAwO1xyXG4gICAgICB3aGlsZSAodGlja1NlbGVjdGVkIDwgdGlja3NTZWxlY3RlZENvcHkgJiYgZmlyc3QpIHtcclxuICAgICAgICBsZXQgZGVsdGE6IG51bWJlciA9IHRoaXMuX2dyb3dTZWxlY3Rpb25SaWdodCh0cnVlKTtcclxuICAgICAgICBpZiAoIWRlbHRhKSAge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpY2tTZWxlY3RlZCArPSBkZWx0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kZWZlckhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy5fY3JlYXRlTG9jYWxNb2RpZmllcnNMaXN0KCk7XHJcbiAgICB0aGlzLm1hcHBpbmcgPSBmYWxzZTtcclxuICAgIGxheW91dERlYnVnLnNldFRpbWVzdGFtcChsYXlvdXREZWJ1Zy5jb2RlUmVnaW9ucy5VUERBVEVfTUFQLCBuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRzKTtcclxuICB9XHJcbiAgY3JlYXRlTW91c2VQb3NpdGlvbkJveChsb2dpY2FsQm94OiBTdmdCb3gpIHtcclxuICAgIGNvbnN0IHBhZ2VNYXAgPSB0aGlzLnJlbmRlcmVyLnBhZ2VNYXA7XHJcbiAgICBjb25zdCBwYWdlID0gcGFnZU1hcC5nZXRSZW5kZXJlckZyb21Qb2ludChsb2dpY2FsQm94KTtcclxuICAgIGlmIChwYWdlKSB7XHJcbiAgICAgIGNvbnN0IGNvZiA9IChwYWdlTWFwLnpvb21TY2FsZSAqIHBhZ2VNYXAucmVuZGVyU2NhbGUpOyAgXHJcbiAgICAgIGNvbnN0IGRlYnVnQm94ID0gU3ZnSGVscGVycy5zbW9Cb3gobG9naWNhbEJveCk7XHJcbiAgICAgIGRlYnVnQm94LnkgLT0gKHBhZ2UuYm94LnkgKyA1IC8gY29mKTtcclxuICAgICAgZGVidWdCb3gueCAtPSAocGFnZS5ib3gueCArIDUgLyBjb2YpXHJcbiAgICAgIGRlYnVnQm94LndpZHRoID0gMTAgLyBjb2Y7XHJcbiAgICAgIGRlYnVnQm94LmhlaWdodCA9IDEwIC8gY29mO1xyXG4gICAgICBpZiAoIXRoaXMubW91c2VIaW50Qm94KSB7XHJcbiAgICAgICAgdGhpcy5tb3VzZUhpbnRCb3ggPSAge1xyXG4gICAgICAgICAgc3Ryb2tlOiBTdmdQYWdlTWFwLnN0cm9rZXNbJ2RlYnVnLW1vdXNlLWJveCddLFxyXG4gICAgICAgICAgY2xhc3NlczogJ2hpZGUtcHJpbnQnLFxyXG4gICAgICAgICAgYm94OiBkZWJ1Z0JveCxcclxuICAgICAgICAgIHNjcm9sbDogeyB4OiAwLCB5OiAwIH0sXHJcbiAgICAgICAgICBjb250ZXh0OiBwYWdlLFxyXG4gICAgICAgICAgdGltZU9mZjogMTAwMFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb3VzZUhpbnRCb3guY29udGV4dCA9IHBhZ2U7XHJcbiAgICAgIHRoaXMubW91c2VIaW50Qm94LmJveCA9IGRlYnVnQm94O1xyXG4gICAgICBTdmdIZWxwZXJzLm91dGxpbmVSZWN0KHRoaXMubW91c2VIaW50Qm94KTtcclxuICAgIH0gICAgICAgICAgICBcclxuICB9XHJcbiAgZXJhc2VNb3VzZVBvc2l0aW9uQm94KCkge1xyXG4gICAgaWYgKHRoaXMubW91c2VIaW50Qm94ICYmIHRoaXMubW91c2VIaW50Qm94LmVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5tb3VzZUhpbnRCb3guZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5tb3VzZUhpbnRCb3guZWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZCBhbnkgbXVzaWNhbCBlbGVtZW50cyBhdCB0aGUgc3VwcGxpZWQgc2NyZWVuIGNvb3JkaW5hdGVzIGFuZCBzZXQgdGhlbSBhcyB0aGUgc2VsZWN0aW9uXHJcbiAgICogQHBhcmFtIGJiIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGludGVyc2VjdGluZ0FydGlmYWN0KGJiOiBTdmdCb3gpIHtcclxuICAgIGNvbnN0IHNjcm9sbFN0YXRlID0gdGhpcy5zY3JvbGxlci5zY3JvbGxTdGF0ZTtcclxuICAgIGJiID0gU3ZnSGVscGVycy5ib3hQb2ludHMoYmIueCArIHNjcm9sbFN0YXRlLngsIGJiLnkgKyBzY3JvbGxTdGF0ZS55LCBiYi53aWR0aCA/IGJiLndpZHRoIDogMSwgYmIuaGVpZ2h0ID8gYmIuaGVpZ2h0IDogMSk7XHJcbiAgICBjb25zdCBsb2dpY2FsQm94ID0gdGhpcy5yZW5kZXJlci5wYWdlTWFwLmNsaWVudFRvU3ZnKGJiKTtcclxuICAgIGNvbnN0IHsgc2VsZWN0aW9ucywgcGFnZSB9ID0gdGhpcy5yZW5kZXJlci5wYWdlTWFwLmZpbmRBcnRpZmFjdChsb2dpY2FsQm94KTtcclxuICAgIGlmIChwYWdlKSB7XHJcbiAgICAgIGNvbnN0IGFydGlmYWN0cyA9IHNlbGVjdGlvbnM7XHJcbiAgICAgIC8vIGNvbnN0IGFydGlmYWN0cyA9IFN2Z0hlbHBlcnMuZmluZEludGVyc2VjdGluZ0FydGlmYWN0RnJvbU1hcChiYiwgdGhpcy5tZWFzdXJlTm90ZU1hcCwgU3ZnSGVscGVycy5zbW9Cb3godGhpcy5zY3JvbGxlci5zY3JvbGxTdGF0ZS5zY3JvbGwpKTtcclxuICAgICAgLy8gVE9ETzogaGFuZGxlIG92ZXJsYXBwaW5nIHN1Z2dlc3Rpb25zXHJcbiAgICAgIGNvbnN0IG1vZGlmaWVycyA9IHRoaXMucmVuZGVyZXIucGFnZU1hcC5maW5kTW9kaWZpZXJUYWJzKGxvZ2ljYWxCb3gpO1xyXG4gICAgICBpZiAobW9kaWZpZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuX3NldE1vZGlmaWVyQXNTdWdnZXN0aW9uKG1vZGlmaWVyc1swXSk7XHJcbiAgICAgICAgdGhpcy5lcmFzZU1vdXNlUG9zaXRpb25Cb3goKTtcclxuICAgICAgfSBlbHNlIGlmIChhcnRpZmFjdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgYXJ0aWZhY3QgPSBhcnRpZmFjdHNbMF07XHJcbiAgICAgICAgdGhpcy5lcmFzZU1vdXNlUG9zaXRpb25Cb3goKTtcclxuICAgICAgICB0aGlzLl9zZXRBcnRpZmFjdEFzU3VnZ2VzdGlvbihhcnRpZmFjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbm8gaW50ZXJzZWN0aW9uLCBzaG93IG1vdXNlIGhpbnRcclxuICAgICAgICB0aGlzLmNyZWF0ZU1vdXNlUG9zaXRpb25Cb3gobG9naWNhbEJveCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgX2dldFJlY3RhbmdsZUNoYWluKHNlbGVjdGlvbjogU21vU2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBydjogbnVtYmVyW10gPSBbXTtcclxuICAgIGlmICghc2VsZWN0aW9uLm5vdGUpIHtcclxuICAgICAgcmV0dXJuIHJ2O1xyXG4gICAgfVxyXG4gICAgcnYucHVzaChzZWxlY3Rpb24ubWVhc3VyZS5zdmcucGFnZUluZGV4KTtcclxuICAgIHJ2LnB1c2goc2VsZWN0aW9uLm1lYXN1cmUuc3ZnLmxpbmVJbmRleCk7XHJcbiAgICBydi5wdXNoKHNlbGVjdGlvbi5tZWFzdXJlLm1lYXN1cmVOdW1iZXIubWVhc3VyZUluZGV4KTtcclxuICAgIHJldHVybiBydjtcclxuICB9XHJcbiAgX3VwZGF0ZU1lYXN1cmVOb3RlTWFwKGFydGlmYWN0OiBTbW9TZWxlY3Rpb24sIHByaW50aW5nOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBub3RlID0gYXJ0aWZhY3Qubm90ZSBhcyBTbW9Ob3RlO1xyXG4gICAgY29uc3Qgbm90ZUtleSA9IFNtb1NlbGVjdG9yLmdldE5vdGVLZXkoYXJ0aWZhY3Quc2VsZWN0b3IpO1xyXG4gICAgY29uc3QgYWN0aXZlVm9pY2UgPSBhcnRpZmFjdC5tZWFzdXJlLmdldEFjdGl2ZVZvaWNlKCk7XHJcbiAgICAvLyBub3QgaGFzIG5vdCBiZWVuIGRyYXduIHlldC5cclxuICAgIGlmICgoIWFydGlmYWN0LmJveCkgfHwgKCFhcnRpZmFjdC5tZWFzdXJlLnN2Zy5sb2dpY2FsQm94KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm1lYXN1cmVOb3RlTWFwW25vdGVLZXldID0gYXJ0aWZhY3Q7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuYWRkQXJ0aWZhY3QoYXJ0aWZhY3QpO1xyXG4gICAgYXJ0aWZhY3Quc2Nyb2xsQm94ID0geyB4OiBhcnRpZmFjdC5ib3gueCxcclxuICAgICAgeTogYXJ0aWZhY3QubWVhc3VyZS5zdmcubG9naWNhbEJveC55IH07XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/render/sui/mapper.ts\n\n}");
1229
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SuiMapper: () => (/* binding */ SuiMapper)\n/* harmony export */ });\n/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/xform/selections */ \"./src/smo/xform/selections.ts\");\n/* harmony import */ var _svgHelpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgHelpers */ \"./src/render/sui/svgHelpers.ts\");\n/* harmony import */ var _layoutDebug__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layoutDebug */ \"./src/render/sui/layoutDebug.ts\");\n/* harmony import */ var _smo_data_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/common */ \"./src/smo/data/common.ts\");\n/* harmony import */ var _svgPageMap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./svgPageMap */ \"./src/render/sui/svgPageMap.ts\");\n// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\n// Copyright (c) Aaron David Newman 2021.\n\n\n\n\n\n/**\n * Map the notes in the svg so they can respond to events and interact\n * with the mouse/keyboard\n * @category SuiRender\n */\nclass SuiMapper {\n constructor(renderer, scroller) {\n // measure to selector map\n this.measureNoteMap = {};\n // notes currently selected. Something is always selected\n // modifiers (text etc.) that have been selected\n this.modifierSelections = [];\n this.selections = [];\n // The list of modifiers near the current selection\n this.localModifiers = [];\n this.modifierIndex = -1;\n this.modifierSuggestion = null;\n this.pitchIndex = -1;\n // By default, defer highlights for performance.\n this.deferHighlightMode = true;\n this.suggestion = null;\n this.mouseHintBox = null;\n this.selectionRects = {};\n this.outlines = {};\n this.mapping = false;\n // renderer renders the music when it changes\n this.renderer = renderer;\n this.scroller = scroller;\n this.modifierIndex = -1;\n this.localModifiers = [];\n // index if a single pitch of a chord is selected\n this.pitchIndex = -1;\n // the current selection, which is also the copy/paste destination\n this.highlightQueue = { selectionCount: 0, deferred: false };\n }\n updateHighlight() {\n const self = this;\n if (this.selections.length === 0) {\n this.highlightQueue.deferred = false;\n this.highlightQueue.selectionCount = 0;\n return;\n }\n if (this.highlightQueue.selectionCount === this.selections.length) {\n this.highlightSelection();\n this.highlightQueue.deferred = false;\n }\n else {\n this.highlightQueue.selectionCount = this.selections.length;\n setTimeout(() => {\n self.updateHighlight();\n }, 50);\n }\n }\n deferHighlight() {\n if (!this.deferHighlightMode) {\n this.highlightSelection();\n }\n const self = this;\n if (!this.highlightQueue.deferred) {\n this.highlightQueue.deferred = true;\n setTimeout(() => {\n self.updateHighlight();\n }, 50);\n }\n }\n _createLocalModifiersList() {\n this.localModifiers = [];\n let index = 0;\n this.selections.forEach((sel) => {\n var _a, _b;\n (_a = sel.note) === null || _a === void 0 ? void 0 : _a.getGraceNotes().forEach((gg) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: gg, box: (_a = gg.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n (_b = sel.note) === null || _b === void 0 ? void 0 : _b.getModifiers('SmoDynamicText').forEach((dyn) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: dyn, box: (_a = dyn.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n sel.measure.getModifiersByType('SmoVolta').forEach((volta) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: volta, box: (_a = volta.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n sel.measure.getModifiersByType('SmoTempoText').forEach((tempo) => {\n var _a;\n this.localModifiers.push({ index, selection: sel, modifier: tempo, box: (_a = tempo.logicalBox) !== null && _a !== void 0 ? _a : _smo_data_common__WEBPACK_IMPORTED_MODULE_3__.SvgBox.default });\n index += 1;\n });\n sel.staff.renderableModifiers.forEach((mod) => {\n if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.gteq(sel.selector, mod.startSelector) &&\n _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.lteq(sel.selector, mod.endSelector) && mod.logicalBox) {\n const exists = this.localModifiers.find((mm) => mm.modifier.ctor === mod.ctor);\n if (!exists) {\n this.localModifiers.push({ index, selection: sel, modifier: mod, box: mod.logicalBox });\n index += 1;\n }\n }\n });\n });\n }\n /**\n * When a modifier is selected graphically, update the selection list\n * and create a local modifier list\n * @param modifierTabs\n */\n createLocalModifiersFromModifierTabs(modifierTabs) {\n const selections = [];\n const modMap = {};\n modifierTabs.forEach((mt) => {\n if (mt.selection) {\n const key = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.getNoteKey(mt.selection.selector);\n if (!modMap[key]) {\n selections.push(mt.selection);\n modMap[key] = true;\n }\n }\n });\n if (selections.length) {\n this.selections = selections;\n this._createLocalModifiersList();\n this.deferHighlight();\n }\n }\n removeModifierSelectionBox() {\n if (this.outlines['staffModifier'] && this.outlines['staffModifier'].element) {\n this.outlines['staffModifier'].element.remove();\n this.outlines['staffModifier'].element = undefined;\n }\n }\n // used by remove dialogs to clear removed thing\n clearModifierSelections() {\n this.modifierSelections = [];\n this._createLocalModifiersList();\n this.modifierIndex = -1;\n this.removeModifierSelectionBox();\n }\n // ### loadScore\n // We are loading a new score. clear the maps so we can rebuild them after\n // rendering\n loadScore() {\n this.measureNoteMap = {};\n this.clearModifierSelections();\n this.selections = [];\n this.highlightQueue = { selectionCount: 0, deferred: false };\n }\n // ### _clearMeasureArtifacts\n // clear the measure from the measure and note maps so we can rebuild it.\n clearMeasureMap(measure) {\n const selector = { staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] };\n // Unselect selections in this measure so we can reselect them when re-tracked\n const ar = [];\n this.selections.forEach((selection) => {\n if (selection.selector.staff !== selector.staff || selection.selector.measure !== selector.measure) {\n ar.push(selection);\n }\n });\n this.selections = ar;\n }\n _copySelectionsByMeasure(staffIndex, measureIndex) {\n const rv = this.selections.filter((sel) => sel.selector.staff === staffIndex && sel.selector.measure === measureIndex);\n const missingNotes = rv.filter((sel) => !sel.note);\n if (rv.length < 1 || missingNotes.length > 0) {\n return { ticks: 0, selectors: [] };\n }\n const ticks = rv.length < 1 ? 0 : rv.map((sel) => sel.note.tickCount).reduce((a, b) => a + b);\n const selectors = [];\n rv.forEach((sel) => {\n const nsel = JSON.parse(JSON.stringify(sel.selector));\n if (!nsel.pitches) {\n nsel.pitches = [];\n }\n selectors.push(nsel);\n });\n return { ticks, selectors };\n }\n deleteMeasure(selection) {\n const selCopy = this._copySelectionsByMeasure(selection.selector.staff, selection.selector.measure)\n .selectors;\n this.clearMeasureMap(selection.measure);\n if (selCopy.length) {\n selCopy.forEach((selector) => {\n const nsel = JSON.parse(JSON.stringify(selector));\n if (selector.measure === 0) {\n nsel.measure += 1;\n }\n else {\n nsel.measure -= 1;\n }\n this.selections.push(this._getClosestTick(nsel));\n });\n }\n }\n _updateNoteModifier(selection, modMap, modifier, ix) {\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection,\n box: modifier.logicalBox,\n index: ix\n });\n ix += 1;\n const context = this.renderer.pageMap.getRendererFromModifier(modifier);\n modMap[modifier.attrs.id] = true;\n }\n return ix;\n }\n _updateModifiers() {\n let ix = 0;\n const modMap = {};\n if (!this.renderer.score) {\n return;\n }\n this.renderer.score.textGroups.forEach((modifier) => {\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection: null,\n box: modifier.logicalBox,\n index: ix\n });\n ix += 1;\n }\n });\n const keys = Object.keys(this.measureNoteMap);\n keys.forEach((selKey) => {\n var _a, _b;\n const selection = this.measureNoteMap[selKey];\n selection.staff.renderableModifiers.forEach((modifier) => {\n if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.contains(selection.selector, modifier.startSelector, modifier.endSelector)) {\n if (!modMap[modifier.attrs.id]) {\n if (modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection,\n box: modifier.logicalBox,\n index: ix\n });\n ix += 1;\n modMap[modifier.attrs.id] = true;\n }\n }\n }\n });\n selection.measure.modifiers.forEach((modifier) => {\n if (modifier.attrs.id\n && !modMap[modifier.attrs.id]\n && modifier.logicalBox) {\n this.renderer.pageMap.addModifierTab({\n modifier,\n selection,\n box: _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(modifier.logicalBox),\n index: ix\n });\n ix += 1;\n modMap[modifier.attrs.id] = true;\n }\n });\n (_a = selection.note) === null || _a === void 0 ? void 0 : _a.textModifiers.forEach((modifier) => {\n if (modifier.logicalBox) {\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\n }\n });\n (_b = selection.note) === null || _b === void 0 ? void 0 : _b.graceNotes.forEach((modifier) => {\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\n });\n });\n }\n // ### _getClosestTick\n // given a musical selector, find the note artifact that is closest to it,\n // if an exact match is not available\n _getClosestTick(selector) {\n let tickKey = '';\n const measureKey = Object.keys(this.measureNoteMap).find((k) => _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.sameMeasure(this.measureNoteMap[k].selector, selector)\n && this.measureNoteMap[k].selector.tick === 0);\n tickKey = Object.keys(this.measureNoteMap).find((k) => _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.sameNote(this.measureNoteMap[k].selector, selector));\n const firstObj = this.measureNoteMap[Object.keys(this.measureNoteMap)[0]];\n if (tickKey) {\n return this.measureNoteMap[tickKey];\n }\n if (measureKey) {\n return this.measureNoteMap[measureKey];\n }\n return firstObj;\n }\n // ### _setModifierBoxes\n // Create the DOM modifiers for the lyrics and other modifiers\n _setModifierBoxes(measure) {\n const context = this.renderer.pageMap.getRenderer(measure.svg.logicalBox);\n measure.voices.forEach((voice) => {\n voice.notes.forEach((smoNote) => {\n if (context) {\n const el = context.svg.getElementById(smoNote.renderId);\n if (el) {\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, el, smoNote);\n // TODO: fix this, only works on the first line.\n smoNote.getModifiers('SmoLyric').forEach((lyrict) => {\n const lyric = lyrict;\n if (lyric.getText().length || lyric.isHyphenated()) {\n const lyricElement = context.svg.getElementById('vf-' + lyric.attrs.id);\n if (lyricElement) {\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, lyricElement, lyric);\n }\n }\n });\n }\n smoNote.graceNotes.forEach((g) => {\n if (g.element) {\n }\n var gel = context.svg.getElementById('vf-' + g.renderId);\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, gel, g);\n });\n smoNote.textModifiers.forEach((modifier) => {\n if (modifier.logicalBox && modifier.element) {\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.updateArtifactBox(context, modifier.element, modifier);\n }\n });\n }\n });\n });\n }\n /**\n * returns true of the selections are adjacent\n * @param s1 a selections\n * @param s2 another election\n * @returns\n */\n isAdjacentSelection(s1, s2) {\n if (!this.renderer.score) {\n return false;\n }\n const nextSel = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.advanceTicks(this.renderer.score, s1, 1);\n if (!nextSel) {\n return false;\n }\n return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.eq(nextSel.selector, s2.selector);\n }\n areSelectionsAdjacent() {\n let selectionIx = 0;\n for (selectionIx = 0; this.selections.length > 1 && selectionIx < this.selections.length - 1; ++selectionIx) {\n if (!this.isAdjacentSelection(this.selections[selectionIx], this.selections[selectionIx + 1])) {\n return false;\n }\n }\n return true;\n }\n /**\n * This is the logic that stores the screen location of music after it's rendered\n */\n mapMeasure(staff, measure, printing) {\n let voiceIx = 0;\n let selectedTicks = 0;\n // We try to restore block selections. If all the selections in this block are not adjacent, only restore individual selections\n // if possible\n let adjacentSels = this.areSelectionsAdjacent();\n const lastResortSelection = [];\n let selectionChanged = false;\n let vix = 0;\n let replacedSelectors = 0;\n if (!measure.svg.logicalBox) {\n return;\n }\n this._setModifierBoxes(measure);\n const timestamp = new Date().valueOf();\n // Keep track of any current selections in this measure, we will try to restore them.\n const sels = this._copySelectionsByMeasure(staff.staffId, measure.measureNumber.measureIndex);\n this.clearMeasureMap(measure);\n if (sels.selectors.length) {\n vix = sels.selectors[0].voice;\n }\n sels.selectors.forEach((sel) => {\n sel.voice = vix;\n });\n measure.voices.forEach((voice) => {\n let tick = 0;\n voice.notes.forEach((note) => {\n const selector = {\n staff: staff.staffId,\n measure: measure.measureNumber.measureIndex,\n voice: voiceIx,\n tick,\n pitches: []\n };\n if (measure.repeatSymbol) {\n // Some measures have a symbol that replaces the notes. This allows us to select\n // the measure\n const x = measure.svg.logicalBox.x + (measure.svg.logicalBox.width / voice.notes.length) * tick;\n const width = measure.svg.logicalBox.width / voice.notes.length;\n note.logicalBox = { x, y: measure.svg.logicalBox.y, width, height: measure.svg.logicalBox.height };\n }\n // create a selection for the newly rendered note\n const selection = new _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection({\n selector,\n _staff: staff,\n _measure: measure,\n _note: note,\n _pitches: [],\n box: _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(_svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(note.logicalBox)),\n type: 'rendered'\n });\n // and add it to the map\n this._updateMeasureNoteMap(selection, printing);\n // If this note is the same location as something that was selected, reselect it\n if (replacedSelectors < sels.selectors.length && selection.selector.tick === sels.selectors[replacedSelectors].tick &&\n selection.selector.voice === vix) {\n this.selections.push(selection);\n // Reselect any pitches.\n if (sels.selectors[replacedSelectors].pitches.length > 0) {\n sels.selectors[replacedSelectors].pitches.forEach((pitchIx) => {\n if (selection.note && selection.note.pitches.length > pitchIx) {\n selection.selector.pitches.push(pitchIx);\n }\n });\n }\n const note = selection.note;\n selectedTicks += note.tickCount;\n replacedSelectors += 1;\n selectionChanged = true;\n }\n else if (adjacentSels && selectedTicks > 0 && selectedTicks < sels.ticks && selection.selector.voice === vix) {\n // try to select the same length of music as was previously selected. So a 1/4 to 2 1/8, both\n // are selected\n replacedSelectors += 1;\n this.selections.push(selection);\n selectedTicks += note.tickCount;\n }\n else if (this.selections.length === 0 && sels.selectors.length === 0 && lastResortSelection.length === 0) {\n lastResortSelection.push(selection);\n }\n tick += 1;\n });\n voiceIx += 1;\n });\n // We deleted all the notes that were selected, select something else\n if (this.selections.length === 0) {\n selectionChanged = true;\n this.selections = lastResortSelection;\n }\n // If there were selections on this measure, highlight them.\n if (selectionChanged) {\n this.deferHighlight();\n }\n _layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.setTimestamp(_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.codeRegions.MAP, new Date().valueOf() - timestamp);\n }\n _getTicksFromSelections() {\n let rv = 0;\n this.selections.forEach((sel) => {\n if (sel.note) {\n rv += sel.note.tickCount;\n }\n });\n return rv;\n }\n _copySelections() {\n const rv = [];\n this.selections.forEach((sel) => {\n rv.push(sel.selector);\n });\n return rv;\n }\n // ### getExtremeSelection\n // Get the rightmost (1) or leftmost (-1) selection\n getExtremeSelection(sign) {\n let i = 0;\n let rv = this.selections[0];\n for (i = 1; i < this.selections.length; ++i) {\n const sa = this.selections[i].selector;\n if (sa.measure * sign > rv.selector.measure * sign) {\n rv = this.selections[i];\n }\n else if (sa.measure === rv.selector.measure && sa.tick * sign > rv.selector.tick * sign) {\n rv = this.selections[i];\n }\n }\n return rv;\n }\n _selectClosest(selector) {\n var artifact = this._getClosestTick(selector);\n if (!artifact) {\n return;\n }\n if (this.selections.find((sel) => JSON.stringify(sel.selector)\n === JSON.stringify(artifact.selector))) {\n return;\n }\n const note = artifact.note;\n if (selector.pitches && selector.pitches.length && selector.pitches.length <= note.pitches.length) {\n // If the old selection had only a single pitch, try to recreate that.\n artifact.selector.pitches = JSON.parse(JSON.stringify(selector.pitches));\n }\n this.selections.push(artifact);\n }\n // ### updateMap\n // This should be called after rendering the score. It updates the score to\n // graphics map and selects the first object.\n updateMap() {\n var _a;\n const ts = new Date().valueOf();\n this.mapping = true;\n let tickSelected = 0;\n const selCopy = this._copySelections();\n const ticksSelectedCopy = this._getTicksFromSelections();\n const firstSelection = this.getExtremeSelection(-1);\n this._updateModifiers();\n // Try to restore selection. If there were none, just select the fist\n // thing in the score\n const firstKey = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.getNoteKey(_smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.default);\n if (!selCopy.length && this.renderer.score) {\n // If there is nothing rendered, don't update tracker\n if (typeof (this.measureNoteMap[firstKey]) !== 'undefined' && !firstSelection)\n this.selections = [this.measureNoteMap[firstKey]];\n }\n else if (this.areSelectionsAdjacent() && this.selections.length > 1) {\n // If there are adjacent selections, restore selections to the ticks that are in the score now\n if (!firstSelection) {\n _layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.setTimestamp(_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\n return;\n }\n this.selections = [];\n this._selectClosest(firstSelection.selector);\n const first = this.selections[0];\n tickSelected = (_a = first.note.tickCount) !== null && _a !== void 0 ? _a : 0;\n while (tickSelected < ticksSelectedCopy && first) {\n let delta = this._growSelectionRight(true);\n if (!delta) {\n break;\n }\n tickSelected += delta;\n }\n }\n this.deferHighlight();\n this._createLocalModifiersList();\n this.mapping = false;\n _layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.setTimestamp(_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\n }\n createMousePositionBox(logicalBox) {\n const pageMap = this.renderer.pageMap;\n const page = pageMap.getRendererFromPoint(logicalBox);\n if (page) {\n const cof = (pageMap.zoomScale * pageMap.renderScale);\n const debugBox = _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.smoBox(logicalBox);\n debugBox.y -= (page.box.y + 5 / cof);\n debugBox.x -= (page.box.x + 5 / cof);\n debugBox.width = 10 / cof;\n debugBox.height = 10 / cof;\n if (!this.mouseHintBox) {\n this.mouseHintBox = {\n stroke: _svgPageMap__WEBPACK_IMPORTED_MODULE_4__.SvgPageMap.strokes['debug-mouse-box'],\n classes: 'hide-print',\n box: debugBox,\n scroll: { x: 0, y: 0 },\n context: page,\n timeOff: 1000\n };\n }\n this.mouseHintBox.context = page;\n this.mouseHintBox.box = debugBox;\n _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.outlineRect(this.mouseHintBox);\n }\n }\n eraseMousePositionBox() {\n if (this.mouseHintBox && this.mouseHintBox.element) {\n this.mouseHintBox.element.remove();\n this.mouseHintBox.element = undefined;\n }\n }\n /**\n * Find any musical elements at the supplied screen coordinates and set them as the selection\n * @param bb\n * @returns\n */\n intersectingArtifact(bb) {\n const scrollState = this.scroller.scrollState;\n bb = _svgHelpers__WEBPACK_IMPORTED_MODULE_1__.SvgHelpers.boxPoints(bb.x + scrollState.x, bb.y + scrollState.y, bb.width ? bb.width : 1, bb.height ? bb.height : 1);\n const logicalBox = this.renderer.pageMap.clientToSvg(bb);\n const { selections, page } = this.renderer.pageMap.findArtifact(logicalBox);\n if (page) {\n const artifacts = selections;\n // const artifacts = SvgHelpers.findIntersectingArtifactFromMap(bb, this.measureNoteMap, SvgHelpers.smoBox(this.scroller.scrollState.scroll));\n // TODO: handle overlapping suggestions\n const modifiers = this.renderer.pageMap.findModifierTabs(logicalBox);\n if (modifiers.length) {\n this._setModifierAsSuggestion(modifiers[0]);\n this.eraseMousePositionBox();\n }\n else if (artifacts.length) {\n const artifact = artifacts[0];\n this.eraseMousePositionBox();\n this._setArtifactAsSuggestion(artifact);\n }\n else {\n // no intersection, show mouse hint\n this.createMousePositionBox(logicalBox);\n }\n }\n }\n _getRectangleChain(selection) {\n const rv = [];\n if (!selection.note) {\n return rv;\n }\n rv.push(selection.measure.svg.pageIndex);\n rv.push(selection.measure.svg.lineIndex);\n rv.push(selection.measure.measureNumber.measureIndex);\n return rv;\n }\n _updateMeasureNoteMap(artifact, printing) {\n const note = artifact.note;\n const noteKey = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.getNoteKey(artifact.selector);\n const activeVoice = artifact.measure.getActiveVoice();\n // not has not been drawn yet.\n if ((!artifact.box) || (!artifact.measure.svg.logicalBox)) {\n return;\n }\n this.measureNoteMap[noteKey] = artifact;\n this.renderer.pageMap.addArtifact(artifact);\n artifact.scrollBox = { x: artifact.box.x,\n y: artifact.measure.svg.logicalBox.y };\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxRQUFzQixFQUFFLFFBQWlCO1FBQzdELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFlLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsOERBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEQsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXMiOlsid2VicGFjazovL1Ntby8uL3NyYy9yZW5kZXIvc3VpL21hcHBlci50cz9iN2JjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFtTbW9vc2ljXShodHRwczovL2dpdGh1Yi5jb20vQWFyb25EYXZpZE5ld21hbi9TbW9vc2ljKVxyXG4vLyBDb3B5cmlnaHQgKGMpIEFhcm9uIERhdmlkIE5ld21hbiAyMDIxLlxyXG5pbXBvcnQgeyBTbW9TZWxlY3RvciwgU21vU2VsZWN0aW9uLCBNb2RpZmllclRhYiB9IGZyb20gJy4uLy4uL3Ntby94Zm9ybS9zZWxlY3Rpb25zJztcclxuaW1wb3J0IHsgT3V0bGluZUluZm8sIFN2Z0hlbHBlcnMgfSBmcm9tICcuL3N2Z0hlbHBlcnMnO1xyXG5pbXBvcnQgeyBsYXlvdXREZWJ1ZyB9IGZyb20gJy4vbGF5b3V0RGVidWcnO1xyXG5pbXBvcnQgeyBTdWlTY3JvbGxlciB9IGZyb20gJy4vc2Nyb2xsZXInO1xyXG5pbXBvcnQgeyBTbW9TeXN0ZW1TdGFmZiB9IGZyb20gJy4uLy4uL3Ntby9kYXRhL3N5c3RlbVN0YWZmJztcclxuaW1wb3J0IHsgU21vTWVhc3VyZSwgU21vVm9pY2UgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9tZWFzdXJlJztcclxuaW1wb3J0IHsgUGFzdGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zbW8veGZvcm0vY29weXBhc3RlJztcclxuaW1wb3J0IHsgU21vTm90ZU1vZGlmaWVyQmFzZSwgU21vTHlyaWMgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9ub3RlTW9kaWZpZXJzJztcclxuaW1wb3J0IHsgU3ZnQm94IH0gZnJvbSAnLi4vLi4vc21vL2RhdGEvY29tbW9uJztcclxuaW1wb3J0IHsgU21vTm90ZSB9IGZyb20gJy4uLy4uL3Ntby9kYXRhL25vdGUnO1xyXG5pbXBvcnQgeyBTbW9TY29yZSwgU21vTW9kaWZpZXIgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9zY29yZSc7XHJcbmltcG9ydCB7IFN2Z1BhZ2VNYXAgfSBmcm9tICcuL3N2Z1BhZ2VNYXAnO1xyXG5cclxuLyoqXHJcbiAqIERJIGluZm9ybWF0aW9uIGFib3V0IHJlbmRlcmVyLCBzbyB3ZSBjYW4gbm90aWZ5IHJlbmRlcmVyIGFuZCBpdCBjYW4gY29udGFpblxyXG4gKiBhIHRyYWNrZXIgb2JqZWN0XHJcbiAqIEBwYXJhbSBwYWdlTWFwIHtAbGluayBTdmdQYWdlTWFwfTogU3ZnUGFnZU1hcCAtIGNvbnRhaW5lciBvZiBTVkcgZWxlbWVudHMgYW5kIHZleCByZW5kZXJlcnNcclxuICogQHBhcmFtIHNjb3JlIHtAbGluayBTbW9TY29yZX1cclxuICogQHBhcmFtIGRpcnR5IGxldHMgdGhlIGNhbGxlciBrbm93IHRoZSBkaXNwbGF5IG5lZWRzIHVwZGF0ZVxyXG4gKiBAcGFyYW0gcGFzc1N0YXRlIHN0YXRlIG1hY2hpbmUgaW4gcmVuZGVyaW5nIHBhcnQvYWxsIG9mIHRoZSBzY29yZVxyXG4gKiBAcGFyYW0gcmVuZGVyUHJvbWlzZSBhd2FpdHMgb24gcmVuZGVyIGFsbFxyXG4gKiBAcGFyYW0gYWRkVG9SZXBsYWNlUXVldWUgYWRkcyBhIG1lYXN1cmUgdG8gdGhlIHF1aWNrIHVwZGF0ZSBxdWV1ZVxyXG4gKiBAcGFyYW0gcmVuZGVyRWxlbWVudCBhIGxpdHRsZSByZWR1bmRhbnQgd2l0aCBzdmdcclxuICogQGNhdGVnb3J5IFN1aVJlbmRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTdWlSZW5kZXJlckJhc2Uge1xyXG4gIHBhZ2VNYXA6IFN2Z1BhZ2VNYXAsXHJcbiAgc2NvcmU6IFNtb1Njb3JlIHwgbnVsbCxcclxuICBkaXJ0eTogYm9vbGVhbixcclxuICBwYXNzU3RhdGU6IG51bWJlcixcclxuICByZW5kZXJQcm9taXNlKCk6IFByb21pc2U8YW55PixcclxuICBhZGRUb1JlcGxhY2VRdWV1ZShtbTogU21vU2VsZWN0aW9uW10pOiB2b2lkLFxyXG4gIHJlbmRlckVsZW1lbnQ6IEVsZW1lbnRcclxufVxyXG4vKipcclxuICogdXNlZCB0byBwZXJmb3JtIGhpZ2hsaWdodHMgaW4gdGhlIGJhY2tncm91bmRkXHJcbiAqIEBjYXRlZ29yeSBTdWlSZW5kZXJcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGlnaGxpZ2h0UXVldWUge1xyXG4gIHNlbGVjdGlvbkNvdW50OiBudW1iZXIsIGRlZmVycmVkOiBib29sZWFuXHJcbn1cclxuLyoqXHJcbiAqIE1hcCB0aGUgbm90ZXMgaW4gdGhlIHN2ZyBzbyB0aGV5IGNhbiByZXNwb25kIHRvIGV2ZW50cyBhbmQgaW50ZXJhY3RcclxuICogd2l0aCB0aGUgbW91c2Uva2V5Ym9hcmRcclxuICogQGNhdGVnb3J5IFN1aVJlbmRlclxyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1aU1hcHBlciB7XHJcbiAgcmVuZGVyZXI6IFN1aVJlbmRlcmVyQmFzZTtcclxuICBzY3JvbGxlcjogU3VpU2Nyb2xsZXI7XHJcbiAgLy8gbWVhc3VyZSB0byBzZWxlY3RvciBtYXBcclxuICBtZWFzdXJlTm90ZU1hcDogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgU21vU2VsZWN0aW9uPiA9IHt9O1xyXG4gIC8vIG5vdGVzIGN1cnJlbnRseSBzZWxlY3RlZC4gIFNvbWV0aGluZyBpcyBhbHdheXMgc2VsZWN0ZWRcclxuICAvLyBtb2RpZmllcnMgKHRleHQgZXRjLikgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWRcclxuICBtb2RpZmllclNlbGVjdGlvbnM6IE1vZGlmaWVyVGFiW10gPSBbXTtcclxuICBzZWxlY3Rpb25zOiBTbW9TZWxlY3Rpb25bXSA9IFtdO1xyXG4gIC8vIFRoZSBsaXN0IG9mIG1vZGlmaWVycyBuZWFyIHRoZSBjdXJyZW50IHNlbGVjdGlvblxyXG4gIGxvY2FsTW9kaWZpZXJzOiBNb2RpZmllclRhYltdID0gW107XHJcbiAgbW9kaWZpZXJJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgbW9kaWZpZXJTdWdnZXN0aW9uOiBNb2RpZmllclRhYiB8IG51bGwgPSBudWxsO1xyXG4gIHBpdGNoSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIC8vIEJ5IGRlZmF1bHQsIGRlZmVyIGhpZ2hsaWdodHMgZm9yIHBlcmZvcm1hbmNlLlxyXG4gIGRlZmVySGlnaGxpZ2h0TW9kZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc3VnZ2VzdGlvbjogU21vU2VsZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgaGlnaGxpZ2h0UXVldWU6IEhpZ2hsaWdodFF1ZXVlO1xyXG4gIG1vdXNlSGludEJveDogT3V0bGluZUluZm8gfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3Rpb25SZWN0czogUmVjb3JkPG51bWJlciwgT3V0bGluZUluZm9bXT4gPSB7fTtcclxuICBvdXRsaW5lczogUmVjb3JkPHN0cmluZywgT3V0bGluZUluZm8+ID0ge307XHJcbiAgbWFwcGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBTdWlSZW5kZXJlckJhc2UsIHNjcm9sbGVyOiBTdWlTY3JvbGxlcikge1xyXG4gICAgLy8gcmVuZGVyZXIgcmVuZGVycyB0aGUgbXVzaWMgd2hlbiBpdCBjaGFuZ2VzXHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICB0aGlzLnNjcm9sbGVyID0gc2Nyb2xsZXI7XHJcbiAgICB0aGlzLm1vZGlmaWVySW5kZXggPSAtMTtcclxuICAgIHRoaXMubG9jYWxNb2RpZmllcnMgPSBbXTtcclxuICAgIC8vIGluZGV4IGlmIGEgc2luZ2xlIHBpdGNoIG9mIGEgY2hvcmQgaXMgc2VsZWN0ZWRcclxuICAgIHRoaXMucGl0Y2hJbmRleCA9IC0xO1xyXG4gICAgLy8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCB3aGljaCBpcyBhbHNvIHRoZSBjb3B5L3Bhc3RlIGRlc3RpbmF0aW9uXHJcbiAgICB0aGlzLmhpZ2hsaWdodFF1ZXVlID0geyBzZWxlY3Rpb25Db3VudDogMCwgZGVmZXJyZWQ6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBoaWdobGlnaHRTZWxlY3Rpb24oKTogdm9pZDtcclxuICBhYnN0cmFjdCBfZ3Jvd1NlbGVjdGlvblJpZ2h0KGhvbGQ/OiBib29sZWFuKTogbnVtYmVyOyAgXHJcbiAgYWJzdHJhY3QgX3NldE1vZGlmaWVyQXNTdWdnZXN0aW9uKHNlbDogTW9kaWZpZXJUYWIpOiB2b2lkO1xyXG4gIGFic3RyYWN0IF9zZXRBcnRpZmFjdEFzU3VnZ2VzdGlvbihzZWw6IFNtb1NlbGVjdGlvbik6IHZvaWQ7XHJcbiAgYWJzdHJhY3QgZ2V0SWRsZVRpbWUoKTogbnVtYmVyO1xyXG4gIHVwZGF0ZUhpZ2hsaWdodCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHRRdWV1ZS5kZWZlcnJlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodFF1ZXVlLnNlbGVjdGlvbkNvdW50ID0gMDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0UXVldWUuc2VsZWN0aW9uQ291bnQgPT09IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHRTZWxlY3Rpb24oKTtcclxuICAgICAgdGhpcy5oaWdobGlnaHRRdWV1ZS5kZWZlcnJlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHRRdWV1ZS5zZWxlY3Rpb25Db3VudCA9IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHNlbGYudXBkYXRlSGlnaGxpZ2h0KCk7XHJcbiAgICAgIH0sIDUwKTtcclxuICAgIH1cclxuICB9XHJcbiAgZGVmZXJIaWdobGlnaHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGVmZXJIaWdobGlnaHRNb2RlKSB7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGlmICghdGhpcy5oaWdobGlnaHRRdWV1ZS5kZWZlcnJlZCkge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodFF1ZXVlLmRlZmVycmVkID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc2VsZi51cGRhdGVIaWdobGlnaHQoKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgfVxyXG4gIH1cclxuICBfY3JlYXRlTG9jYWxNb2RpZmllcnNMaXN0KCkge1xyXG4gICAgdGhpcy5sb2NhbE1vZGlmaWVycyA9IFtdO1xyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIHRoaXMuc2VsZWN0aW9ucy5mb3JFYWNoKChzZWwpID0+IHtcclxuICAgICAgc2VsLm5vdGU/LmdldEdyYWNlTm90ZXMoKS5mb3JFYWNoKChnZykgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxNb2RpZmllcnMucHVzaCh7IGluZGV4LCBzZWxlY3Rpb246IHNlbCwgbW9kaWZpZXI6IGdnLCBib3g6IGdnLmxvZ2ljYWxCb3ggPz8gU3ZnQm94LmRlZmF1bHQgfSk7XHJcbiAgICAgICAgaW5kZXggKz0gMTtcclxuICAgICAgfSk7XHJcbiAgICAgIHNlbC5ub3RlPy5nZXRNb2RpZmllcnMoJ1Ntb0R5bmFtaWNUZXh0JykuZm9yRWFjaCgoZHluKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbE1vZGlmaWVycy5wdXNoKHsgaW5kZXgsIHNlbGVjdGlvbjogc2VsLCBtb2RpZmllcjogZHluLCBib3g6IGR5bi5sb2dpY2FsQm94ID8/IFN2Z0JveC5kZWZhdWx0IH0pO1xyXG4gICAgICAgIGluZGV4ICs9IDE7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWwubWVhc3VyZS5nZXRNb2RpZmllcnNCeVR5cGUoJ1Ntb1ZvbHRhJykuZm9yRWFjaCgodm9sdGEpID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsTW9kaWZpZXJzLnB1c2goeyBpbmRleCwgc2VsZWN0aW9uOiBzZWwsIG1vZGlmaWVyOiB2b2x0YSwgYm94OiB2b2x0YS5sb2dpY2FsQm94ID8/IFN2Z0JveC5kZWZhdWx0IH0pO1xyXG4gICAgICAgIGluZGV4ICs9IDE7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWwubWVhc3VyZS5nZXRNb2RpZmllcnNCeVR5cGUoJ1Ntb1RlbXBvVGV4dCcpLmZvckVhY2goKHRlbXBvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbE1vZGlmaWVycy5wdXNoKHsgaW5kZXgsIHNlbGVjdGlvbjogc2VsLCBtb2RpZmllcjogdGVtcG8sIGJveDogdGVtcG8ubG9naWNhbEJveCA/PyBTdmdCb3guZGVmYXVsdCB9KTtcclxuICAgICAgICBpbmRleCArPSAxO1xyXG4gICAgICB9KTtcclxuICAgICAgc2VsLnN0YWZmLnJlbmRlcmFibGVNb2RpZmllcnMuZm9yRWFjaCgobW9kKSA9PiB7XHJcbiAgICAgICAgaWYgKFNtb1NlbGVjdG9yLmd0ZXEoc2VsLnNlbGVjdG9yLCBtb2Quc3RhcnRTZWxlY3RvcikgJiZcclxuICAgICAgICAgIFNtb1NlbGVjdG9yLmx0ZXEoc2VsLnNlbGVjdG9yLCBtb2QuZW5kU2VsZWN0b3IpICYmIG1vZC5sb2dpY2FsQm94KSAge1xyXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5sb2NhbE1vZGlmaWVycy5maW5kKChtbSkgPT4gbW0ubW9kaWZpZXIuY3RvciA9PT0gbW9kLmN0b3IpO1xyXG4gICAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbE1vZGlmaWVycy5wdXNoKHsgaW5kZXgsIHNlbGVjdGlvbjogc2VsLCBtb2RpZmllcjogbW9kLCBib3g6IG1vZC5sb2dpY2FsQm94IH0pO1xyXG4gICAgICAgICAgICBpbmRleCArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIG1vZGlmaWVyIGlzIHNlbGVjdGVkIGdyYXBoaWNhbGx5LCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBsaXN0XHJcbiAgICogYW5kIGNyZWF0ZSBhIGxvY2FsIG1vZGlmaWVyIGxpc3RcclxuICAgKiBAcGFyYW0gbW9kaWZpZXJUYWJzIFxyXG4gICAqL1xyXG4gIGNyZWF0ZUxvY2FsTW9kaWZpZXJzRnJvbU1vZGlmaWVyVGFicyhtb2RpZmllclRhYnM6IE1vZGlmaWVyVGFiW10pIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbnM6IFNtb1NlbGVjdGlvbltdID0gW107XHJcbiAgICBjb25zdCBtb2RNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBtb2RpZmllclRhYnMuZm9yRWFjaCgobXQpID0+IHtcclxuICAgICAgaWYgKG10LnNlbGVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IFNtb1NlbGVjdG9yLmdldE5vdGVLZXkobXQuc2VsZWN0aW9uLnNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoIW1vZE1hcFtrZXldKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb25zLnB1c2gobXQuc2VsZWN0aW9uKTtcclxuICAgICAgICAgIG1vZE1hcFtrZXldID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHNlbGVjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IHNlbGVjdGlvbnM7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTW9kaWZpZXJzTGlzdCgpO1xyXG4gICAgICB0aGlzLmRlZmVySGlnaGxpZ2h0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbW92ZU1vZGlmaWVyU2VsZWN0aW9uQm94KCkge1xyXG4gICAgaWYgKHRoaXMub3V0bGluZXNbJ3N0YWZmTW9kaWZpZXInXSAmJiB0aGlzLm91dGxpbmVzWydzdGFmZk1vZGlmaWVyJ10uZWxlbWVudCkge1xyXG4gICAgICB0aGlzLm91dGxpbmVzWydzdGFmZk1vZGlmaWVyJ10uZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5vdXRsaW5lc1snc3RhZmZNb2RpZmllciddLmVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIHVzZWQgYnkgcmVtb3ZlIGRpYWxvZ3MgdG8gY2xlYXIgcmVtb3ZlZCB0aGluZ1xyXG4gIGNsZWFyTW9kaWZpZXJTZWxlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5tb2RpZmllclNlbGVjdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuX2NyZWF0ZUxvY2FsTW9kaWZpZXJzTGlzdCgpO1xyXG4gICAgdGhpcy5tb2RpZmllckluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnJlbW92ZU1vZGlmaWVyU2VsZWN0aW9uQm94KCk7XHJcbiAgfVxyXG4gIC8vICMjIyBsb2FkU2NvcmVcclxuICAvLyBXZSBhcmUgbG9hZGluZyBhIG5ldyBzY29yZS4gIGNsZWFyIHRoZSBtYXBzIHNvIHdlIGNhbiByZWJ1aWxkIHRoZW0gYWZ0ZXJcclxuICAvLyByZW5kZXJpbmdcclxuICBsb2FkU2NvcmUoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVOb3RlTWFwID0ge307XHJcbiAgICB0aGlzLmNsZWFyTW9kaWZpZXJTZWxlY3Rpb25zKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuaGlnaGxpZ2h0UXVldWUgPSB7IHNlbGVjdGlvbkNvdW50OiAwLCBkZWZlcnJlZDogZmFsc2UgfTtcclxuICB9XHJcblxyXG4gIC8vICMjIyBfY2xlYXJNZWFzdXJlQXJ0aWZhY3RzXHJcbiAgLy8gY2xlYXIgdGhlIG1lYXN1cmUgZnJvbSB0aGUgbWVhc3VyZSBhbmQgbm90ZSBtYXBzIHNvIHdlIGNhbiByZWJ1aWxkIGl0LlxyXG4gIGNsZWFyTWVhc3VyZU1hcChtZWFzdXJlOiBTbW9NZWFzdXJlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RvciA9IHsgc3RhZmY6IG1lYXN1cmUubWVhc3VyZU51bWJlci5zdGFmZklkLCBtZWFzdXJlOiBtZWFzdXJlLm1lYXN1cmVOdW1iZXIubWVhc3VyZUluZGV4LCB2b2ljZTogMCwgdGljazogMCwgcGl0Y2hlczogW10gfTtcclxuXHJcbiAgICAvLyBVbnNlbGVjdCBzZWxlY3Rpb25zIGluIHRoaXMgbWVhc3VyZSBzbyB3ZSBjYW4gcmVzZWxlY3QgdGhlbSB3aGVuIHJlLXRyYWNrZWRcclxuICAgIGNvbnN0IGFyOiBTbW9TZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdG9yLnN0YWZmICE9PSBzZWxlY3Rvci5zdGFmZiB8fCBzZWxlY3Rpb24uc2VsZWN0b3IubWVhc3VyZSAhPT0gc2VsZWN0b3IubWVhc3VyZSkge1xyXG4gICAgICAgIGFyLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMgPSBhcjtcclxuICB9XHJcblxyXG4gIF9jb3B5U2VsZWN0aW9uc0J5TWVhc3VyZShzdGFmZkluZGV4OiBudW1iZXIsIG1lYXN1cmVJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBydiA9IHRoaXMuc2VsZWN0aW9ucy5maWx0ZXIoKHNlbCkgPT4gc2VsLnNlbGVjdG9yLnN0YWZmID09PSBzdGFmZkluZGV4ICYmIHNlbC5zZWxlY3Rvci5tZWFzdXJlID09PSBtZWFzdXJlSW5kZXgpO1xyXG4gICAgY29uc3QgbWlzc2luZ05vdGVzID0gcnYuZmlsdGVyKChzZWwpID0+ICFzZWwubm90ZSk7XHJcbiAgICBpZiAocnYubGVuZ3RoIDwgMSB8fCBtaXNzaW5nTm90ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4geyB0aWNrczogMCwgc2VsZWN0b3JzOiBbXX07XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aWNrcyA9IHJ2Lmxlbmd0aCA8IDEgPyAwIDogcnYubWFwKChzZWwpID0+IChzZWwubm90ZSBhcyBTbW9Ob3RlKS50aWNrQ291bnQpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xyXG4gICAgY29uc3Qgc2VsZWN0b3JzOiBTbW9TZWxlY3RvcltdID0gW107XHJcbiAgICBydi5mb3JFYWNoKChzZWwpID0+IHtcclxuICAgICAgY29uc3QgbnNlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2VsLnNlbGVjdG9yKSk7XHJcbiAgICAgIGlmICghbnNlbC5waXRjaGVzKSB7XHJcbiAgICAgICAgbnNlbC5waXRjaGVzID0gW107XHJcbiAgICAgIH1cclxuICAgICAgc2VsZWN0b3JzLnB1c2gobnNlbCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IHRpY2tzLCBzZWxlY3RvcnMgfTtcclxuICB9XHJcbiAgZGVsZXRlTWVhc3VyZShzZWxlY3Rpb246IFNtb1NlbGVjdGlvbikge1xyXG4gICAgY29uc3Qgc2VsQ29weSA9IHRoaXMuX2NvcHlTZWxlY3Rpb25zQnlNZWFzdXJlKHNlbGVjdGlvbi5zZWxlY3Rvci5zdGFmZiwgc2VsZWN0aW9uLnNlbGVjdG9yLm1lYXN1cmUpXHJcbiAgICAgIC5zZWxlY3RvcnM7XHJcbiAgICB0aGlzLmNsZWFyTWVhc3VyZU1hcChzZWxlY3Rpb24ubWVhc3VyZSk7XHJcbiAgICBpZiAoc2VsQ29weS5sZW5ndGgpIHtcclxuICAgICAgc2VsQ29weS5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5zZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGVjdG9yKSk7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yLm1lYXN1cmUgPT09IDApIHtcclxuICAgICAgICAgIG5zZWwubWVhc3VyZSArPSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuc2VsLm1lYXN1cmUgLT0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25zLnB1c2godGhpcy5fZ2V0Q2xvc2VzdFRpY2sobnNlbCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgX3VwZGF0ZU5vdGVNb2RpZmllcihzZWxlY3Rpb246IFNtb1NlbGVjdGlvbiwgbW9kTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiwgbW9kaWZpZXI6IFNtb05vdGVNb2RpZmllckJhc2UsIGl4OiBudW1iZXIpIHtcclxuICAgIGlmICghbW9kTWFwW21vZGlmaWVyLmF0dHJzLmlkXSAmJiBtb2RpZmllci5sb2dpY2FsQm94KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucGFnZU1hcC5hZGRNb2RpZmllclRhYihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtb2RpZmllcixcclxuICAgICAgICAgIHNlbGVjdGlvbixcclxuICAgICAgICAgIGJveDogbW9kaWZpZXIubG9naWNhbEJveCxcclxuICAgICAgICAgIGluZGV4OiBpeFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaXggKz0gMTtcclxuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucmVuZGVyZXIucGFnZU1hcC5nZXRSZW5kZXJlckZyb21Nb2RpZmllcihtb2RpZmllcik7XHJcbiAgICAgIG1vZE1hcFttb2RpZmllci5hdHRycy5pZF0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl4O1xyXG4gIH1cclxuXHJcbiAgX3VwZGF0ZU1vZGlmaWVycygpIHtcclxuICAgIGxldCBpeCA9IDA7XHJcbiAgICBjb25zdCBtb2RNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBpZiAoIXRoaXMucmVuZGVyZXIuc2NvcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJlci5zY29yZS50ZXh0R3JvdXBzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XHJcbiAgICAgIGlmICghbW9kTWFwW21vZGlmaWVyLmF0dHJzLmlkXSAmJiBtb2RpZmllci5sb2dpY2FsQm94KSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5wYWdlTWFwLmFkZE1vZGlmaWVyVGFiKHtcclxuICAgICAgICAgIG1vZGlmaWVyLFxyXG4gICAgICAgICAgc2VsZWN0aW9uOiBudWxsLFxyXG4gICAgICAgICAgYm94OiBtb2RpZmllci5sb2dpY2FsQm94LFxyXG4gICAgICAgICAgaW5kZXg6IGl4XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXggKz0gMTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5tZWFzdXJlTm90ZU1hcCk7ICAgIFxyXG4gICAga2V5cy5mb3JFYWNoKChzZWxLZXkpID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5tZWFzdXJlTm90ZU1hcFtzZWxLZXldO1xyXG4gICAgICBzZWxlY3Rpb24uc3RhZmYucmVuZGVyYWJsZU1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xyXG4gICAgICAgIGlmIChTbW9TZWxlY3Rvci5jb250YWlucyhzZWxlY3Rpb24uc2VsZWN0b3IsIG1vZGlmaWVyLnN0YXJ0U2VsZWN0b3IsIG1vZGlmaWVyLmVuZFNlbGVjdG9yKSkge1xyXG4gICAgICAgICAgaWYgKCFtb2RNYXBbbW9kaWZpZXIuYXR0cnMuaWRdKSB7XHJcbiAgICAgICAgICAgIGlmIChtb2RpZmllci5sb2dpY2FsQm94KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5wYWdlTWFwLmFkZE1vZGlmaWVyVGFiKHtcclxuICAgICAgICAgICAgICAgIG1vZGlmaWVyLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgYm94OiBtb2RpZmllci5sb2dpY2FsQm94LFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGl4XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaXggKz0gMTtcclxuICAgICAgICAgICAgICBtb2RNYXBbbW9kaWZpZXIuYXR0cnMuaWRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNlbGVjdGlvbi5tZWFzdXJlLm1vZGlmaWVycy5mb3JFYWNoKChtb2RpZmllcikgPT4ge1xyXG4gICAgICAgIGlmIChtb2RpZmllci5hdHRycy5pZFxyXG4gICAgICAgICAgJiYgIW1vZE1hcFttb2RpZmllci5hdHRycy5pZF1cclxuICAgICAgICAgICYmIG1vZGlmaWVyLmxvZ2ljYWxCb3gpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIucGFnZU1hcC5hZGRNb2RpZmllclRhYih7XHJcbiAgICAgICAgICAgIG1vZGlmaWVyLFxyXG4gICAgICAgICAgICBzZWxlY3Rpb24sXHJcbiAgICAgICAgICAgIGJveDogU3ZnSGVscGVycy5zbW9Cb3gobW9kaWZpZXIubG9naWNhbEJveCksXHJcbiAgICAgICAgICAgIGluZGV4OiBpeFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpeCArPSAxO1xyXG4gICAgICAgICAgbW9kTWFwW21vZGlmaWVyLmF0dHJzLmlkXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2VsZWN0aW9uLm5vdGU/LnRleHRNb2RpZmllcnMuZm9yRWFjaCgobW9kaWZpZXIpID0+IHtcclxuICAgICAgICBpZiAobW9kaWZpZXIubG9naWNhbEJveCkge1xyXG4gICAgICAgICAgaXggPSB0aGlzLl91cGRhdGVOb3RlTW9kaWZpZXIoc2VsZWN0aW9uLCBtb2RNYXAsIG1vZGlmaWVyLCBpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNlbGVjdGlvbi5ub3RlPy5ncmFjZU5vdGVzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XHJcbiAgICAgICAgaXggPSB0aGlzLl91cGRhdGVOb3RlTW9kaWZpZXIoc2VsZWN0aW9uLCBtb2RNYXAsIG1vZGlmaWVyLCBpeCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vICMjIyBfZ2V0Q2xvc2VzdFRpY2tcclxuICAvLyBnaXZlbiBhIG11c2ljYWwgc2VsZWN0b3IsIGZpbmQgdGhlIG5vdGUgYXJ0aWZhY3QgdGhhdCBpcyBjbG9zZXN0IHRvIGl0LFxyXG4gIC8vIGlmIGFuIGV4YWN0IG1hdGNoIGlzIG5vdCBhdmFpbGFibGVcclxuICBfZ2V0Q2xvc2VzdFRpY2soc2VsZWN0b3I6IFNtb1NlbGVjdG9yKTogU21vU2VsZWN0aW9uIHtcclxuICAgIGxldCB0aWNrS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcclxuICAgIGNvbnN0IG1lYXN1cmVLZXkgPSBPYmplY3Qua2V5cyh0aGlzLm1lYXN1cmVOb3RlTWFwKS5maW5kKChrKSA9PlxyXG4gICAgICBTbW9TZWxlY3Rvci5zYW1lTWVhc3VyZSh0aGlzLm1lYXN1cmVOb3RlTWFwW2tdLnNlbGVjdG9yLCBzZWxlY3RvcilcclxuICAgICAgICAmJiB0aGlzLm1lYXN1cmVOb3RlTWFwW2tdLnNlbGVjdG9yLnRpY2sgPT09IDApO1xyXG4gICAgdGlja0tleSA9IE9iamVjdC5rZXlzKHRoaXMubWVhc3VyZU5vdGVNYXApLmZpbmQoKGspID0+XHJcbiAgICAgIFNtb1NlbGVjdG9yLnNhbWVOb3RlKHRoaXMubWVhc3VyZU5vdGVNYXBba10uc2VsZWN0b3IsIHNlbGVjdG9yKSk7XHJcbiAgICBjb25zdCBmaXJzdE9iaiA9IHRoaXMubWVhc3VyZU5vdGVNYXBbT2JqZWN0LmtleXModGhpcy5tZWFzdXJlTm90ZU1hcClbMF1dO1xyXG5cclxuICAgIGlmICh0aWNrS2V5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1lYXN1cmVOb3RlTWFwW3RpY2tLZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKG1lYXN1cmVLZXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWVhc3VyZU5vdGVNYXBbbWVhc3VyZUtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3RPYmo7XHJcbiAgfVxyXG5cclxuICAvLyAjIyMgX3NldE1vZGlmaWVyQm94ZXNcclxuICAvLyBDcmVhdGUgdGhlIERPTSBtb2RpZmllcnMgZm9yIHRoZSBseXJpY3MgYW5kIG90aGVyIG1vZGlmaWVyc1xyXG4gIF9zZXRNb2RpZmllckJveGVzKG1lYXN1cmU6IFNtb01lYXN1cmUpIHtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuZ2V0UmVuZGVyZXIobWVhc3VyZS5zdmcubG9naWNhbEJveCk7XHJcbiAgICBtZWFzdXJlLnZvaWNlcy5mb3JFYWNoKCh2b2ljZTogU21vVm9pY2UpID0+IHtcclxuICAgICAgdm9pY2Uubm90ZXMuZm9yRWFjaCgoc21vTm90ZTogU21vTm90ZSkgPT4gIHtcclxuICAgICAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICAgICAgY29uc3QgZWwgPSBjb250ZXh0LnN2Zy5nZXRFbGVtZW50QnlJZChzbW9Ob3RlLnJlbmRlcklkIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIFN2Z0hlbHBlcnMudXBkYXRlQXJ0aWZhY3RCb3goY29udGV4dCwgKGVsIGFzIGFueSksIHNtb05vdGUpO1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhpcywgb25seSB3b3JrcyBvbiB0aGUgZmlyc3QgbGluZS5cclxuICAgICAgICAgICAgc21vTm90ZS5nZXRNb2RpZmllcnMoJ1Ntb0x5cmljJykuZm9yRWFjaCgobHlyaWN0OiBTbW9Ob3RlTW9kaWZpZXJCYXNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbHlyaWM6IFNtb0x5cmljID0gbHlyaWN0IGFzIFNtb0x5cmljO1xyXG4gICAgICAgICAgICAgIGlmIChseXJpYy5nZXRUZXh0KCkubGVuZ3RoIHx8IGx5cmljLmlzSHlwaGVuYXRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBseXJpY0VsZW1lbnQgPSBjb250ZXh0LnN2Zy5nZXRFbGVtZW50QnlJZCgndmYtJyArIGx5cmljLmF0dHJzLmlkKSBhcyBTVkdTVkdFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKGx5cmljRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICBTdmdIZWxwZXJzLnVwZGF0ZUFydGlmYWN0Qm94KGNvbnRleHQsIGx5cmljRWxlbWVudCwgbHlyaWMgYXMgYW55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc21vTm90ZS5ncmFjZU5vdGVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgICAgICAgaWYgKGcuZWxlbWVudCkge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBnZWwgPSBjb250ZXh0LnN2Zy5nZXRFbGVtZW50QnlJZCgndmYtJyArIGcucmVuZGVySWQpIGFzIFNWR1NWR0VsZW1lbnQ7XHJcbiAgICAgICAgICAgIFN2Z0hlbHBlcnMudXBkYXRlQXJ0aWZhY3RCb3goY29udGV4dCwgZ2VsLCBnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc21vTm90ZS50ZXh0TW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtb2RpZmllci5sb2dpY2FsQm94ICYmIG1vZGlmaWVyLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICBTdmdIZWxwZXJzLnVwZGF0ZUFydGlmYWN0Qm94KGNvbnRleHQsIG1vZGlmaWVyLmVsZW1lbnQsIG1vZGlmaWVyIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgdHJ1ZSBvZiB0aGUgc2VsZWN0aW9ucyBhcmUgYWRqYWNlbnRcclxuICAgKiBAcGFyYW0gczEgYSBzZWxlY3Rpb25zXHJcbiAgICogQHBhcmFtIHMyIGFub3RoZXIgZWxlY3Rpb25cclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBpc0FkamFjZW50U2VsZWN0aW9uKHMxOiBTbW9TZWxlY3Rpb24sIHMyOiBTbW9TZWxlY3Rpb24pIHtcclxuICAgIGlmICghdGhpcy5yZW5kZXJlci5zY29yZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXh0U2VsID0gU21vU2VsZWN0aW9uLmFkdmFuY2VUaWNrcyh0aGlzLnJlbmRlcmVyLnNjb3JlLCBzMSwgMSk7XHJcbiAgICBpZiAoIW5leHRTZWwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtb1NlbGVjdG9yLmVxKG5leHRTZWwuc2VsZWN0b3IsIHMyLnNlbGVjdG9yKTtcclxuICB9XHJcbiAgYXJlU2VsZWN0aW9uc0FkamFjZW50KCkge1xyXG4gICAgbGV0IHNlbGVjdGlvbkl4ID0gMDtcclxuICAgIGZvciAoc2VsZWN0aW9uSXggPSAwOyB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoID4gMSAmJiBzZWxlY3Rpb25JeCA8IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggLSAxOyArK3NlbGVjdGlvbkl4KSB7XHJcbiAgICAgIGlmICghdGhpcy5pc0FkamFjZW50U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uc1tzZWxlY3Rpb25JeF0sIHRoaXMuc2VsZWN0aW9uc1tzZWxlY3Rpb25JeCArIDFdKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7ICAgIFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBpcyB0aGUgbG9naWMgdGhhdCBzdG9yZXMgdGhlIHNjcmVlbiBsb2NhdGlvbiBvZiBtdXNpYyBhZnRlciBpdCdzIHJlbmRlcmVkXHJcbiAgICovXHJcbiAgbWFwTWVhc3VyZShzdGFmZjogU21vU3lzdGVtU3RhZmYsIG1lYXN1cmU6IFNtb01lYXN1cmUsIHByaW50aW5nOiBib29sZWFuKSB7XHJcbiAgICBsZXQgdm9pY2VJeCA9IDA7XHJcbiAgICBsZXQgc2VsZWN0ZWRUaWNrcyA9IDA7XHJcblxyXG4gICAgLy8gV2UgdHJ5IHRvIHJlc3RvcmUgYmxvY2sgc2VsZWN0aW9ucy4gSWYgYWxsIHRoZSBzZWxlY3Rpb25zIGluIHRoaXMgYmxvY2sgYXJlIG5vdCBhZGphY2VudCwgb25seSByZXN0b3JlIGluZGl2aWR1YWwgc2VsZWN0aW9uc1xyXG4gICAgLy8gaWYgcG9zc2libGVcclxuICAgIGxldCBhZGphY2VudFNlbHMgPSB0aGlzLmFyZVNlbGVjdGlvbnNBZGphY2VudCgpO1xyXG4gICAgY29uc3QgbGFzdFJlc29ydFNlbGVjdGlvbjogU21vU2VsZWN0aW9uW10gPSBbXTtcclxuICAgIGxldCBzZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBsZXQgdml4ID0gMDtcclxuICAgIGxldCByZXBsYWNlZFNlbGVjdG9ycyA9IDA7XHJcbiAgICBpZiAoIW1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3gpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2V0TW9kaWZpZXJCb3hlcyhtZWFzdXJlKTtcclxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xyXG4gICAgLy8gS2VlcCB0cmFjayBvZiBhbnkgY3VycmVudCBzZWxlY3Rpb25zIGluIHRoaXMgbWVhc3VyZSwgd2Ugd2lsbCB0cnkgdG8gcmVzdG9yZSB0aGVtLlxyXG4gICAgY29uc3Qgc2VscyA9IHRoaXMuX2NvcHlTZWxlY3Rpb25zQnlNZWFzdXJlKHN0YWZmLnN0YWZmSWQsIG1lYXN1cmUubWVhc3VyZU51bWJlci5tZWFzdXJlSW5kZXgpO1xyXG4gICAgdGhpcy5jbGVhck1lYXN1cmVNYXAobWVhc3VyZSk7XHJcbiAgICBpZiAoc2Vscy5zZWxlY3RvcnMubGVuZ3RoKSB7XHJcbiAgICAgIHZpeCA9IHNlbHMuc2VsZWN0b3JzWzBdLnZvaWNlO1xyXG4gICAgfVxyXG4gICAgc2Vscy5zZWxlY3RvcnMuZm9yRWFjaCgoc2VsKSA9PiB7XHJcbiAgICAgIHNlbC52b2ljZSA9IHZpeDtcclxuICAgIH0pO1xyXG5cclxuICAgIG1lYXN1cmUudm9pY2VzLmZvckVhY2goKHZvaWNlKSA9PiB7XHJcbiAgICAgIGxldCB0aWNrID0gMDtcclxuICAgICAgdm9pY2Uubm90ZXMuZm9yRWFjaCgobm90ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0ge1xyXG4gICAgICAgICAgc3RhZmY6IHN0YWZmLnN0YWZmSWQsXHJcbiAgICAgICAgICBtZWFzdXJlOiBtZWFzdXJlLm1lYXN1cmVOdW1iZXIubWVhc3VyZUluZGV4LFxyXG4gICAgICAgICAgdm9pY2U6IHZvaWNlSXgsXHJcbiAgICAgICAgICB0aWNrLFxyXG4gICAgICAgICAgcGl0Y2hlczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChtZWFzdXJlLnJlcGVhdFN5bWJvbCkge1xyXG4gICAgICAgICAgLy8gU29tZSBtZWFzdXJlcyBoYXZlIGEgc3ltYm9sIHRoYXQgcmVwbGFjZXMgdGhlIG5vdGVzLiAgVGhpcyBhbGxvd3MgdXMgdG8gc2VsZWN0XHJcbiAgICAgICAgICAvLyB0aGUgbWVhc3VyZVxyXG4gICAgICAgICAgY29uc3QgeCA9IG1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3gueCArIChtZWFzdXJlLnN2Zy5sb2dpY2FsQm94LndpZHRoIC8gdm9pY2Uubm90ZXMubGVuZ3RoKSAqIHRpY2s7XHJcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IG1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3gud2lkdGggLyB2b2ljZS5ub3Rlcy5sZW5ndGg7XHJcbiAgICAgICAgICBub3RlLmxvZ2ljYWxCb3ggPSB7IHgsIHk6IG1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3gueSwgd2lkdGgsIGhlaWdodDogbWVhc3VyZS5zdmcubG9naWNhbEJveC5oZWlnaHQgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgc2VsZWN0aW9uIGZvciB0aGUgbmV3bHkgcmVuZGVyZWQgbm90ZVxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IG5ldyBTbW9TZWxlY3Rpb24oe1xyXG4gICAgICAgICAgc2VsZWN0b3IsXHJcbiAgICAgICAgICBfc3RhZmY6IHN0YWZmLFxyXG4gICAgICAgICAgX21lYXN1cmU6IG1lYXN1cmUsXHJcbiAgICAgICAgICBfbm90ZTogbm90ZSxcclxuICAgICAgICAgIF9waXRjaGVzOiBbXSxcclxuICAgICAgICAgIGJveDogU3ZnSGVscGVycy5zbW9Cb3goU3ZnSGVscGVycy5zbW9Cb3gobm90ZS5sb2dpY2FsQm94KSksXHJcbiAgICAgICAgICB0eXBlOiAncmVuZGVyZWQnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgbWFwXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTWVhc3VyZU5vdGVNYXAoc2VsZWN0aW9uLCBwcmludGluZyk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoaXMgbm90ZSBpcyB0aGUgc2FtZSBsb2NhdGlvbiBhcyBzb21ldGhpbmcgdGhhdCB3YXMgc2VsZWN0ZWQsIHJlc2VsZWN0IGl0XHJcbiAgICAgICAgaWYgKHJlcGxhY2VkU2VsZWN0b3JzIDwgc2Vscy5zZWxlY3RvcnMubGVuZ3RoICYmIHNlbGVjdGlvbi5zZWxlY3Rvci50aWNrID09PSBzZWxzLnNlbGVjdG9yc1tyZXBsYWNlZFNlbGVjdG9yc10udGljayAmJlxyXG4gICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdG9yLnZvaWNlID09PSB2aXgpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAvLyBSZXNlbGVjdCBhbnkgcGl0Y2hlcy5cclxuICAgICAgICAgIGlmIChzZWxzLnNlbGVjdG9yc1tyZXBsYWNlZFNlbGVjdG9yc10ucGl0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNlbHMuc2VsZWN0b3JzW3JlcGxhY2VkU2VsZWN0b3JzXS5waXRjaGVzLmZvckVhY2goKHBpdGNoSXgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLm5vdGUgJiYgc2VsZWN0aW9uLm5vdGUucGl0Y2hlcy5sZW5ndGggPiBwaXRjaEl4KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0b3IucGl0Y2hlcy5wdXNoKHBpdGNoSXgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBub3RlID0gc2VsZWN0aW9uLm5vdGUgYXMgU21vTm90ZTtcclxuICAgICAgICAgIHNlbGVjdGVkVGlja3MgKz0gbm90ZS50aWNrQ291bnQ7XHJcbiAgICAgICAgICByZXBsYWNlZFNlbGVjdG9ycyArPSAxO1xyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhZGphY2VudFNlbHMgJiYgc2VsZWN0ZWRUaWNrcyA+IDAgJiYgc2VsZWN0ZWRUaWNrcyA8IHNlbHMudGlja3MgJiYgc2VsZWN0aW9uLnNlbGVjdG9yLnZvaWNlID09PSB2aXgpIHtcclxuICAgICAgICAgIC8vIHRyeSB0byBzZWxlY3QgdGhlIHNhbWUgbGVuZ3RoIG9mIG11c2ljIGFzIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkLiAgU28gYSAxLzQgdG8gMiAxLzgsIGJvdGhcclxuICAgICAgICAgIC8vIGFyZSBzZWxlY3RlZFxyXG4gICAgICAgICAgcmVwbGFjZWRTZWxlY3RvcnMgKz0gMTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICBzZWxlY3RlZFRpY2tzICs9IG5vdGUudGlja0NvdW50O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9PT0gMCAmJiBzZWxzLnNlbGVjdG9ycy5sZW5ndGggPT09IDAgJiYgbGFzdFJlc29ydFNlbGVjdGlvbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGxhc3RSZXNvcnRTZWxlY3Rpb24ucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aWNrICs9IDE7XHJcbiAgICAgIH0pO1xyXG4gICAgICB2b2ljZUl4ICs9IDE7XHJcbiAgICB9KTtcclxuICAgIC8vIFdlIGRlbGV0ZWQgYWxsIHRoZSBub3RlcyB0aGF0IHdlcmUgc2VsZWN0ZWQsIHNlbGVjdCBzb21ldGhpbmcgZWxzZVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IGxhc3RSZXNvcnRTZWxlY3Rpb247XHJcbiAgICB9XHJcbiAgICAvLyBJZiB0aGVyZSB3ZXJlIHNlbGVjdGlvbnMgb24gdGhpcyBtZWFzdXJlLCBoaWdobGlnaHQgdGhlbS5cclxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZGVmZXJIaWdobGlnaHQoKTtcclxuICAgIH1cclxuICAgIGxheW91dERlYnVnLnNldFRpbWVzdGFtcChsYXlvdXREZWJ1Zy5jb2RlUmVnaW9ucy5NQVAsIG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdGltZXN0YW1wKTtcclxuICB9XHJcblxyXG4gIF9nZXRUaWNrc0Zyb21TZWxlY3Rpb25zKCk6IG51bWJlciB7XHJcbiAgICBsZXQgcnYgPSAwO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmZvckVhY2goKHNlbCkgPT4ge1xyXG4gICAgICBpZiAoc2VsLm5vdGUpIHtcclxuICAgICAgICBydiArPSBzZWwubm90ZS50aWNrQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJ2O1xyXG4gIH1cclxuICBfY29weVNlbGVjdGlvbnMoKTogU21vU2VsZWN0b3JbXSB7XHJcbiAgICBjb25zdCBydjogU21vU2VsZWN0b3JbXSA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmZvckVhY2goKHNlbCkgPT4ge1xyXG4gICAgICBydi5wdXNoKHNlbC5zZWxlY3Rvcik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBydjtcclxuICB9XHJcbiAgLy8gIyMjIGdldEV4dHJlbWVTZWxlY3Rpb25cclxuICAvLyBHZXQgdGhlIHJpZ2h0bW9zdCAoMSkgb3IgbGVmdG1vc3QgKC0xKSBzZWxlY3Rpb25cclxuICBnZXRFeHRyZW1lU2VsZWN0aW9uKHNpZ246IG51bWJlcik6IFNtb1NlbGVjdGlvbiB7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgcnYgPSB0aGlzLnNlbGVjdGlvbnNbMF07XHJcbiAgICBmb3IgKGkgPSAxOyBpIDwgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHNhID0gdGhpcy5zZWxlY3Rpb25zW2ldLnNlbGVjdG9yO1xyXG4gICAgICBpZiAoc2EubWVhc3VyZSAqIHNpZ24gPiBydi5zZWxlY3Rvci5tZWFzdXJlICogc2lnbikge1xyXG4gICAgICAgIHJ2ID0gdGhpcy5zZWxlY3Rpb25zW2ldO1xyXG4gICAgICB9IGVsc2UgaWYgKHNhLm1lYXN1cmUgPT09IHJ2LnNlbGVjdG9yLm1lYXN1cmUgJiYgc2EudGljayAqIHNpZ24gPiBydi5zZWxlY3Rvci50aWNrICogc2lnbikge1xyXG4gICAgICAgIHJ2ID0gdGhpcy5zZWxlY3Rpb25zW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcnY7XHJcbiAgfVxyXG4gIF9zZWxlY3RDbG9zZXN0KHNlbGVjdG9yOiBTbW9TZWxlY3Rvcikge1xyXG4gICAgdmFyIGFydGlmYWN0ID0gdGhpcy5fZ2V0Q2xvc2VzdFRpY2soc2VsZWN0b3IpO1xyXG4gICAgaWYgKCFhcnRpZmFjdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25zLmZpbmQoKHNlbCkgPT4gSlNPTi5zdHJpbmdpZnkoc2VsLnNlbGVjdG9yKVxyXG4gICAgICA9PT0gSlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3Quc2VsZWN0b3IpKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3RlID0gYXJ0aWZhY3Qubm90ZSBhcyBTbW9Ob3RlO1xyXG4gICAgaWYgKHNlbGVjdG9yLnBpdGNoZXMgJiYgc2VsZWN0b3IucGl0Y2hlcy5sZW5ndGggJiYgc2VsZWN0b3IucGl0Y2hlcy5sZW5ndGggPD0gbm90ZS5waXRjaGVzLmxlbmd0aCkge1xyXG4gICAgICAvLyBJZiB0aGUgb2xkIHNlbGVjdGlvbiBoYWQgb25seSBhIHNpbmdsZSBwaXRjaCwgdHJ5IHRvIHJlY3JlYXRlIHRoYXQuXHJcbiAgICAgIGFydGlmYWN0LnNlbGVjdG9yLnBpdGNoZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGVjdG9yLnBpdGNoZXMpKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKGFydGlmYWN0KTtcclxuICB9XHJcbiAgLy8gIyMjIHVwZGF0ZU1hcFxyXG4gIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciByZW5kZXJpbmcgdGhlIHNjb3JlLiAgSXQgdXBkYXRlcyB0aGUgc2NvcmUgdG9cclxuICAvLyBncmFwaGljcyBtYXAgYW5kIHNlbGVjdHMgdGhlIGZpcnN0IG9iamVjdC5cclxuICB1cGRhdGVNYXAoKSB7XHJcbiAgICBjb25zdCB0cyA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xyXG4gICAgdGhpcy5tYXBwaW5nID0gdHJ1ZTtcclxuICAgIGxldCB0aWNrU2VsZWN0ZWQgPSAwO1xyXG4gICAgY29uc3Qgc2VsQ29weSA9IHRoaXMuX2NvcHlTZWxlY3Rpb25zKCk7XHJcbiAgICBjb25zdCB0aWNrc1NlbGVjdGVkQ29weSA9IHRoaXMuX2dldFRpY2tzRnJvbVNlbGVjdGlvbnMoKTtcclxuICAgIGNvbnN0IGZpcnN0U2VsZWN0aW9uID0gdGhpcy5nZXRFeHRyZW1lU2VsZWN0aW9uKC0xKTtcclxuICAgIHRoaXMuX3VwZGF0ZU1vZGlmaWVycygpO1xyXG5cclxuICAgIC8vIFRyeSB0byByZXN0b3JlIHNlbGVjdGlvbi4gIElmIHRoZXJlIHdlcmUgbm9uZSwganVzdCBzZWxlY3QgdGhlIGZpc3RcclxuICAgIC8vIHRoaW5nIGluIHRoZSBzY29yZVxyXG4gICAgY29uc3QgZmlyc3RLZXkgPSBTbW9TZWxlY3Rvci5nZXROb3RlS2V5KFNtb1NlbGVjdG9yLmRlZmF1bHQpO1xyXG4gICAgaWYgKCFzZWxDb3B5Lmxlbmd0aCAmJiB0aGlzLnJlbmRlcmVyLnNjb3JlKSB7XHJcbiAgICAvLyBJZiB0aGVyZSBpcyBub3RoaW5nIHJlbmRlcmVkLCBkb24ndCB1cGRhdGUgdHJhY2tlclxyXG4gICAgaWYgKHR5cGVvZih0aGlzLm1lYXN1cmVOb3RlTWFwW2ZpcnN0S2V5XSkgIT09ICd1bmRlZmluZWQnICYmICFmaXJzdFNlbGVjdGlvbilcclxuICAgICAgdGhpcy5zZWxlY3Rpb25zID0gW3RoaXMubWVhc3VyZU5vdGVNYXBbZmlyc3RLZXldXTtcclxuICAgIH0gIGVsc2UgaWYgKHRoaXMuYXJlU2VsZWN0aW9uc0FkamFjZW50KCkgJiYgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgLy8gSWYgdGhlcmUgYXJlIGFkamFjZW50IHNlbGVjdGlvbnMsIHJlc3RvcmUgc2VsZWN0aW9ucyB0byB0aGUgdGlja3MgdGhhdCBhcmUgaW4gdGhlIHNjb3JlIG5vd1xyXG4gICAgICBpZiAoIWZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgbGF5b3V0RGVidWcuc2V0VGltZXN0YW1wKGxheW91dERlYnVnLmNvZGVSZWdpb25zLlVQREFURV9NQVAsIG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdHMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5fc2VsZWN0Q2xvc2VzdChmaXJzdFNlbGVjdGlvbi5zZWxlY3Rvcik7XHJcbiAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5zZWxlY3Rpb25zWzBdO1xyXG4gICAgICB0aWNrU2VsZWN0ZWQgPSAoZmlyc3Qubm90ZSBhcyBTbW9Ob3RlKS50aWNrQ291bnQgPz8gIDA7XHJcbiAgICAgIHdoaWxlICh0aWNrU2VsZWN0ZWQgPCB0aWNrc1NlbGVjdGVkQ29weSAmJiBmaXJzdCkge1xyXG4gICAgICAgIGxldCBkZWx0YTogbnVtYmVyID0gdGhpcy5fZ3Jvd1NlbGVjdGlvblJpZ2h0KHRydWUpO1xyXG4gICAgICAgIGlmICghZGVsdGEpICB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGlja1NlbGVjdGVkICs9IGRlbHRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlZmVySGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLl9jcmVhdGVMb2NhbE1vZGlmaWVyc0xpc3QoKTtcclxuICAgIHRoaXMubWFwcGluZyA9IGZhbHNlO1xyXG4gICAgbGF5b3V0RGVidWcuc2V0VGltZXN0YW1wKGxheW91dERlYnVnLmNvZGVSZWdpb25zLlVQREFURV9NQVAsIG5ldyBEYXRlKCkudmFsdWVPZigpIC0gdHMpO1xyXG4gIH1cclxuICBjcmVhdGVNb3VzZVBvc2l0aW9uQm94KGxvZ2ljYWxCb3g6IFN2Z0JveCkge1xyXG4gICAgY29uc3QgcGFnZU1hcCA9IHRoaXMucmVuZGVyZXIucGFnZU1hcDtcclxuICAgIGNvbnN0IHBhZ2UgPSBwYWdlTWFwLmdldFJlbmRlcmVyRnJvbVBvaW50KGxvZ2ljYWxCb3gpO1xyXG4gICAgaWYgKHBhZ2UpIHtcclxuICAgICAgY29uc3QgY29mID0gKHBhZ2VNYXAuem9vbVNjYWxlICogcGFnZU1hcC5yZW5kZXJTY2FsZSk7ICBcclxuICAgICAgY29uc3QgZGVidWdCb3ggPSBTdmdIZWxwZXJzLnNtb0JveChsb2dpY2FsQm94KTtcclxuICAgICAgZGVidWdCb3gueSAtPSAocGFnZS5ib3gueSArIDUgLyBjb2YpO1xyXG4gICAgICBkZWJ1Z0JveC54IC09IChwYWdlLmJveC54ICsgNSAvIGNvZilcclxuICAgICAgZGVidWdCb3gud2lkdGggPSAxMCAvIGNvZjtcclxuICAgICAgZGVidWdCb3guaGVpZ2h0ID0gMTAgLyBjb2Y7XHJcbiAgICAgIGlmICghdGhpcy5tb3VzZUhpbnRCb3gpIHtcclxuICAgICAgICB0aGlzLm1vdXNlSGludEJveCA9ICB7XHJcbiAgICAgICAgICBzdHJva2U6IFN2Z1BhZ2VNYXAuc3Ryb2tlc1snZGVidWctbW91c2UtYm94J10sXHJcbiAgICAgICAgICBjbGFzc2VzOiAnaGlkZS1wcmludCcsXHJcbiAgICAgICAgICBib3g6IGRlYnVnQm94LFxyXG4gICAgICAgICAgc2Nyb2xsOiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICAgIGNvbnRleHQ6IHBhZ2UsXHJcbiAgICAgICAgICB0aW1lT2ZmOiAxMDAwXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vdXNlSGludEJveC5jb250ZXh0ID0gcGFnZTtcclxuICAgICAgdGhpcy5tb3VzZUhpbnRCb3guYm94ID0gZGVidWdCb3g7XHJcbiAgICAgIFN2Z0hlbHBlcnMub3V0bGluZVJlY3QodGhpcy5tb3VzZUhpbnRCb3gpO1xyXG4gICAgfSAgICAgICAgICAgIFxyXG4gIH1cclxuICBlcmFzZU1vdXNlUG9zaXRpb25Cb3goKSB7XHJcbiAgICBpZiAodGhpcy5tb3VzZUhpbnRCb3ggJiYgdGhpcy5tb3VzZUhpbnRCb3guZWxlbWVudCkge1xyXG4gICAgICB0aGlzLm1vdXNlSGludEJveC5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLm1vdXNlSGludEJveC5lbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBGaW5kIGFueSBtdXNpY2FsIGVsZW1lbnRzIGF0IHRoZSBzdXBwbGllZCBzY3JlZW4gY29vcmRpbmF0ZXMgYW5kIHNldCB0aGVtIGFzIHRoZSBzZWxlY3Rpb25cclxuICAgKiBAcGFyYW0gYmIgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgaW50ZXJzZWN0aW5nQXJ0aWZhY3QoYmI6IFN2Z0JveCkge1xyXG4gICAgY29uc3Qgc2Nyb2xsU3RhdGUgPSB0aGlzLnNjcm9sbGVyLnNjcm9sbFN0YXRlO1xyXG4gICAgYmIgPSBTdmdIZWxwZXJzLmJveFBvaW50cyhiYi54ICsgc2Nyb2xsU3RhdGUueCwgYmIueSArIHNjcm9sbFN0YXRlLnksIGJiLndpZHRoID8gYmIud2lkdGggOiAxLCBiYi5oZWlnaHQgPyBiYi5oZWlnaHQgOiAxKTtcclxuICAgIGNvbnN0IGxvZ2ljYWxCb3ggPSB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuY2xpZW50VG9TdmcoYmIpO1xyXG4gICAgY29uc3QgeyBzZWxlY3Rpb25zLCBwYWdlIH0gPSB0aGlzLnJlbmRlcmVyLnBhZ2VNYXAuZmluZEFydGlmYWN0KGxvZ2ljYWxCb3gpO1xyXG4gICAgaWYgKHBhZ2UpIHtcclxuICAgICAgY29uc3QgYXJ0aWZhY3RzID0gc2VsZWN0aW9ucztcclxuICAgICAgLy8gY29uc3QgYXJ0aWZhY3RzID0gU3ZnSGVscGVycy5maW5kSW50ZXJzZWN0aW5nQXJ0aWZhY3RGcm9tTWFwKGJiLCB0aGlzLm1lYXN1cmVOb3RlTWFwLCBTdmdIZWxwZXJzLnNtb0JveCh0aGlzLnNjcm9sbGVyLnNjcm9sbFN0YXRlLnNjcm9sbCkpO1xyXG4gICAgICAvLyBUT0RPOiBoYW5kbGUgb3ZlcmxhcHBpbmcgc3VnZ2VzdGlvbnNcclxuICAgICAgY29uc3QgbW9kaWZpZXJzID0gdGhpcy5yZW5kZXJlci5wYWdlTWFwLmZpbmRNb2RpZmllclRhYnMobG9naWNhbEJveCk7XHJcbiAgICAgIGlmIChtb2RpZmllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0TW9kaWZpZXJBc1N1Z2dlc3Rpb24obW9kaWZpZXJzWzBdKTtcclxuICAgICAgICB0aGlzLmVyYXNlTW91c2VQb3NpdGlvbkJveCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKGFydGlmYWN0cy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBhcnRpZmFjdCA9IGFydGlmYWN0c1swXTtcclxuICAgICAgICB0aGlzLmVyYXNlTW91c2VQb3NpdGlvbkJveCgpO1xyXG4gICAgICAgIHRoaXMuX3NldEFydGlmYWN0QXNTdWdnZXN0aW9uKGFydGlmYWN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBubyBpbnRlcnNlY3Rpb24sIHNob3cgbW91c2UgaGludFxyXG4gICAgICAgIHRoaXMuY3JlYXRlTW91c2VQb3NpdGlvbkJveChsb2dpY2FsQm94KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBfZ2V0UmVjdGFuZ2xlQ2hhaW4oc2VsZWN0aW9uOiBTbW9TZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IHJ2OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24ubm90ZSkge1xyXG4gICAgICByZXR1cm4gcnY7XHJcbiAgICB9XHJcbiAgICBydi5wdXNoKHNlbGVjdGlvbi5tZWFzdXJlLnN2Zy5wYWdlSW5kZXgpO1xyXG4gICAgcnYucHVzaChzZWxlY3Rpb24ubWVhc3VyZS5zdmcubGluZUluZGV4KTtcclxuICAgIHJ2LnB1c2goc2VsZWN0aW9uLm1lYXN1cmUubWVhc3VyZU51bWJlci5tZWFzdXJlSW5kZXgpO1xyXG4gICAgcmV0dXJuIHJ2O1xyXG4gIH1cclxuICBfdXBkYXRlTWVhc3VyZU5vdGVNYXAoYXJ0aWZhY3Q6IFNtb1NlbGVjdGlvbiwgcHJpbnRpbmc6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IG5vdGUgPSBhcnRpZmFjdC5ub3RlIGFzIFNtb05vdGU7XHJcbiAgICBjb25zdCBub3RlS2V5ID0gU21vU2VsZWN0b3IuZ2V0Tm90ZUtleShhcnRpZmFjdC5zZWxlY3Rvcik7XHJcbiAgICBjb25zdCBhY3RpdmVWb2ljZSA9IGFydGlmYWN0Lm1lYXN1cmUuZ2V0QWN0aXZlVm9pY2UoKTtcclxuICAgIC8vIG5vdCBoYXMgbm90IGJlZW4gZHJhd24geWV0LlxyXG4gICAgaWYgKCghYXJ0aWZhY3QuYm94KSB8fCAoIWFydGlmYWN0Lm1lYXN1cmUuc3ZnLmxvZ2ljYWxCb3gpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubWVhc3VyZU5vdGVNYXBbbm90ZUtleV0gPSBhcnRpZmFjdDtcclxuICAgIHRoaXMucmVuZGVyZXIucGFnZU1hcC5hZGRBcnRpZmFjdChhcnRpZmFjdCk7XHJcbiAgICBhcnRpZmFjdC5zY3JvbGxCb3ggPSB7IHg6IGFydGlmYWN0LmJveC54LFxyXG4gICAgICB5OiBhcnRpZmFjdC5tZWFzdXJlLnN2Zy5sb2dpY2FsQm94LnkgfTtcclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/render/sui/mapper.ts\n\n}");
1230
1230
 
1231
1231
  /***/ },
1232
1232
 
@@ -3865,7 +3865,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
3865
3865
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3866
3866
 
3867
3867
  "use strict";
3868
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SuiPartInfoDialogVue: () => (/* binding */ SuiPartInfoDialogVue)\n/* harmony export */ });\n/* harmony import */ var _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/data/partInfo */ \"./src/smo/data/partInfo.ts\");\n/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/xform/selections */ \"./src/smo/xform/selections.ts\");\n/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dialog */ \"./src/ui/dialogs/dialog.ts\");\n/* harmony import */ var _ui_components_dialogs_partInfo_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/components/dialogs/partInfo.vue */ \"./src/ui/components/dialogs/partInfo.vue\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../common */ \"./src/ui/common.ts\");\nvar __awaiter = (undefined && undefined.__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};\n\n\n\n\n\nconst SuiPartInfoDialogVue = (parameters) => __awaiter(void 0, void 0, void 0, function* () {\n const selector = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.default;\n const selection = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.measureSelection(parameters.view.score, selector.staff, selector.measure);\n const backup = new _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_0__.SmoPartInfo(selection.staff.partInfo);\n let current = backup;\n let changed = false;\n const updatePartInfoCb = (partInfo) => __awaiter(void 0, void 0, void 0, function* () {\n changed = true;\n // Since update will change the displayed score, wait for any display change to complete first.\n yield parameters.view.renderer.updatePromise();\n // If we are expanding rests, we need to reload the part after setting the \n // part change. So we update the part display a second time with the new value.\n if (current.expandMultimeasureRests !== partInfo.expandMultimeasureRests) {\n parameters.view.resetPartView();\n }\n yield parameters.view.updatePartInfo(partInfo);\n current = backup;\n });\n const commitCb = () => __awaiter(void 0, void 0, void 0, function* () {\n });\n const cancelCb = () => __awaiter(void 0, void 0, void 0, function* () {\n if (changed) {\n yield parameters.view.renderer.updatePromise();\n if (current.expandMultimeasureRests !== backup.expandMultimeasureRests) {\n parameters.view.resetPartView();\n }\n yield parameters.view.updatePartInfo(backup);\n }\n });\n const rootId = (0,_common__WEBPACK_IMPORTED_MODULE_4__.replaceVueRoot)(_common__WEBPACK_IMPORTED_MODULE_4__.modalContainerId);\n const appParams = {\n domId: rootId,\n partInfo: current,\n label: 'Part Properties',\n updatePartInfoCb\n };\n (0,_dialog__WEBPACK_IMPORTED_MODULE_2__.InstallDialog)({\n app: _ui_components_dialogs_partInfo_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n appParams,\n root: rootId,\n dialogParams: parameters,\n commitCb,\n cancelCb\n });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdWkvZGlhbG9ncy9wYXJ0SW5mby50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHc0Q7QUFDaUI7QUFFYjtBQUNTO0FBQ047QUFHdEQsTUFBTSxvQkFBb0IsR0FBRyxDQUFPLFVBQTJCLEVBQUUsRUFBRTtJQUN4RSxNQUFNLFFBQVEsR0FBRyw4REFBVyxDQUFDLE9BQU8sQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRywrREFBWSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDO0lBQzFHLE1BQU0sTUFBTSxHQUFHLElBQUksMkRBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUNyQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFPLFFBQXFCLEVBQUUsRUFBRTtRQUN2RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsK0ZBQStGO1FBQy9GLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFL0MsMkVBQTJFO1FBQzNFLGdGQUFnRjtRQUNoRixJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsS0FBSyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUN6RSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEdBQVMsRUFBRTtJQUM1QixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsR0FBUyxFQUFFO1FBQzFCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9DLElBQUksT0FBTyxDQUFDLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN2RSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLENBQUM7WUFDRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsdURBQWMsQ0FBQyxxREFBZ0IsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sU0FBUyxHQUFHO1FBQ2hCLEtBQUssRUFBRSxNQUFNO1FBQ2IsUUFBUSxFQUFFLE9BQU87UUFDakIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixnQkFBZ0I7S0FDakIsQ0FBQztJQUNGLHNEQUFhLENBQUM7UUFDWixHQUFHLEVBQUUsMkVBQVc7UUFDaEIsU0FBUztRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osWUFBWSxFQUFFLFVBQVU7UUFDeEIsUUFBUTtRQUNSLFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU21vLy4vc3JjL3VpL2RpYWxvZ3MvcGFydEluZm8udHM/MWIzMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBbU21vb3NpY10oaHR0cHM6Ly9naXRodWIuY29tL0Fhcm9uRGF2aWROZXdtYW4vU21vb3NpYylcclxuLy8gQ29weXJpZ2h0IChjKSBBYXJvbiBEYXZpZCBOZXdtYW4gMjAyMS5cclxuaW1wb3J0IHsgU21vU2NvcmUgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9zY29yZSc7XHJcbmltcG9ydCB7IFNtb1BhcnRJbmZvIH0gZnJvbSAnLi4vLi4vc21vL2RhdGEvcGFydEluZm8nO1xyXG5pbXBvcnQgeyBTbW9TZWxlY3Rpb24sIFNtb1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vc21vL3hmb3JtL3NlbGVjdGlvbnMnO1xyXG5cclxuaW1wb3J0IHsgU3VpRGlhbG9nUGFyYW1zLCBJbnN0YWxsRGlhbG9nIH0gZnJvbSAnLi9kaWFsb2cnO1xyXG5pbXBvcnQgcGFydEluZm9BcHAgZnJvbSAnLi4vLi4vdWkvY29tcG9uZW50cy9kaWFsb2dzL3BhcnRJbmZvLnZ1ZSc7XHJcbmltcG9ydCB7IHJlcGxhY2VWdWVSb290LCBtb2RhbENvbnRhaW5lcklkIH0gZnJvbSAnLi4vY29tbW9uJztcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuZXhwb3J0IGNvbnN0IFN1aVBhcnRJbmZvRGlhbG9nVnVlID0gYXN5bmMgKHBhcmFtZXRlcnM6IFN1aURpYWxvZ1BhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHNlbGVjdG9yID0gU21vU2VsZWN0b3IuZGVmYXVsdDtcclxuICBjb25zdCBzZWxlY3Rpb24gPSBTbW9TZWxlY3Rpb24ubWVhc3VyZVNlbGVjdGlvbihwYXJhbWV0ZXJzLnZpZXcuc2NvcmUsIHNlbGVjdG9yLnN0YWZmLCBzZWxlY3Rvci5tZWFzdXJlKSE7XHJcbiAgY29uc3QgYmFja3VwID0gbmV3IFNtb1BhcnRJbmZvKHNlbGVjdGlvbi5zdGFmZi5wYXJ0SW5mbyk7XHJcbiAgbGV0IGN1cnJlbnQgPSBiYWNrdXA7XHJcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICBjb25zdCB1cGRhdGVQYXJ0SW5mb0NiID0gYXN5bmMgKHBhcnRJbmZvOiBTbW9QYXJ0SW5mbykgPT4ge1xyXG4gICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAvLyBTaW5jZSB1cGRhdGUgd2lsbCBjaGFuZ2UgdGhlIGRpc3BsYXllZCBzY29yZSwgd2FpdCBmb3IgYW55IGRpc3BsYXkgY2hhbmdlIHRvIGNvbXBsZXRlIGZpcnN0LlxyXG4gICAgYXdhaXQgcGFyYW1ldGVycy52aWV3LnJlbmRlcmVyLnVwZGF0ZVByb21pc2UoKTtcclxuICAgIFxyXG4gICAgLy8gSWYgd2UgYXJlIGV4cGFuZGluZyByZXN0cywgd2UgbmVlZCB0byByZWxvYWQgdGhlIHBhcnQgYWZ0ZXIgc2V0dGluZyB0aGUgXHJcbiAgICAvLyBwYXJ0IGNoYW5nZS4gIFNvIHdlIHVwZGF0ZSB0aGUgcGFydCBkaXNwbGF5IGEgc2Vjb25kIHRpbWUgd2l0aCB0aGUgbmV3IHZhbHVlLlxyXG4gICAgaWYgKGN1cnJlbnQuZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMgIT09IHBhcnRJbmZvLmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzKSB7XHJcbiAgICAgIHBhcmFtZXRlcnMudmlldy5yZXNldFBhcnRWaWV3KCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCBwYXJhbWV0ZXJzLnZpZXcudXBkYXRlUGFydEluZm8ocGFydEluZm8pO1xyXG4gICAgY3VycmVudCA9IGJhY2t1cDtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbW1pdENiID0gYXN5bmMgKCkgPT4ge1xyXG4gIH1cclxuICBjb25zdCBjYW5jZWxDYiA9IGFzeW5jICgpID0+IHtcclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIGF3YWl0IHBhcmFtZXRlcnMudmlldy5yZW5kZXJlci51cGRhdGVQcm9taXNlKCk7XHJcbiAgICAgIGlmIChjdXJyZW50LmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzICE9PSBiYWNrdXAuZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMpIHtcclxuICAgICAgICBwYXJhbWV0ZXJzLnZpZXcucmVzZXRQYXJ0VmlldygpO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHBhcmFtZXRlcnMudmlldy51cGRhdGVQYXJ0SW5mbyhiYWNrdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCByb290SWQgPSByZXBsYWNlVnVlUm9vdChtb2RhbENvbnRhaW5lcklkKTtcclxuICBjb25zdCBhcHBQYXJhbXMgPSB7XHJcbiAgICBkb21JZDogcm9vdElkLFxyXG4gICAgcGFydEluZm86IGN1cnJlbnQsXHJcbiAgICBsYWJlbDogJ1BhcnQgUHJvcGVydGllcycsXHJcbiAgICB1cGRhdGVQYXJ0SW5mb0NiXHJcbiAgfTtcclxuICBJbnN0YWxsRGlhbG9nKHtcclxuICAgIGFwcDogcGFydEluZm9BcHAsXHJcbiAgICBhcHBQYXJhbXMsXHJcbiAgICByb290OiByb290SWQsXHJcbiAgICBkaWFsb2dQYXJhbXM6IHBhcmFtZXRlcnMsXHJcbiAgICBjb21taXRDYiwgXHJcbiAgICBjYW5jZWxDYlxyXG4gIH0pO1xyXG59XHJcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/dialogs/partInfo.ts\n\n}");
3868
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SuiPartInfoDialogVue: () => (/* binding */ SuiPartInfoDialogVue)\n/* harmony export */ });\n/* harmony import */ var _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/data/partInfo */ \"./src/smo/data/partInfo.ts\");\n/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/xform/selections */ \"./src/smo/xform/selections.ts\");\n/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dialog */ \"./src/ui/dialogs/dialog.ts\");\n/* harmony import */ var _ui_components_dialogs_partInfo_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/components/dialogs/partInfo.vue */ \"./src/ui/components/dialogs/partInfo.vue\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../common */ \"./src/ui/common.ts\");\nvar __awaiter = (undefined && undefined.__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};\n\n\n\n\n\nconst SuiPartInfoDialogVue = (parameters) => __awaiter(void 0, void 0, void 0, function* () {\n const selector = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.default;\n const selection = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.measureSelection(parameters.view.score, selector.staff, selector.measure);\n const backup = new _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_0__.SmoPartInfo(selection.staff.partInfo);\n let current = backup;\n let changed = false;\n const updatePartInfoCb = (partInfo) => __awaiter(void 0, void 0, void 0, function* () {\n changed = true;\n // Since update will change the displayed score, wait for any display change to complete first.\n yield parameters.view.renderer.updatePromise();\n yield parameters.view.updatePartInfo(partInfo);\n // If we are expanding rests, we need to reload the part after setting the \n // part change. So we update the part display a second time with the new value.\n if (current.expandMultimeasureRests !== partInfo.expandMultimeasureRests ||\n current.stavesAfter !== partInfo.stavesAfter) {\n parameters.view.resetPartView();\n yield parameters.view.refreshViewport();\n }\n current = new _smo_data_partInfo__WEBPACK_IMPORTED_MODULE_0__.SmoPartInfo(partInfo);\n });\n const commitCb = () => __awaiter(void 0, void 0, void 0, function* () {\n });\n const cancelCb = () => __awaiter(void 0, void 0, void 0, function* () {\n if (changed) {\n yield parameters.view.renderer.updatePromise();\n if (current.expandMultimeasureRests !== backup.expandMultimeasureRests) {\n parameters.view.resetPartView();\n }\n yield parameters.view.updatePartInfo(backup);\n }\n });\n const rootId = (0,_common__WEBPACK_IMPORTED_MODULE_4__.replaceVueRoot)(_common__WEBPACK_IMPORTED_MODULE_4__.modalContainerId);\n const appParams = {\n domId: rootId,\n partInfo: current,\n label: 'Part Properties',\n updatePartInfoCb\n };\n (0,_dialog__WEBPACK_IMPORTED_MODULE_2__.InstallDialog)({\n app: _ui_components_dialogs_partInfo_vue__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n appParams,\n root: rootId,\n dialogParams: parameters,\n commitCb,\n cancelCb\n });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdWkvZGlhbG9ncy9wYXJ0SW5mby50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHc0Q7QUFDaUI7QUFFYjtBQUNTO0FBQ047QUFHdEQsTUFBTSxvQkFBb0IsR0FBRyxDQUFPLFVBQTJCLEVBQUUsRUFBRTtJQUN4RSxNQUFNLFFBQVEsR0FBRyw4REFBVyxDQUFDLE9BQU8sQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRywrREFBWSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBRSxDQUFDO0lBQzFHLE1BQU0sTUFBTSxHQUFHLElBQUksMkRBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUNyQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFPLFFBQXFCLEVBQUUsRUFBRTtRQUN2RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsK0ZBQStGO1FBQy9GLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFL0MsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQywyRUFBMkU7UUFDM0UsZ0ZBQWdGO1FBQ2hGLElBQUksT0FBTyxDQUFDLHVCQUF1QixLQUFLLFFBQVEsQ0FBQyx1QkFBdUI7WUFDdEUsT0FBTyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLDJEQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEdBQVMsRUFBRTtJQUM1QixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsR0FBUyxFQUFFO1FBQzFCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9DLElBQUksT0FBTyxDQUFDLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN2RSxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLENBQUM7WUFDRCxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsdURBQWMsQ0FBQyxxREFBZ0IsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sU0FBUyxHQUFHO1FBQ2hCLEtBQUssRUFBRSxNQUFNO1FBQ2IsUUFBUSxFQUFFLE9BQU87UUFDakIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixnQkFBZ0I7S0FDakIsQ0FBQztJQUNGLHNEQUFhLENBQUM7UUFDWixHQUFHLEVBQUUsMkVBQVc7UUFDaEIsU0FBUztRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osWUFBWSxFQUFFLFVBQVU7UUFDeEIsUUFBUTtRQUNSLFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vU21vLy4vc3JjL3VpL2RpYWxvZ3MvcGFydEluZm8udHM/MWIzMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBbU21vb3NpY10oaHR0cHM6Ly9naXRodWIuY29tL0Fhcm9uRGF2aWROZXdtYW4vU21vb3NpYylcclxuLy8gQ29weXJpZ2h0IChjKSBBYXJvbiBEYXZpZCBOZXdtYW4gMjAyMS5cclxuaW1wb3J0IHsgU21vU2NvcmUgfSBmcm9tICcuLi8uLi9zbW8vZGF0YS9zY29yZSc7XHJcbmltcG9ydCB7IFNtb1BhcnRJbmZvIH0gZnJvbSAnLi4vLi4vc21vL2RhdGEvcGFydEluZm8nO1xyXG5pbXBvcnQgeyBTbW9TZWxlY3Rpb24sIFNtb1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vc21vL3hmb3JtL3NlbGVjdGlvbnMnO1xyXG5cclxuaW1wb3J0IHsgU3VpRGlhbG9nUGFyYW1zLCBJbnN0YWxsRGlhbG9nIH0gZnJvbSAnLi9kaWFsb2cnO1xyXG5pbXBvcnQgcGFydEluZm9BcHAgZnJvbSAnLi4vLi4vdWkvY29tcG9uZW50cy9kaWFsb2dzL3BhcnRJbmZvLnZ1ZSc7XHJcbmltcG9ydCB7IHJlcGxhY2VWdWVSb290LCBtb2RhbENvbnRhaW5lcklkIH0gZnJvbSAnLi4vY29tbW9uJztcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuZXhwb3J0IGNvbnN0IFN1aVBhcnRJbmZvRGlhbG9nVnVlID0gYXN5bmMgKHBhcmFtZXRlcnM6IFN1aURpYWxvZ1BhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHNlbGVjdG9yID0gU21vU2VsZWN0b3IuZGVmYXVsdDtcclxuICBjb25zdCBzZWxlY3Rpb24gPSBTbW9TZWxlY3Rpb24ubWVhc3VyZVNlbGVjdGlvbihwYXJhbWV0ZXJzLnZpZXcuc2NvcmUsIHNlbGVjdG9yLnN0YWZmLCBzZWxlY3Rvci5tZWFzdXJlKSE7XHJcbiAgY29uc3QgYmFja3VwID0gbmV3IFNtb1BhcnRJbmZvKHNlbGVjdGlvbi5zdGFmZi5wYXJ0SW5mbyk7XHJcbiAgbGV0IGN1cnJlbnQgPSBiYWNrdXA7XHJcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICBjb25zdCB1cGRhdGVQYXJ0SW5mb0NiID0gYXN5bmMgKHBhcnRJbmZvOiBTbW9QYXJ0SW5mbykgPT4ge1xyXG4gICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAvLyBTaW5jZSB1cGRhdGUgd2lsbCBjaGFuZ2UgdGhlIGRpc3BsYXllZCBzY29yZSwgd2FpdCBmb3IgYW55IGRpc3BsYXkgY2hhbmdlIHRvIGNvbXBsZXRlIGZpcnN0LlxyXG4gICAgYXdhaXQgcGFyYW1ldGVycy52aWV3LnJlbmRlcmVyLnVwZGF0ZVByb21pc2UoKTtcclxuICAgIFxyXG4gICAgYXdhaXQgcGFyYW1ldGVycy52aWV3LnVwZGF0ZVBhcnRJbmZvKHBhcnRJbmZvKTtcclxuICAgIC8vIElmIHdlIGFyZSBleHBhbmRpbmcgcmVzdHMsIHdlIG5lZWQgdG8gcmVsb2FkIHRoZSBwYXJ0IGFmdGVyIHNldHRpbmcgdGhlIFxyXG4gICAgLy8gcGFydCBjaGFuZ2UuICBTbyB3ZSB1cGRhdGUgdGhlIHBhcnQgZGlzcGxheSBhIHNlY29uZCB0aW1lIHdpdGggdGhlIG5ldyB2YWx1ZS5cclxuICAgIGlmIChjdXJyZW50LmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzICE9PSBwYXJ0SW5mby5leHBhbmRNdWx0aW1lYXN1cmVSZXN0cyB8fFxyXG4gICAgICBjdXJyZW50LnN0YXZlc0FmdGVyICE9PSBwYXJ0SW5mby5zdGF2ZXNBZnRlcikge1xyXG4gICAgICBwYXJhbWV0ZXJzLnZpZXcucmVzZXRQYXJ0VmlldygpO1xyXG4gICAgICBhd2FpdCBwYXJhbWV0ZXJzLnZpZXcucmVmcmVzaFZpZXdwb3J0KCk7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50ID0gbmV3IFNtb1BhcnRJbmZvKHBhcnRJbmZvKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbW1pdENiID0gYXN5bmMgKCkgPT4ge1xyXG4gIH1cclxuICBjb25zdCBjYW5jZWxDYiA9IGFzeW5jICgpID0+IHtcclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIGF3YWl0IHBhcmFtZXRlcnMudmlldy5yZW5kZXJlci51cGRhdGVQcm9taXNlKCk7XHJcbiAgICAgIGlmIChjdXJyZW50LmV4cGFuZE11bHRpbWVhc3VyZVJlc3RzICE9PSBiYWNrdXAuZXhwYW5kTXVsdGltZWFzdXJlUmVzdHMpIHtcclxuICAgICAgICBwYXJhbWV0ZXJzLnZpZXcucmVzZXRQYXJ0VmlldygpO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHBhcmFtZXRlcnMudmlldy51cGRhdGVQYXJ0SW5mbyhiYWNrdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zdCByb290SWQgPSByZXBsYWNlVnVlUm9vdChtb2RhbENvbnRhaW5lcklkKTtcclxuICBjb25zdCBhcHBQYXJhbXMgPSB7XHJcbiAgICBkb21JZDogcm9vdElkLFxyXG4gICAgcGFydEluZm86IGN1cnJlbnQsXHJcbiAgICBsYWJlbDogJ1BhcnQgUHJvcGVydGllcycsXHJcbiAgICB1cGRhdGVQYXJ0SW5mb0NiXHJcbiAgfTtcclxuICBJbnN0YWxsRGlhbG9nKHtcclxuICAgIGFwcDogcGFydEluZm9BcHAsXHJcbiAgICBhcHBQYXJhbXMsXHJcbiAgICByb290OiByb290SWQsXHJcbiAgICBkaWFsb2dQYXJhbXM6IHBhcmFtZXRlcnMsXHJcbiAgICBjb21taXRDYiwgXHJcbiAgICBjYW5jZWxDYlxyXG4gIH0pO1xyXG59XHJcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/dialogs/partInfo.ts\n\n}");
3869
3869
 
3870
3870
  /***/ },
3871
3871