@zsviczian/excalidraw 0.11.0-obsidian-12 → 0.11.0-obsidian-15

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.
@@ -1851,7 +1851,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
1851
1851
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1852
1852
 
1853
1853
  "use strict";
1854
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"trackEvent\\\": () => (/* binding */ trackEvent)\\n/* harmony export */ });\\nvar _a, _b;\\r\\nconst trackEvent = typeof process !== \\\"undefined\\\" && ((_a = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-12\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) && typeof window !== \\\"undefined\\\" && window.gtag ? function (category, action, label, value) {\\r\\n try {\\r\\n window.gtag(\\\"event\\\", action, {\\r\\n event_category: category,\\r\\n event_label: label,\\r\\n value\\r\\n });\\r\\n }\\r\\n catch (error) {\\r\\n console.error(\\\"error logging to ga\\\", error);\\r\\n }\\r\\n} : typeof process !== \\\"undefined\\\" && ((_b = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-12\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID) ? function (category, action, label, value) { } : function (category, action, label, value) {\\r\\n // console.log(\\\"Track Event\\\", { category, action, label, value });\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQUcsT0FBTyxPQUFPLEtBQUssV0FBVyxLQUFJLGcwQkFBVywwQ0FBRSw2QkFBNkIsS0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQy9MLElBQUk7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDM0IsY0FBYyxFQUFFLFFBQVE7WUFDeEIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsS0FBSztTQUNOLENBQUMsQ0FBQztLQUNKO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksZzBCQUFXLDBDQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUs7SUFDekosa0VBQWtFO0FBQ3BFLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9hbmFseXRpY3MudHM/ZmIxMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdHJhY2tFdmVudCA9IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5SRUFDVF9BUFBfR09PR0xFX0FOQUxZVElDU19JRCAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5ndGFnID8gZnVuY3Rpb24gKGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkge1xuICB0cnkge1xuICAgIHdpbmRvdy5ndGFnKFwiZXZlbnRcIiwgYWN0aW9uLCB7XG4gICAgICBldmVudF9jYXRlZ29yeTogY2F0ZWdvcnksXG4gICAgICBldmVudF9sYWJlbDogbGFiZWwsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBsb2dnaW5nIHRvIGdhXCIsIGVycm9yKTtcbiAgfVxufSA6IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5KRVNUX1dPUktFUl9JRCA/IGZ1bmN0aW9uIChjYXRlZ29yeSwgYWN0aW9uLCBsYWJlbCwgdmFsdWUpIHt9IDogZnVuY3Rpb24gKGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkgey8vIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIHRyYWNrIGxvY2FsbHlcbiAgLy8gY29uc29sZS5sb2coXCJUcmFjayBFdmVudFwiLCB7IGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSB9KTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///../../analytics.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../analytics.ts?");
1854
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"trackEvent\\\": () => (/* binding */ trackEvent)\\n/* harmony export */ });\\nvar _a, _b;\\r\\nconst trackEvent = typeof process !== \\\"undefined\\\" && ((_a = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-15\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _a === void 0 ? void 0 : _a.REACT_APP_GOOGLE_ANALYTICS_ID) && typeof window !== \\\"undefined\\\" && window.gtag ? function (category, action, label, value) {\\r\\n try {\\r\\n window.gtag(\\\"event\\\", action, {\\r\\n event_category: category,\\r\\n event_label: label,\\r\\n value\\r\\n });\\r\\n }\\r\\n catch (error) {\\r\\n console.error(\\\"error logging to ga\\\", error);\\r\\n }\\r\\n} : typeof process !== \\\"undefined\\\" && ((_b = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-15\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _b === void 0 ? void 0 : _b.JEST_WORKER_ID) ? function (category, action, label, value) { } : function (category, action, label, value) {\\r\\n // console.log(\\\"Track Event\\\", { category, action, label, value });\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vYW5hbHl0aWNzLnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sTUFBTSxVQUFVLEdBQUcsT0FBTyxPQUFPLEtBQUssV0FBVyxLQUFJLGcwQkFBVywwQ0FBRSw2QkFBNkIsS0FBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQy9MLElBQUk7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDM0IsY0FBYyxFQUFFLFFBQVE7WUFDeEIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsS0FBSztTQUNOLENBQUMsQ0FBQztLQUNKO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLEtBQUksZzBCQUFXLDBDQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsVUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUs7SUFDekosa0VBQWtFO0FBQ3BFLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9hbmFseXRpY3MudHM/ZmIxMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdHJhY2tFdmVudCA9IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5SRUFDVF9BUFBfR09PR0xFX0FOQUxZVElDU19JRCAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5ndGFnID8gZnVuY3Rpb24gKGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkge1xuICB0cnkge1xuICAgIHdpbmRvdy5ndGFnKFwiZXZlbnRcIiwgYWN0aW9uLCB7XG4gICAgICBldmVudF9jYXRlZ29yeTogY2F0ZWdvcnksXG4gICAgICBldmVudF9sYWJlbDogbGFiZWwsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBsb2dnaW5nIHRvIGdhXCIsIGVycm9yKTtcbiAgfVxufSA6IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Py5KRVNUX1dPUktFUl9JRCA/IGZ1bmN0aW9uIChjYXRlZ29yeSwgYWN0aW9uLCBsYWJlbCwgdmFsdWUpIHt9IDogZnVuY3Rpb24gKGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSkgey8vIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIHRyYWNrIGxvY2FsbHlcbiAgLy8gY29uc29sZS5sb2coXCJUcmFjayBFdmVudFwiLCB7IGNhdGVnb3J5LCBhY3Rpb24sIGxhYmVsLCB2YWx1ZSB9KTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///../../analytics.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../analytics.ts?");
1855
1855
 
1856
1856
  /***/ }),
1857
1857
 
@@ -2940,7 +2940,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2940
2940
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2941
2941
 
2942
2942
  "use strict";
2943
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"Excalidraw\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.Excalidraw),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.THEME),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.bumpVersion),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.defaultLang),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.determineFocusDistance),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.exportToBlob),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.exportToSvg),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getCommonBoundingBox),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getMaximumGroups),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getSceneVersion),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.intersectElementWithLine),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.isInvisiblySmallElement),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.isLinearElement),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.languages),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.loadLibraryFromBlob),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.measureText),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.newElementWith),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restoreElements),\\n/* harmony export */ \\\"restoreLibraryItems\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restoreLibraryItems),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.serializeAsJSON),\\n/* harmony export */ \\\"serializeLibraryAsJSON\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.serializeLibraryAsJSON)\\n/* harmony export */ });\\n/* harmony import */ var _publicPath__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./publicPath */ \\\"./publicPath.js\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../public/fonts.css */ \\\"../../../public/fonts.css\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_public_fonts_css__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ \\\"./index.tsx\\\");\\n\\r\\n //export default Excalidraw; //zsviczian https://github.com/excalidraw/excalidraw/pull/5045 !!!\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9lbnRyeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc0I7QUFDYSxDQUFDLCtGQUErRjtBQUUzRyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2VudHJ5LmpzPzVhZTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiLi9wdWJsaWNQYXRoXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9wdWJsaWMvZm9udHMuY3NzXCI7IC8vZXhwb3J0IGRlZmF1bHQgRXhjYWxpZHJhdzsgLy96c3ZpY3ppYW4gaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9wdWxsLzUwNDUgISEhXG5cbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4XCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./entry.js\\n\");\n\n//# sourceURL=webpack://Excalidraw/./entry.js?");
2943
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.THEME),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.bumpVersion),\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.defaultLang),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.determineFocusDistance),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.exportToBlob),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.exportToSvg),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getCommonBoundingBox),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getMaximumGroups),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getNonDeletedElements),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.getSceneVersion),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.intersectElementWithLine),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.isInvisiblySmallElement),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.isLinearElement),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.languages),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.loadLibraryFromBlob),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.measureText),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.newElementWith),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restoreElements),\\n/* harmony export */ \\\"restoreLibraryItems\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.restoreLibraryItems),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.serializeAsJSON),\\n/* harmony export */ \\\"serializeLibraryAsJSON\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_2__.serializeLibraryAsJSON)\\n/* harmony export */ });\\n/* harmony import */ var _publicPath__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./publicPath */ \\\"./publicPath.js\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../public/fonts.css */ \\\"../../../public/fonts.css\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_public_fonts_css__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ \\\"./index.tsx\\\");\\n\\r\\n\\r\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Excalidraw); //zsviczian https://github.com/excalidraw/excalidraw/pull/5045 !!!\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9lbnRyeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc0I7QUFHYTtBQUNuQyxpRUFBZSxVQUFVLEVBQUMsQ0FBQyxrRUFBa0U7QUFFckUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9lbnRyeS5qcz81YWU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vcHVibGljUGF0aFwiO1xuaW1wb3J0IEV4Y2xpZHJhdyBmcm9tIFwiLi9pbmRleFwiOyAvL3pzdmljemlhbiBodHRwczovL2dpdGh1Yi5jb20vZXhjYWxpZHJhdy9leGNhbGlkcmF3L3B1bGwvNTA3OCAhISFcblxuaW1wb3J0IFwiLi4vLi4vLi4vcHVibGljL2ZvbnRzLmNzc1wiO1xuZXhwb3J0IGRlZmF1bHQgRXhjYWxpZHJhdzsgLy96c3ZpY3ppYW4gaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9wdWxsLzUwNDUgISEhXG5cbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4XCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./entry.js\\n\");\n\n//# sourceURL=webpack://Excalidraw/./entry.js?");
2944
2944
 
2945
2945
  /***/ }),
2946
2946
 
@@ -2951,7 +2951,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2951
2951
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2952
2952
 
2953
2953
  "use strict";
2954
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"Excalidraw\\\": () => (/* binding */ Excalidraw),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_8__.THEME),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__.bumpVersion),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_7__.defaultLang),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.determineFocusDistance),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.exportToBlob),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.exportToSvg),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.getCommonBoundingBox),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.getMaximumGroups),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_12__.getNonDeletedElements),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_12__.getSceneVersion),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.intersectElementWithLine),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_12__.isInvisiblySmallElement),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _element_typeChecks__WEBPACK_IMPORTED_MODULE_15__.isLinearElement),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_7__.languages),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.loadLibraryFromBlob),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.measureText),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__.newElementWith),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restoreElements),\\n/* harmony export */ \\\"restoreLibraryItems\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restoreLibraryItems),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.serializeAsJSON),\\n/* harmony export */ \\\"serializeLibraryAsJSON\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.serializeLibraryAsJSON)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \\\"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"./node_modules/@babel/runtime/helpers/defineProperty.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \\\"react\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _components_InitializeApp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/InitializeApp */ \\\"../../components/InitializeApp.tsx\\\");\\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/App */ \\\"../../components/App.tsx\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../css/app.scss */ \\\"../../css/app.scss\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_css_app_scss__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../css/styles.scss */ \\\"../../css/styles.scss\\\");\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_css_styles_scss__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../i18n */ \\\"../../i18n.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! jotai */ \\\"../../../node_modules/jotai/esm/index.js\\\");\\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../jotai */ \\\"../../jotai.ts\\\");\\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ \\\"../../../node_modules/react/jsx-runtime.js\\\");\\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../element */ \\\"../../element/index.ts\\\");\\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../data/restore */ \\\"../../data/restore.ts\\\");\\n/* harmony import */ var _packages_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../packages/utils */ \\\"../utils.ts\\\");\\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../element/typeChecks */ \\\"../../element/typeChecks.ts\\\");\\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../element/mutateElement */ \\\"../../element/mutateElement.ts\\\");\\n\\r\\n\\r\\nconst _excluded = [\\\"initialData\\\", \\\"UIOptions\\\"], _excluded2 = [\\\"initialData\\\", \\\"UIOptions\\\"];\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst ExcalidrawBase = function (props) {\\r\\n var _a, _b, _c;\\r\\n const { onChange, initialData, excalidrawRef, onCollabButtonClick, isCollaborating = false, onPointerUpdate, renderTopRightUI, renderFooter, langCode = _i18n__WEBPACK_IMPORTED_MODULE_7__.defaultLang.code, viewModeEnabled, zenModeEnabled, gridModeEnabled, libraryReturnUrl, theme, name, renderCustomStats, onPaste, onDrop, \\r\\n //zsviczian\\r\\n detectScroll = true, handleKeyboardGlobally = false, onLibraryChange, autoFocus = false, onBeforeTextEdit, \\r\\n //zsviczian\\r\\n onBeforeTextSubmit, \\r\\n //zsviczian\\r\\n generateIdForFile, onThemeChange, \\r\\n //zsviczian\\r\\n onLinkOpen, onLinkHover, \\r\\n //zsviczian\\r\\n onViewModeChange //zsviczian\\r\\n } = props;\\r\\n const canvasActions = (_a = props.UIOptions) === null || _a === void 0 ? void 0 : _a.canvasActions;\\r\\n const UIOptions = {\\r\\n canvasActions: _objectSpread(_objectSpread({}, _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_UI_OPTIONS.canvasActions), canvasActions)\\r\\n };\\r\\n if (canvasActions === null || canvasActions === void 0 ? void 0 : canvasActions.export) {\\r\\n UIOptions.canvasActions.export.saveFileToDisk = (_c = (_b = canvasActions.export) === null || _b === void 0 ? void 0 : _b.saveFileToDisk) !== null && _c !== void 0 ? _c : _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_UI_OPTIONS.canvasActions[\\\"export\\\"].saveFileToDisk;\\r\\n }\\r\\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(function () {\\r\\n // Block pinch-zooming on iOS outside of the content area\\r\\n const handleTouchMove = function (event) {\\r\\n // @ts-ignore\\r\\n if (typeof event.scale === \\\"number\\\" && event.scale !== 1) {\\r\\n event.preventDefault();\\r\\n }\\r\\n };\\r\\n document.addEventListener(\\\"touchmove\\\", handleTouchMove, {\\r\\n passive: false\\r\\n });\\r\\n return function () {\\r\\n document.removeEventListener(\\\"touchmove\\\", handleTouchMove);\\r\\n };\\r\\n }, []);\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_InitializeApp__WEBPACK_IMPORTED_MODULE_3__.InitializeApp, {\\r\\n langCode: langCode,\\r\\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(jotai__WEBPACK_IMPORTED_MODULE_11__.Provider, {\\r\\n unstable_createStore: function () {\\r\\n return _jotai__WEBPACK_IMPORTED_MODULE_9__.jotaiStore;\\r\\n },\\r\\n scope: _jotai__WEBPACK_IMPORTED_MODULE_9__.jotaiScope,\\r\\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_App__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"], {\\r\\n onChange: onChange,\\r\\n initialData: initialData,\\r\\n excalidrawRef: excalidrawRef,\\r\\n onCollabButtonClick: onCollabButtonClick,\\r\\n isCollaborating: isCollaborating,\\r\\n onPointerUpdate: onPointerUpdate,\\r\\n renderTopRightUI: renderTopRightUI,\\r\\n renderFooter: renderFooter,\\r\\n langCode: langCode,\\r\\n viewModeEnabled: viewModeEnabled,\\r\\n zenModeEnabled: zenModeEnabled,\\r\\n gridModeEnabled: gridModeEnabled,\\r\\n libraryReturnUrl: libraryReturnUrl,\\r\\n theme: theme,\\r\\n name: name,\\r\\n renderCustomStats: renderCustomStats,\\r\\n UIOptions: UIOptions,\\r\\n onPaste: onPaste,\\r\\n onDrop: onDrop //zsviczian\\r\\n ,\\r\\n detectScroll: detectScroll,\\r\\n handleKeyboardGlobally: handleKeyboardGlobally,\\r\\n onLibraryChange: onLibraryChange,\\r\\n autoFocus: autoFocus,\\r\\n onBeforeTextEdit: onBeforeTextEdit //zsviczian\\r\\n ,\\r\\n onBeforeTextSubmit: onBeforeTextSubmit //zsviczian\\r\\n ,\\r\\n generateIdForFile: generateIdForFile,\\r\\n onThemeChange: onThemeChange //zsviczian\\r\\n ,\\r\\n onLinkOpen: onLinkOpen,\\r\\n onLinkHover: onLinkHover //zsviczian\\r\\n ,\\r\\n onViewModeChange: onViewModeChange //zsviczian\\r\\n })\\r\\n })\\r\\n });\\r\\n};\\r\\nconst areEqual = function (prevProps, nextProps) {\\r\\n const { initialData: prevInitialData, UIOptions: prevUIOptions = {} } = prevProps, prev = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(prevProps, _excluded);\\r\\n const { initialData: nextInitialData, UIOptions: nextUIOptions = {} } = nextProps, next = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(nextProps, _excluded2); // comparing UIOptions\\r\\n const prevUIOptionsKeys = Object.keys(prevUIOptions);\\r\\n const nextUIOptionsKeys = Object.keys(nextUIOptions);\\r\\n if (prevUIOptionsKeys.length !== nextUIOptionsKeys.length) {\\r\\n return false;\\r\\n }\\r\\n const isUIOptionsSame = prevUIOptionsKeys.every(function (key) {\\r\\n if (key === \\\"canvasActions\\\") {\\r\\n const canvasOptionKeys = Object.keys(prevUIOptions.canvasActions);\\r\\n canvasOptionKeys.every(function (key) {\\r\\n var _a, _b, _c, _d;\\r\\n if (key === \\\"export\\\" && ((_a = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _a === void 0 ? void 0 : _a.export) && ((_b = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _b === void 0 ? void 0 : _b.export)) {\\r\\n return prevUIOptions.canvasActions.export.saveFileToDisk === nextUIOptions.canvasActions.export.saveFileToDisk;\\r\\n }\\r\\n return ((_c = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _c === void 0 ? void 0 : _c[key]) === ((_d = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _d === void 0 ? void 0 : _d[key]);\\r\\n });\\r\\n }\\r\\n return true;\\r\\n });\\r\\n const prevKeys = Object.keys(prevProps);\\r\\n const nextKeys = Object.keys(nextProps);\\r\\n return isUIOptionsSame && prevKeys.length === nextKeys.length && prevKeys.every(function (key) {\\r\\n return prev[key] === next[key];\\r\\n });\\r\\n};\\r\\nconst forwardedRefComp = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_2__.forwardRef)(function (props, ref) {\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(ExcalidrawBase, _objectSpread(_objectSpread({}, props), {}, {\\r\\n excalidrawRef: ref\\r\\n }));\\r\\n});\\r\\nconst Excalidraw = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_2___default().memo(forwardedRefComp, areEqual);\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZXMiOlsid2VicGFjazovLy8uL2luZGV4LnRzeD9jZTc0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImluaXRpYWxEYXRhXCIsIFwiVUlPcHRpb25zXCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcImluaXRpYWxEYXRhXCIsIFwiVUlPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCBmb3J3YXJkUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJbml0aWFsaXplQXBwIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvSW5pdGlhbGl6ZUFwcFwiO1xuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9BcHBcIjtcbmltcG9ydCBcIi4uLy4uL2Nzcy9hcHAuc2Nzc1wiO1xuaW1wb3J0IFwiLi4vLi4vY3NzL3N0eWxlcy5zY3NzXCI7XG5pbXBvcnQgeyBkZWZhdWx0TGFuZyB9IGZyb20gXCIuLi8uLi9pMThuXCI7XG5pbXBvcnQgeyBERUZBVUxUX1VJX09QVElPTlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHsgam90YWlTY29wZSwgam90YWlTdG9yZSB9IGZyb20gXCIuLi8uLi9qb3RhaVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgRXhjYWxpZHJhd0Jhc2UgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIGluaXRpYWxEYXRhLFxuICAgIGV4Y2FsaWRyYXdSZWYsXG4gICAgb25Db2xsYWJCdXR0b25DbGljayxcbiAgICBpc0NvbGxhYm9yYXRpbmcgPSBmYWxzZSxcbiAgICBvblBvaW50ZXJVcGRhdGUsXG4gICAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgICByZW5kZXJGb290ZXIsXG4gICAgbGFuZ0NvZGUgPSBkZWZhdWx0TGFuZy5jb2RlLFxuICAgIHZpZXdNb2RlRW5hYmxlZCxcbiAgICB6ZW5Nb2RlRW5hYmxlZCxcbiAgICBncmlkTW9kZUVuYWJsZWQsXG4gICAgbGlicmFyeVJldHVyblVybCxcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHJlbmRlckN1c3RvbVN0YXRzLFxuICAgIG9uUGFzdGUsXG4gICAgb25Ecm9wLFxuICAgIC8venN2aWN6aWFuXG4gICAgZGV0ZWN0U2Nyb2xsID0gdHJ1ZSxcbiAgICBoYW5kbGVLZXlib2FyZEdsb2JhbGx5ID0gZmFsc2UsXG4gICAgb25MaWJyYXJ5Q2hhbmdlLFxuICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIG9uQmVmb3JlVGV4dEVkaXQsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBvbkJlZm9yZVRleHRTdWJtaXQsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBnZW5lcmF0ZUlkRm9yRmlsZSxcbiAgICBvblRoZW1lQ2hhbmdlLFxuICAgIC8venN2aWN6aWFuXG4gICAgb25MaW5rT3BlbixcbiAgICBvbkxpbmtIb3ZlcixcbiAgICAvL3pzdmljemlhblxuICAgIG9uVmlld01vZGVDaGFuZ2UgLy96c3ZpY3ppYW5cblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNhbnZhc0FjdGlvbnMgPSBwcm9wcy5VSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM7XG4gIGNvbnN0IFVJT3B0aW9ucyA9IHtcbiAgICBjYW52YXNBY3Rpb25zOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIERFRkFVTFRfVUlfT1BUSU9OUy5jYW52YXNBY3Rpb25zKSwgY2FudmFzQWN0aW9ucylcbiAgfTtcblxuICBpZiAoY2FudmFzQWN0aW9ucz8uZXhwb3J0KSB7XG4gICAgVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrID0gY2FudmFzQWN0aW9ucy5leHBvcnQ/LnNhdmVGaWxlVG9EaXNrID8/IERFRkFVTFRfVUlfT1BUSU9OUy5jYW52YXNBY3Rpb25zLmV4cG9ydC5zYXZlRmlsZVRvRGlzaztcbiAgfVxuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gQmxvY2sgcGluY2gtem9vbWluZyBvbiBpT1Mgb3V0c2lkZSBvZiB0aGUgY29udGVudCBhcmVhXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAodHlwZW9mIGV2ZW50LnNjYWxlID09PSBcIm51bWJlclwiICYmIGV2ZW50LnNjYWxlICE9PSAxKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgaGFuZGxlVG91Y2hNb3ZlLCB7XG4gICAgICBwYXNzaXZlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5pdGlhbGl6ZUFwcCwge1xuICAgIGxhbmdDb2RlOiBsYW5nQ29kZSxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goUHJvdmlkZXIsIHtcbiAgICAgIHVuc3RhYmxlX2NyZWF0ZVN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqb3RhaVN0b3JlO1xuICAgICAgfSxcbiAgICAgIHNjb3BlOiBqb3RhaVNjb3BlLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEFwcCwge1xuICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIGluaXRpYWxEYXRhOiBpbml0aWFsRGF0YSxcbiAgICAgICAgZXhjYWxpZHJhd1JlZjogZXhjYWxpZHJhd1JlZixcbiAgICAgICAgb25Db2xsYWJCdXR0b25DbGljazogb25Db2xsYWJCdXR0b25DbGljayxcbiAgICAgICAgaXNDb2xsYWJvcmF0aW5nOiBpc0NvbGxhYm9yYXRpbmcsXG4gICAgICAgIG9uUG9pbnRlclVwZGF0ZTogb25Qb2ludGVyVXBkYXRlLFxuICAgICAgICByZW5kZXJUb3BSaWdodFVJOiByZW5kZXJUb3BSaWdodFVJLFxuICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgbGFuZ0NvZGU6IGxhbmdDb2RlLFxuICAgICAgICB2aWV3TW9kZUVuYWJsZWQ6IHZpZXdNb2RlRW5hYmxlZCxcbiAgICAgICAgemVuTW9kZUVuYWJsZWQ6IHplbk1vZGVFbmFibGVkLFxuICAgICAgICBncmlkTW9kZUVuYWJsZWQ6IGdyaWRNb2RlRW5hYmxlZCxcbiAgICAgICAgbGlicmFyeVJldHVyblVybDogbGlicmFyeVJldHVyblVybCxcbiAgICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICByZW5kZXJDdXN0b21TdGF0czogcmVuZGVyQ3VzdG9tU3RhdHMsXG4gICAgICAgIFVJT3B0aW9uczogVUlPcHRpb25zLFxuICAgICAgICBvblBhc3RlOiBvblBhc3RlLFxuICAgICAgICBvbkRyb3A6IG9uRHJvcCAvL3pzdmljemlhblxuICAgICAgICAsXG4gICAgICAgIGRldGVjdFNjcm9sbDogZGV0ZWN0U2Nyb2xsLFxuICAgICAgICBoYW5kbGVLZXlib2FyZEdsb2JhbGx5OiBoYW5kbGVLZXlib2FyZEdsb2JhbGx5LFxuICAgICAgICBvbkxpYnJhcnlDaGFuZ2U6IG9uTGlicmFyeUNoYW5nZSxcbiAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgIG9uQmVmb3JlVGV4dEVkaXQ6IG9uQmVmb3JlVGV4dEVkaXQgLy96c3ZpY3ppYW5cbiAgICAgICAgLFxuICAgICAgICBvbkJlZm9yZVRleHRTdWJtaXQ6IG9uQmVmb3JlVGV4dFN1Ym1pdCAvL3pzdmljemlhblxuICAgICAgICAsXG4gICAgICAgIGdlbmVyYXRlSWRGb3JGaWxlOiBnZW5lcmF0ZUlkRm9yRmlsZSxcbiAgICAgICAgb25UaGVtZUNoYW5nZTogb25UaGVtZUNoYW5nZSAvL3pzdmljemlhblxuICAgICAgICAsXG4gICAgICAgIG9uTGlua09wZW46IG9uTGlua09wZW4sXG4gICAgICAgIG9uTGlua0hvdmVyOiBvbkxpbmtIb3ZlciAvL3pzdmljemlhblxuICAgICAgICAsXG4gICAgICAgIG9uVmlld01vZGVDaGFuZ2U6IG9uVmlld01vZGVDaGFuZ2UgLy96c3ZpY3ppYW5cblxuICAgICAgfSlcbiAgICB9KVxuICB9KTtcbn07XG5cbmNvbnN0IGFyZUVxdWFsID0gZnVuY3Rpb24gKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpbml0aWFsRGF0YTogcHJldkluaXRpYWxEYXRhLFxuICAgIFVJT3B0aW9uczogcHJldlVJT3B0aW9ucyA9IHt9XG4gIH0gPSBwcmV2UHJvcHMsXG4gICAgICAgIHByZXYgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJldlByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHtcbiAgICBpbml0aWFsRGF0YTogbmV4dEluaXRpYWxEYXRhLFxuICAgIFVJT3B0aW9uczogbmV4dFVJT3B0aW9ucyA9IHt9XG4gIH0gPSBuZXh0UHJvcHMsXG4gICAgICAgIG5leHQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMobmV4dFByb3BzLCBfZXhjbHVkZWQyKTsgLy8gY29tcGFyaW5nIFVJT3B0aW9uc1xuXG5cbiAgY29uc3QgcHJldlVJT3B0aW9uc0tleXMgPSBPYmplY3Qua2V5cyhwcmV2VUlPcHRpb25zKTtcbiAgY29uc3QgbmV4dFVJT3B0aW9uc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0VUlPcHRpb25zKTtcblxuICBpZiAocHJldlVJT3B0aW9uc0tleXMubGVuZ3RoICE9PSBuZXh0VUlPcHRpb25zS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpc1VJT3B0aW9uc1NhbWUgPSBwcmV2VUlPcHRpb25zS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gXCJjYW52YXNBY3Rpb25zXCIpIHtcbiAgICAgIGNvbnN0IGNhbnZhc09wdGlvbktleXMgPSBPYmplY3Qua2V5cyhwcmV2VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMpO1xuICAgICAgY2FudmFzT3B0aW9uS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZXhwb3J0XCIgJiYgcHJldlVJT3B0aW9ucz8uY2FudmFzQWN0aW9ucz8uZXhwb3J0ICYmIG5leHRVSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM/LmV4cG9ydCkge1xuICAgICAgICAgIHJldHVybiBwcmV2VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrID09PSBuZXh0VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByZXZVSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM/LltrZXldID09PSBuZXh0VUlPcHRpb25zPy5jYW52YXNBY3Rpb25zPy5ba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgY29uc3QgcHJldktleXMgPSBPYmplY3Qua2V5cyhwcmV2UHJvcHMpO1xuICBjb25zdCBuZXh0S2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XG4gIHJldHVybiBpc1VJT3B0aW9uc1NhbWUgJiYgcHJldktleXMubGVuZ3RoID09PSBuZXh0S2V5cy5sZW5ndGggJiYgcHJldktleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBwcmV2W2tleV0gPT09IG5leHRba2V5XTtcbiAgfSk7XG59O1xuXG5jb25zdCBmb3J3YXJkZWRSZWZDb21wID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEV4Y2FsaWRyYXdCYXNlLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBleGNhbGlkcmF3UmVmOiByZWZcbiAgfSkpO1xufSk7XG5leHBvcnQgY29uc3QgRXhjYWxpZHJhdyA9IC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKGZvcndhcmRlZFJlZkNvbXAsIGFyZUVxdWFsKTtcbmV4cG9ydCB7IGdldFNjZW5lVmVyc2lvbiwgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQsIGdldE5vbkRlbGV0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi8uLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0TGFuZywgbGFuZ3VhZ2VzIH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmV4cG9ydCB7IHJlc3RvcmUsIHJlc3RvcmVBcHBTdGF0ZSwgcmVzdG9yZUVsZW1lbnRzLCByZXN0b3JlTGlicmFyeUl0ZW1zIH0gZnJvbSBcIi4uLy4uL2RhdGEvcmVzdG9yZVwiO1xuZXhwb3J0IHsgZXhwb3J0VG9DYW52YXMsIGV4cG9ydFRvQmxvYiwgZXhwb3J0VG9TdmcsIHNlcmlhbGl6ZUFzSlNPTiwgc2VyaWFsaXplTGlicmFyeUFzSlNPTiwgbG9hZExpYnJhcnlGcm9tQmxvYiwgbG9hZEZyb21CbG9iLCBnZXRGcmVlRHJhd1N2Z1BhdGgsIGdldENvbW1vbkJvdW5kaW5nQm94LCAvL3pzdmljemlhblxuZ2V0TWF4aW11bUdyb3VwcywgLy96c3ZpY3ppYW5cbmludGVyc2VjdEVsZW1lbnRXaXRoTGluZSwgLy96c3ZpY3ppYW5cbmRldGVybWluZUZvY3VzRGlzdGFuY2UsIC8venN2aWN6aWFuXG5tZWFzdXJlVGV4dCAvL3pzdmljemlhblxufSBmcm9tIFwiLi4vLi4vcGFja2FnZXMvdXRpbHNcIjtcbmV4cG9ydCB7IGlzTGluZWFyRWxlbWVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50L3R5cGVDaGVja3NcIjtcbmV4cG9ydCB7IEZPTlRfRkFNSUxZLCBUSEVNRSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmV4cG9ydCB7IG11dGF0ZUVsZW1lbnQsIG5ld0VsZW1lbnRXaXRoLCBidW1wVmVyc2lvbiB9IGZyb20gXCIuLi8uLi9lbGVtZW50L211dGF0ZUVsZW1lbnRcIjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./index.tsx\\n\");\n\n//# sourceURL=webpack://Excalidraw/./index.tsx?");
2954
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_8__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_8__.THEME),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__.bumpVersion),\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_7__.defaultLang),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.determineFocusDistance),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.exportToBlob),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.exportToSvg),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.getCommonBoundingBox),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.getMaximumGroups),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_12__.getNonDeletedElements),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_12__.getSceneVersion),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.intersectElementWithLine),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_12__.isInvisiblySmallElement),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _element_typeChecks__WEBPACK_IMPORTED_MODULE_15__.isLinearElement),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_7__.languages),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.loadLibraryFromBlob),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.measureText),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__.newElementWith),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restoreElements),\\n/* harmony export */ \\\"restoreLibraryItems\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_13__.restoreLibraryItems),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.serializeAsJSON),\\n/* harmony export */ \\\"serializeLibraryAsJSON\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_14__.serializeLibraryAsJSON)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \\\"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"./node_modules/@babel/runtime/helpers/defineProperty.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \\\"react\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _components_InitializeApp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/InitializeApp */ \\\"../../components/InitializeApp.tsx\\\");\\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/App */ \\\"../../components/App.tsx\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../css/app.scss */ \\\"../../css/app.scss\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_css_app_scss__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../css/styles.scss */ \\\"../../css/styles.scss\\\");\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_css_styles_scss__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../i18n */ \\\"../../i18n.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var jotai__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! jotai */ \\\"../../../node_modules/jotai/esm/index.js\\\");\\n/* harmony import */ var _jotai__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../jotai */ \\\"../../jotai.ts\\\");\\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ \\\"../../../node_modules/react/jsx-runtime.js\\\");\\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../element */ \\\"../../element/index.ts\\\");\\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../data/restore */ \\\"../../data/restore.ts\\\");\\n/* harmony import */ var _packages_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../packages/utils */ \\\"../utils.ts\\\");\\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../element/typeChecks */ \\\"../../element/typeChecks.ts\\\");\\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../element/mutateElement */ \\\"../../element/mutateElement.ts\\\");\\n\\r\\n\\r\\nconst _excluded = [\\\"initialData\\\", \\\"UIOptions\\\"], _excluded2 = [\\\"initialData\\\", \\\"UIOptions\\\"];\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst Excalidraw = function (props) {\\r\\n var _a, _b, _c;\\r\\n //zsviczian https://github.com/excalidraw/excalidraw/pull/5078 !!!\\r\\n const { onChange, initialData, excalidrawRef, onCollabButtonClick, isCollaborating = false, onPointerUpdate, renderTopRightUI, renderFooter, langCode = _i18n__WEBPACK_IMPORTED_MODULE_7__.defaultLang.code, viewModeEnabled, zenModeEnabled, gridModeEnabled, libraryReturnUrl, theme, name, renderCustomStats, onPaste, onDrop, \\r\\n //zsviczian\\r\\n detectScroll = true, handleKeyboardGlobally = false, onLibraryChange, autoFocus = false, onBeforeTextEdit, \\r\\n //zsviczian\\r\\n onBeforeTextSubmit, \\r\\n //zsviczian\\r\\n generateIdForFile, onThemeChange, \\r\\n //zsviczian\\r\\n onLinkOpen, onLinkHover, \\r\\n //zsviczian\\r\\n onViewModeChange //zsviczian\\r\\n } = props;\\r\\n const canvasActions = (_a = props.UIOptions) === null || _a === void 0 ? void 0 : _a.canvasActions;\\r\\n const UIOptions = {\\r\\n canvasActions: _objectSpread(_objectSpread({}, _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_UI_OPTIONS.canvasActions), canvasActions)\\r\\n };\\r\\n if (canvasActions === null || canvasActions === void 0 ? void 0 : canvasActions.export) {\\r\\n UIOptions.canvasActions.export.saveFileToDisk = (_c = (_b = canvasActions.export) === null || _b === void 0 ? void 0 : _b.saveFileToDisk) !== null && _c !== void 0 ? _c : _constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_UI_OPTIONS.canvasActions[\\\"export\\\"].saveFileToDisk;\\r\\n }\\r\\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(function () {\\r\\n // Block pinch-zooming on iOS outside of the content area\\r\\n const handleTouchMove = function (event) {\\r\\n // @ts-ignore\\r\\n if (typeof event.scale === \\\"number\\\" && event.scale !== 1) {\\r\\n event.preventDefault();\\r\\n }\\r\\n };\\r\\n document.addEventListener(\\\"touchmove\\\", handleTouchMove, {\\r\\n passive: false\\r\\n });\\r\\n return function () {\\r\\n document.removeEventListener(\\\"touchmove\\\", handleTouchMove);\\r\\n };\\r\\n }, []);\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_InitializeApp__WEBPACK_IMPORTED_MODULE_3__.InitializeApp, {\\r\\n langCode: langCode,\\r\\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(jotai__WEBPACK_IMPORTED_MODULE_11__.Provider, {\\r\\n unstable_createStore: function () {\\r\\n return _jotai__WEBPACK_IMPORTED_MODULE_9__.jotaiStore;\\r\\n },\\r\\n scope: _jotai__WEBPACK_IMPORTED_MODULE_9__.jotaiScope,\\r\\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_App__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"], {\\r\\n onChange: onChange,\\r\\n initialData: initialData,\\r\\n excalidrawRef: excalidrawRef,\\r\\n onCollabButtonClick: onCollabButtonClick,\\r\\n isCollaborating: isCollaborating,\\r\\n onPointerUpdate: onPointerUpdate,\\r\\n renderTopRightUI: renderTopRightUI,\\r\\n renderFooter: renderFooter,\\r\\n langCode: langCode,\\r\\n viewModeEnabled: viewModeEnabled,\\r\\n zenModeEnabled: zenModeEnabled,\\r\\n gridModeEnabled: gridModeEnabled,\\r\\n libraryReturnUrl: libraryReturnUrl,\\r\\n theme: theme,\\r\\n name: name,\\r\\n renderCustomStats: renderCustomStats,\\r\\n UIOptions: UIOptions,\\r\\n onPaste: onPaste,\\r\\n onDrop: onDrop //zsviczian\\r\\n ,\\r\\n detectScroll: detectScroll,\\r\\n handleKeyboardGlobally: handleKeyboardGlobally,\\r\\n onLibraryChange: onLibraryChange,\\r\\n autoFocus: autoFocus,\\r\\n onBeforeTextEdit: onBeforeTextEdit //zsviczian\\r\\n ,\\r\\n onBeforeTextSubmit: onBeforeTextSubmit //zsviczian\\r\\n ,\\r\\n generateIdForFile: generateIdForFile,\\r\\n onThemeChange: onThemeChange //zsviczian\\r\\n ,\\r\\n onLinkOpen: onLinkOpen,\\r\\n onLinkHover: onLinkHover //zsviczian\\r\\n ,\\r\\n onViewModeChange: onViewModeChange //zsviczian\\r\\n })\\r\\n })\\r\\n });\\r\\n};\\r\\nconst areEqual = function (prevProps, nextProps) {\\r\\n const { initialData: prevInitialData, UIOptions: prevUIOptions = {} } = prevProps, prev = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(prevProps, _excluded);\\r\\n const { initialData: nextInitialData, UIOptions: nextUIOptions = {} } = nextProps, next = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(nextProps, _excluded2); // comparing UIOptions\\r\\n const prevUIOptionsKeys = Object.keys(prevUIOptions);\\r\\n const nextUIOptionsKeys = Object.keys(nextUIOptions);\\r\\n if (prevUIOptionsKeys.length !== nextUIOptionsKeys.length) {\\r\\n return false;\\r\\n }\\r\\n const isUIOptionsSame = prevUIOptionsKeys.every(function (key) {\\r\\n if (key === \\\"canvasActions\\\") {\\r\\n const canvasOptionKeys = Object.keys(prevUIOptions.canvasActions);\\r\\n canvasOptionKeys.every(function (key) {\\r\\n var _a, _b, _c, _d;\\r\\n if (key === \\\"export\\\" && ((_a = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _a === void 0 ? void 0 : _a.export) && ((_b = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _b === void 0 ? void 0 : _b.export)) {\\r\\n return prevUIOptions.canvasActions.export.saveFileToDisk === nextUIOptions.canvasActions.export.saveFileToDisk;\\r\\n }\\r\\n return ((_c = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _c === void 0 ? void 0 : _c[key]) === ((_d = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _d === void 0 ? void 0 : _d[key]);\\r\\n });\\r\\n }\\r\\n return true;\\r\\n });\\r\\n const prevKeys = Object.keys(prevProps);\\r\\n const nextKeys = Object.keys(nextProps);\\r\\n return isUIOptionsSame && prevKeys.length === nextKeys.length && prevKeys.every(function (key) {\\r\\n return prev[key] === next[key];\\r\\n });\\r\\n};\\r\\nconst forwardedRefComp = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_2__.forwardRef)(function (props, ref) {\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(Excalidraw, _objectSpread(_objectSpread({}, props), {}, {\\r\\n excalidrawRef: ref\\r\\n }));\\r\\n}); //zsviczian https://github.com/excalidraw/excalidraw/pull/5078 !!!\\r\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().memo(forwardedRefComp, areEqual)); //zsviczian https://github.com/excalidraw/excalidraw/pull/5078 !!!\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQzZCO0FBQ047QUFDb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbmRleC50c3g/Y2U3NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJpbml0aWFsRGF0YVwiLCBcIlVJT3B0aW9uc1wiXSxcbiAgICAgIF9leGNsdWRlZDIgPSBbXCJpbml0aWFsRGF0YVwiLCBcIlVJT3B0aW9uc1wiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgZm9yd2FyZFJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSW5pdGlhbGl6ZUFwcCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL0luaXRpYWxpemVBcHBcIjtcbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvQXBwXCI7XG5pbXBvcnQgXCIuLi8uLi9jc3MvYXBwLnNjc3NcIjtcbmltcG9ydCBcIi4uLy4uL2Nzcy9zdHlsZXMuc2Nzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdExhbmcgfSBmcm9tIFwiLi4vLi4vaTE4blwiO1xuaW1wb3J0IHsgREVGQVVMVF9VSV9PUFRJT05TIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IGpvdGFpU2NvcGUsIGpvdGFpU3RvcmUgfSBmcm9tIFwiLi4vLi4vam90YWlcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IEV4Y2FsaWRyYXcgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgLy96c3ZpY3ppYW4gaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9wdWxsLzUwNzggISEhXG4gIGNvbnN0IHtcbiAgICBvbkNoYW5nZSxcbiAgICBpbml0aWFsRGF0YSxcbiAgICBleGNhbGlkcmF3UmVmLFxuICAgIG9uQ29sbGFiQnV0dG9uQ2xpY2ssXG4gICAgaXNDb2xsYWJvcmF0aW5nID0gZmFsc2UsXG4gICAgb25Qb2ludGVyVXBkYXRlLFxuICAgIHJlbmRlclRvcFJpZ2h0VUksXG4gICAgcmVuZGVyRm9vdGVyLFxuICAgIGxhbmdDb2RlID0gZGVmYXVsdExhbmcuY29kZSxcbiAgICB2aWV3TW9kZUVuYWJsZWQsXG4gICAgemVuTW9kZUVuYWJsZWQsXG4gICAgZ3JpZE1vZGVFbmFibGVkLFxuICAgIGxpYnJhcnlSZXR1cm5VcmwsXG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICByZW5kZXJDdXN0b21TdGF0cyxcbiAgICBvblBhc3RlLFxuICAgIG9uRHJvcCxcbiAgICAvL3pzdmljemlhblxuICAgIGRldGVjdFNjcm9sbCA9IHRydWUsXG4gICAgaGFuZGxlS2V5Ym9hcmRHbG9iYWxseSA9IGZhbHNlLFxuICAgIG9uTGlicmFyeUNoYW5nZSxcbiAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBvbkJlZm9yZVRleHRFZGl0LFxuICAgIC8venN2aWN6aWFuXG4gICAgb25CZWZvcmVUZXh0U3VibWl0LFxuICAgIC8venN2aWN6aWFuXG4gICAgZ2VuZXJhdGVJZEZvckZpbGUsXG4gICAgb25UaGVtZUNoYW5nZSxcbiAgICAvL3pzdmljemlhblxuICAgIG9uTGlua09wZW4sXG4gICAgb25MaW5rSG92ZXIsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBvblZpZXdNb2RlQ2hhbmdlIC8venN2aWN6aWFuXG5cbiAgfSA9IHByb3BzO1xuICBjb25zdCBjYW52YXNBY3Rpb25zID0gcHJvcHMuVUlPcHRpb25zPy5jYW52YXNBY3Rpb25zO1xuICBjb25zdCBVSU9wdGlvbnMgPSB7XG4gICAgY2FudmFzQWN0aW9uczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBERUZBVUxUX1VJX09QVElPTlMuY2FudmFzQWN0aW9ucyksIGNhbnZhc0FjdGlvbnMpXG4gIH07XG5cbiAgaWYgKGNhbnZhc0FjdGlvbnM/LmV4cG9ydCkge1xuICAgIFVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydC5zYXZlRmlsZVRvRGlzayA9IGNhbnZhc0FjdGlvbnMuZXhwb3J0Py5zYXZlRmlsZVRvRGlzayA/PyBERUZBVUxUX1VJX09QVElPTlMuY2FudmFzQWN0aW9ucy5leHBvcnQuc2F2ZUZpbGVUb0Rpc2s7XG4gIH1cblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIC8vIEJsb2NrIHBpbmNoLXpvb21pbmcgb24gaU9TIG91dHNpZGUgb2YgdGhlIGNvbnRlbnQgYXJlYVxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5zY2FsZSA9PT0gXCJudW1iZXJcIiAmJiBldmVudC5zY2FsZSAhPT0gMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGhhbmRsZVRvdWNoTW92ZSwge1xuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEluaXRpYWxpemVBcHAsIHtcbiAgICBsYW5nQ29kZTogbGFuZ0NvZGUsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFByb3ZpZGVyLCB7XG4gICAgICB1bnN0YWJsZV9jcmVhdGVTdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gam90YWlTdG9yZTtcbiAgICAgIH0sXG4gICAgICBzY29wZTogam90YWlTY29wZSxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChBcHAsIHtcbiAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICBpbml0aWFsRGF0YTogaW5pdGlhbERhdGEsXG4gICAgICAgIGV4Y2FsaWRyYXdSZWY6IGV4Y2FsaWRyYXdSZWYsXG4gICAgICAgIG9uQ29sbGFiQnV0dG9uQ2xpY2s6IG9uQ29sbGFiQnV0dG9uQ2xpY2ssXG4gICAgICAgIGlzQ29sbGFib3JhdGluZzogaXNDb2xsYWJvcmF0aW5nLFxuICAgICAgICBvblBvaW50ZXJVcGRhdGU6IG9uUG9pbnRlclVwZGF0ZSxcbiAgICAgICAgcmVuZGVyVG9wUmlnaHRVSTogcmVuZGVyVG9wUmlnaHRVSSxcbiAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXG4gICAgICAgIGxhbmdDb2RlOiBsYW5nQ29kZSxcbiAgICAgICAgdmlld01vZGVFbmFibGVkOiB2aWV3TW9kZUVuYWJsZWQsXG4gICAgICAgIHplbk1vZGVFbmFibGVkOiB6ZW5Nb2RlRW5hYmxlZCxcbiAgICAgICAgZ3JpZE1vZGVFbmFibGVkOiBncmlkTW9kZUVuYWJsZWQsXG4gICAgICAgIGxpYnJhcnlSZXR1cm5Vcmw6IGxpYnJhcnlSZXR1cm5VcmwsXG4gICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcmVuZGVyQ3VzdG9tU3RhdHM6IHJlbmRlckN1c3RvbVN0YXRzLFxuICAgICAgICBVSU9wdGlvbnM6IFVJT3B0aW9ucyxcbiAgICAgICAgb25QYXN0ZTogb25QYXN0ZSxcbiAgICAgICAgb25Ecm9wOiBvbkRyb3AgLy96c3ZpY3ppYW5cbiAgICAgICAgLFxuICAgICAgICBkZXRlY3RTY3JvbGw6IGRldGVjdFNjcm9sbCxcbiAgICAgICAgaGFuZGxlS2V5Ym9hcmRHbG9iYWxseTogaGFuZGxlS2V5Ym9hcmRHbG9iYWxseSxcbiAgICAgICAgb25MaWJyYXJ5Q2hhbmdlOiBvbkxpYnJhcnlDaGFuZ2UsXG4gICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICBvbkJlZm9yZVRleHRFZGl0OiBvbkJlZm9yZVRleHRFZGl0IC8venN2aWN6aWFuXG4gICAgICAgICxcbiAgICAgICAgb25CZWZvcmVUZXh0U3VibWl0OiBvbkJlZm9yZVRleHRTdWJtaXQgLy96c3ZpY3ppYW5cbiAgICAgICAgLFxuICAgICAgICBnZW5lcmF0ZUlkRm9yRmlsZTogZ2VuZXJhdGVJZEZvckZpbGUsXG4gICAgICAgIG9uVGhlbWVDaGFuZ2U6IG9uVGhlbWVDaGFuZ2UgLy96c3ZpY3ppYW5cbiAgICAgICAgLFxuICAgICAgICBvbkxpbmtPcGVuOiBvbkxpbmtPcGVuLFxuICAgICAgICBvbkxpbmtIb3Zlcjogb25MaW5rSG92ZXIgLy96c3ZpY3ppYW5cbiAgICAgICAgLFxuICAgICAgICBvblZpZXdNb2RlQ2hhbmdlOiBvblZpZXdNb2RlQ2hhbmdlIC8venN2aWN6aWFuXG5cbiAgICAgIH0pXG4gICAgfSlcbiAgfSk7XG59O1xuXG5jb25zdCBhcmVFcXVhbCA9IGZ1bmN0aW9uIChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5pdGlhbERhdGE6IHByZXZJbml0aWFsRGF0YSxcbiAgICBVSU9wdGlvbnM6IHByZXZVSU9wdGlvbnMgPSB7fVxuICB9ID0gcHJldlByb3BzLFxuICAgICAgICBwcmV2ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByZXZQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICBjb25zdCB7XG4gICAgaW5pdGlhbERhdGE6IG5leHRJbml0aWFsRGF0YSxcbiAgICBVSU9wdGlvbnM6IG5leHRVSU9wdGlvbnMgPSB7fVxuICB9ID0gbmV4dFByb3BzLFxuICAgICAgICBuZXh0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG5leHRQcm9wcywgX2V4Y2x1ZGVkMik7IC8vIGNvbXBhcmluZyBVSU9wdGlvbnNcblxuXG4gIGNvbnN0IHByZXZVSU9wdGlvbnNLZXlzID0gT2JqZWN0LmtleXMocHJldlVJT3B0aW9ucyk7XG4gIGNvbnN0IG5leHRVSU9wdGlvbnNLZXlzID0gT2JqZWN0LmtleXMobmV4dFVJT3B0aW9ucyk7XG5cbiAgaWYgKHByZXZVSU9wdGlvbnNLZXlzLmxlbmd0aCAhPT0gbmV4dFVJT3B0aW9uc0tleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXNVSU9wdGlvbnNTYW1lID0gcHJldlVJT3B0aW9uc0tleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChrZXkgPT09IFwiY2FudmFzQWN0aW9uc1wiKSB7XG4gICAgICBjb25zdCBjYW52YXNPcHRpb25LZXlzID0gT2JqZWN0LmtleXMocHJldlVJT3B0aW9ucy5jYW52YXNBY3Rpb25zKTtcbiAgICAgIGNhbnZhc09wdGlvbktleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcImV4cG9ydFwiICYmIHByZXZVSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM/LmV4cG9ydCAmJiBuZXh0VUlPcHRpb25zPy5jYW52YXNBY3Rpb25zPy5leHBvcnQpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydC5zYXZlRmlsZVRvRGlzayA9PT0gbmV4dFVJT3B0aW9ucy5jYW52YXNBY3Rpb25zLmV4cG9ydC5zYXZlRmlsZVRvRGlzaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcmV2VUlPcHRpb25zPy5jYW52YXNBY3Rpb25zPy5ba2V5XSA9PT0gbmV4dFVJT3B0aW9ucz8uY2FudmFzQWN0aW9ucz8uW2tleV07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG4gIGNvbnN0IHByZXZLZXlzID0gT2JqZWN0LmtleXMocHJldlByb3BzKTtcbiAgY29uc3QgbmV4dEtleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xuICByZXR1cm4gaXNVSU9wdGlvbnNTYW1lICYmIHByZXZLZXlzLmxlbmd0aCA9PT0gbmV4dEtleXMubGVuZ3RoICYmIHByZXZLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcHJldltrZXldID09PSBuZXh0W2tleV07XG4gIH0pO1xufTtcblxuY29uc3QgZm9yd2FyZGVkUmVmQ29tcCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChFeGNhbGlkcmF3LCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBleGNhbGlkcmF3UmVmOiByZWZcbiAgfSkpO1xufSk7IC8venN2aWN6aWFuIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC81MDc4ICEhIVxuXG5leHBvcnQgZGVmYXVsdCAvKiNfX1BVUkVfXyovUmVhY3QubWVtbyhmb3J3YXJkZWRSZWZDb21wLCBhcmVFcXVhbCk7IC8venN2aWN6aWFuIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC81MDc4ICEhIVxuXG5leHBvcnQgeyBnZXRTY2VuZVZlcnNpb24sIGlzSW52aXNpYmx5U21hbGxFbGVtZW50LCBnZXROb25EZWxldGVkRWxlbWVudHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudFwiO1xuZXhwb3J0IHsgZGVmYXVsdExhbmcsIGxhbmd1YWdlcyB9IGZyb20gXCIuLi8uLi9pMThuXCI7XG5leHBvcnQgeyByZXN0b3JlLCByZXN0b3JlQXBwU3RhdGUsIHJlc3RvcmVFbGVtZW50cywgcmVzdG9yZUxpYnJhcnlJdGVtcyB9IGZyb20gXCIuLi8uLi9kYXRhL3Jlc3RvcmVcIjtcbmV4cG9ydCB7IGV4cG9ydFRvQ2FudmFzLCBleHBvcnRUb0Jsb2IsIGV4cG9ydFRvU3ZnLCBzZXJpYWxpemVBc0pTT04sIHNlcmlhbGl6ZUxpYnJhcnlBc0pTT04sIGxvYWRMaWJyYXJ5RnJvbUJsb2IsIGxvYWRGcm9tQmxvYiwgZ2V0RnJlZURyYXdTdmdQYXRoLCBnZXRDb21tb25Cb3VuZGluZ0JveCwgLy96c3ZpY3ppYW5cbmdldE1heGltdW1Hcm91cHMsIC8venN2aWN6aWFuXG5pbnRlcnNlY3RFbGVtZW50V2l0aExpbmUsIC8venN2aWN6aWFuXG5kZXRlcm1pbmVGb2N1c0Rpc3RhbmNlLCAvL3pzdmljemlhblxubWVhc3VyZVRleHQgLy96c3ZpY3ppYW5cbn0gZnJvbSBcIi4uLy4uL3BhY2thZ2VzL3V0aWxzXCI7XG5leHBvcnQgeyBpc0xpbmVhckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC90eXBlQ2hlY2tzXCI7XG5leHBvcnQgeyBGT05UX0ZBTUlMWSwgVEhFTUUgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5leHBvcnQgeyBtdXRhdGVFbGVtZW50LCBuZXdFbGVtZW50V2l0aCwgYnVtcFZlcnNpb24gfSBmcm9tIFwiLi4vLi4vZWxlbWVudC9tdXRhdGVFbGVtZW50XCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./index.tsx\\n\");\n\n//# sourceURL=webpack://Excalidraw/./index.tsx?");
2955
2955
 
2956
2956
  /***/ }),
2957
2957
 
@@ -2962,7 +2962,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2962
2962
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2963
2963
 
2964
2964
  "use strict";
2965
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \\\"../../constants.ts\\\");\\n\\r\\nif (\\\"development\\\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\\r\\n /* eslint-disable */\\r\\n /* global __webpack_public_path__:writable */\\r\\n __webpack_require__.p = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\\\"@zsviczian/excalidraw\\\"}@${\\\"0.11.0-obsidian-12\\\"}/dist/`;\\r\\n}\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBRXRDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUVwQiw2Q0FBNkM7SUFDN0MscUJBQXVCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixJQUFJLHFCQUFxQix1QkFBb0IsSUFBSSxvQkFBdUIsUUFBUSxDQUFDO0NBQ3hJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcHVibGljUGF0aC5qcz8xMTVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOViB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHwgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059L2Rpc3QvYDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./publicPath.js\\n\");\n\n//# sourceURL=webpack://Excalidraw/./publicPath.js?");
2965
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants */ \\\"../../constants.ts\\\");\\n\\r\\nif (\\\"development\\\" !== _constants__WEBPACK_IMPORTED_MODULE_0__.ENV.TEST) {\\r\\n /* eslint-disable */\\r\\n /* global __webpack_public_path__:writable */\\r\\n __webpack_require__.p = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\\\"@zsviczian/excalidraw\\\"}@${\\\"0.11.0-obsidian-15\\\"}/dist/`;\\r\\n}\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wdWJsaWNQYXRoLmpzLmpzIiwibWFwcGluZ3MiOiI7O0FBQXNDO0FBRXRDLElBQUksYUFBb0IsS0FBSyxnREFBUSxFQUFFO0lBQ3JDLG9CQUFvQjtJQUVwQiw2Q0FBNkM7SUFDN0MscUJBQXVCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixJQUFJLHFCQUFxQix1QkFBb0IsSUFBSSxvQkFBdUIsUUFBUSxDQUFDO0NBQ3hJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcHVibGljUGF0aC5qcz8xMTVkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOViB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBFTlYuVEVTVCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4gIC8qIGdsb2JhbCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzp3cml0YWJsZSAqL1xuICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHdpbmRvdy5FWENBTElEUkFXX0FTU0VUX1BBVEggfHwgYGh0dHBzOi8vdW5wa2cuY29tLyR7cHJvY2Vzcy5lbnYuUEtHX05BTUV9QCR7cHJvY2Vzcy5lbnYuUEtHX1ZFUlNJT059L2Rpc3QvYDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./publicPath.js\\n\");\n\n//# sourceURL=webpack://Excalidraw/./publicPath.js?");
2966
2966
 
2967
2967
  /***/ }),
2968
2968
 
@@ -3072,7 +3072,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
3072
3072
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3073
3073
 
3074
3074
  "use strict";
3075
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"SVG_EXPORT_TAG\\\": () => (/* binding */ SVG_EXPORT_TAG),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* binding */ exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* binding */ exportToSvg),\\n/* harmony export */ \\\"getExportSize\\\": () => (/* binding */ getExportSize)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\\\");\\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! roughjs/bin/rough */ \\\"../../../node_modules/roughjs/bin/rough.js\\\");\\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element/bounds */ \\\"../../element/bounds.ts\\\");\\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../renderer/renderScene */ \\\"../../renderer/renderScene.ts\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \\\"../../utils.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../appState */ \\\"../../appState.ts\\\");\\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/json */ \\\"../../data/json.ts\\\");\\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../element/image */ \\\"../../element/image.ts\\\");\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\\r\\nconst exportToCanvas = /*#__PURE__*/ function () {\\r\\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (elements, appState, files, _ref2) {\\r\\n let { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_5__.DEFAULT_EXPORT_PADDING, viewBackgroundColor } = _ref2;\\r\\n let createCanvas = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (width, height) {\\r\\n const canvas = document.createElement(\\\"canvas\\\");\\r\\n canvas.width = width * appState.exportScale;\\r\\n canvas.height = height * appState.exportScale;\\r\\n return {\\r\\n canvas,\\r\\n scale: appState.exportScale\\r\\n };\\r\\n };\\r\\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\\r\\n const { canvas, scale = 1 } = createCanvas(width, height);\\r\\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_6__.getDefaultAppState)();\\r\\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_8__.updateImageCache)({\\r\\n imageCache: new Map(),\\r\\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_8__.getInitializedImageElements)(elements).map(function (element) {\\r\\n return element.fileId;\\r\\n }),\\r\\n files\\r\\n });\\r\\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_3__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].canvas(canvas), canvas, {\\r\\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\\r\\n scrollX: -minX + exportPadding,\\r\\n scrollY: -minY + exportPadding,\\r\\n zoom: defaultAppState.zoom,\\r\\n remotePointerViewportCoords: {},\\r\\n remoteSelectedElementIds: {},\\r\\n shouldCacheIgnoreZoom: false,\\r\\n remotePointerUsernames: {},\\r\\n remotePointerUserStates: {},\\r\\n theme: appState.exportWithDarkMode ? \\\"dark\\\" : \\\"light\\\",\\r\\n imageCache,\\r\\n renderScrollbars: false,\\r\\n renderSelection: false,\\r\\n renderGrid: false,\\r\\n isExporting: true\\r\\n });\\r\\n return canvas;\\r\\n });\\r\\n return function exportToCanvas(_x, _x2, _x3, _x4) {\\r\\n return _ref.apply(this, arguments);\\r\\n };\\r\\n}();\\r\\nconst exportToSvg = /*#__PURE__*/ function () {\\r\\n var _ref3 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (elements, appState, files) {\\r\\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_5__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene } = appState;\\r\\n let metadata = \\\"\\\";\\r\\n if (exportEmbedScene) {\\r\\n try {\\r\\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \\\"../../data/image.ts\\\"))).encodeSvgMetadata({\\r\\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_7__.serializeAsJSON)(elements, appState, files || {}, \\\"local\\\")\\r\\n });\\r\\n }\\r\\n catch (error) {\\r\\n console.error(error);\\r\\n }\\r\\n }\\r\\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding); // initialize SVG root\\r\\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_5__.SVG_NS, \\\"svg\\\");\\r\\n svgRoot.setAttribute(\\\"version\\\", \\\"1.1\\\");\\r\\n svgRoot.setAttribute(\\\"xmlns\\\", _constants__WEBPACK_IMPORTED_MODULE_5__.SVG_NS);\\r\\n svgRoot.setAttribute(\\\"viewBox\\\", `0 0 ${width} ${height}`);\\r\\n svgRoot.setAttribute(\\\"width\\\", `${width * exportScale}`);\\r\\n svgRoot.setAttribute(\\\"height\\\", `${height * exportScale}`);\\r\\n if (appState.exportWithDarkMode) {\\r\\n svgRoot.setAttribute(\\\"filter\\\", _constants__WEBPACK_IMPORTED_MODULE_5__.THEME_FILTER);\\r\\n }\\r\\n let assetPath = \\\"https://excalidraw.com/\\\"; // Asset path needs to be determined only when using package\\r\\n if (true) {\\r\\n assetPath = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\\\"@zsviczian/excalidraw\\\"}@${\\\"0.11.0-obsidian-12\\\"}`;\\r\\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\\\"/\\\")) {\\r\\n assetPath = assetPath.replace(\\\"/\\\", `${window.location.origin}/`);\\r\\n }\\r\\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\\r\\n }\\r\\n svgRoot.innerHTML = `\\n ${SVG_EXPORT_TAG}\\n ${metadata}\\n <defs>\\n <style>\\n @font-face {\\n font-family: \\\"Virgil\\\";\\n src: url(\\\"${assetPath}Virgil.woff2\\\");\\n }\\n @font-face {\\n font-family: \\\"Cascadia\\\";\\n src: url(\\\"${assetPath}Cascadia.woff2\\\");\\n }\\n </style>\\n </defs>\\n `; // render background rect\\r\\n if (appState.exportBackground && viewBackgroundColor) {\\r\\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_5__.SVG_NS, \\\"rect\\\");\\r\\n rect.setAttribute(\\\"x\\\", \\\"0\\\");\\r\\n rect.setAttribute(\\\"y\\\", \\\"0\\\");\\r\\n rect.setAttribute(\\\"width\\\", `${width}`);\\r\\n rect.setAttribute(\\\"height\\\", `${height}`);\\r\\n rect.setAttribute(\\\"fill\\\", viewBackgroundColor);\\r\\n svgRoot.appendChild(rect);\\r\\n }\\r\\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].svg(svgRoot);\\r\\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_3__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\\r\\n offsetX: -minX + exportPadding,\\r\\n offsetY: -minY + exportPadding,\\r\\n exportWithDarkMode: appState.exportWithDarkMode\\r\\n });\\r\\n return svgRoot;\\r\\n });\\r\\n return function exportToSvg(_x5, _x6, _x7) {\\r\\n return _ref3.apply(this, arguments);\\r\\n };\\r\\n}(); // calculate smallest area to fit the contents in\\r\\nconst getCanvasSize = function (elements, exportPadding) {\\r\\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_2__.getCommonBounds)(elements);\\r\\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.distance)(minX, maxX) + exportPadding * 2;\\r\\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.distance)(minY, maxY) + exportPadding + exportPadding;\\r\\n return [minX, minY, width, height];\\r\\n};\\r\\nconst getExportSize = function (elements, exportPadding, scale) {\\r\\n const [, , width, height] = getCanvasSize(elements, exportPadding).map(function (dimension) {\\r\\n return Math.trunc(dimension * scale);\\r\\n });\\r\\n return [width, height];\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vc2NlbmUvZXhwb3J0LnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0U7QUFDbEM7QUFDYztBQUNvQjtBQUNwQztBQUN3QztBQUMzQjtBQUNGO0FBQ2tDO0FBQzFFLE1BQU0sY0FBYyxHQUFHLGdDQUFnQyxDQUFDO0FBQ3hELE1BQU0sY0FBYyxHQUFHLGFBQWE7SUFDekMsSUFBSSxJQUFJLEdBQUcsbUZBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSztRQUN0RSxJQUFJLEVBQ0YsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FBRyw4REFBc0IsRUFDdEMsbUJBQW1CLEVBQ3BCLEdBQUcsS0FBSyxDQUFDO1FBQ1YsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssRUFBRSxNQUFNO1lBQzVHLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQzlDLE9BQU87Z0JBQ0wsTUFBTTtnQkFDTixLQUFLLEVBQUUsUUFBUSxDQUFDLFdBQVc7YUFDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sRUFDSixNQUFNLEVBQ04sS0FBSyxHQUFHLENBQUMsRUFDVixHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxlQUFlLEdBQUcsNkRBQWtCLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEVBQ0osVUFBVSxFQUNYLEdBQUcsTUFBTSxnRUFBZ0IsQ0FBQztZQUN6QixVQUFVLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDckIsT0FBTyxFQUFFLDJFQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLE9BQU87Z0JBQ2xFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN4QixDQUFDLENBQUM7WUFDRixLQUFLO1NBQ04sQ0FBQyxDQUFDO1FBQ0gsa0VBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0VBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDekUsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2xFLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhO1lBQzlCLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhO1lBQzlCLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTtZQUMxQiwyQkFBMkIsRUFBRSxFQUFFO1lBQy9CLHdCQUF3QixFQUFFLEVBQUU7WUFDNUIscUJBQXFCLEVBQUUsS0FBSztZQUM1QixzQkFBc0IsRUFBRSxFQUFFO1lBQzFCLHVCQUF1QixFQUFFLEVBQUU7WUFDM0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3JELFVBQVU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUM7QUFDRyxNQUFNLFdBQVcsR0FBRyxhQUFhO0lBQ3RDLElBQUksS0FBSyxHQUFHLG1GQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSztRQUNoRSxNQUFNLEVBQ0osYUFBYSxHQUFHLDhEQUFzQixFQUN0QyxtQkFBbUIsRUFDbkIsV0FBVyxHQUFHLENBQUMsRUFDZixnQkFBZ0IsRUFDakIsR0FBRyxRQUFRLENBQUM7UUFDYixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFbEIsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJO2dCQUNGLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSx1SUFFRCxDQUFDLENBQUMsaUJBQWlCLENBQUM7b0JBQ3pDLElBQUksRUFBRSwyREFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUM7aUJBQ2hFLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QjtTQUNGO1FBRUQsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFFbEcsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw4Q0FBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLDhDQUFNLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtZQUMvQixPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxvREFBWSxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDLDREQUE0RDtRQUV2RyxJQUFJLElBQXFDLEVBQUU7WUFDekMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxxQkFBcUIsdUJBQW9CLElBQUksb0JBQXVCLEVBQUUsQ0FBQztZQUVuSCxJQUFJLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNsRTtZQUVELFNBQVMsR0FBRyxHQUFHLFNBQVMsMEJBQTBCLENBQUM7U0FDcEQ7UUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0lBQ3BCLGNBQWM7SUFDZCxRQUFROzs7OztvQkFLUSxTQUFTOzs7O29CQUlULFNBQVM7Ozs7R0FJMUIsQ0FBQyxDQUFDLHlCQUF5QjtRQUUxQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxtQkFBbUIsRUFBRTtZQUNwRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyw4Q0FBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUMvQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO1FBRUQsTUFBTSxJQUFJLEdBQUcsNkRBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyx1RUFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO1lBQ3JELE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhO1lBQzlCLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhO1lBQzlCLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUN2QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztBQUNKLENBQUMsRUFBRSxDQUFDLENBQUMsaURBQWlEO0FBRXRELE1BQU0sYUFBYSxHQUFHLFVBQVUsUUFBUSxFQUFFLGFBQWE7SUFDckQsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLGdFQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsZ0RBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FBRyxnREFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUM7QUFFSyxNQUFNLGFBQWEsR0FBRyxVQUFVLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSztJQUNuRSxNQUFNLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLFNBQVM7UUFDdkYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz8yNTM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI7XG5pbXBvcnQgcm91Z2ggZnJvbSBcInJvdWdoanMvYmluL3JvdWdoXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FWFBPUlRfUEFERElORywgU1ZHX05TLCBUSEVNRV9GSUxURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZUFzSlNPTiB9IGZyb20gXCIuLi9kYXRhL2pzb25cIjtcbmltcG9ydCB7IGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cywgdXBkYXRlSW1hZ2VDYWNoZSB9IGZyb20gXCIuLi9lbGVtZW50L2ltYWdlXCI7XG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcbmV4cG9ydCBjb25zdCBleHBvcnRUb0NhbnZhcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzLCBfcmVmMikge1xuICAgIGxldCB7XG4gICAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgICAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gICAgICB2aWV3QmFja2dyb3VuZENvbG9yXG4gICAgfSA9IF9yZWYyO1xuICAgIGxldCBjcmVhdGVDYW52YXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgc2NhbGU6IGFwcFN0YXRlLmV4cG9ydFNjYWxlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG4gICAgY29uc3Qge1xuICAgICAgY2FudmFzLFxuICAgICAgc2NhbGUgPSAxXG4gICAgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcbiAgICBjb25zdCB7XG4gICAgICBpbWFnZUNhY2hlXG4gICAgfSA9IHlpZWxkIHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgICAgaW1hZ2VDYWNoZTogbmV3IE1hcCgpLFxuICAgICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzKS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZmlsZUlkO1xuICAgICAgfSksXG4gICAgICBmaWxlc1xuICAgIH0pO1xuICAgIHJlbmRlclNjZW5lKGVsZW1lbnRzLCBhcHBTdGF0ZSwgbnVsbCwgc2NhbGUsIHJvdWdoLmNhbnZhcyhjYW52YXMpLCBjYW52YXMsIHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBjYW52YXM7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBleHBvcnRUb0NhbnZhcyhfeCwgX3gyLCBfeDMsIF94NCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBleHBvcnRTY2FsZSA9IDEsXG4gICAgICBleHBvcnRFbWJlZFNjZW5lXG4gICAgfSA9IGFwcFN0YXRlO1xuICAgIGxldCBtZXRhZGF0YSA9IFwiXCI7XG5cbiAgICBpZiAoZXhwb3J0RW1iZWRTY2VuZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWV0YWRhdGEgPSB5aWVsZCAoeWllbGQgaW1wb3J0KFxuICAgICAgICAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi9cbiAgICAgICAgXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKSkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7IC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcblxuICAgIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcblxuICAgIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiZmlsdGVyXCIsIFRIRU1FX0ZJTFRFUik7XG4gICAgfVxuXG4gICAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjsgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuSVNfRVhDQUxJRFJBV19OUE1fUEFDS0FHRSkge1xuICAgICAgYXNzZXRQYXRoID0gd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fCBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn1gO1xuXG4gICAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgICB9XG5cbiAgICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICAgIH1cblxuICAgIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGU+XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiVmlyZ2lsXCI7XG4gICAgICAgIHNyYzogdXJsKFwiJHthc3NldFBhdGh9VmlyZ2lsLndvZmYyXCIpO1xuICAgICAgfVxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkNhc2NhZGlhXCI7XG4gICAgICAgIHNyYzogdXJsKFwiJHthc3NldFBhdGh9Q2FzY2FkaWEud29mZjJcIik7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC9kZWZzPlxuICBgOyAvLyByZW5kZXIgYmFja2dyb3VuZCByZWN0XG5cbiAgICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBjb25zdCByZWN0ID0gc3ZnUm9vdC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwicmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZShcInlcIiwgXCIwXCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aH1gKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB2aWV3QmFja2dyb3VuZENvbG9yKTtcbiAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnN2ZyA9IHJvdWdoLnN2ZyhzdmdSb290KTtcbiAgICByZW5kZXJTY2VuZVRvU3ZnKGVsZW1lbnRzLCByc3ZnLCBzdmdSb290LCBmaWxlcyB8fCB7fSwge1xuICAgICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgICAgb2Zmc2V0WTogLW1pblkgKyBleHBvcnRQYWRkaW5nLFxuICAgICAgZXhwb3J0V2l0aERhcmtNb2RlOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGVcbiAgICB9KTtcbiAgICByZXR1cm4gc3ZnUm9vdDtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGV4cG9ydFRvU3ZnKF94NSwgX3g2LCBfeDcpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTsgLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuXG5jb25zdCBnZXRDYW52YXNTaXplID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKSB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IGdldENvbW1vbkJvdW5kcyhlbGVtZW50cyk7XG4gIGNvbnN0IHdpZHRoID0gZGlzdGFuY2UobWluWCwgbWF4WCkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gZGlzdGFuY2UobWluWSwgbWF4WSkgKyBleHBvcnRQYWRkaW5nICsgZXhwb3J0UGFkZGluZztcbiAgcmV0dXJuIFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBvcnRTaXplID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nLCBzY2FsZSkge1xuICBjb25zdCBbLCwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKS5tYXAoZnVuY3Rpb24gKGRpbWVuc2lvbikge1xuICAgIHJldHVybiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKTtcbiAgfSk7XG4gIHJldHVybiBbd2lkdGgsIGhlaWdodF07XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///../../scene/export.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../scene/export.ts?");
3075
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"SVG_EXPORT_TAG\\\": () => (/* binding */ SVG_EXPORT_TAG),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* binding */ exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* binding */ exportToSvg),\\n/* harmony export */ \\\"getExportSize\\\": () => (/* binding */ getExportSize)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\\\");\\n/* harmony import */ var roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! roughjs/bin/rough */ \\\"../../../node_modules/roughjs/bin/rough.js\\\");\\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element/bounds */ \\\"../../element/bounds.ts\\\");\\n/* harmony import */ var _renderer_renderScene__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../renderer/renderScene */ \\\"../../renderer/renderScene.ts\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \\\"../../utils.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../appState */ \\\"../../appState.ts\\\");\\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/json */ \\\"../../data/json.ts\\\");\\n/* harmony import */ var _element_image__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../element/image */ \\\"../../element/image.ts\\\");\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;\\r\\nconst exportToCanvas = /*#__PURE__*/ function () {\\r\\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (elements, appState, files, _ref2) {\\r\\n let { exportBackground, exportPadding = _constants__WEBPACK_IMPORTED_MODULE_5__.DEFAULT_EXPORT_PADDING, viewBackgroundColor } = _ref2;\\r\\n let createCanvas = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (width, height) {\\r\\n const canvas = document.createElement(\\\"canvas\\\");\\r\\n canvas.width = width * appState.exportScale;\\r\\n canvas.height = height * appState.exportScale;\\r\\n return {\\r\\n canvas,\\r\\n scale: appState.exportScale\\r\\n };\\r\\n };\\r\\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);\\r\\n const { canvas, scale = 1 } = createCanvas(width, height);\\r\\n const defaultAppState = (0,_appState__WEBPACK_IMPORTED_MODULE_6__.getDefaultAppState)();\\r\\n const { imageCache } = yield (0,_element_image__WEBPACK_IMPORTED_MODULE_8__.updateImageCache)({\\r\\n imageCache: new Map(),\\r\\n fileIds: (0,_element_image__WEBPACK_IMPORTED_MODULE_8__.getInitializedImageElements)(elements).map(function (element) {\\r\\n return element.fileId;\\r\\n }),\\r\\n files\\r\\n });\\r\\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_3__.renderScene)(elements, appState, null, scale, roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].canvas(canvas), canvas, {\\r\\n viewBackgroundColor: exportBackground ? viewBackgroundColor : null,\\r\\n scrollX: -minX + exportPadding,\\r\\n scrollY: -minY + exportPadding,\\r\\n zoom: defaultAppState.zoom,\\r\\n remotePointerViewportCoords: {},\\r\\n remoteSelectedElementIds: {},\\r\\n shouldCacheIgnoreZoom: false,\\r\\n remotePointerUsernames: {},\\r\\n remotePointerUserStates: {},\\r\\n theme: appState.exportWithDarkMode ? \\\"dark\\\" : \\\"light\\\",\\r\\n imageCache,\\r\\n renderScrollbars: false,\\r\\n renderSelection: false,\\r\\n renderGrid: false,\\r\\n isExporting: true\\r\\n });\\r\\n return canvas;\\r\\n });\\r\\n return function exportToCanvas(_x, _x2, _x3, _x4) {\\r\\n return _ref.apply(this, arguments);\\r\\n };\\r\\n}();\\r\\nconst exportToSvg = /*#__PURE__*/ function () {\\r\\n var _ref3 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (elements, appState, files) {\\r\\n const { exportPadding = _constants__WEBPACK_IMPORTED_MODULE_5__.DEFAULT_EXPORT_PADDING, viewBackgroundColor, exportScale = 1, exportEmbedScene } = appState;\\r\\n let metadata = \\\"\\\";\\r\\n if (exportEmbedScene) {\\r\\n try {\\r\\n metadata = yield (yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../../src/data/image */ \\\"../../data/image.ts\\\"))).encodeSvgMetadata({\\r\\n text: (0,_data_json__WEBPACK_IMPORTED_MODULE_7__.serializeAsJSON)(elements, appState, files || {}, \\\"local\\\")\\r\\n });\\r\\n }\\r\\n catch (error) {\\r\\n console.error(error);\\r\\n }\\r\\n }\\r\\n const [minX, minY, width, height] = getCanvasSize(elements, exportPadding); // initialize SVG root\\r\\n const svgRoot = document.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_5__.SVG_NS, \\\"svg\\\");\\r\\n svgRoot.setAttribute(\\\"version\\\", \\\"1.1\\\");\\r\\n svgRoot.setAttribute(\\\"xmlns\\\", _constants__WEBPACK_IMPORTED_MODULE_5__.SVG_NS);\\r\\n svgRoot.setAttribute(\\\"viewBox\\\", `0 0 ${width} ${height}`);\\r\\n svgRoot.setAttribute(\\\"width\\\", `${width * exportScale}`);\\r\\n svgRoot.setAttribute(\\\"height\\\", `${height * exportScale}`);\\r\\n if (appState.exportWithDarkMode) {\\r\\n svgRoot.setAttribute(\\\"filter\\\", _constants__WEBPACK_IMPORTED_MODULE_5__.THEME_FILTER);\\r\\n }\\r\\n let assetPath = \\\"https://excalidraw.com/\\\"; // Asset path needs to be determined only when using package\\r\\n if (true) {\\r\\n assetPath = window.EXCALIDRAW_ASSET_PATH || `https://unpkg.com/${\\\"@zsviczian/excalidraw\\\"}@${\\\"0.11.0-obsidian-15\\\"}`;\\r\\n if (assetPath === null || assetPath === void 0 ? void 0 : assetPath.startsWith(\\\"/\\\")) {\\r\\n assetPath = assetPath.replace(\\\"/\\\", `${window.location.origin}/`);\\r\\n }\\r\\n assetPath = `${assetPath}/dist/excalidraw-assets/`;\\r\\n }\\r\\n svgRoot.innerHTML = `\\n ${SVG_EXPORT_TAG}\\n ${metadata}\\n <defs>\\n <style>\\n @font-face {\\n font-family: \\\"Virgil\\\";\\n src: url(\\\"${assetPath}Virgil.woff2\\\");\\n }\\n @font-face {\\n font-family: \\\"Cascadia\\\";\\n src: url(\\\"${assetPath}Cascadia.woff2\\\");\\n }\\n </style>\\n </defs>\\n `; // render background rect\\r\\n if (appState.exportBackground && viewBackgroundColor) {\\r\\n const rect = svgRoot.ownerDocument.createElementNS(_constants__WEBPACK_IMPORTED_MODULE_5__.SVG_NS, \\\"rect\\\");\\r\\n rect.setAttribute(\\\"x\\\", \\\"0\\\");\\r\\n rect.setAttribute(\\\"y\\\", \\\"0\\\");\\r\\n rect.setAttribute(\\\"width\\\", `${width}`);\\r\\n rect.setAttribute(\\\"height\\\", `${height}`);\\r\\n rect.setAttribute(\\\"fill\\\", viewBackgroundColor);\\r\\n svgRoot.appendChild(rect);\\r\\n }\\r\\n const rsvg = roughjs_bin_rough__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].svg(svgRoot);\\r\\n (0,_renderer_renderScene__WEBPACK_IMPORTED_MODULE_3__.renderSceneToSvg)(elements, rsvg, svgRoot, files || {}, {\\r\\n offsetX: -minX + exportPadding,\\r\\n offsetY: -minY + exportPadding,\\r\\n exportWithDarkMode: appState.exportWithDarkMode\\r\\n });\\r\\n return svgRoot;\\r\\n });\\r\\n return function exportToSvg(_x5, _x6, _x7) {\\r\\n return _ref3.apply(this, arguments);\\r\\n };\\r\\n}(); // calculate smallest area to fit the contents in\\r\\nconst getCanvasSize = function (elements, exportPadding) {\\r\\n const [minX, minY, maxX, maxY] = (0,_element_bounds__WEBPACK_IMPORTED_MODULE_2__.getCommonBounds)(elements);\\r\\n const width = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.distance)(minX, maxX) + exportPadding * 2;\\r\\n const height = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.distance)(minY, maxY) + exportPadding + exportPadding;\\r\\n return [minX, minY, width, height];\\r\\n};\\r\\nconst getExportSize = function (elements, exportPadding, scale) {\\r\\n const [, , width, height] = getCanvasSize(elements, exportPadding).map(function (dimension) {\\r\\n return Math.trunc(dimension * scale);\\r\\n });\\r\\n return [width, height];\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUsSUFBSSxDQUFDLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FBRyxnREFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUM7QUFFSyxNQUFNLGFBQWEsR0FBRyxVQUFVLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSztJQUNuRSxNQUFNLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLFNBQVM7UUFDdkYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3NjZW5lL2V4cG9ydC50cz8yNTM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yXCI7XG5pbXBvcnQgcm91Z2ggZnJvbSBcInJvdWdoanMvYmluL3JvdWdoXCI7XG5pbXBvcnQgeyBnZXRDb21tb25Cb3VuZHMgfSBmcm9tIFwiLi4vZWxlbWVudC9ib3VuZHNcIjtcbmltcG9ydCB7IHJlbmRlclNjZW5lLCByZW5kZXJTY2VuZVRvU3ZnIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlclNjZW5lXCI7XG5pbXBvcnQgeyBkaXN0YW5jZSB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9FWFBPUlRfUEFERElORywgU1ZHX05TLCBUSEVNRV9GSUxURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZUFzSlNPTiB9IGZyb20gXCIuLi9kYXRhL2pzb25cIjtcbmltcG9ydCB7IGdldEluaXRpYWxpemVkSW1hZ2VFbGVtZW50cywgdXBkYXRlSW1hZ2VDYWNoZSB9IGZyb20gXCIuLi9lbGVtZW50L2ltYWdlXCI7XG5leHBvcnQgY29uc3QgU1ZHX0VYUE9SVF9UQUcgPSBgPCEtLSBzdmctc291cmNlOmV4Y2FsaWRyYXcgLS0+YDtcbmV4cG9ydCBjb25zdCBleHBvcnRUb0NhbnZhcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzLCBfcmVmMikge1xuICAgIGxldCB7XG4gICAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgICAgZXhwb3J0UGFkZGluZyA9IERFRkFVTFRfRVhQT1JUX1BBRERJTkcsXG4gICAgICB2aWV3QmFja2dyb3VuZENvbG9yXG4gICAgfSA9IF9yZWYyO1xuICAgIGxldCBjcmVhdGVDYW52YXMgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBhcHBTdGF0ZS5leHBvcnRTY2FsZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgc2NhbGU6IGFwcFN0YXRlLmV4cG9ydFNjYWxlXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7XG4gICAgY29uc3Qge1xuICAgICAgY2FudmFzLFxuICAgICAgc2NhbGUgPSAxXG4gICAgfSA9IGNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBkZWZhdWx0QXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKTtcbiAgICBjb25zdCB7XG4gICAgICBpbWFnZUNhY2hlXG4gICAgfSA9IHlpZWxkIHVwZGF0ZUltYWdlQ2FjaGUoe1xuICAgICAgaW1hZ2VDYWNoZTogbmV3IE1hcCgpLFxuICAgICAgZmlsZUlkczogZ2V0SW5pdGlhbGl6ZWRJbWFnZUVsZW1lbnRzKGVsZW1lbnRzKS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZmlsZUlkO1xuICAgICAgfSksXG4gICAgICBmaWxlc1xuICAgIH0pO1xuICAgIHJlbmRlclNjZW5lKGVsZW1lbnRzLCBhcHBTdGF0ZSwgbnVsbCwgc2NhbGUsIHJvdWdoLmNhbnZhcyhjYW52YXMpLCBjYW52YXMsIHtcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3I6IGV4cG9ydEJhY2tncm91bmQgPyB2aWV3QmFja2dyb3VuZENvbG9yIDogbnVsbCxcbiAgICAgIHNjcm9sbFg6IC1taW5YICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHNjcm9sbFk6IC1taW5ZICsgZXhwb3J0UGFkZGluZyxcbiAgICAgIHpvb206IGRlZmF1bHRBcHBTdGF0ZS56b29tLFxuICAgICAgcmVtb3RlUG9pbnRlclZpZXdwb3J0Q29vcmRzOiB7fSxcbiAgICAgIHJlbW90ZVNlbGVjdGVkRWxlbWVudElkczoge30sXG4gICAgICBzaG91bGRDYWNoZUlnbm9yZVpvb206IGZhbHNlLFxuICAgICAgcmVtb3RlUG9pbnRlclVzZXJuYW1lczoge30sXG4gICAgICByZW1vdGVQb2ludGVyVXNlclN0YXRlczoge30sXG4gICAgICB0aGVtZTogYXBwU3RhdGUuZXhwb3J0V2l0aERhcmtNb2RlID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIsXG4gICAgICBpbWFnZUNhY2hlLFxuICAgICAgcmVuZGVyU2Nyb2xsYmFyczogZmFsc2UsXG4gICAgICByZW5kZXJTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgcmVuZGVyR3JpZDogZmFsc2UsXG4gICAgICBpc0V4cG9ydGluZzogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBjYW52YXM7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBleHBvcnRUb0NhbnZhcyhfeCwgX3gyLCBfeDMsIF94NCkge1xuICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKGVsZW1lbnRzLCBhcHBTdGF0ZSwgZmlsZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBleHBvcnRQYWRkaW5nID0gREVGQVVMVF9FWFBPUlRfUEFERElORyxcbiAgICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBleHBvcnRTY2FsZSA9IDEsXG4gICAgICBleHBvcnRFbWJlZFNjZW5lXG4gICAgfSA9IGFwcFN0YXRlO1xuICAgIGxldCBtZXRhZGF0YSA9IFwiXCI7XG5cbiAgICBpZiAoZXhwb3J0RW1iZWRTY2VuZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWV0YWRhdGEgPSB5aWVsZCAoeWllbGQgaW1wb3J0KFxuICAgICAgICAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImltYWdlXCIgKi9cbiAgICAgICAgXCIuLi8uLi9zcmMvZGF0YS9pbWFnZVwiKSkuZW5jb2RlU3ZnTWV0YWRhdGEoe1xuICAgICAgICAgIHRleHQ6IHNlcmlhbGl6ZUFzSlNPTihlbGVtZW50cywgYXBwU3RhdGUsIGZpbGVzIHx8IHt9LCBcImxvY2FsXCIpXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW21pblgsIG1pblksIHdpZHRoLCBoZWlnaHRdID0gZ2V0Q2FudmFzU2l6ZShlbGVtZW50cywgZXhwb3J0UGFkZGluZyk7IC8vIGluaXRpYWxpemUgU1ZHIHJvb3RcblxuICAgIGNvbnN0IHN2Z1Jvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCBcInN2Z1wiKTtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gICAgc3ZnUm9vdC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLCBTVkdfTlMpO1xuICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApO1xuICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGggKiBleHBvcnRTY2FsZX1gKTtcbiAgICBzdmdSb290LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHQgKiBleHBvcnRTY2FsZX1gKTtcblxuICAgIGlmIChhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGUpIHtcbiAgICAgIHN2Z1Jvb3Quc2V0QXR0cmlidXRlKFwiZmlsdGVyXCIsIFRIRU1FX0ZJTFRFUik7XG4gICAgfVxuXG4gICAgbGV0IGFzc2V0UGF0aCA9IFwiaHR0cHM6Ly9leGNhbGlkcmF3LmNvbS9cIjsgLy8gQXNzZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIG9ubHkgd2hlbiB1c2luZyBwYWNrYWdlXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuSVNfRVhDQUxJRFJBV19OUE1fUEFDS0FHRSkge1xuICAgICAgYXNzZXRQYXRoID0gd2luZG93LkVYQ0FMSURSQVdfQVNTRVRfUEFUSCB8fCBgaHR0cHM6Ly91bnBrZy5jb20vJHtwcm9jZXNzLmVudi5QS0dfTkFNRX1AJHtwcm9jZXNzLmVudi5QS0dfVkVSU0lPTn1gO1xuXG4gICAgICBpZiAoYXNzZXRQYXRoPy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBhc3NldFBhdGggPSBhc3NldFBhdGgucmVwbGFjZShcIi9cIiwgYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYCk7XG4gICAgICB9XG5cbiAgICAgIGFzc2V0UGF0aCA9IGAke2Fzc2V0UGF0aH0vZGlzdC9leGNhbGlkcmF3LWFzc2V0cy9gO1xuICAgIH1cblxuICAgIHN2Z1Jvb3QuaW5uZXJIVE1MID0gYFxuICAke1NWR19FWFBPUlRfVEFHfVxuICAke21ldGFkYXRhfVxuICA8ZGVmcz5cbiAgICA8c3R5bGU+XG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiVmlyZ2lsXCI7XG4gICAgICAgIHNyYzogdXJsKFwiJHthc3NldFBhdGh9VmlyZ2lsLndvZmYyXCIpO1xuICAgICAgfVxuICAgICAgQGZvbnQtZmFjZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkNhc2NhZGlhXCI7XG4gICAgICAgIHNyYzogdXJsKFwiJHthc3NldFBhdGh9Q2FzY2FkaWEud29mZjJcIik7XG4gICAgICB9XG4gICAgPC9zdHlsZT5cbiAgPC9kZWZzPlxuICBgOyAvLyByZW5kZXIgYmFja2dyb3VuZCByZWN0XG5cbiAgICBpZiAoYXBwU3RhdGUuZXhwb3J0QmFja2dyb3VuZCAmJiB2aWV3QmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBjb25zdCByZWN0ID0gc3ZnUm9vdC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIFwicmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwieFwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZShcInlcIiwgXCIwXCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBgJHt3aWR0aH1gKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlKFwiZmlsbFwiLCB2aWV3QmFja2dyb3VuZENvbG9yKTtcbiAgICAgIHN2Z1Jvb3QuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnN2ZyA9IHJvdWdoLnN2ZyhzdmdSb290KTtcbiAgICByZW5kZXJTY2VuZVRvU3ZnKGVsZW1lbnRzLCByc3ZnLCBzdmdSb290LCBmaWxlcyB8fCB7fSwge1xuICAgICAgb2Zmc2V0WDogLW1pblggKyBleHBvcnRQYWRkaW5nLFxuICAgICAgb2Zmc2V0WTogLW1pblkgKyBleHBvcnRQYWRkaW5nLFxuICAgICAgZXhwb3J0V2l0aERhcmtNb2RlOiBhcHBTdGF0ZS5leHBvcnRXaXRoRGFya01vZGVcbiAgICB9KTtcbiAgICByZXR1cm4gc3ZnUm9vdDtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGV4cG9ydFRvU3ZnKF94NSwgX3g2LCBfeDcpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTsgLy8gY2FsY3VsYXRlIHNtYWxsZXN0IGFyZWEgdG8gZml0IHRoZSBjb250ZW50cyBpblxuXG5jb25zdCBnZXRDYW52YXNTaXplID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKSB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IGdldENvbW1vbkJvdW5kcyhlbGVtZW50cyk7XG4gIGNvbnN0IHdpZHRoID0gZGlzdGFuY2UobWluWCwgbWF4WCkgKyBleHBvcnRQYWRkaW5nICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gZGlzdGFuY2UobWluWSwgbWF4WSkgKyBleHBvcnRQYWRkaW5nICsgZXhwb3J0UGFkZGluZztcbiAgcmV0dXJuIFttaW5YLCBtaW5ZLCB3aWR0aCwgaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBvcnRTaXplID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nLCBzY2FsZSkge1xuICBjb25zdCBbLCwgd2lkdGgsIGhlaWdodF0gPSBnZXRDYW52YXNTaXplKGVsZW1lbnRzLCBleHBvcnRQYWRkaW5nKS5tYXAoZnVuY3Rpb24gKGRpbWVuc2lvbikge1xuICAgIHJldHVybiBNYXRoLnRydW5jKGRpbWVuc2lvbiAqIHNjYWxlKTtcbiAgfSk7XG4gIHJldHVybiBbd2lkdGgsIGhlaWdodF07XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///../../scene/export.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../scene/export.ts?");
3076
3076
 
3077
3077
  /***/ }),
3078
3078
 
@@ -3160,7 +3160,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
3160
3160
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3161
3161
 
3162
3162
  "use strict";
3163
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"allowFullScreen\\\": () => (/* binding */ allowFullScreen),\\n/* harmony export */ \\\"arrayToMap\\\": () => (/* binding */ arrayToMap),\\n/* harmony export */ \\\"bytesToHexString\\\": () => (/* binding */ bytesToHexString),\\n/* harmony export */ \\\"capitalizeString\\\": () => (/* binding */ capitalizeString),\\n/* harmony export */ \\\"chunk\\\": () => (/* binding */ chunk),\\n/* harmony export */ \\\"debounce\\\": () => (/* binding */ debounce),\\n/* harmony export */ \\\"distance\\\": () => (/* binding */ distance),\\n/* harmony export */ \\\"exitFullScreen\\\": () => (/* binding */ exitFullScreen),\\n/* harmony export */ \\\"findIndex\\\": () => (/* binding */ findIndex),\\n/* harmony export */ \\\"findLastIndex\\\": () => (/* binding */ findLastIndex),\\n/* harmony export */ \\\"focusNearestParent\\\": () => (/* binding */ focusNearestParent),\\n/* harmony export */ \\\"getDateTime\\\": () => (/* binding */ getDateTime),\\n/* harmony export */ \\\"getFontFamilyString\\\": () => (/* binding */ getFontFamilyString),\\n/* harmony export */ \\\"getFontString\\\": () => (/* binding */ getFontString),\\n/* harmony export */ \\\"getFrame\\\": () => (/* binding */ getFrame),\\n/* harmony export */ \\\"getGlobalCSSVariable\\\": () => (/* binding */ getGlobalCSSVariable),\\n/* harmony export */ \\\"getNearestScrollableContainer\\\": () => (/* binding */ getNearestScrollableContainer),\\n/* harmony export */ \\\"getShortcutKey\\\": () => (/* binding */ getShortcutKey),\\n/* harmony export */ \\\"getUpdatedTimestamp\\\": () => (/* binding */ getUpdatedTimestamp),\\n/* harmony export */ \\\"getVersion\\\": () => (/* binding */ getVersion),\\n/* harmony export */ \\\"isFullScreen\\\": () => (/* binding */ isFullScreen),\\n/* harmony export */ \\\"isInputLike\\\": () => (/* binding */ isInputLike),\\n/* harmony export */ \\\"isPrimitive\\\": () => (/* binding */ isPrimitive),\\n/* harmony export */ \\\"isProdEnv\\\": () => (/* binding */ isProdEnv),\\n/* harmony export */ \\\"isPromiseLike\\\": () => (/* binding */ isPromiseLike),\\n/* harmony export */ \\\"isRTL\\\": () => (/* binding */ isRTL),\\n/* harmony export */ \\\"isTestEnv\\\": () => (/* binding */ isTestEnv),\\n/* harmony export */ \\\"isToolIcon\\\": () => (/* binding */ isToolIcon),\\n/* harmony export */ \\\"isTransparent\\\": () => (/* binding */ isTransparent),\\n/* harmony export */ \\\"isWritableElement\\\": () => (/* binding */ isWritableElement),\\n/* harmony export */ \\\"muteFSAbortError\\\": () => (/* binding */ muteFSAbortError),\\n/* harmony export */ \\\"nFormatter\\\": () => (/* binding */ nFormatter),\\n/* harmony export */ \\\"preventUnload\\\": () => (/* binding */ preventUnload),\\n/* harmony export */ \\\"removeSelection\\\": () => (/* binding */ removeSelection),\\n/* harmony export */ \\\"resetCursor\\\": () => (/* binding */ resetCursor),\\n/* harmony export */ \\\"resolvablePromise\\\": () => (/* binding */ resolvablePromise),\\n/* harmony export */ \\\"sceneCoordsToViewportCoords\\\": () => (/* binding */ sceneCoordsToViewportCoords),\\n/* harmony export */ \\\"selectNode\\\": () => (/* binding */ selectNode),\\n/* harmony export */ \\\"setCursor\\\": () => (/* binding */ setCursor),\\n/* harmony export */ \\\"setCursorForShape\\\": () => (/* binding */ setCursorForShape),\\n/* harmony export */ \\\"setDateTimeForTests\\\": () => (/* binding */ setDateTimeForTests),\\n/* harmony export */ \\\"setEraserCursor\\\": () => (/* binding */ setEraserCursor),\\n/* harmony export */ \\\"supportsEmoji\\\": () => (/* binding */ supportsEmoji),\\n/* harmony export */ \\\"throttleRAF\\\": () => (/* binding */ throttleRAF),\\n/* harmony export */ \\\"tupleToCoors\\\": () => (/* binding */ tupleToCoors),\\n/* harmony export */ \\\"updateObject\\\": () => (/* binding */ updateObject),\\n/* harmony export */ \\\"viewportCoordsToSceneCoords\\\": () => (/* binding */ viewportCoordsToSceneCoords),\\n/* harmony export */ \\\"withBatchedUpdates\\\": () => (/* binding */ withBatchedUpdates),\\n/* harmony export */ \\\"withBatchedUpdatesThrottled\\\": () => (/* binding */ withBatchedUpdatesThrottled),\\n/* harmony export */ \\\"wrapEvent\\\": () => (/* binding */ wrapEvent)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\\\");\\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! open-color */ \\\"../../../node_modules/open-color/open-color.json\\\");\\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./colors */ \\\"../../colors.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \\\"react-dom\\\");\\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./keys */ \\\"../../keys.ts\\\");\\n\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nlet mockDateTime = null;\\r\\nconst setDateTimeForTests = function (dateTime) {\\r\\n mockDateTime = dateTime;\\r\\n};\\r\\nconst getDateTime = function () {\\r\\n if (mockDateTime) {\\r\\n return mockDateTime;\\r\\n }\\r\\n const date = new Date();\\r\\n const year = date.getFullYear();\\r\\n const month = `${date.getMonth() + 1}`.padStart(2, \\\"0\\\");\\r\\n const day = `${date.getDate()}`.padStart(2, \\\"0\\\");\\r\\n const hr = `${date.getHours()}`.padStart(2, \\\"0\\\");\\r\\n const min = `${date.getMinutes()}`.padStart(2, \\\"0\\\");\\r\\n return `${year}-${month}-${day}-${hr}${min}`;\\r\\n};\\r\\nconst capitalizeString = function (str) {\\r\\n return str.charAt(0).toUpperCase() + str.slice(1);\\r\\n};\\r\\nconst isToolIcon = function (target) {\\r\\n return target instanceof HTMLElement && target.className.includes(\\\"ToolIcon\\\");\\r\\n};\\r\\nconst isInputLike = function (target) {\\r\\n return target instanceof HTMLElement && target.dataset.type === \\\"wysiwyg\\\" || target instanceof HTMLBRElement || // newline in wysiwyg\\r\\n target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement;\\r\\n};\\r\\nconst isWritableElement = function (target) {\\r\\n return target instanceof HTMLElement && target.dataset.type === \\\"wysiwyg\\\" || target instanceof HTMLBRElement || // newline in wysiwyg\\r\\n target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === \\\"text\\\" || target.type === \\\"number\\\");\\r\\n};\\r\\nconst getFontFamilyString = function (_ref) {\\r\\n let { fontFamily } = _ref;\\r\\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY)) {\\r\\n if (id === fontFamily) {\\r\\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_3__.WINDOWS_EMOJI_FALLBACK_FONT}`;\\r\\n }\\r\\n }\\r\\n return _constants__WEBPACK_IMPORTED_MODULE_3__.WINDOWS_EMOJI_FALLBACK_FONT;\\r\\n};\\r\\n/** returns fontSize+fontFamily string for assignment to DOM elements */\\r\\nconst getFontString = function (_ref2) {\\r\\n let { fontSize, fontFamily } = _ref2;\\r\\n return `${fontSize}px ${getFontFamilyString({\\r\\n fontFamily\\r\\n })}`;\\r\\n};\\r\\nconst debounce = function (fn, timeout) {\\r\\n let handle = 0;\\r\\n let lastArgs = null;\\r\\n const ret = function () {\\r\\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\\r\\n args[_key] = arguments[_key];\\r\\n }\\r\\n lastArgs = args;\\r\\n clearTimeout(handle);\\r\\n handle = window.setTimeout(function () {\\r\\n lastArgs = null;\\r\\n fn(...args);\\r\\n }, timeout);\\r\\n };\\r\\n ret.flush = function () {\\r\\n clearTimeout(handle);\\r\\n if (lastArgs) {\\r\\n const _lastArgs = lastArgs;\\r\\n lastArgs = null;\\r\\n fn(..._lastArgs);\\r\\n }\\r\\n };\\r\\n ret.cancel = function () {\\r\\n lastArgs = null;\\r\\n clearTimeout(handle);\\r\\n };\\r\\n return ret;\\r\\n}; // throttle callback to execute once per animation frame\\r\\nconst throttleRAF = function (fn) {\\r\\n let handle = null;\\r\\n let lastArgs = null;\\r\\n let callback = null;\\r\\n const ret = function () {\\r\\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\r\\n args[_key2] = arguments[_key2];\\r\\n }\\r\\n if (false) {}\\r\\n lastArgs = args;\\r\\n callback = fn;\\r\\n if (handle === null) {\\r\\n handle = window.requestAnimationFrame(function () {\\r\\n handle = null;\\r\\n lastArgs = null;\\r\\n callback = null;\\r\\n fn(...args);\\r\\n });\\r\\n }\\r\\n };\\r\\n ret.flush = function () {\\r\\n if (handle !== null) {\\r\\n cancelAnimationFrame(handle);\\r\\n handle = null;\\r\\n }\\r\\n if (lastArgs) {\\r\\n const _lastArgs = lastArgs;\\r\\n const _callback = callback;\\r\\n lastArgs = null;\\r\\n callback = null;\\r\\n if (_callback !== null) {\\r\\n _callback(..._lastArgs);\\r\\n }\\r\\n }\\r\\n };\\r\\n ret.cancel = function () {\\r\\n lastArgs = null;\\r\\n callback = null;\\r\\n if (handle !== null) {\\r\\n cancelAnimationFrame(handle);\\r\\n handle = null;\\r\\n }\\r\\n };\\r\\n return ret;\\r\\n}; // https://github.com/lodash/lodash/blob/es/chunk.js\\r\\nconst chunk = function (array, size) {\\r\\n if (!array.length || size < 1) {\\r\\n return [];\\r\\n }\\r\\n let index = 0;\\r\\n let resIndex = 0;\\r\\n const result = Array(Math.ceil(array.length / size));\\r\\n while (index < array.length) {\\r\\n result[resIndex++] = array.slice(index, index += size);\\r\\n }\\r\\n return result;\\r\\n};\\r\\nconst selectNode = function (node) {\\r\\n const selection = window.getSelection();\\r\\n if (selection) {\\r\\n const range = document.createRange();\\r\\n range.selectNodeContents(node);\\r\\n selection.removeAllRanges();\\r\\n selection.addRange(range);\\r\\n }\\r\\n};\\r\\nconst removeSelection = function () {\\r\\n const selection = window.getSelection();\\r\\n if (selection) {\\r\\n selection.removeAllRanges();\\r\\n }\\r\\n};\\r\\nconst distance = function (x, y) {\\r\\n return Math.abs(x - y);\\r\\n};\\r\\nconst resetCursor = function (canvas) {\\r\\n if (canvas) {\\r\\n canvas.style.cursor = \\\"\\\";\\r\\n }\\r\\n};\\r\\nconst setCursor = function (canvas, cursor) {\\r\\n if (canvas) {\\r\\n canvas.style.cursor = cursor;\\r\\n }\\r\\n};\\r\\nlet eraserCanvasCache;\\r\\nlet previewDataURL;\\r\\nconst setEraserCursor = function (canvas, theme) {\\r\\n const cursorImageSizePx = 20;\\r\\n const drawCanvas = function () {\\r\\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_3__.THEME.DARK;\\r\\n eraserCanvasCache = document.createElement(\\\"canvas\\\");\\r\\n eraserCanvasCache.theme = theme;\\r\\n eraserCanvasCache.height = cursorImageSizePx;\\r\\n eraserCanvasCache.width = cursorImageSizePx;\\r\\n const context = eraserCanvasCache.getContext(\\\"2d\\\");\\r\\n context.lineWidth = 1;\\r\\n context.beginPath();\\r\\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\\r\\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_1__.black : open_color__WEBPACK_IMPORTED_MODULE_1__.white;\\r\\n context.fill();\\r\\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_1__.white : open_color__WEBPACK_IMPORTED_MODULE_1__.black;\\r\\n context.stroke();\\r\\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_3__.MIME_TYPES.svg);\\r\\n };\\r\\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\\r\\n drawCanvas();\\r\\n }\\r\\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\\r\\n};\\r\\nconst setCursorForShape = function (canvas, appState) {\\r\\n if (!canvas) {\\r\\n return;\\r\\n }\\r\\n if (appState.activeTool.type === \\\"selection\\\") {\\r\\n resetCursor(canvas);\\r\\n }\\r\\n else if (appState.activeTool.type === \\\"eraser\\\") {\\r\\n setEraserCursor(canvas, appState.theme); // do nothing if image tool is selected which suggests there's\\r\\n // a image-preview set as the cursor\\r\\n }\\r\\n else if (appState.activeTool.type !== \\\"image\\\") {\\r\\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_3__.CURSOR_TYPE.CROSSHAIR;\\r\\n }\\r\\n};\\r\\nconst isFullScreen = function () {\\r\\n var _a;\\r\\n return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \\\"HTML\\\";\\r\\n};\\r\\nconst allowFullScreen = function () {\\r\\n return document.documentElement.requestFullscreen();\\r\\n};\\r\\nconst exitFullScreen = function () {\\r\\n return document.exitFullscreen();\\r\\n};\\r\\nconst getShortcutKey = function (shortcut) {\\r\\n shortcut = shortcut.replace(/\\\\bAlt\\\\b/i, \\\"Alt\\\").replace(/\\\\bShift\\\\b/i, \\\"Shift\\\").replace(/\\\\b(Enter|Return)\\\\b/i, \\\"Enter\\\").replace(/\\\\bDel\\\\b/i, \\\"Delete\\\");\\r\\n if (_keys__WEBPACK_IMPORTED_MODULE_5__.isDarwin) {\\r\\n return shortcut.replace(/\\\\bCtrlOrCmd\\\\b/i, \\\"Cmd\\\").replace(/\\\\bAlt\\\\b/i, \\\"Option\\\");\\r\\n }\\r\\n return shortcut.replace(/\\\\bCtrlOrCmd\\\\b/i, \\\"Ctrl\\\");\\r\\n};\\r\\nconst viewportCoordsToSceneCoords = function (_ref3, _ref4) {\\r\\n let { clientX, clientY } = _ref3;\\r\\n let { zoom, offsetLeft, offsetTop, scrollX, scrollY } = _ref4;\\r\\n const invScale = 1 / zoom.value;\\r\\n const x = (clientX - offsetLeft) * invScale - scrollX;\\r\\n const y = (clientY - offsetTop) * invScale - scrollY;\\r\\n return {\\r\\n x,\\r\\n y\\r\\n };\\r\\n};\\r\\nconst sceneCoordsToViewportCoords = function (_ref5, _ref6) {\\r\\n let { sceneX, sceneY } = _ref5;\\r\\n let { zoom, offsetLeft, offsetTop, scrollX, scrollY } = _ref6;\\r\\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\\r\\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\\r\\n return {\\r\\n x,\\r\\n y\\r\\n };\\r\\n};\\r\\nconst getGlobalCSSVariable = function (name) {\\r\\n return getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\\r\\n};\\r\\nconst RS_LTR_CHARS = \\\"A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02B8\\\\u0300-\\\\u0590\\\\u0800-\\\\u1FFF\\\" + \\\"\\\\u2C00-\\\\uFB1C\\\\uFDFE-\\\\uFE6F\\\\uFEFD-\\\\uFFFF\\\";\\r\\nconst RS_RTL_CHARS = \\\"\\\\u0591-\\\\u07FF\\\\uFB1D-\\\\uFDFD\\\\uFE70-\\\\uFEFC\\\";\\r\\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\\r\\n/**\\r\\n * Checks whether first directional character is RTL. Meaning whether it starts\\r\\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\\r\\n * RTL.\\r\\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\\r\\n */\\r\\nconst isRTL = function (text) {\\r\\n return RE_RTL_CHECK.test(text);\\r\\n};\\r\\nconst tupleToCoors = function (xyTuple) {\\r\\n const [x, y] = xyTuple;\\r\\n return {\\r\\n x,\\r\\n y\\r\\n };\\r\\n};\\r\\n/** use as a rejectionHandler to mute filesystem Abort errors */\\r\\nconst muteFSAbortError = function (error) {\\r\\n if ((error === null || error === void 0 ? void 0 : error.name) === \\\"AbortError\\\") {\\r\\n console.warn(error);\\r\\n return;\\r\\n }\\r\\n throw error;\\r\\n};\\r\\nconst findIndex = function (array, cb) {\\r\\n let fromIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\\r\\n if (fromIndex < 0) {\\r\\n fromIndex = array.length + fromIndex;\\r\\n }\\r\\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\\r\\n let index = fromIndex - 1;\\r\\n while (++index < array.length) {\\r\\n if (cb(array[index], index, array)) {\\r\\n return index;\\r\\n }\\r\\n }\\r\\n return -1;\\r\\n};\\r\\nconst findLastIndex = function (array, cb) {\\r\\n let fromIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : array.length - 1;\\r\\n if (fromIndex < 0) {\\r\\n fromIndex = array.length + fromIndex;\\r\\n }\\r\\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\\r\\n let index = fromIndex + 1;\\r\\n while (--index > -1) {\\r\\n if (cb(array[index], index, array)) {\\r\\n return index;\\r\\n }\\r\\n }\\r\\n return -1;\\r\\n};\\r\\nconst isTransparent = function (color) {\\r\\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \\\"0\\\";\\r\\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \\\"00\\\";\\r\\n return isRGBTransparent || isRRGGBBTransparent || color === _colors__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].elementBackground[0];\\r\\n};\\r\\nconst resolvablePromise = function () {\\r\\n let resolve;\\r\\n let reject;\\r\\n const promise = new Promise(function (_resolve, _reject) {\\r\\n resolve = _resolve;\\r\\n reject = _reject;\\r\\n });\\r\\n promise.resolve = resolve;\\r\\n promise.reject = reject;\\r\\n return promise;\\r\\n};\\r\\n/**\\r\\n * @param func handler taking at most single parameter (event).\\r\\n */\\r\\nconst withBatchedUpdates = function (func) {\\r\\n return function (event) {\\r\\n (0,react_dom__WEBPACK_IMPORTED_MODULE_4__.unstable_batchedUpdates)(func, event);\\r\\n };\\r\\n};\\r\\n/**\\r\\n * barches React state updates and throttles the calls to a single call per\\r\\n * animation frame\\r\\n */\\r\\nconst withBatchedUpdatesThrottled = function (func) {\\r\\n // @ts-ignore\\r\\n return throttleRAF(function (event) {\\r\\n (0,react_dom__WEBPACK_IMPORTED_MODULE_4__.unstable_batchedUpdates)(func, event);\\r\\n });\\r\\n}; //https://stackoverflow.com/a/9462382/8418\\r\\nconst nFormatter = function (num, digits) {\\r\\n const si = [{\\r\\n value: 1,\\r\\n symbol: \\\"b\\\"\\r\\n }, {\\r\\n value: 1e3,\\r\\n symbol: \\\"k\\\"\\r\\n }, {\\r\\n value: 1e6,\\r\\n symbol: \\\"M\\\"\\r\\n }, {\\r\\n value: 1e9,\\r\\n symbol: \\\"G\\\"\\r\\n }];\\r\\n const rx = /\\\\.0+$|(\\\\.[0-9]*[1-9])0+$/;\\r\\n let index;\\r\\n for (index = si.length - 1; index > 0; index--) {\\r\\n if (num >= si[index].value) {\\r\\n break;\\r\\n }\\r\\n }\\r\\n return (num / si[index].value).toFixed(digits).replace(rx, \\\"$1\\\") + si[index].symbol;\\r\\n};\\r\\nconst getVersion = function () {\\r\\n var _a;\\r\\n return ((_a = document.querySelector('meta[name=\\\"version\\\"]')) === null || _a === void 0 ? void 0 : _a.content) || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_VERSION;\\r\\n}; // Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\\r\\nconst supportsEmoji = function () {\\r\\n const canvas = document.createElement(\\\"canvas\\\");\\r\\n const ctx = canvas.getContext(\\\"2d\\\");\\r\\n if (!ctx) {\\r\\n return false;\\r\\n }\\r\\n const offset = 12;\\r\\n ctx.fillStyle = \\\"#f00\\\";\\r\\n ctx.textBaseline = \\\"top\\\";\\r\\n ctx.font = \\\"32px Arial\\\"; // Modernizr used 🐨, but it is sort of supported on Windows 7.\\r\\n // Luckily 😀 isn't supported.\\r\\n ctx.fillText(\\\"😀\\\", 0, 0);\\r\\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\\r\\n};\\r\\nconst getNearestScrollableContainer = function (element) {\\r\\n let parent = element.parentElement;\\r\\n while (parent) {\\r\\n if (parent === document.body) {\\r\\n return document;\\r\\n }\\r\\n const { overflowY } = window.getComputedStyle(parent);\\r\\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\\r\\n if (hasScrollableContent && (overflowY === \\\"auto\\\" || overflowY === \\\"scroll\\\" || overflowY === \\\"overlay\\\")) {\\r\\n return parent;\\r\\n }\\r\\n parent = parent.parentElement;\\r\\n }\\r\\n return document;\\r\\n};\\r\\nconst focusNearestParent = function (element) {\\r\\n let parent = element.parentElement;\\r\\n while (parent) {\\r\\n if (parent.tabIndex > -1) {\\r\\n parent.focus();\\r\\n return;\\r\\n }\\r\\n parent = parent.parentElement;\\r\\n }\\r\\n};\\r\\nconst preventUnload = function (event) {\\r\\n event.preventDefault(); // NOTE: modern browsers no longer allow showing a custom message here\\r\\n event.returnValue = \\\"\\\";\\r\\n};\\r\\nconst bytesToHexString = function (bytes) {\\r\\n return Array.from(bytes).map(function (byte) {\\r\\n return `0${byte.toString(16)}`.slice(-2);\\r\\n }).join(\\\"\\\");\\r\\n};\\r\\nconst getUpdatedTimestamp = function () {\\r\\n return isTestEnv() ? 1 : Date.now();\\r\\n};\\r\\n/**\\r\\n * Transforms array of objects containing `id` attribute,\\r\\n * or array of ids (strings), into a Map, keyd by `id`.\\r\\n */\\r\\nconst arrayToMap = function (items) {\\r\\n return items.reduce(function (acc, element) {\\r\\n acc.set(typeof element === \\\"string\\\" ? element : element.id, element);\\r\\n return acc;\\r\\n }, new Map());\\r\\n};\\r\\nconst isTestEnv = function () {\\r\\n var _a;\\r\\n return typeof process !== \\\"undefined\\\" && ((_a = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-12\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \\\"test\\\";\\r\\n};\\r\\nconst isProdEnv = function () {\\r\\n var _a;\\r\\n return typeof process !== \\\"undefined\\\" && ((_a = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-12\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \\\"production\\\";\\r\\n};\\r\\nconst wrapEvent = function (name, nativeEvent) {\\r\\n return new CustomEvent(name, {\\r\\n detail: {\\r\\n nativeEvent\\r\\n },\\r\\n cancelable: true\\r\\n });\\r\\n};\\r\\nconst updateObject = function (obj, updates) {\\r\\n let didChange = false;\\r\\n for (const key in updates) {\\r\\n const value = updates[key];\\r\\n if (typeof value !== \\\"undefined\\\") {\\r\\n if (obj[key] === value && ( // if object, always update because its attrs could have changed\\r\\n typeof value !== \\\"object\\\" || value === null)) {\\r\\n continue;\\r\\n }\\r\\n didChange = true;\\r\\n }\\r\\n }\\r\\n if (!didChange) {\\r\\n return obj;\\r\\n }\\r\\n return _objectSpread(_objectSpread({}, obj), updates);\\r\\n};\\r\\nconst isPrimitive = function (val) {\\r\\n const type = typeof val;\\r\\n return val == null || type !== \\\"object\\\" && type !== \\\"function\\\";\\r\\n};\\r\\nconst getFrame = function () {\\r\\n try {\\r\\n return window.self === window.top ? \\\"top\\\" : \\\"iframe\\\";\\r\\n }\\r\\n catch (error) {\\r\\n return \\\"iframe\\\";\\r\\n }\\r\\n};\\r\\nconst isPromiseLike = function (value) {\\r\\n return !!value && typeof value === \\\"object\\\" && \\\"then\\\" in value && \\\"catch\\\" in value && \\\"finally\\\" in value;\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLEtBQUssVUFBVSxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUNLLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxhQUFhLEdBQUcsVUFBVSxLQUFLO0lBQzFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFDM0csQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzP2IxZGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgb2MgZnJvbSBcIm9wZW4tY29sb3JcIjtcbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQgeyBDVVJTT1JfVFlQRSwgREVGQVVMVF9WRVJTSU9OLCBGT05UX0ZBTUlMWSwgTUlNRV9UWVBFUywgVEhFTUUsIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBpc0RhcndpbiB9IGZyb20gXCIuL2tleXNcIjtcbmxldCBtb2NrRGF0ZVRpbWUgPSBudWxsO1xuZXhwb3J0IGNvbnN0IHNldERhdGVUaW1lRm9yVGVzdHMgPSBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgbW9ja0RhdGVUaW1lID0gZGF0ZVRpbWU7XG59O1xuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gZnVuY3Rpb24gKCkge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0tJHtocn0ke21pbn1gO1xufTtcbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplU3RyaW5nID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufTtcbmV4cG9ydCBjb25zdCBpc1Rvb2xJY29uID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRvb2xJY29uXCIpO1xufTtcbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiIHx8IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxCUkVsZW1lbnQgfHwgLy8gbmV3bGluZSBpbiB3eXNpd3lnXG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fCB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudDtcbn07XG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIiB8fCB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgKHRhcmdldC50eXBlID09PSBcInRleHRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJudW1iZXJcIik7XG59O1xuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSBmdW5jdGlvbiAoX3JlZikge1xuICBsZXQge1xuICAgIGZvbnRGYW1pbHlcbiAgfSA9IF9yZWY7XG5cbiAgZm9yIChjb25zdCBbZm9udEZhbWlseVN0cmluZywgaWRdIG9mIE9iamVjdC5lbnRyaWVzKEZPTlRfRkFNSUxZKSkge1xuICAgIGlmIChpZCA9PT0gZm9udEZhbWlseSkge1xuICAgICAgcmV0dXJuIGAke2ZvbnRGYW1pbHlTdHJpbmd9LCAke1dJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVH1gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuLyoqIHJldHVybnMgZm9udFNpemUrZm9udEZhbWlseSBzdHJpbmcgZm9yIGFzc2lnbm1lbnQgdG8gRE9NIGVsZW1lbnRzICovXG5cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gIGxldCB7XG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseVxuICB9ID0gX3JlZjI7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoe1xuICAgIGZvbnRGYW1pbHlcbiAgfSl9YDtcbn07XG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcbiAgbGV0IGhhbmRsZSA9IDA7XG4gIGxldCBsYXN0QXJncyA9IG51bGw7XG5cbiAgY29uc3QgcmV0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgcmV0LmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuXG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuXG4gIHJldC5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICB9O1xuXG4gIHJldHVybiByZXQ7XG59OyAvLyB0aHJvdHRsZSBjYWxsYmFjayB0byBleGVjdXRlIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZVxuXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSBmdW5jdGlvbiAoZm4pIHtcbiAgbGV0IGhhbmRsZSA9IG51bGw7XG4gIGxldCBsYXN0QXJncyA9IG51bGw7XG4gIGxldCBjYWxsYmFjayA9IG51bGw7XG5cbiAgY29uc3QgcmV0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhc3RBcmdzID0gYXJncztcbiAgICBjYWxsYmFjayA9IGZuO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xuICAgICAgaGFuZGxlID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXQuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaGFuZGxlKTtcbiAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGNvbnN0IF9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuXG4gICAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIF9jYWxsYmFjayguLi5fbGFzdEFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXQuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjYWxsYmFjayA9IG51bGw7XG5cbiAgICBpZiAoaGFuZGxlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShoYW5kbGUpO1xuICAgICAgaGFuZGxlID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHJldDtcbn07IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcblxuZXhwb3J0IGNvbnN0IGNodW5rID0gZnVuY3Rpb24gKGFycmF5LCBzaXplKSB7XG4gIGlmICghYXJyYXkubGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IHJlc0luZGV4ID0gMDtcbiAgY29uc3QgcmVzdWx0ID0gQXJyYXkoTWF0aC5jZWlsKGFycmF5Lmxlbmd0aCAvIHNpemUpKTtcblxuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgaW5kZXggKz0gc2l6ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBjb25zdCBzZWxlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHJlbW92ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgZGlzdGFuY2UgPSBmdW5jdGlvbiAoeCwgeSkge1xuICByZXR1cm4gTWF0aC5hYnMoeCAtIHkpO1xufTtcbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBcIlwiO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHNldEN1cnNvciA9IGZ1bmN0aW9uIChjYW52YXMsIGN1cnNvcikge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgfVxufTtcbmxldCBlcmFzZXJDYW52YXNDYWNoZTtcbmxldCBwcmV2aWV3RGF0YVVSTDtcbmV4cG9ydCBjb25zdCBzZXRFcmFzZXJDdXJzb3IgPSBmdW5jdGlvbiAoY2FudmFzLCB0aGVtZSkge1xuICBjb25zdCBjdXJzb3JJbWFnZVNpemVQeCA9IDIwO1xuXG4gIGNvbnN0IGRyYXdDYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPSB0aGVtZSA9PT0gVEhFTUUuREFSSztcbiAgICBlcmFzZXJDYW52YXNDYWNoZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUudGhlbWUgPSB0aGVtZTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgPSBjdXJzb3JJbWFnZVNpemVQeDtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGNvbnN0IGNvbnRleHQgPSBlcmFzZXJDYW52YXNDYWNoZS5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoZXJhc2VyQ2FudmFzQ2FjaGUud2lkdGggLyAyLCBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLCA1LCAwLCAyICogTWF0aC5QSSk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLmJsYWNrIDogb2Mud2hpdGU7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGlzRGFya1RoZW1lID8gb2Mud2hpdGUgOiBvYy5ibGFjaztcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIHByZXZpZXdEYXRhVVJMID0gZXJhc2VyQ2FudmFzQ2FjaGUudG9EYXRhVVJMKE1JTUVfVFlQRVMuc3ZnKTtcbiAgfTtcblxuICBpZiAoIWVyYXNlckNhbnZhc0NhY2hlIHx8IGVyYXNlckNhbnZhc0NhY2hlLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIGRyYXdDYW52YXMoKTtcbiAgfVxuXG4gIHNldEN1cnNvcihjYW52YXMsIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke2N1cnNvckltYWdlU2l6ZVB4IC8gMn0sIGF1dG9gKTtcbn07XG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSBmdW5jdGlvbiAoY2FudmFzLCBhcHBTdGF0ZSkge1xuICBpZiAoIWNhbnZhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwic2VsZWN0aW9uXCIpIHtcbiAgICByZXNldEN1cnNvcihjYW52YXMpO1xuICB9IGVsc2UgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJlcmFzZXJcIikge1xuICAgIHNldEVyYXNlckN1cnNvcihjYW52YXMsIGFwcFN0YXRlLnRoZW1lKTsgLy8gZG8gbm90aGluZyBpZiBpbWFnZSB0b29sIGlzIHNlbGVjdGVkIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJ3NcbiAgICAvLyBhIGltYWdlLXByZXZpZXcgc2V0IGFzIHRoZSBjdXJzb3JcbiAgfSBlbHNlIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgIT09IFwiaW1hZ2VcIikge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBDVVJTT1JfVFlQRS5DUk9TU0hBSVI7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgaXNGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQ/Lm5vZGVOYW1lID09PSBcIkhUTUxcIjtcbn07XG5leHBvcnQgY29uc3QgYWxsb3dGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XG59O1xuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0U2hvcnRjdXRLZXkgPSBmdW5jdGlvbiAoc2hvcnRjdXQpIHtcbiAgc2hvcnRjdXQgPSBzaG9ydGN1dC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJBbHRcIikucmVwbGFjZSgvXFxiU2hpZnRcXGIvaSwgXCJTaGlmdFwiKS5yZXBsYWNlKC9cXGIoRW50ZXJ8UmV0dXJuKVxcYi9pLCBcIkVudGVyXCIpLnJlcGxhY2UoL1xcYkRlbFxcYi9pLCBcIkRlbGV0ZVwiKTtcblxuICBpZiAoaXNEYXJ3aW4pIHtcbiAgICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ21kXCIpLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuXG4gIHJldHVybiBzaG9ydGN1dC5yZXBsYWNlKC9cXGJDdHJsT3JDbWRcXGIvaSwgXCJDdHJsXCIpO1xufTtcbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSBmdW5jdGlvbiAoX3JlZjMsIF9yZWY0KSB7XG4gIGxldCB7XG4gICAgY2xpZW50WCxcbiAgICBjbGllbnRZXG4gIH0gPSBfcmVmMztcbiAgbGV0IHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWVxuICB9ID0gX3JlZjQ7XG4gIGNvbnN0IGludlNjYWxlID0gMSAvIHpvb20udmFsdWU7XG4gIGNvbnN0IHggPSAoY2xpZW50WCAtIG9mZnNldExlZnQpICogaW52U2NhbGUgLSBzY3JvbGxYO1xuICBjb25zdCB5ID0gKGNsaWVudFkgLSBvZmZzZXRUb3ApICogaW52U2NhbGUgLSBzY3JvbGxZO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufTtcbmV4cG9ydCBjb25zdCBzY2VuZUNvb3Jkc1RvVmlld3BvcnRDb29yZHMgPSBmdW5jdGlvbiAoX3JlZjUsIF9yZWY2KSB7XG4gIGxldCB7XG4gICAgc2NlbmVYLFxuICAgIHNjZW5lWVxuICB9ID0gX3JlZjU7XG4gIGxldCB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFlcbiAgfSA9IF9yZWY2O1xuICBjb25zdCB4ID0gKHNjZW5lWCArIHNjcm9sbFgpICogem9vbS52YWx1ZSArIG9mZnNldExlZnQ7XG4gIGNvbnN0IHkgPSAoc2NlbmVZICsgc2Nyb2xsWSkgKiB6b29tLnZhbHVlICsgb2Zmc2V0VG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufTtcbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke25hbWV9YCk7XG59O1xuY29uc3QgUlNfTFRSX0NIQVJTID0gXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5cbmV4cG9ydCBjb25zdCBpc1JUTCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHJldHVybiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcbn07XG5leHBvcnQgY29uc3QgdHVwbGVUb0Nvb3JzID0gZnVuY3Rpb24gKHh5VHVwbGUpIHtcbiAgY29uc3QgW3gsIHldID0geHlUdXBsZTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn07XG4vKiogdXNlIGFzIGEgcmVqZWN0aW9uSGFuZGxlciB0byBtdXRlIGZpbGVzeXN0ZW0gQWJvcnQgZXJyb3JzICovXG5cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIGlmIChlcnJvcj8ubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IGVycm9yO1xufTtcbmV4cG9ydCBjb25zdCBmaW5kSW5kZXggPSBmdW5jdGlvbiAoYXJyYXksIGNiKSB7XG4gIGxldCBmcm9tSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDA7XG5cbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cblxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGgsIE1hdGgubWF4KGZyb21JbmRleCwgMCkpO1xuICBsZXQgaW5kZXggPSBmcm9tSW5kZXggLSAxO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgaWYgKGNiKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn07XG5leHBvcnQgY29uc3QgZmluZExhc3RJbmRleCA9IGZ1bmN0aW9uIChhcnJheSwgY2IpIHtcbiAgbGV0IGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyYXkubGVuZ3RoIC0gMTtcblxuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuXG4gIGZyb21JbmRleCA9IE1hdGgubWluKGFycmF5Lmxlbmd0aCAtIDEsIE1hdGgubWF4KGZyb21JbmRleCwgMCkpO1xuICBsZXQgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuXG4gIHdoaWxlICgtLWluZGV4ID4gLTEpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcbmV4cG9ydCBjb25zdCBpc1RyYW5zcGFyZW50ID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gIGNvbnN0IGlzUkdCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDUgJiYgY29sb3Iuc3Vic3RyKDQsIDEpID09PSBcIjBcIjtcbiAgY29uc3QgaXNSUkdHQkJUcmFuc3BhcmVudCA9IGNvbG9yLmxlbmd0aCA9PT0gOSAmJiBjb2xvci5zdWJzdHIoNywgMikgPT09IFwiMDBcIjtcbiAgcmV0dXJuIGlzUkdCVHJhbnNwYXJlbnQgfHwgaXNSUkdHQkJUcmFuc3BhcmVudCB8fCBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IHJlc29sdmU7XG4gIGxldCByZWplY3Q7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoX3Jlc29sdmUsIF9yZWplY3QpIHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIHByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG4gIHByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZTtcbn07XG4vKipcbiAqIEBwYXJhbSBmdW5jIGhhbmRsZXIgdGFraW5nIGF0IG1vc3Qgc2luZ2xlIHBhcmFtZXRlciAoZXZlbnQpLlxuICovXG5cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYywgZXZlbnQpO1xuICB9O1xufTtcbi8qKlxuICogYmFyY2hlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIGFuZCB0aHJvdHRsZXMgdGhlIGNhbGxzIHRvIGEgc2luZ2xlIGNhbGwgcGVyXG4gKiBhbmltYXRpb24gZnJhbWVcbiAqL1xuXG5leHBvcnQgY29uc3Qgd2l0aEJhdGNoZWRVcGRhdGVzVGhyb3R0bGVkID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gdGhyb3R0bGVSQUYoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYywgZXZlbnQpO1xuICB9KTtcbn07IC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuXG5leHBvcnQgY29uc3QgbkZvcm1hdHRlciA9IGZ1bmN0aW9uIChudW0sIGRpZ2l0cykge1xuICBjb25zdCBzaSA9IFt7XG4gICAgdmFsdWU6IDEsXG4gICAgc3ltYm9sOiBcImJcIlxuICB9LCB7XG4gICAgdmFsdWU6IDFlMyxcbiAgICBzeW1ib2w6IFwia1wiXG4gIH0sIHtcbiAgICB2YWx1ZTogMWU2LFxuICAgIHN5bWJvbDogXCJNXCJcbiAgfSwge1xuICAgIHZhbHVlOiAxZTksXG4gICAgc3ltYm9sOiBcIkdcIlxuICB9XTtcbiAgY29uc3QgcnggPSAvXFwuMCskfChcXC5bMC05XSpbMS05XSkwKyQvO1xuICBsZXQgaW5kZXg7XG5cbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKG51bSAvIHNpW2luZGV4XS52YWx1ZSkudG9GaXhlZChkaWdpdHMpLnJlcGxhY2UocngsIFwiJDFcIikgKyBzaVtpbmRleF0uc3ltYm9sO1xufTtcbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8IERFRkFVTFRfVkVSU0lPTjtcbn07IC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvZW1vamkuanNcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRzRW1vamkgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgY3R4LmZpbGxTdHlsZSA9IFwiI2YwMFwiO1xuICBjdHgudGV4dEJhc2VsaW5lID0gXCJ0b3BcIjtcbiAgY3R4LmZvbnQgPSBcIjMycHggQXJpYWxcIjsgLy8gTW9kZXJuaXpyIHVzZWQg8J+QqCwgYnV0IGl0IGlzIHNvcnQgb2Ygc3VwcG9ydGVkIG9uIFdpbmRvd3MgNy5cbiAgLy8gTHVja2lseSDwn5iAIGlzbid0IHN1cHBvcnRlZC5cblxuICBjdHguZmlsbFRleHQoXCLwn5iAXCIsIDAsIDApO1xuICByZXR1cm4gY3R4LmdldEltYWdlRGF0YShvZmZzZXQsIG9mZnNldCwgMSwgMSkuZGF0YVswXSAhPT0gMDtcbn07XG5leHBvcnQgY29uc3QgZ2V0TmVhcmVzdFNjcm9sbGFibGVDb250YWluZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgb3ZlcmZsb3dZXG4gICAgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgY29uc3QgaGFzU2Nyb2xsYWJsZUNvbnRlbnQgPSBwYXJlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50LmNsaWVudEhlaWdodDtcblxuICAgIGlmIChoYXNTY3JvbGxhYmxlQ29udGVudCAmJiAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fCBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHwgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIikpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQ7XG59O1xuZXhwb3J0IGNvbnN0IGZvY3VzTmVhcmVzdFBhcmVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGxldCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQudGFiSW5kZXggPiAtMSkge1xuICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgcHJldmVudFVubG9hZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG5cbiAgZXZlbnQucmV0dXJuVmFsdWUgPSBcIlwiO1xufTtcbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKS5tYXAoZnVuY3Rpb24gKGJ5dGUpIHtcbiAgICByZXR1cm4gYDAke2J5dGUudG9TdHJpbmcoMTYpfWAuc2xpY2UoLTIpO1xuICB9KS5qb2luKFwiXCIpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNUZXN0RW52KCkgPyAxIDogRGF0ZS5ub3coKTtcbn07XG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5cbmV4cG9ydCBjb25zdCBhcnJheVRvTWFwID0gZnVuY3Rpb24gKGl0ZW1zKSB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZWxlbWVudCkge1xuICAgIGFjYy5zZXQodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIgPyBlbGVtZW50IDogZWxlbWVudC5pZCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgbmV3IE1hcCgpKTtcbn07XG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcbn07XG5leHBvcnQgY29uc3QgaXNQcm9kRW52ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcbn07XG5leHBvcnQgY29uc3Qgd3JhcEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgIGRldGFpbDoge1xuICAgICAgbmF0aXZlRXZlbnRcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWVcbiAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IGZ1bmN0aW9uIChvYmosIHVwZGF0ZXMpIHtcbiAgbGV0IGRpZENoYW5nZSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHVwZGF0ZXNba2V5XTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChvYmpba2V5XSA9PT0gdmFsdWUgJiYgKCAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9iaiksIHVwZGF0ZXMpO1xufTtcbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IFwiZnVuY3Rpb25cIjtcbn07XG5leHBvcnQgY29uc3QgZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wID8gXCJ0b3BcIiA6IFwiaWZyYW1lXCI7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwiaWZyYW1lXCI7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ0aGVuXCIgaW4gdmFsdWUgJiYgXCJjYXRjaFwiIGluIHZhbHVlICYmIFwiZmluYWxseVwiIGluIHZhbHVlO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///../../utils.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../utils.ts?");
3163
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"allowFullScreen\\\": () => (/* binding */ allowFullScreen),\\n/* harmony export */ \\\"arrayToMap\\\": () => (/* binding */ arrayToMap),\\n/* harmony export */ \\\"bytesToHexString\\\": () => (/* binding */ bytesToHexString),\\n/* harmony export */ \\\"capitalizeString\\\": () => (/* binding */ capitalizeString),\\n/* harmony export */ \\\"chunk\\\": () => (/* binding */ chunk),\\n/* harmony export */ \\\"debounce\\\": () => (/* binding */ debounce),\\n/* harmony export */ \\\"distance\\\": () => (/* binding */ distance),\\n/* harmony export */ \\\"exitFullScreen\\\": () => (/* binding */ exitFullScreen),\\n/* harmony export */ \\\"findIndex\\\": () => (/* binding */ findIndex),\\n/* harmony export */ \\\"findLastIndex\\\": () => (/* binding */ findLastIndex),\\n/* harmony export */ \\\"focusNearestParent\\\": () => (/* binding */ focusNearestParent),\\n/* harmony export */ \\\"getDateTime\\\": () => (/* binding */ getDateTime),\\n/* harmony export */ \\\"getFontFamilyString\\\": () => (/* binding */ getFontFamilyString),\\n/* harmony export */ \\\"getFontString\\\": () => (/* binding */ getFontString),\\n/* harmony export */ \\\"getFrame\\\": () => (/* binding */ getFrame),\\n/* harmony export */ \\\"getGlobalCSSVariable\\\": () => (/* binding */ getGlobalCSSVariable),\\n/* harmony export */ \\\"getNearestScrollableContainer\\\": () => (/* binding */ getNearestScrollableContainer),\\n/* harmony export */ \\\"getShortcutKey\\\": () => (/* binding */ getShortcutKey),\\n/* harmony export */ \\\"getUpdatedTimestamp\\\": () => (/* binding */ getUpdatedTimestamp),\\n/* harmony export */ \\\"getVersion\\\": () => (/* binding */ getVersion),\\n/* harmony export */ \\\"isFullScreen\\\": () => (/* binding */ isFullScreen),\\n/* harmony export */ \\\"isInputLike\\\": () => (/* binding */ isInputLike),\\n/* harmony export */ \\\"isPrimitive\\\": () => (/* binding */ isPrimitive),\\n/* harmony export */ \\\"isProdEnv\\\": () => (/* binding */ isProdEnv),\\n/* harmony export */ \\\"isPromiseLike\\\": () => (/* binding */ isPromiseLike),\\n/* harmony export */ \\\"isRTL\\\": () => (/* binding */ isRTL),\\n/* harmony export */ \\\"isTestEnv\\\": () => (/* binding */ isTestEnv),\\n/* harmony export */ \\\"isToolIcon\\\": () => (/* binding */ isToolIcon),\\n/* harmony export */ \\\"isTransparent\\\": () => (/* binding */ isTransparent),\\n/* harmony export */ \\\"isWritableElement\\\": () => (/* binding */ isWritableElement),\\n/* harmony export */ \\\"muteFSAbortError\\\": () => (/* binding */ muteFSAbortError),\\n/* harmony export */ \\\"nFormatter\\\": () => (/* binding */ nFormatter),\\n/* harmony export */ \\\"preventUnload\\\": () => (/* binding */ preventUnload),\\n/* harmony export */ \\\"removeSelection\\\": () => (/* binding */ removeSelection),\\n/* harmony export */ \\\"resetCursor\\\": () => (/* binding */ resetCursor),\\n/* harmony export */ \\\"resolvablePromise\\\": () => (/* binding */ resolvablePromise),\\n/* harmony export */ \\\"sceneCoordsToViewportCoords\\\": () => (/* binding */ sceneCoordsToViewportCoords),\\n/* harmony export */ \\\"selectNode\\\": () => (/* binding */ selectNode),\\n/* harmony export */ \\\"setCursor\\\": () => (/* binding */ setCursor),\\n/* harmony export */ \\\"setCursorForShape\\\": () => (/* binding */ setCursorForShape),\\n/* harmony export */ \\\"setDateTimeForTests\\\": () => (/* binding */ setDateTimeForTests),\\n/* harmony export */ \\\"setEraserCursor\\\": () => (/* binding */ setEraserCursor),\\n/* harmony export */ \\\"supportsEmoji\\\": () => (/* binding */ supportsEmoji),\\n/* harmony export */ \\\"throttleRAF\\\": () => (/* binding */ throttleRAF),\\n/* harmony export */ \\\"tupleToCoors\\\": () => (/* binding */ tupleToCoors),\\n/* harmony export */ \\\"updateObject\\\": () => (/* binding */ updateObject),\\n/* harmony export */ \\\"viewportCoordsToSceneCoords\\\": () => (/* binding */ viewportCoordsToSceneCoords),\\n/* harmony export */ \\\"withBatchedUpdates\\\": () => (/* binding */ withBatchedUpdates),\\n/* harmony export */ \\\"withBatchedUpdatesThrottled\\\": () => (/* binding */ withBatchedUpdatesThrottled),\\n/* harmony export */ \\\"wrapEvent\\\": () => (/* binding */ wrapEvent)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\\\");\\n/* harmony import */ var open_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! open-color */ \\\"../../../node_modules/open-color/open-color.json\\\");\\n/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./colors */ \\\"../../colors.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ \\\"react-dom\\\");\\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./keys */ \\\"../../keys.ts\\\");\\n\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nlet mockDateTime = null;\\r\\nconst setDateTimeForTests = function (dateTime) {\\r\\n mockDateTime = dateTime;\\r\\n};\\r\\nconst getDateTime = function () {\\r\\n if (mockDateTime) {\\r\\n return mockDateTime;\\r\\n }\\r\\n const date = new Date();\\r\\n const year = date.getFullYear();\\r\\n const month = `${date.getMonth() + 1}`.padStart(2, \\\"0\\\");\\r\\n const day = `${date.getDate()}`.padStart(2, \\\"0\\\");\\r\\n const hr = `${date.getHours()}`.padStart(2, \\\"0\\\");\\r\\n const min = `${date.getMinutes()}`.padStart(2, \\\"0\\\");\\r\\n return `${year}-${month}-${day}-${hr}${min}`;\\r\\n};\\r\\nconst capitalizeString = function (str) {\\r\\n return str.charAt(0).toUpperCase() + str.slice(1);\\r\\n};\\r\\nconst isToolIcon = function (target) {\\r\\n return target instanceof HTMLElement && target.className.includes(\\\"ToolIcon\\\");\\r\\n};\\r\\nconst isInputLike = function (target) {\\r\\n return target instanceof HTMLElement && target.dataset.type === \\\"wysiwyg\\\" || target instanceof HTMLBRElement || // newline in wysiwyg\\r\\n target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement;\\r\\n};\\r\\nconst isWritableElement = function (target) {\\r\\n return target instanceof HTMLElement && target.dataset.type === \\\"wysiwyg\\\" || target instanceof HTMLBRElement || // newline in wysiwyg\\r\\n target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === \\\"text\\\" || target.type === \\\"number\\\");\\r\\n};\\r\\nconst getFontFamilyString = function (_ref) {\\r\\n let { fontFamily } = _ref;\\r\\n for (const [fontFamilyString, id] of Object.entries(_constants__WEBPACK_IMPORTED_MODULE_3__.FONT_FAMILY)) {\\r\\n if (id === fontFamily) {\\r\\n return `${fontFamilyString}, ${_constants__WEBPACK_IMPORTED_MODULE_3__.WINDOWS_EMOJI_FALLBACK_FONT}`;\\r\\n }\\r\\n }\\r\\n return _constants__WEBPACK_IMPORTED_MODULE_3__.WINDOWS_EMOJI_FALLBACK_FONT;\\r\\n};\\r\\n/** returns fontSize+fontFamily string for assignment to DOM elements */\\r\\nconst getFontString = function (_ref2) {\\r\\n let { fontSize, fontFamily } = _ref2;\\r\\n return `${fontSize}px ${getFontFamilyString({\\r\\n fontFamily\\r\\n })}`;\\r\\n};\\r\\nconst debounce = function (fn, timeout) {\\r\\n let handle = 0;\\r\\n let lastArgs = null;\\r\\n const ret = function () {\\r\\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\\r\\n args[_key] = arguments[_key];\\r\\n }\\r\\n lastArgs = args;\\r\\n clearTimeout(handle);\\r\\n handle = window.setTimeout(function () {\\r\\n lastArgs = null;\\r\\n fn(...args);\\r\\n }, timeout);\\r\\n };\\r\\n ret.flush = function () {\\r\\n clearTimeout(handle);\\r\\n if (lastArgs) {\\r\\n const _lastArgs = lastArgs;\\r\\n lastArgs = null;\\r\\n fn(..._lastArgs);\\r\\n }\\r\\n };\\r\\n ret.cancel = function () {\\r\\n lastArgs = null;\\r\\n clearTimeout(handle);\\r\\n };\\r\\n return ret;\\r\\n}; // throttle callback to execute once per animation frame\\r\\nconst throttleRAF = function (fn) {\\r\\n let handle = null;\\r\\n let lastArgs = null;\\r\\n let callback = null;\\r\\n const ret = function () {\\r\\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\r\\n args[_key2] = arguments[_key2];\\r\\n }\\r\\n if (false) {}\\r\\n lastArgs = args;\\r\\n callback = fn;\\r\\n if (handle === null) {\\r\\n handle = window.requestAnimationFrame(function () {\\r\\n handle = null;\\r\\n lastArgs = null;\\r\\n callback = null;\\r\\n fn(...args);\\r\\n });\\r\\n }\\r\\n };\\r\\n ret.flush = function () {\\r\\n if (handle !== null) {\\r\\n cancelAnimationFrame(handle);\\r\\n handle = null;\\r\\n }\\r\\n if (lastArgs) {\\r\\n const _lastArgs = lastArgs;\\r\\n const _callback = callback;\\r\\n lastArgs = null;\\r\\n callback = null;\\r\\n if (_callback !== null) {\\r\\n _callback(..._lastArgs);\\r\\n }\\r\\n }\\r\\n };\\r\\n ret.cancel = function () {\\r\\n lastArgs = null;\\r\\n callback = null;\\r\\n if (handle !== null) {\\r\\n cancelAnimationFrame(handle);\\r\\n handle = null;\\r\\n }\\r\\n };\\r\\n return ret;\\r\\n}; // https://github.com/lodash/lodash/blob/es/chunk.js\\r\\nconst chunk = function (array, size) {\\r\\n if (!array.length || size < 1) {\\r\\n return [];\\r\\n }\\r\\n let index = 0;\\r\\n let resIndex = 0;\\r\\n const result = Array(Math.ceil(array.length / size));\\r\\n while (index < array.length) {\\r\\n result[resIndex++] = array.slice(index, index += size);\\r\\n }\\r\\n return result;\\r\\n};\\r\\nconst selectNode = function (node) {\\r\\n const selection = window.getSelection();\\r\\n if (selection) {\\r\\n const range = document.createRange();\\r\\n range.selectNodeContents(node);\\r\\n selection.removeAllRanges();\\r\\n selection.addRange(range);\\r\\n }\\r\\n};\\r\\nconst removeSelection = function () {\\r\\n const selection = window.getSelection();\\r\\n if (selection) {\\r\\n selection.removeAllRanges();\\r\\n }\\r\\n};\\r\\nconst distance = function (x, y) {\\r\\n return Math.abs(x - y);\\r\\n};\\r\\nconst resetCursor = function (canvas) {\\r\\n if (canvas) {\\r\\n canvas.style.cursor = \\\"\\\";\\r\\n }\\r\\n};\\r\\nconst setCursor = function (canvas, cursor) {\\r\\n if (canvas) {\\r\\n canvas.style.cursor = cursor;\\r\\n }\\r\\n};\\r\\nlet eraserCanvasCache;\\r\\nlet previewDataURL;\\r\\nconst setEraserCursor = function (canvas, theme) {\\r\\n const cursorImageSizePx = 20;\\r\\n const drawCanvas = function () {\\r\\n const isDarkTheme = theme === _constants__WEBPACK_IMPORTED_MODULE_3__.THEME.DARK;\\r\\n eraserCanvasCache = document.createElement(\\\"canvas\\\");\\r\\n eraserCanvasCache.theme = theme;\\r\\n eraserCanvasCache.height = cursorImageSizePx;\\r\\n eraserCanvasCache.width = cursorImageSizePx;\\r\\n const context = eraserCanvasCache.getContext(\\\"2d\\\");\\r\\n context.lineWidth = 1;\\r\\n context.beginPath();\\r\\n context.arc(eraserCanvasCache.width / 2, eraserCanvasCache.height / 2, 5, 0, 2 * Math.PI);\\r\\n context.fillStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_1__.black : open_color__WEBPACK_IMPORTED_MODULE_1__.white;\\r\\n context.fill();\\r\\n context.strokeStyle = isDarkTheme ? open_color__WEBPACK_IMPORTED_MODULE_1__.white : open_color__WEBPACK_IMPORTED_MODULE_1__.black;\\r\\n context.stroke();\\r\\n previewDataURL = eraserCanvasCache.toDataURL(_constants__WEBPACK_IMPORTED_MODULE_3__.MIME_TYPES.svg);\\r\\n };\\r\\n if (!eraserCanvasCache || eraserCanvasCache.theme !== theme) {\\r\\n drawCanvas();\\r\\n }\\r\\n setCursor(canvas, `url(${previewDataURL}) ${cursorImageSizePx / 2} ${cursorImageSizePx / 2}, auto`);\\r\\n};\\r\\nconst setCursorForShape = function (canvas, appState) {\\r\\n if (!canvas) {\\r\\n return;\\r\\n }\\r\\n if (appState.activeTool.type === \\\"selection\\\") {\\r\\n resetCursor(canvas);\\r\\n }\\r\\n else if (appState.activeTool.type === \\\"eraser\\\") {\\r\\n setEraserCursor(canvas, appState.theme); // do nothing if image tool is selected which suggests there's\\r\\n // a image-preview set as the cursor\\r\\n }\\r\\n else if (appState.activeTool.type !== \\\"image\\\") {\\r\\n canvas.style.cursor = _constants__WEBPACK_IMPORTED_MODULE_3__.CURSOR_TYPE.CROSSHAIR;\\r\\n }\\r\\n};\\r\\nconst isFullScreen = function () {\\r\\n var _a;\\r\\n return ((_a = document.fullscreenElement) === null || _a === void 0 ? void 0 : _a.nodeName) === \\\"HTML\\\";\\r\\n};\\r\\nconst allowFullScreen = function () {\\r\\n return document.documentElement.requestFullscreen();\\r\\n};\\r\\nconst exitFullScreen = function () {\\r\\n return document.exitFullscreen();\\r\\n};\\r\\nconst getShortcutKey = function (shortcut) {\\r\\n shortcut = shortcut.replace(/\\\\bAlt\\\\b/i, \\\"Alt\\\").replace(/\\\\bShift\\\\b/i, \\\"Shift\\\").replace(/\\\\b(Enter|Return)\\\\b/i, \\\"Enter\\\").replace(/\\\\bDel\\\\b/i, \\\"Delete\\\");\\r\\n if (_keys__WEBPACK_IMPORTED_MODULE_5__.isDarwin) {\\r\\n return shortcut.replace(/\\\\bCtrlOrCmd\\\\b/i, \\\"Cmd\\\").replace(/\\\\bAlt\\\\b/i, \\\"Option\\\");\\r\\n }\\r\\n return shortcut.replace(/\\\\bCtrlOrCmd\\\\b/i, \\\"Ctrl\\\");\\r\\n};\\r\\nconst viewportCoordsToSceneCoords = function (_ref3, _ref4) {\\r\\n let { clientX, clientY } = _ref3;\\r\\n let { zoom, offsetLeft, offsetTop, scrollX, scrollY } = _ref4;\\r\\n const invScale = 1 / zoom.value;\\r\\n const x = (clientX - offsetLeft) * invScale - scrollX;\\r\\n const y = (clientY - offsetTop) * invScale - scrollY;\\r\\n return {\\r\\n x,\\r\\n y\\r\\n };\\r\\n};\\r\\nconst sceneCoordsToViewportCoords = function (_ref5, _ref6) {\\r\\n let { sceneX, sceneY } = _ref5;\\r\\n let { zoom, offsetLeft, offsetTop, scrollX, scrollY } = _ref6;\\r\\n const x = (sceneX + scrollX) * zoom.value + offsetLeft;\\r\\n const y = (sceneY + scrollY) * zoom.value + offsetTop;\\r\\n return {\\r\\n x,\\r\\n y\\r\\n };\\r\\n};\\r\\nconst getGlobalCSSVariable = function (name) {\\r\\n return getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);\\r\\n};\\r\\nconst RS_LTR_CHARS = \\\"A-Za-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02B8\\\\u0300-\\\\u0590\\\\u0800-\\\\u1FFF\\\" + \\\"\\\\u2C00-\\\\uFB1C\\\\uFDFE-\\\\uFE6F\\\\uFEFD-\\\\uFFFF\\\";\\r\\nconst RS_RTL_CHARS = \\\"\\\\u0591-\\\\u07FF\\\\uFB1D-\\\\uFDFD\\\\uFE70-\\\\uFEFC\\\";\\r\\nconst RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);\\r\\n/**\\r\\n * Checks whether first directional character is RTL. Meaning whether it starts\\r\\n * with RTL characters, or indeterminate (numbers etc.) characters followed by\\r\\n * RTL.\\r\\n * See https://github.com/excalidraw/excalidraw/pull/1722#discussion_r436340171\\r\\n */\\r\\nconst isRTL = function (text) {\\r\\n return RE_RTL_CHECK.test(text);\\r\\n};\\r\\nconst tupleToCoors = function (xyTuple) {\\r\\n const [x, y] = xyTuple;\\r\\n return {\\r\\n x,\\r\\n y\\r\\n };\\r\\n};\\r\\n/** use as a rejectionHandler to mute filesystem Abort errors */\\r\\nconst muteFSAbortError = function (error) {\\r\\n if ((error === null || error === void 0 ? void 0 : error.name) === \\\"AbortError\\\") {\\r\\n console.warn(error);\\r\\n return;\\r\\n }\\r\\n throw error;\\r\\n};\\r\\nconst findIndex = function (array, cb) {\\r\\n let fromIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\\r\\n if (fromIndex < 0) {\\r\\n fromIndex = array.length + fromIndex;\\r\\n }\\r\\n fromIndex = Math.min(array.length, Math.max(fromIndex, 0));\\r\\n let index = fromIndex - 1;\\r\\n while (++index < array.length) {\\r\\n if (cb(array[index], index, array)) {\\r\\n return index;\\r\\n }\\r\\n }\\r\\n return -1;\\r\\n};\\r\\nconst findLastIndex = function (array, cb) {\\r\\n let fromIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : array.length - 1;\\r\\n if (fromIndex < 0) {\\r\\n fromIndex = array.length + fromIndex;\\r\\n }\\r\\n fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));\\r\\n let index = fromIndex + 1;\\r\\n while (--index > -1) {\\r\\n if (cb(array[index], index, array)) {\\r\\n return index;\\r\\n }\\r\\n }\\r\\n return -1;\\r\\n};\\r\\nconst isTransparent = function (color) {\\r\\n const isRGBTransparent = color.length === 5 && color.substr(4, 1) === \\\"0\\\";\\r\\n const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === \\\"00\\\";\\r\\n return isRGBTransparent || isRRGGBBTransparent || color === _colors__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].elementBackground[0];\\r\\n};\\r\\nconst resolvablePromise = function () {\\r\\n let resolve;\\r\\n let reject;\\r\\n const promise = new Promise(function (_resolve, _reject) {\\r\\n resolve = _resolve;\\r\\n reject = _reject;\\r\\n });\\r\\n promise.resolve = resolve;\\r\\n promise.reject = reject;\\r\\n return promise;\\r\\n};\\r\\n/**\\r\\n * @param func handler taking at most single parameter (event).\\r\\n */\\r\\nconst withBatchedUpdates = function (func) {\\r\\n return function (event) {\\r\\n (0,react_dom__WEBPACK_IMPORTED_MODULE_4__.unstable_batchedUpdates)(func, event);\\r\\n };\\r\\n};\\r\\n/**\\r\\n * barches React state updates and throttles the calls to a single call per\\r\\n * animation frame\\r\\n */\\r\\nconst withBatchedUpdatesThrottled = function (func) {\\r\\n // @ts-ignore\\r\\n return throttleRAF(function (event) {\\r\\n (0,react_dom__WEBPACK_IMPORTED_MODULE_4__.unstable_batchedUpdates)(func, event);\\r\\n });\\r\\n}; //https://stackoverflow.com/a/9462382/8418\\r\\nconst nFormatter = function (num, digits) {\\r\\n const si = [{\\r\\n value: 1,\\r\\n symbol: \\\"b\\\"\\r\\n }, {\\r\\n value: 1e3,\\r\\n symbol: \\\"k\\\"\\r\\n }, {\\r\\n value: 1e6,\\r\\n symbol: \\\"M\\\"\\r\\n }, {\\r\\n value: 1e9,\\r\\n symbol: \\\"G\\\"\\r\\n }];\\r\\n const rx = /\\\\.0+$|(\\\\.[0-9]*[1-9])0+$/;\\r\\n let index;\\r\\n for (index = si.length - 1; index > 0; index--) {\\r\\n if (num >= si[index].value) {\\r\\n break;\\r\\n }\\r\\n }\\r\\n return (num / si[index].value).toFixed(digits).replace(rx, \\\"$1\\\") + si[index].symbol;\\r\\n};\\r\\nconst getVersion = function () {\\r\\n var _a;\\r\\n return ((_a = document.querySelector('meta[name=\\\"version\\\"]')) === null || _a === void 0 ? void 0 : _a.content) || _constants__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_VERSION;\\r\\n}; // Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/emoji.js\\r\\nconst supportsEmoji = function () {\\r\\n const canvas = document.createElement(\\\"canvas\\\");\\r\\n const ctx = canvas.getContext(\\\"2d\\\");\\r\\n if (!ctx) {\\r\\n return false;\\r\\n }\\r\\n const offset = 12;\\r\\n ctx.fillStyle = \\\"#f00\\\";\\r\\n ctx.textBaseline = \\\"top\\\";\\r\\n ctx.font = \\\"32px Arial\\\"; // Modernizr used 🐨, but it is sort of supported on Windows 7.\\r\\n // Luckily 😀 isn't supported.\\r\\n ctx.fillText(\\\"😀\\\", 0, 0);\\r\\n return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;\\r\\n};\\r\\nconst getNearestScrollableContainer = function (element) {\\r\\n let parent = element.parentElement;\\r\\n while (parent) {\\r\\n if (parent === document.body) {\\r\\n return document;\\r\\n }\\r\\n const { overflowY } = window.getComputedStyle(parent);\\r\\n const hasScrollableContent = parent.scrollHeight > parent.clientHeight;\\r\\n if (hasScrollableContent && (overflowY === \\\"auto\\\" || overflowY === \\\"scroll\\\" || overflowY === \\\"overlay\\\")) {\\r\\n return parent;\\r\\n }\\r\\n parent = parent.parentElement;\\r\\n }\\r\\n return document;\\r\\n};\\r\\nconst focusNearestParent = function (element) {\\r\\n let parent = element.parentElement;\\r\\n while (parent) {\\r\\n if (parent.tabIndex > -1) {\\r\\n parent.focus();\\r\\n return;\\r\\n }\\r\\n parent = parent.parentElement;\\r\\n }\\r\\n};\\r\\nconst preventUnload = function (event) {\\r\\n event.preventDefault(); // NOTE: modern browsers no longer allow showing a custom message here\\r\\n event.returnValue = \\\"\\\";\\r\\n};\\r\\nconst bytesToHexString = function (bytes) {\\r\\n return Array.from(bytes).map(function (byte) {\\r\\n return `0${byte.toString(16)}`.slice(-2);\\r\\n }).join(\\\"\\\");\\r\\n};\\r\\nconst getUpdatedTimestamp = function () {\\r\\n return isTestEnv() ? 1 : Date.now();\\r\\n};\\r\\n/**\\r\\n * Transforms array of objects containing `id` attribute,\\r\\n * or array of ids (strings), into a Map, keyd by `id`.\\r\\n */\\r\\nconst arrayToMap = function (items) {\\r\\n return items.reduce(function (acc, element) {\\r\\n acc.set(typeof element === \\\"string\\\" ? element : element.id, element);\\r\\n return acc;\\r\\n }, new Map());\\r\\n};\\r\\nconst isTestEnv = function () {\\r\\n var _a;\\r\\n return typeof process !== \\\"undefined\\\" && ((_a = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-15\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \\\"test\\\";\\r\\n};\\r\\nconst isProdEnv = function () {\\r\\n var _a;\\r\\n return typeof process !== \\\"undefined\\\" && ((_a = ({\\\"REACT_APP_BACKEND_V2_GET_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/\\\",\\\"REACT_APP_BACKEND_V2_POST_URL\\\":\\\"https://json-dev.excalidraw.com/api/v2/post/\\\",\\\"REACT_APP_LIBRARY_URL\\\":\\\"https://libraries.excalidraw.com\\\",\\\"REACT_APP_LIBRARY_BACKEND\\\":\\\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\\\",\\\"REACT_APP_WS_SERVER_URL\\\":\\\"http://localhost:3002\\\",\\\"REACT_APP_PORTAL_URL\\\":\\\"\\\",\\\"REACT_APP_FIREBASE_CONFIG\\\":\\\"{\\\\\\\"apiKey\\\\\\\":\\\\\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\\\\\",\\\\\\\"authDomain\\\\\\\":\\\\\\\"excalidraw-oss-dev.firebaseapp.com\\\\\\\",\\\\\\\"projectId\\\\\\\":\\\\\\\"excalidraw-oss-dev\\\\\\\",\\\\\\\"storageBucket\\\\\\\":\\\\\\\"excalidraw-oss-dev.appspot.com\\\\\\\",\\\\\\\"messagingSenderId\\\\\\\":\\\\\\\"664559512677\\\\\\\",\\\\\\\"appId\\\\\\\":\\\\\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\\\\\"}\\\",\\\"PKG_NAME\\\":\\\"@zsviczian/excalidraw\\\",\\\"PKG_VERSION\\\":\\\"0.11.0-obsidian-15\\\",\\\"IS_EXCALIDRAW_NPM_PACKAGE\\\":true})) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === \\\"production\\\";\\r\\n};\\r\\nconst wrapEvent = function (name, nativeEvent) {\\r\\n return new CustomEvent(name, {\\r\\n detail: {\\r\\n nativeEvent\\r\\n },\\r\\n cancelable: true\\r\\n });\\r\\n};\\r\\nconst updateObject = function (obj, updates) {\\r\\n let didChange = false;\\r\\n for (const key in updates) {\\r\\n const value = updates[key];\\r\\n if (typeof value !== \\\"undefined\\\") {\\r\\n if (obj[key] === value && ( // if object, always update because its attrs could have changed\\r\\n typeof value !== \\\"object\\\" || value === null)) {\\r\\n continue;\\r\\n }\\r\\n didChange = true;\\r\\n }\\r\\n }\\r\\n if (!didChange) {\\r\\n return obj;\\r\\n }\\r\\n return _objectSpread(_objectSpread({}, obj), updates);\\r\\n};\\r\\nconst isPrimitive = function (val) {\\r\\n const type = typeof val;\\r\\n return val == null || type !== \\\"object\\\" && type !== \\\"function\\\";\\r\\n};\\r\\nconst getFrame = function () {\\r\\n try {\\r\\n return window.self === window.top ? \\\"top\\\" : \\\"iframe\\\";\\r\\n }\\r\\n catch (error) {\\r\\n return \\\"iframe\\\";\\r\\n }\\r\\n};\\r\\nconst isPromiseLike = function (value) {\\r\\n return !!value && typeof value === \\\"object\\\" && \\\"then\\\" in value && \\\"catch\\\" in value && \\\"finally\\\" in value;\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLEtBQUssVUFBVSxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUNLLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLElBQUk7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDdEQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxhQUFhLEdBQUcsVUFBVSxLQUFLO0lBQzFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFDM0csQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL3V0aWxzLnRzP2IxZGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgb2MgZnJvbSBcIm9wZW4tY29sb3JcIjtcbmltcG9ydCBjb2xvcnMgZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQgeyBDVVJTT1JfVFlQRSwgREVGQVVMVF9WRVJTSU9OLCBGT05UX0ZBTUlMWSwgTUlNRV9UWVBFUywgVEhFTUUsIFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBpc0RhcndpbiB9IGZyb20gXCIuL2tleXNcIjtcbmxldCBtb2NrRGF0ZVRpbWUgPSBudWxsO1xuZXhwb3J0IGNvbnN0IHNldERhdGVUaW1lRm9yVGVzdHMgPSBmdW5jdGlvbiAoZGF0ZVRpbWUpIHtcbiAgbW9ja0RhdGVUaW1lID0gZGF0ZVRpbWU7XG59O1xuZXhwb3J0IGNvbnN0IGdldERhdGVUaW1lID0gZnVuY3Rpb24gKCkge1xuICBpZiAobW9ja0RhdGVUaW1lKSB7XG4gICAgcmV0dXJuIG1vY2tEYXRlVGltZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBtb250aCA9IGAke2RhdGUuZ2V0TW9udGgoKSArIDF9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIGNvbnN0IGRheSA9IGAke2RhdGUuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICBjb25zdCBociA9IGAke2RhdGUuZ2V0SG91cnMoKX1gLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgY29uc3QgbWluID0gYCR7ZGF0ZS5nZXRNaW51dGVzKCl9YC5wYWRTdGFydCgyLCBcIjBcIik7XG4gIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX0tJHtocn0ke21pbn1gO1xufTtcbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplU3RyaW5nID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufTtcbmV4cG9ydCBjb25zdCBpc1Rvb2xJY29uID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRvb2xJY29uXCIpO1xufTtcbmV4cG9ydCBjb25zdCBpc0lucHV0TGlrZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHRhcmdldC5kYXRhc2V0LnR5cGUgPT09IFwid3lzaXd5Z1wiIHx8IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxCUkVsZW1lbnQgfHwgLy8gbmV3bGluZSBpbiB3eXNpd3lnXG4gIHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgdGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCB8fCB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudDtcbn07XG5leHBvcnQgY29uc3QgaXNXcml0YWJsZUVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQuZGF0YXNldC50eXBlID09PSBcInd5c2l3eWdcIiB8fCB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MQlJFbGVtZW50IHx8IC8vIG5ld2xpbmUgaW4gd3lzaXd5Z1xuICB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50IHx8IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgKHRhcmdldC50eXBlID09PSBcInRleHRcIiB8fCB0YXJnZXQudHlwZSA9PT0gXCJudW1iZXJcIik7XG59O1xuZXhwb3J0IGNvbnN0IGdldEZvbnRGYW1pbHlTdHJpbmcgPSBmdW5jdGlvbiAoX3JlZikge1xuICBsZXQge1xuICAgIGZvbnRGYW1pbHlcbiAgfSA9IF9yZWY7XG5cbiAgZm9yIChjb25zdCBbZm9udEZhbWlseVN0cmluZywgaWRdIG9mIE9iamVjdC5lbnRyaWVzKEZPTlRfRkFNSUxZKSkge1xuICAgIGlmIChpZCA9PT0gZm9udEZhbWlseSkge1xuICAgICAgcmV0dXJuIGAke2ZvbnRGYW1pbHlTdHJpbmd9LCAke1dJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVH1gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBXSU5ET1dTX0VNT0pJX0ZBTExCQUNLX0ZPTlQ7XG59O1xuLyoqIHJldHVybnMgZm9udFNpemUrZm9udEZhbWlseSBzdHJpbmcgZm9yIGFzc2lnbm1lbnQgdG8gRE9NIGVsZW1lbnRzICovXG5cbmV4cG9ydCBjb25zdCBnZXRGb250U3RyaW5nID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gIGxldCB7XG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseVxuICB9ID0gX3JlZjI7XG4gIHJldHVybiBgJHtmb250U2l6ZX1weCAke2dldEZvbnRGYW1pbHlTdHJpbmcoe1xuICAgIGZvbnRGYW1pbHlcbiAgfSl9YDtcbn07XG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcbiAgbGV0IGhhbmRsZSA9IDA7XG4gIGxldCBsYXN0QXJncyA9IG51bGw7XG5cbiAgY29uc3QgcmV0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgY2xlYXJUaW1lb3V0KGhhbmRsZSk7XG4gICAgaGFuZGxlID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgZm4oLi4uYXJncyk7XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgcmV0LmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuXG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgIGZuKC4uLl9sYXN0QXJncyk7XG4gICAgfVxuICB9O1xuXG4gIHJldC5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGNsZWFyVGltZW91dChoYW5kbGUpO1xuICB9O1xuXG4gIHJldHVybiByZXQ7XG59OyAvLyB0aHJvdHRsZSBjYWxsYmFjayB0byBleGVjdXRlIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZVxuXG5leHBvcnQgY29uc3QgdGhyb3R0bGVSQUYgPSBmdW5jdGlvbiAoZm4pIHtcbiAgbGV0IGhhbmRsZSA9IG51bGw7XG4gIGxldCBsYXN0QXJncyA9IG51bGw7XG4gIGxldCBjYWxsYmFjayA9IG51bGw7XG5cbiAgY29uc3QgcmV0ID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGZuKC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxhc3RBcmdzID0gYXJncztcbiAgICBjYWxsYmFjayA9IGZuO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xuICAgICAgaGFuZGxlID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXQuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaGFuZGxlKTtcbiAgICAgIGhhbmRsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGxhc3RBcmdzKSB7XG4gICAgICBjb25zdCBfbGFzdEFyZ3MgPSBsYXN0QXJncztcbiAgICAgIGNvbnN0IF9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuXG4gICAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIF9jYWxsYmFjayguLi5fbGFzdEFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXQuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBjYWxsYmFjayA9IG51bGw7XG5cbiAgICBpZiAoaGFuZGxlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShoYW5kbGUpO1xuICAgICAgaGFuZGxlID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHJldDtcbn07IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvY2h1bmsuanNcblxuZXhwb3J0IGNvbnN0IGNodW5rID0gZnVuY3Rpb24gKGFycmF5LCBzaXplKSB7XG4gIGlmICghYXJyYXkubGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IHJlc0luZGV4ID0gMDtcbiAgY29uc3QgcmVzdWx0ID0gQXJyYXkoTWF0aC5jZWlsKGFycmF5Lmxlbmd0aCAvIHNpemUpKTtcblxuICB3aGlsZSAoaW5kZXggPCBhcnJheS5sZW5ndGgpIHtcbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBhcnJheS5zbGljZShpbmRleCwgaW5kZXggKz0gc2l6ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBjb25zdCBzZWxlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHJlbW92ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmIChzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgZGlzdGFuY2UgPSBmdW5jdGlvbiAoeCwgeSkge1xuICByZXR1cm4gTWF0aC5hYnMoeCAtIHkpO1xufTtcbmV4cG9ydCBjb25zdCByZXNldEN1cnNvciA9IGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgaWYgKGNhbnZhcykge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBcIlwiO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHNldEN1cnNvciA9IGZ1bmN0aW9uIChjYW52YXMsIGN1cnNvcikge1xuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IGN1cnNvcjtcbiAgfVxufTtcbmxldCBlcmFzZXJDYW52YXNDYWNoZTtcbmxldCBwcmV2aWV3RGF0YVVSTDtcbmV4cG9ydCBjb25zdCBzZXRFcmFzZXJDdXJzb3IgPSBmdW5jdGlvbiAoY2FudmFzLCB0aGVtZSkge1xuICBjb25zdCBjdXJzb3JJbWFnZVNpemVQeCA9IDIwO1xuXG4gIGNvbnN0IGRyYXdDYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaXNEYXJrVGhlbWUgPSB0aGVtZSA9PT0gVEhFTUUuREFSSztcbiAgICBlcmFzZXJDYW52YXNDYWNoZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgZXJhc2VyQ2FudmFzQ2FjaGUudGhlbWUgPSB0aGVtZTtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgPSBjdXJzb3JJbWFnZVNpemVQeDtcbiAgICBlcmFzZXJDYW52YXNDYWNoZS53aWR0aCA9IGN1cnNvckltYWdlU2l6ZVB4O1xuICAgIGNvbnN0IGNvbnRleHQgPSBlcmFzZXJDYW52YXNDYWNoZS5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgY29udGV4dC5hcmMoZXJhc2VyQ2FudmFzQ2FjaGUud2lkdGggLyAyLCBlcmFzZXJDYW52YXNDYWNoZS5oZWlnaHQgLyAyLCA1LCAwLCAyICogTWF0aC5QSSk7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSBpc0RhcmtUaGVtZSA/IG9jLmJsYWNrIDogb2Mud2hpdGU7XG4gICAgY29udGV4dC5maWxsKCk7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGlzRGFya1RoZW1lID8gb2Mud2hpdGUgOiBvYy5ibGFjaztcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIHByZXZpZXdEYXRhVVJMID0gZXJhc2VyQ2FudmFzQ2FjaGUudG9EYXRhVVJMKE1JTUVfVFlQRVMuc3ZnKTtcbiAgfTtcblxuICBpZiAoIWVyYXNlckNhbnZhc0NhY2hlIHx8IGVyYXNlckNhbnZhc0NhY2hlLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIGRyYXdDYW52YXMoKTtcbiAgfVxuXG4gIHNldEN1cnNvcihjYW52YXMsIGB1cmwoJHtwcmV2aWV3RGF0YVVSTH0pICR7Y3Vyc29ySW1hZ2VTaXplUHggLyAyfSAke2N1cnNvckltYWdlU2l6ZVB4IC8gMn0sIGF1dG9gKTtcbn07XG5leHBvcnQgY29uc3Qgc2V0Q3Vyc29yRm9yU2hhcGUgPSBmdW5jdGlvbiAoY2FudmFzLCBhcHBTdGF0ZSkge1xuICBpZiAoIWNhbnZhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgPT09IFwic2VsZWN0aW9uXCIpIHtcbiAgICByZXNldEN1cnNvcihjYW52YXMpO1xuICB9IGVsc2UgaWYgKGFwcFN0YXRlLmFjdGl2ZVRvb2wudHlwZSA9PT0gXCJlcmFzZXJcIikge1xuICAgIHNldEVyYXNlckN1cnNvcihjYW52YXMsIGFwcFN0YXRlLnRoZW1lKTsgLy8gZG8gbm90aGluZyBpZiBpbWFnZSB0b29sIGlzIHNlbGVjdGVkIHdoaWNoIHN1Z2dlc3RzIHRoZXJlJ3NcbiAgICAvLyBhIGltYWdlLXByZXZpZXcgc2V0IGFzIHRoZSBjdXJzb3JcbiAgfSBlbHNlIGlmIChhcHBTdGF0ZS5hY3RpdmVUb29sLnR5cGUgIT09IFwiaW1hZ2VcIikge1xuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBDVVJTT1JfVFlQRS5DUk9TU0hBSVI7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgaXNGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQ/Lm5vZGVOYW1lID09PSBcIkhUTUxcIjtcbn07XG5leHBvcnQgY29uc3QgYWxsb3dGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XG59O1xuZXhwb3J0IGNvbnN0IGV4aXRGdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0U2hvcnRjdXRLZXkgPSBmdW5jdGlvbiAoc2hvcnRjdXQpIHtcbiAgc2hvcnRjdXQgPSBzaG9ydGN1dC5yZXBsYWNlKC9cXGJBbHRcXGIvaSwgXCJBbHRcIikucmVwbGFjZSgvXFxiU2hpZnRcXGIvaSwgXCJTaGlmdFwiKS5yZXBsYWNlKC9cXGIoRW50ZXJ8UmV0dXJuKVxcYi9pLCBcIkVudGVyXCIpLnJlcGxhY2UoL1xcYkRlbFxcYi9pLCBcIkRlbGV0ZVwiKTtcblxuICBpZiAoaXNEYXJ3aW4pIHtcbiAgICByZXR1cm4gc2hvcnRjdXQucmVwbGFjZSgvXFxiQ3RybE9yQ21kXFxiL2ksIFwiQ21kXCIpLnJlcGxhY2UoL1xcYkFsdFxcYi9pLCBcIk9wdGlvblwiKTtcbiAgfVxuXG4gIHJldHVybiBzaG9ydGN1dC5yZXBsYWNlKC9cXGJDdHJsT3JDbWRcXGIvaSwgXCJDdHJsXCIpO1xufTtcbmV4cG9ydCBjb25zdCB2aWV3cG9ydENvb3Jkc1RvU2NlbmVDb29yZHMgPSBmdW5jdGlvbiAoX3JlZjMsIF9yZWY0KSB7XG4gIGxldCB7XG4gICAgY2xpZW50WCxcbiAgICBjbGllbnRZXG4gIH0gPSBfcmVmMztcbiAgbGV0IHtcbiAgICB6b29tLFxuICAgIG9mZnNldExlZnQsXG4gICAgb2Zmc2V0VG9wLFxuICAgIHNjcm9sbFgsXG4gICAgc2Nyb2xsWVxuICB9ID0gX3JlZjQ7XG4gIGNvbnN0IGludlNjYWxlID0gMSAvIHpvb20udmFsdWU7XG4gIGNvbnN0IHggPSAoY2xpZW50WCAtIG9mZnNldExlZnQpICogaW52U2NhbGUgLSBzY3JvbGxYO1xuICBjb25zdCB5ID0gKGNsaWVudFkgLSBvZmZzZXRUb3ApICogaW52U2NhbGUgLSBzY3JvbGxZO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufTtcbmV4cG9ydCBjb25zdCBzY2VuZUNvb3Jkc1RvVmlld3BvcnRDb29yZHMgPSBmdW5jdGlvbiAoX3JlZjUsIF9yZWY2KSB7XG4gIGxldCB7XG4gICAgc2NlbmVYLFxuICAgIHNjZW5lWVxuICB9ID0gX3JlZjU7XG4gIGxldCB7XG4gICAgem9vbSxcbiAgICBvZmZzZXRMZWZ0LFxuICAgIG9mZnNldFRvcCxcbiAgICBzY3JvbGxYLFxuICAgIHNjcm9sbFlcbiAgfSA9IF9yZWY2O1xuICBjb25zdCB4ID0gKHNjZW5lWCArIHNjcm9sbFgpICogem9vbS52YWx1ZSArIG9mZnNldExlZnQ7XG4gIGNvbnN0IHkgPSAoc2NlbmVZICsgc2Nyb2xsWSkgKiB6b29tLnZhbHVlICsgb2Zmc2V0VG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufTtcbmV4cG9ydCBjb25zdCBnZXRHbG9iYWxDU1NWYXJpYWJsZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShgLS0ke25hbWV9YCk7XG59O1xuY29uc3QgUlNfTFRSX0NIQVJTID0gXCJBLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQjhcXHUwMzAwLVxcdTA1OTBcXHUwODAwLVxcdTFGRkZcIiArIFwiXFx1MkMwMC1cXHVGQjFDXFx1RkRGRS1cXHVGRTZGXFx1RkVGRC1cXHVGRkZGXCI7XG5jb25zdCBSU19SVExfQ0hBUlMgPSBcIlxcdTA1OTEtXFx1MDdGRlxcdUZCMUQtXFx1RkRGRFxcdUZFNzAtXFx1RkVGQ1wiO1xuY29uc3QgUkVfUlRMX0NIRUNLID0gbmV3IFJlZ0V4cChgXlteJHtSU19MVFJfQ0hBUlN9XSpbJHtSU19SVExfQ0hBUlN9XWApO1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBmaXJzdCBkaXJlY3Rpb25hbCBjaGFyYWN0ZXIgaXMgUlRMLiBNZWFuaW5nIHdoZXRoZXIgaXQgc3RhcnRzXG4gKiAgd2l0aCBSVEwgY2hhcmFjdGVycywgb3IgaW5kZXRlcm1pbmF0ZSAobnVtYmVycyBldGMuKSBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5XG4gKiAgUlRMLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9leGNhbGlkcmF3L2V4Y2FsaWRyYXcvcHVsbC8xNzIyI2Rpc2N1c3Npb25fcjQzNjM0MDE3MVxuICovXG5cbmV4cG9ydCBjb25zdCBpc1JUTCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHJldHVybiBSRV9SVExfQ0hFQ0sudGVzdCh0ZXh0KTtcbn07XG5leHBvcnQgY29uc3QgdHVwbGVUb0Nvb3JzID0gZnVuY3Rpb24gKHh5VHVwbGUpIHtcbiAgY29uc3QgW3gsIHldID0geHlUdXBsZTtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn07XG4vKiogdXNlIGFzIGEgcmVqZWN0aW9uSGFuZGxlciB0byBtdXRlIGZpbGVzeXN0ZW0gQWJvcnQgZXJyb3JzICovXG5cbmV4cG9ydCBjb25zdCBtdXRlRlNBYm9ydEVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIGlmIChlcnJvcj8ubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IGVycm9yO1xufTtcbmV4cG9ydCBjb25zdCBmaW5kSW5kZXggPSBmdW5jdGlvbiAoYXJyYXksIGNiKSB7XG4gIGxldCBmcm9tSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDA7XG5cbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBhcnJheS5sZW5ndGggKyBmcm9tSW5kZXg7XG4gIH1cblxuICBmcm9tSW5kZXggPSBNYXRoLm1pbihhcnJheS5sZW5ndGgsIE1hdGgubWF4KGZyb21JbmRleCwgMCkpO1xuICBsZXQgaW5kZXggPSBmcm9tSW5kZXggLSAxO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgaWYgKGNiKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn07XG5leHBvcnQgY29uc3QgZmluZExhc3RJbmRleCA9IGZ1bmN0aW9uIChhcnJheSwgY2IpIHtcbiAgbGV0IGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogYXJyYXkubGVuZ3RoIC0gMTtcblxuICBpZiAoZnJvbUluZGV4IDwgMCkge1xuICAgIGZyb21JbmRleCA9IGFycmF5Lmxlbmd0aCArIGZyb21JbmRleDtcbiAgfVxuXG4gIGZyb21JbmRleCA9IE1hdGgubWluKGFycmF5Lmxlbmd0aCAtIDEsIE1hdGgubWF4KGZyb21JbmRleCwgMCkpO1xuICBsZXQgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuXG4gIHdoaWxlICgtLWluZGV4ID4gLTEpIHtcbiAgICBpZiAoY2IoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcbmV4cG9ydCBjb25zdCBpc1RyYW5zcGFyZW50ID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gIGNvbnN0IGlzUkdCVHJhbnNwYXJlbnQgPSBjb2xvci5sZW5ndGggPT09IDUgJiYgY29sb3Iuc3Vic3RyKDQsIDEpID09PSBcIjBcIjtcbiAgY29uc3QgaXNSUkdHQkJUcmFuc3BhcmVudCA9IGNvbG9yLmxlbmd0aCA9PT0gOSAmJiBjb2xvci5zdWJzdHIoNywgMikgPT09IFwiMDBcIjtcbiAgcmV0dXJuIGlzUkdCVHJhbnNwYXJlbnQgfHwgaXNSUkdHQkJUcmFuc3BhcmVudCB8fCBjb2xvciA9PT0gY29sb3JzLmVsZW1lbnRCYWNrZ3JvdW5kWzBdO1xufTtcbmV4cG9ydCBjb25zdCByZXNvbHZhYmxlUHJvbWlzZSA9IGZ1bmN0aW9uICgpIHtcbiAgbGV0IHJlc29sdmU7XG4gIGxldCByZWplY3Q7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoX3Jlc29sdmUsIF9yZWplY3QpIHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgfSk7XG4gIHByb21pc2UucmVzb2x2ZSA9IHJlc29sdmU7XG4gIHByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuICByZXR1cm4gcHJvbWlzZTtcbn07XG4vKipcbiAqIEBwYXJhbSBmdW5jIGhhbmRsZXIgdGFraW5nIGF0IG1vc3Qgc2luZ2xlIHBhcmFtZXRlciAoZXZlbnQpLlxuICovXG5cbmV4cG9ydCBjb25zdCB3aXRoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYywgZXZlbnQpO1xuICB9O1xufTtcbi8qKlxuICogYmFyY2hlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIGFuZCB0aHJvdHRsZXMgdGhlIGNhbGxzIHRvIGEgc2luZ2xlIGNhbGwgcGVyXG4gKiBhbmltYXRpb24gZnJhbWVcbiAqL1xuXG5leHBvcnQgY29uc3Qgd2l0aEJhdGNoZWRVcGRhdGVzVGhyb3R0bGVkID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gdGhyb3R0bGVSQUYoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuYywgZXZlbnQpO1xuICB9KTtcbn07IC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk0NjIzODIvODQxOFxuXG5leHBvcnQgY29uc3QgbkZvcm1hdHRlciA9IGZ1bmN0aW9uIChudW0sIGRpZ2l0cykge1xuICBjb25zdCBzaSA9IFt7XG4gICAgdmFsdWU6IDEsXG4gICAgc3ltYm9sOiBcImJcIlxuICB9LCB7XG4gICAgdmFsdWU6IDFlMyxcbiAgICBzeW1ib2w6IFwia1wiXG4gIH0sIHtcbiAgICB2YWx1ZTogMWU2LFxuICAgIHN5bWJvbDogXCJNXCJcbiAgfSwge1xuICAgIHZhbHVlOiAxZTksXG4gICAgc3ltYm9sOiBcIkdcIlxuICB9XTtcbiAgY29uc3QgcnggPSAvXFwuMCskfChcXC5bMC05XSpbMS05XSkwKyQvO1xuICBsZXQgaW5kZXg7XG5cbiAgZm9yIChpbmRleCA9IHNpLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGlmIChudW0gPj0gc2lbaW5kZXhdLnZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKG51bSAvIHNpW2luZGV4XS52YWx1ZSkudG9GaXhlZChkaWdpdHMpLnJlcGxhY2UocngsIFwiJDFcIikgKyBzaVtpbmRleF0uc3ltYm9sO1xufTtcbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidmVyc2lvblwiXScpPy5jb250ZW50IHx8IERFRkFVTFRfVkVSU0lPTjtcbn07IC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvZW1vamkuanNcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRzRW1vamkgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG5cbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgY3R4LmZpbGxTdHlsZSA9IFwiI2YwMFwiO1xuICBjdHgudGV4dEJhc2VsaW5lID0gXCJ0b3BcIjtcbiAgY3R4LmZvbnQgPSBcIjMycHggQXJpYWxcIjsgLy8gTW9kZXJuaXpyIHVzZWQg8J+QqCwgYnV0IGl0IGlzIHNvcnQgb2Ygc3VwcG9ydGVkIG9uIFdpbmRvd3MgNy5cbiAgLy8gTHVja2lseSDwn5iAIGlzbid0IHN1cHBvcnRlZC5cblxuICBjdHguZmlsbFRleHQoXCLwn5iAXCIsIDAsIDApO1xuICByZXR1cm4gY3R4LmdldEltYWdlRGF0YShvZmZzZXQsIG9mZnNldCwgMSwgMSkuZGF0YVswXSAhPT0gMDtcbn07XG5leHBvcnQgY29uc3QgZ2V0TmVhcmVzdFNjcm9sbGFibGVDb250YWluZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgb3ZlcmZsb3dZXG4gICAgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgY29uc3QgaGFzU2Nyb2xsYWJsZUNvbnRlbnQgPSBwYXJlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50LmNsaWVudEhlaWdodDtcblxuICAgIGlmIChoYXNTY3JvbGxhYmxlQ29udGVudCAmJiAob3ZlcmZsb3dZID09PSBcImF1dG9cIiB8fCBvdmVyZmxvd1kgPT09IFwic2Nyb2xsXCIgfHwgb3ZlcmZsb3dZID09PSBcIm92ZXJsYXlcIikpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQ7XG59O1xuZXhwb3J0IGNvbnN0IGZvY3VzTmVhcmVzdFBhcmVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGxldCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQudGFiSW5kZXggPiAtMSkge1xuICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgcHJldmVudFVubG9hZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBOT1RFOiBtb2Rlcm4gYnJvd3NlcnMgbm8gbG9uZ2VyIGFsbG93IHNob3dpbmcgYSBjdXN0b20gbWVzc2FnZSBoZXJlXG5cbiAgZXZlbnQucmV0dXJuVmFsdWUgPSBcIlwiO1xufTtcbmV4cG9ydCBjb25zdCBieXRlc1RvSGV4U3RyaW5nID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKS5tYXAoZnVuY3Rpb24gKGJ5dGUpIHtcbiAgICByZXR1cm4gYDAke2J5dGUudG9TdHJpbmcoMTYpfWAuc2xpY2UoLTIpO1xuICB9KS5qb2luKFwiXCIpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkVGltZXN0YW1wID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNUZXN0RW52KCkgPyAxIDogRGF0ZS5ub3coKTtcbn07XG4vKipcbiAqIFRyYW5zZm9ybXMgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGBpZGAgYXR0cmlidXRlLFxuICogb3IgYXJyYXkgb2YgaWRzIChzdHJpbmdzKSwgaW50byBhIE1hcCwga2V5ZCBieSBgaWRgLlxuICovXG5cbmV4cG9ydCBjb25zdCBhcnJheVRvTWFwID0gZnVuY3Rpb24gKGl0ZW1zKSB7XG4gIHJldHVybiBpdGVtcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZWxlbWVudCkge1xuICAgIGFjYy5zZXQodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIgPyBlbGVtZW50IDogZWxlbWVudC5pZCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgbmV3IE1hcCgpKTtcbn07XG5leHBvcnQgY29uc3QgaXNUZXN0RW52ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInRlc3RcIjtcbn07XG5leHBvcnQgY29uc3QgaXNQcm9kRW52ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcbn07XG5leHBvcnQgY29uc3Qgd3JhcEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgIGRldGFpbDoge1xuICAgICAgbmF0aXZlRXZlbnRcbiAgICB9LFxuICAgIGNhbmNlbGFibGU6IHRydWVcbiAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU9iamVjdCA9IGZ1bmN0aW9uIChvYmosIHVwZGF0ZXMpIHtcbiAgbGV0IGRpZENoYW5nZSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHVwZGF0ZXNba2V5XTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChvYmpba2V5XSA9PT0gdmFsdWUgJiYgKCAvLyBpZiBvYmplY3QsIGFsd2F5cyB1cGRhdGUgYmVjYXVzZSBpdHMgYXR0cnMgY291bGQgaGF2ZSBjaGFuZ2VkXG4gICAgICB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkaWRDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkQ2hhbmdlKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9iaiksIHVwZGF0ZXMpO1xufTtcbmV4cG9ydCBjb25zdCBpc1ByaW1pdGl2ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGUgIT09IFwiZnVuY3Rpb25cIjtcbn07XG5leHBvcnQgY29uc3QgZ2V0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5zZWxmID09PSB3aW5kb3cudG9wID8gXCJ0b3BcIiA6IFwiaWZyYW1lXCI7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFwiaWZyYW1lXCI7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgaXNQcm9taXNlTGlrZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJ0aGVuXCIgaW4gdmFsdWUgJiYgXCJjYXRjaFwiIGluIHZhbHVlICYmIFwiZmluYWxseVwiIGluIHZhbHVlO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///../../utils.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../utils.ts?");
3164
3164
 
3165
3165
  /***/ }),
3166
3166